diff --git a/material/assets/javascripts/bundle.5b33ad8d.min.js b/material/assets/javascripts/bundle.5b33ad8d.min.js new file mode 100644 index 000000000..7bb6c2354 --- /dev/null +++ b/material/assets/javascripts/bundle.5b33ad8d.min.js @@ -0,0 +1,2 @@ +!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,l=[];s0}function h(){return new d.a(new URL(location.href))}var m=n(8),y=n(94),g=n(98);function w(){return location.hash.substring(1)}function $(t){var e=document.createElement("a");e.href=t,e.click()}function x(){return Object(c.a)(window,"hashchange").pipe(Object(m.a)(w),Object(y.a)(w()),Object(g.a)((function(t){return t.length>0})),Object(j.a)())}function S(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(l.a)("response"),Object(O.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(j.a)())}function T(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?S({location$:e}):a.a).pipe(Object(i.a)(1))}function k(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function C(t,e){void 0===e&&(e=document);var n=k(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function _(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function L(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function A(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function N(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(y.a)(t===_()),Object(i.a)(1))}function E(t){return{x:t.scrollLeft,y:t.scrollTop}}function R(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)((function(){return E(t)})),Object(y.a)(E(t)),Object(i.a)(1))}function M(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function H(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function P(){return Object(c.a)(window,"keydown").pipe(Object(g.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(m.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(j.a)())}var U=n(104);function q(t){var e=matchMedia(t);return Object(U.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(y.a)(e.matches),Object(i.a)(1))}var Q={drawer:C("[data-md-toggle=drawer]"),search:C("[data-md-toggle=search]")};function z(t){return Q[t].checked}function I(t,e){Q[t].checked!==e&&Q[t].click()}function D(t){var e=Q[t];return Object(c.a)(e,"change").pipe(Object(m.a)((function(){return e.checked})),Object(y.a)(e.checked))}var W=n(0),J=n(62);function B(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function F(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function K(){return{width:innerWidth,height:innerHeight}}function Y(){return Object(J.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)(B),Object(y.a)(B())),Object(c.a)(window,"resize").pipe(Object(m.a)(K),Object(y.a)(K()))]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function V(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(m.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(J.a)([n,r,c]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var X=n(105),G=n(58),Z=n(106);function tt(t,e){var n=e.tx$,r=Object(U.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(l.a)("data"));return n.pipe(Object(X.a)((function(){return r}),{leading:!0,trailing:!0}),Object(G.a)((function(e){return t.postMessage(e)})),Object(Z.a)(r),Object(j.a)())}n.d(e,"n",(function(){return T})),n.d(e,"b",(function(){return k})),n.d(e,"c",(function(){return C})),n.d(e,"a",(function(){return _})),n.d(e,"d",(function(){return L})),n.d(e,"i",(function(){return A})),n.d(e,"o",(function(){return N})),n.d(e,"p",(function(){return R})),n.d(e,"j",(function(){return M})),n.d(e,"h",(function(){return H})),n.d(e,"q",(function(){return P})),n.d(e,"g",(function(){return p})),n.d(e,"f",(function(){return v})),n.d(e,"r",(function(){return h})),n.d(e,"k",(function(){return $})),n.d(e,"s",(function(){return x})),n.d(e,"t",(function(){return q})),n.d(e,"e",(function(){return z})),n.d(e,"l",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"v",(function(){return Y})),n.d(e,"w",(function(){return V})),n.d(e,"m",(function(){return F})),n.d(e,"x",(function(){return tt}))},,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"object"==typeof t.url&&"string"==typeof t.url.base&&"object"==typeof t.url.worker&&"string"==typeof t.url.worker.search}var c=n(0),a=n(83);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(b.a)());return Object(c.a)([s,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}function p(t,e){var n=e.header$;return Object(a.a)(Object(s.b)(o.a),Object(f.a)(n),Object(l.a)((function(e){var n=Object(r.c)(e,2),c=n[0],a=c.height,o=c.lock,i=n[1].height;Object(j.d)(t,a),Object(j.e)(t,o),o?Object(j.f)(t,i):Object(j.c)(t)})),Object(u.a)((function(t){return Object(r.c)(t,1)[0]})),Object(O.a)((function(){Object(j.c)(t),Object(j.a)(t),Object(j.b)(t)})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return v})),n.d(e,"a",(function(){return h}));var r=n(0),c=n(92),a=n(90),o=n(89),i=n(35),u=n(59),b=n(8),f=n(64),s=n(46),l=n(58),O=n(95),j=n(65),d=n(1),p=n(39);function v(t){var e,n,i=new Map;try{for(var u=Object(r.f)(t),s=u.next();!s.done;s=u.next()){var l=s.value,O=Object(d.b)("label",l);if(void 0!==O){var j=Object(d.c)("#"+O.htmlFor);i.set(j,l)}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(i.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(b.a)((function(){return Object(d.c)(".md-nav__list",i.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(i.keys()))))}))).pipe(Object(b.a)((function(t){return{next:t}})),Object(f.a)((function(t,e){return{prev:t.next,next:e.next}})))}function h(t){return Object(i.a)(Object(s.b)(u.a),Object(l.a)((function(t){var e=t.prev;e&&Object(p.a)(e)})),Object(O.a)(250),Object(s.b)(u.a),Object(l.a)((function(t){var e=t.next;Object(p.b)(e)})),Object(j.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(p.a)(Object(d.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";var r=n(74);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function l(t){var e=t.header$,n=t.main$,l=t.viewport$,O=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return O.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),O=Object(f.watchSidebar)(t,{main$:n,viewport$:l}).pipe(Object(f.applySidebar)(t,{header$:e})),j=Object(s.watchAnchorList)(i,{header$:e,viewport$:l}).pipe(Object(s.applyAnchorList)(i));return Object(a.a)([O,j]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return y})),n.d(e,"a",(function(){return g}));var r=n(0),c=n(96),a=n(62),o=n(35),i=n(59),u=n(8),b=n(84),f=n(24),s=n(64),l=n(36),O=n(94),j=n(91),d=n(46),p=n(58),v=n(65),h=n(1),m=n(23);function y(t,e){var n,o,i=e.header$,d=e.viewport$,p=new Map;try{for(var v=Object(r.f)(t),m=v.next();!m.done;m=v.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(h.b)('[id="'+g+'"]');void 0!==w&&p.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(o=v.return)&&o.call(v)}finally{if(n)throw n.error}}var $=i.pipe(Object(u.a)((function(t){return 18+t.height})));return d.pipe(Object(b.a)("size"),Object(u.a)((function(){var t=[];return Object(r.e)(p).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(p.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(f.a)((function(t){return Object(a.a)([$,d]).pipe(Object(s.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(l.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(O.a)({prev:[],next:[]}),Object(j.a)(2,1),Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(g.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function H(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(f.p)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(p.a)(),Object(S.a)(x.a));return n.pipe(Object(S.a)(s.b),Object(T.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return h})),n.d(e,"c",(function(){return $})),n.d(e,"d",(function(){return H}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(98),b=n(63),f=n(36),s=n(94),l=n(93),O=n(1),j=n(21),d=n(45),p=n(59),v=n(84),h=n(46),m=n(58),y=n(65);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(v.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(d.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(j.b)("main").pipe(Object(i.a)((function(t){return Object(O.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(j.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(O.w)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(h.b)(p.a),Object(m.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(y.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(l.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function l(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.w)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return l}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(84),i=n(58),u=n(21),b=n(0),f=n(62),s=n(59),l=n(100),O=n(8),j=n(36),d=n(46),p=n(65);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(d.b)(s.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(p.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(O.a)((function(t){return Math.max(0,t)})),Object(j.a)()),o=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(j.a)());return Object(f.a)([c,a,o]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),l=n(65);function O(t){var e=t.header$,n=t.viewport$,O=t.screen$;return Object(r.a)(Object(a.a)((function(t){return O.pipe(Object(a.a)((function(a){return a?Object(u.w)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(l.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return O}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(110),a=n(62),o=n(59),i=n(89),u=n(45),b=n(102),f=n(90),s=n(93),l=n(63),O=n(24),j=n(95),d=n(46),p=n(58),v=n(98),h=n(111),m=n(112),y=n(1),g=n(41),w=n(7),$=n(61),x=n(104),S=n(103),T=n(31),k=n(4);var C=n(25),_=n(8);var L=n(36),A=n(100),N=n(107),E=n(84),R=n(91),M=n(108);var H=n(113),P=n(106);var U=n(99);var q=n(109);function Q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var z=n(101),I=n(114);function D(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(I.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(k.e)(n||0)+" Stars",Object(k.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(k.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(I.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(_.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(k.e)(e)+" Stars",Object(k.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function B(t){var e,n,I,B;if(!Object(k.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var F=Object(y.r)(),K=Object(y.s)(),Y=Object(y.v)(),V=Object(y.t)("(min-width: 960px)"),X=Object(y.t)("(min-width: 1220px)"),G=t.features.includes("instant")?Object(y.n)({location$:F}):Object(y.n)();Object(w.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","skip","tabs","toc"],{document$:G});var Z=t.search&&t.search.index?t.search.index:void 0,tt=Object(g.c)(t.url.worker.search,{base:t.url.base,index:Z,location$:F}),et=Object(w.useComponent)("header").pipe(Object(w.mountHeader)({viewport$:Y}),Object(s.a)(1)),nt=Object(w.useComponent)("main").pipe(Object(w.mountMain)({header$:et,viewport$:Y}),Object(s.a)(1)),rt=Object(w.useComponent)("search-query").pipe(Object(w.mountSearchQuery)(tt),Object(s.a)(1)),ct=Object(w.useComponent)("search-reset").pipe(Object(w.mountSearchReset)(),Object(s.a)(1)),at=Object(w.useComponent)("search-result").pipe(Object(w.mountSearchResult)(tt,{query$:rt}),Object(s.a)(1)),ot=Object(w.useComponent)("search").pipe(Object(w.mountSearch)({query$:rt,reset$:ct,result$:at}),Object(s.a)(1)),it=Object(w.useComponent)("navigation").pipe(Object(w.mountNavigation)({header$:et,main$:nt,viewport$:Y,screen$:X}),Object(s.a)(1)),ut=Object(w.useComponent)("toc").pipe(Object(w.mountTableOfContents)({header$:et,main$:nt,viewport$:Y,tablet$:V}),Object(s.a)(1)),bt=Object(w.useComponent)("tabs").pipe(Object(w.mountTabs)({header$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),ft=Object(w.useComponent)("hero").pipe(Object(w.mountHero)({header$:et,viewport$:Y}),Object(s.a)(1)),st=function(){var t=Object(y.q)().pipe(Object(_.a)((function(t){return Object(r.a)({mode:Object(y.e)("search")?"search":"global"},t)})),Object(h.a)());return t.pipe(Object(v.a)((function(t){return"search"===t.mode})),Object(l.a)(Object(w.useComponent)("search-query"),Object(w.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,3),n=e[0],c=e[1],a=e[2],o=Object(y.a)();switch(n.type){case"Enter":o===c&&n.claim();break;case"Escape":case"Tab":Object(y.l)("search",!1),Object(y.i)(c,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===o)Object(y.i)(c);else{var i=Object(r.e)([c],Object(y.d)("[href]",a)),u=Math.max(0,(Math.max(0,i.indexOf(o))+i.length+("ArrowUp"===n.type?-1:1))%i.length);Object(y.i)(i[u])}n.claim();break;default:c!==Object(y.a)()&&Object(y.i)(c)}})),t.pipe(Object(v.a)((function(t){if("global"===t.mode){var e=Object(y.a)();if(void 0!==e)return!Object(y.h)(e)}return!1})),Object(l.a)(Object(w.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(y.i)(c),Object(y.j)(c),n.claim();break;case"p":case",":var a=Object(y.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(y.b)("[href][rel=next]");void 0!==o&&o.click()}})),t}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(_.a)((function(){return Object(y.d)("details")})));Object(f.a)(Object(y.t)("print").pipe(Object(v.a)(H.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(_.a)((function(t){return Object(y.b)('[id="'+t+'"]')})),Object(v.a)((function(t){return void 0!==t})),Object(p.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(U.a)(1),Object(l.a)(Object(w.useComponent)("container")),Object(_.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(y.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(_.a)((function(){return Object(y.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(k.a)(""+Object(k.c)(e),(function(){return D(e)}))})),Object(z.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(y.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(T.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(_.a)((function(){return Object(y.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(T.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(_.a)((function(){return Object(y.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(q.a)(Q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(S.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var lt=function(t){var e=(void 0===t?{}:t).duration,n=new C.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(_.a)((function(t){return t.appendChild(r)})),Object(d.b)(o.a),Object(j.a)(1),Object(p.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(j.a)(e||2e3),Object(p.a)((function(t){return t.removeAttribute("data-md-state")})),Object(j.a)(400),Object(p.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!$.isSupported())return b.a;e.subscribe((function(){Object(y.d)("pre > code").forEach((function(t,e){var n=t.parentElement;n.id="__code_"+e,n.insertBefore(Object(T.a)(n.id),t)}))}));var r=Object(x.a)((function(t){new $(".md-clipboard").on("success",t)})).pipe(Object(h.a)());return r.pipe(Object(p.a)((function(t){return t.clearSelection()})),Object(S.a)(Object(k.f)("clipboard.copied"))).subscribe(n),r}({document$:G,dialog$:lt});Object(a.a)([Object(y.u)("search"),V]).pipe(Object(l.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(j.a)(u?400:100),Object(d.b)(o.a),Object(p.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe();var jt=Object(i.a)(document.body,"click").pipe(Object(v.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&Object(y.g)(e))return Object(y.f)(e)||t.preventDefault(),Object(u.a)(e)}return b.a})),Object(h.a)());if(jt.subscribe((function(){Object(y.l)("drawer",!1)})),t.features.includes("instant")){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(I=void 0,Object(r.f)(Object(y.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){I={error:t}}finally{try{mt&&!mt.done&&(B=ht.return)&&B.call(ht)}finally{if(I)throw I.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}!function(t){var e=t.document$,n=t.viewport$,c=t.link$,a=t.location$,o=c.pipe(Object(_.a)((function(t){return{url:new URL(t.href)}})),Object(h.a)()),u=o.pipe(Object(L.a)((function(t,e){return t.url.href===e.url.href})),Object(v.a)((function(t){var e=t.url;return!Object(y.f)(e)})),Object(h.a)()),b=Object(i.a)(window,"popstate").pipe(Object(v.a)((function(t){return null!==t.state})),Object(_.a)((function(t){return{url:new URL(location.href),offset:t.state}})),Object(h.a)());Object(f.a)(u,b).pipe(Object(A.a)("url")).subscribe(a),u.subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),n.pipe(Object(N.a)(250),Object(E.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(o,b).pipe(Object(R.a)(2,1),Object(v.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.url.pathname===c.url.pathname&&!Object(y.f)(c.url)})),Object(_.a)((function(t){return Object(r.c)(t,2)[1]}))).subscribe((function(t){var e=t.offset;Object(y.m)(e||{y:0})}));var s=Object(f.a)(u,b).pipe(Object(M.a)(e));s.subscribe((function(t){var e=t.url,n=t.offset;e.hash&&!n?(console.log("set hash!"),Object(y.k)(e.hash)):Object(y.m)(n||{y:0})})),s.pipe(Object(l.a)(e)).subscribe((function(t){var e,n,c=Object(r.c)(t,2)[1],a=c.title,o=c.head;document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=a;try{for(var i=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),u=i.next();!u.done;u=i.next()){var b=u.value,f=Object(y.b)(b,o),s=Object(y.b)(b,document.head);void 0!==f&&void 0!==s&&s.replaceWith(f)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}))}({document$:G,link$:jt,location$:F,viewport$:Y})}st.pipe(Object(v.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(m.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(y.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var gt={document$:G,viewport$:Y,header$:et,hero$:ft,main$:nt,navigation$:it,search$:ot,tabs$:bt,toc$:ut,clipboard$:Ot,keyboard$:st,dialog$:lt};return f.a.apply(void 0,Object(r.e)(Object(c.a)(gt))).subscribe(),gt}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return B})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); +//# sourceMappingURL=bundle.5b33ad8d.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.5b33ad8d.min.js.map b/material/assets/javascripts/bundle.5b33ad8d.min.js.map new file mode 100644 index 000000000..f5bec75c9 --- /dev/null +++ b/material/assets/javascripts/bundle.5b33ad8d.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","isLocationInternal","url","ref","host","test","pathname","isLocationAnchor","hash","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","substring","setLocationHash","el","document","createElement","click","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","toggles","drawer","search","getToggle","checked","setToggle","watchToggle","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","isConfig","config","base","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","keys","attr","children","cache","factory","defer","sessionStorage","getItem","of","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","names","document$","reduce","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","take","Subject","withLatestFrom","origin","isConfigDefaultLang","isConfigDefaultSeparator","separator","pipeline","split","Boolean","rest","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","lock","applySidebar","watchNavigationLayer","Map","label","input","htmlFor","set","applyNavigationLayer","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","applyAnchorList","forEach","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","fn","transform","delay","distinctUntilChanged","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","applySearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","applyHeaderType","mountHero","hidden","setHeroHidden","resetHeroHidden","applyHero","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountTabs","setTabsHidden","resetTabsHidden","applyTabs","isAppleDevice","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","features","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","block","parent","insertBefore","on","clearSelection","setupClipboard","link$","history","scrollRestoration","state$","push$","pop$","state","pushState","debounceTime","replaceState","bufferCount","instant$","sample","console","log","head","dispatchEvent","CustomEvent","setupInstantLoading","visibility","values","documentElement","match"],"mappings":"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","file":"assets/javascripts/bundle.5b33ad8d.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([88,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
/* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
\n {!(\"parent\" in document)\n ?
\n \n \n \n
\n : null\n }\n

{title}

\n {text.length\n ?

{truncate(text, 320)}

\n : undefined\n }\n
\n
\n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as any, // Hack\n ...rest\n }))\n )\n // .subscribe(console.log)\n\n // /* Send index to worker */\n // index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js b/material/assets/javascripts/bundle.9330522f.min.js deleted file mode 100644 index 958639cb9..000000000 --- a/material/assets/javascripts/bundle.9330522f.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var r,o,i=e[0],u=e[1],b=e[2],s=0,l=[];s0}function h(){return new d.a(new URL(location.href))}var m=n(8),y=n(94),g=n(98);function w(){return location.hash.substring(1)}function $(t){var e=document.createElement("a");e.href=t,e.click()}function x(){return Object(c.a)(window,"hashchange").pipe(Object(m.a)(w),Object(y.a)(w()),Object(g.a)((function(t){return t.length>0})),Object(j.a)())}function S(t){return t.location$.pipe(Object(b.a)("pathname"),Object(f.a)(1),Object(s.a)((function(t){return Object(u.a)({url:t.href,responseType:"document",withCredentials:!0}).pipe(Object(l.a)("response"),Object(O.a)((function(){return function(t){location.href=t.href}(t),a.a})))})),Object(j.a)())}function T(t){var e=(void 0===t?{}:t).location$;return Object(r.a)(Object(c.a)(document,"DOMContentLoaded").pipe(Object(o.a)(document)),void 0!==e?S({location$:e}):a.a).pipe(Object(i.a)(1))}function k(t,e){return void 0===e&&(e=document),e.querySelector(t)||void 0}function C(t,e){void 0===e&&(e=document);var n=k(t,e);if(void 0===n)throw new ReferenceError('Missing element: expected "'+t+'" to be present');return n}function _(){return document.activeElement instanceof HTMLElement?document.activeElement:void 0}function L(t,e){return void 0===e&&(e=document),Array.from(e.querySelectorAll(t))}function A(t,e){void 0===e&&(e=!0),e?t.focus():t.blur()}function N(t){var e=Object(c.a)(t,"focus"),n=Object(c.a)(t,"blur");return Object(r.a)(e.pipe(Object(o.a)(!0)),n.pipe(Object(o.a)(!1))).pipe(Object(y.a)(t===_()),Object(i.a)(1))}function E(t){return{x:t.scrollLeft,y:t.scrollTop}}function R(t){return Object(r.a)(Object(c.a)(t,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)((function(){return E(t)})),Object(y.a)(E(t)),Object(i.a)(1))}function M(t){if(!(t instanceof HTMLInputElement))throw new Error("Not implemented");t.select()}function H(t){switch(t.tagName){case"INPUT":case"SELECT":case"TEXTAREA":return!0;default:return t.isContentEditable}}function P(){return Object(c.a)(window,"keydown").pipe(Object(g.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(m.a)((function(t){return{type:t.key,claim:function(){t.preventDefault(),t.stopPropagation()}}})),Object(j.a)())}var U=n(104);function q(t){var e=matchMedia(t);return Object(U.a)((function(t){return e.addListener((function(){return t(e.matches)}))})).pipe(Object(y.a)(e.matches),Object(i.a)(1))}var Q={drawer:C("[data-md-toggle=drawer]"),search:C("[data-md-toggle=search]")};function z(t){return Q[t].checked}function I(t,e){Q[t].checked!==e&&Q[t].click()}function D(t){var e=Q[t];return Object(c.a)(e,"change").pipe(Object(m.a)((function(){return e.checked})),Object(y.a)(e.checked))}var W=n(0),J=n(62);function B(){return{x:Math.max(0,pageXOffset),y:Math.max(0,pageYOffset)}}function F(t){var e=t.x,n=t.y;window.scrollTo(e||0,n||0)}function K(){return{width:innerWidth,height:innerHeight}}function Y(){return Object(J.a)([Object(r.a)(Object(c.a)(window,"scroll"),Object(c.a)(window,"resize")).pipe(Object(m.a)(B),Object(y.a)(B())),Object(c.a)(window,"resize").pipe(Object(m.a)(K),Object(y.a)(K()))]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,2);return{offset:e[0],size:e[1]}})),Object(i.a)(1))}function V(t,e){var n=e.header$,r=e.viewport$,c=r.pipe(Object(b.a)("size"),Object(m.a)((function(){return{x:t.offsetLeft,y:t.offsetTop}})));return Object(J.a)([n,r,c]).pipe(Object(m.a)((function(t){var e=Object(W.c)(t,3),n=e[0].height,r=e[1],c=r.offset,a=r.size,o=e[2],i=o.x,u=o.y;return{offset:{x:c.x-i,y:c.y-u+n},size:a}})),Object(i.a)(1))}var X=n(105),G=n(58),Z=n(106);function tt(t,e){var n=e.tx$,r=Object(U.a)((function(e){return t.addEventListener("message",e)})).pipe(Object(l.a)("data"));return n.pipe(Object(X.a)((function(){return r}),{leading:!0,trailing:!0}),Object(G.a)((function(e){return t.postMessage(e)})),Object(Z.a)(r),Object(j.a)())}n.d(e,"n",(function(){return T})),n.d(e,"b",(function(){return k})),n.d(e,"c",(function(){return C})),n.d(e,"a",(function(){return _})),n.d(e,"d",(function(){return L})),n.d(e,"i",(function(){return A})),n.d(e,"o",(function(){return N})),n.d(e,"p",(function(){return R})),n.d(e,"j",(function(){return M})),n.d(e,"h",(function(){return H})),n.d(e,"q",(function(){return P})),n.d(e,"g",(function(){return p})),n.d(e,"f",(function(){return v})),n.d(e,"r",(function(){return h})),n.d(e,"k",(function(){return $})),n.d(e,"s",(function(){return x})),n.d(e,"t",(function(){return q})),n.d(e,"e",(function(){return z})),n.d(e,"l",(function(){return I})),n.d(e,"u",(function(){return D})),n.d(e,"v",(function(){return Y})),n.d(e,"w",(function(){return V})),n.d(e,"m",(function(){return F})),n.d(e,"x",(function(){return tt}))},,,function(t,e,n){"use strict";function r(t){return"object"==typeof t&&"object"==typeof t.url&&"string"==typeof t.url.base&&"object"==typeof t.url.worker&&"string"==typeof t.url.worker.search}var c=n(0),a=n(83);function o(t,e,n){switch(e){case"xmlns":break;case"viewBox":case"d":"boolean"!=typeof n?t.setAttributeNS(null,e,n):n&&t.setAttributeNS(null,e,"");break;default:"boolean"!=typeof n?t.setAttribute(e,n):n&&t.setAttribute(e,"")}}function i(t,e){var n,r;if("string"==typeof e||"number"==typeof e)t.innerHTML+=e.toString();else if(e instanceof Node)t.appendChild(e);else if(Array.isArray(e))try{for(var a=Object(c.f)(e),o=a.next();!o.done;o=a.next()){i(t,o.value)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=a.return)&&r.call(a)}finally{if(n)throw n.error}}}function u(t,e){for(var n,r,u,b,f=[],s=2;sn){for(;" "!==t[n]&&--n>0;);return t.substring(0,n)+"..."}return t}function p(t){return t>999?((t+1)/1e3).toFixed(+((t-950)%1e3>99))+"k":t.toString()}function v(t){for(var e=0,n=0,r=t.length;n=e[2].offset+c})),Object(b.a)());return Object(c.a)([s,l]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{height:e[0],lock:e[1]}})))}function p(t,e){var n=e.header$;return Object(a.a)(Object(s.b)(o.a),Object(f.a)(n),Object(l.a)((function(e){var n=Object(r.c)(e,2),c=n[0],a=c.height,o=c.lock,i=n[1].height;Object(j.d)(t,a),Object(j.e)(t,o),o?Object(j.f)(t,i):Object(j.c)(t)})),Object(u.a)((function(t){return Object(r.c)(t,1)[0]})),Object(O.a)((function(){Object(j.c)(t),Object(j.a)(t),Object(j.b)(t)})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return v})),n.d(e,"a",(function(){return h}));var r=n(0),c=n(92),a=n(90),o=n(89),i=n(35),u=n(59),b=n(8),f=n(64),s=n(46),l=n(58),O=n(95),j=n(65),d=n(1),p=n(39);function v(t){var e,n,i=new Map;try{for(var u=Object(r.f)(t),s=u.next();!s.done;s=u.next()){var l=s.value,O=Object(d.b)("label",l);if(void 0!==O){var j=Object(d.c)("#"+O.htmlFor);i.set(j,l)}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=u.return)&&n.call(u)}finally{if(e)throw e.error}}return a.a.apply(void 0,Object(r.e)(Object(r.e)(i.keys()).map((function(t){return Object(o.a)(t,"change")})))).pipe(Object(b.a)((function(){return Object(d.c)(".md-nav__list",i.get(Object(c.a)((function(t){return t.checked}),Object(r.e)(i.keys()))))}))).pipe(Object(b.a)((function(t){return{next:t}})),Object(f.a)((function(t,e){return{prev:t.next,next:e.next}})))}function h(t){return Object(i.a)(Object(s.b)(u.a),Object(l.a)((function(t){var e=t.prev;e&&Object(p.a)(e)})),Object(O.a)(250),Object(s.b)(u.a),Object(l.a)((function(t){var e=t.next;Object(p.b)(e)})),Object(j.a)((function(){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;Object(p.a)(Object(d.c)(".md-nav__list",o))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})))}},function(t,e,n){"use strict";var r=n(74);n.d(e,"mountTableOfContents",(function(){return r.a}));var c=n(49);n.o(c,"mountNavigation")&&n.d(e,"mountNavigation",(function(){return c.mountNavigation}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n(0),c=n(35),a=n(62),o=n(45),i=n(24),u=n(8),b=n(1),f=n(30),s=n(49);function l(t){var e=t.header$,n=t.main$,l=t.viewport$,O=t.tablet$;return Object(c.a)(Object(i.a)((function(t){return O.pipe(Object(i.a)((function(c){if(c){var i=Object(b.d)(".md-nav__link",t),O=Object(f.watchSidebar)(t,{main$:n,viewport$:l}).pipe(Object(f.applySidebar)(t,{header$:e})),j=Object(s.watchAnchorList)(i,{header$:e,viewport$:l}).pipe(Object(s.applyAnchorList)(i));return Object(a.a)([O,j]).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2);return{sidebar:e[0],anchors:e[1]}})))}return Object(o.a)({})})))})))}},function(t,e){},function(t,e,n){"use strict";n.d(e,"b",(function(){return y})),n.d(e,"a",(function(){return g}));var r=n(0),c=n(96),a=n(62),o=n(35),i=n(59),u=n(8),b=n(84),f=n(24),s=n(64),l=n(36),O=n(94),j=n(91),d=n(46),p=n(58),v=n(65),h=n(1),m=n(23);function y(t,e){var n,o,i=e.header$,d=e.viewport$,p=new Map;try{for(var v=Object(r.f)(t),m=v.next();!m.done;m=v.next()){var y=m.value,g=decodeURIComponent(y.hash.substring(1)),w=Object(h.b)('[id="'+g+'"]');void 0!==w&&p.set(y,w)}}catch(t){n={error:t}}finally{try{m&&!m.done&&(o=v.return)&&o.call(v)}finally{if(n)throw n.error}}var $=i.pipe(Object(u.a)((function(t){return 18+t.height})));return d.pipe(Object(b.a)("size"),Object(u.a)((function(){var t=[];return Object(r.e)(p).reduce((function(e,n){for(var a=Object(r.c)(n,2),o=a[0],i=a[1];t.length;){if(!(p.get(t[t.length-1]).tagName>=i.tagName))break;t.pop()}for(var u=i.offsetTop;!u&&i.parentElement;)u=(i=i.parentElement).offsetTop;return e.set(Object(c.a)(t=Object(r.e)(t,[o])),u)}),new Map)})),Object(f.a)((function(t){return Object(a.a)([$,d]).pipe(Object(s.a)((function(t,e){for(var n=Object(r.c)(t,2),c=n[0],a=n[1],o=Object(r.c)(e,2),i=o[0],u=o[1].offset.y;a.length;){if(!(Object(r.c)(a[0],2)[1]-i=u))break;a=Object(r.e)([c.pop()],a)}return[c,a]}),[[],Object(r.e)(t)]),Object(l.a)((function(t,e){return t[0]===e[0]&&t[1]===e[1]})))}))).pipe(Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return{prev:n.map((function(t){return Object(r.c)(t,1)[0]})),next:c.map((function(t){return Object(r.c)(t,1)[0]}))}})),Object(O.a)({prev:[],next:[]}),Object(j.a)(2,1),Object(u.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.prev.length16)););return n}),0),Object(g.a)(e),Object(A.a)((function(){!function(t){t.innerHTML=""}(u)})))})))}function H(t,e){var n=t.rx$,r=e.query$;return Object(c.a)(Object(o.a)((function(t){var e=t.parentElement,c=Object(f.p)(e).pipe(Object(i.a)((function(t){return t.y>=e.scrollHeight-e.offsetHeight-16})),Object(p.a)(),Object(S.a)(x.a));return n.pipe(Object(S.a)(s.b),Object(T.a)("data"),M(t,{query$:r,fetch$:c}))})))}n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return h})),n.d(e,"c",(function(){return $})),n.d(e,"d",(function(){return H}))},function(t,e,n){"use strict";var r=n(0),c=n(35),a=n(62),o=n(24),i=n(8),u=n(98),b=n(63),f=n(36),s=n(94),l=n(93),O=n(1),j=n(21),d=n(45),p=n(59),v=n(84),h=n(46),m=n(58),y=n(65);function g(t){var e=t.viewport$;return Object(c.a)(Object(o.a)((function(t){var n=function(t,e){return e.viewport$.pipe(Object(v.a)("size"),Object(o.a)((function(){var e=getComputedStyle(t),n=["sticky","-webkit-sticky"].includes(e.position);return Object(d.a)({sticky:n,height:n?t.offsetHeight:0})})))}(t,{viewport$:e}),g=Object(j.b)("main").pipe(Object(i.a)((function(t){return Object(O.b)("h1, h2, h3, h4, h5, h6",t)})),Object(u.a)((function(t){return void 0!==t})),Object(b.a)(Object(j.b)("header-title")),Object(o.a)((function(t){var a=Object(r.c)(t,2),o=a[0],u=a[1];return Object(O.w)(o,{header$:n,viewport$:e}).pipe(Object(i.a)((function(t){return t.offset.y>=o.offsetHeight?"page":"site"})),Object(f.a)(),function(t){return Object(c.a)(Object(h.b)(p.a),Object(m.a)((function(e){!function(t,e){t.setAttribute("data-md-state",e?"active":"")}(t,"page"===e)})),Object(y.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(u))})),Object(s.a)("site"));return Object(a.a)([n,g]).pipe(Object(i.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return Object(r.a)({type:c},n)})),Object(l.a)(1))})))}n.d(e,"a",(function(){return g}))},function(t,e,n){"use strict";var r=n(35),c=n(24),a=n(8),o=n(36),i=n(1),u=n(59),b=n(46),f=n(58),s=n(65);function l(t){var e=t.header$,n=t.viewport$;return Object(r.a)(Object(c.a)((function(t){return Object(i.w)(t,{header$:e,viewport$:n}).pipe(Object(a.a)((function(t){return{hidden:t.offset.y>=20}})),Object(o.a)(),function(t){return Object(r.a)(Object(b.b)(u.a),Object(f.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(s.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t))})))}n.d(e,"a",(function(){return l}))},function(t,e,n){"use strict";var r=n(25),c=n(35),a=n(24),o=n(84),i=n(58),u=n(21),b=n(0),f=n(62),s=n(59),l=n(100),O=n(8),j=n(36),d=n(46),p=n(65);function v(t){var e=t.header$,n=t.viewport$,v=new r.a;return Object(u.b)("header").pipe(Object(a.a)((function(t){return v.pipe(Object(o.a)("active"),(e=t,Object(c.a)(Object(d.b)(s.a),Object(i.a)((function(t){var n=t.active;!function(t,e){t.setAttribute("data-md-state",e?"shadow":"")}(e,n)})),Object(p.a)((function(){!function(t){t.removeAttribute("data-md-state")}(e)})))));var e}))).subscribe(),Object(c.a)(Object(a.a)((function(t){return function(t,e){var n=e.header$,r=e.viewport$,c=n.pipe(Object(l.a)("height")),a=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0],c=n[1],a=c.offset.y,o=c.size.height,i=t.offsetTop,u=t.offsetHeight+i;return o-Math.max(0,i-a,r)-Math.max(0,o+a-u)})),Object(O.a)((function(t){return Math.max(0,t)})),Object(j.a)()),o=Object(f.a)([c,r]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,2),r=n[0];return n[1].offset.y>=t.offsetTop-r})),Object(j.a)());return Object(f.a)([c,a,o]).pipe(Object(O.a)((function(e){var n=Object(b.c)(e,3),r=n[0],c=n[1],a=n[2];return{offset:t.offsetTop-r,height:c,active:a}})))}(t,{header$:e,viewport$:n})})),Object(i.a)((function(t){return v.next(t)})))}n.d(e,"a",(function(){return v}))},function(t,e,n){"use strict";var r=n(35),c=n(45),a=n(24),o=n(8),i=n(36),u=n(1),b=n(59),f=n(46),s=n(58),l=n(65);function O(t){var e=t.header$,n=t.viewport$,O=t.screen$;return Object(r.a)(Object(a.a)((function(t){return O.pipe(Object(a.a)((function(a){return a?Object(u.w)(t,{header$:e,viewport$:n}).pipe(Object(o.a)((function(t){return{hidden:t.offset.y>=10}})),Object(i.a)(),function(t){return Object(r.a)(Object(f.b)(b.a),Object(s.a)((function(e){var n=e.hidden;!function(t,e){t.setAttribute("data-md-state",e?"hidden":"")}(t,n)})),Object(l.a)((function(){!function(t){t.removeAttribute("data-md-state")}(t)})))}(t)):Object(c.a)({hidden:!0})})))})))}n.d(e,"a",(function(){return O}))},,,,,,,function(t,e,n){"use strict";n.r(e);var r=n(0),c=n(110),a=n(62),o=n(59),i=n(89),u=n(45),b=n(102),f=n(90),s=n(93),l=n(63),O=n(24),j=n(95),d=n(46),p=n(58),v=n(98),h=n(111),m=n(112),y=n(1),g=n(41),w=n(7),$=n(61),x=n(104),S=n(103),T=n(31),k=n(4);var C=n(25),_=n(8);var L=n(36),A=n(100),N=n(107),E=n(84),R=n(91),M=n(108);var H=n(113),P=n(106);var U=n(99);var q=n(109);function Q(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}var z=n(101),I=n(114);function D(t){switch(Object(r.c)(t.match(/(git(?:hub|lab))/i)||[],1)[0].toLowerCase()){case"github":var e=Object(r.c)(t.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i),3);return function(t,e){return Object(I.a)({url:void 0!==e?"https://api.github.com/repos/"+t+"/"+e:"https://api.github.com/users/"+t,responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(O.a)((function(t){if(void 0!==e){var n=t.stargazers_count,r=t.forks_count;return Object(u.a)([Object(k.e)(n||0)+" Stars",Object(k.e)(r||0)+" Forks"])}var c=t.public_repos;return Object(u.a)([Object(k.e)(c||0)+" Repositories"])})))}(e[1],e[2]);case"gitlab":var n=Object(r.c)(t.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i),3);return function(t,e){return Object(I.a)({url:"https://"+t+"/api/v4/projects/"+encodeURIComponent(e),responseType:"json"}).pipe(Object(v.a)((function(t){return 200===t.status})),Object(A.a)("response"),Object(_.a)((function(t){var e=t.star_count,n=t.forks_count;return[Object(k.e)(e)+" Stars",Object(k.e)(n)+" Forks"]})))}(n[1],n[2]);default:return b.a}}function W(t,e){t.setAttribute("data-md-state","lock"),t.style.top="-"+e+"px"}function J(t){var e=-1*parseInt(t.style.top,10);t.removeAttribute("data-md-state"),t.style.top="",e&&window.scrollTo(0,e)}function B(t){var e,n,I,B;if(!Object(k.d)(t))throw new SyntaxError("Invalid configuration: "+JSON.stringify(t));var F=Object(y.r)(),K=Object(y.s)(),Y=Object(y.v)(),V=Object(y.t)("(min-width: 960px)"),X=Object(y.t)("(min-width: 1220px)"),G=t.features.includes("instant")?Object(y.n)({location$:F}):Object(y.n)();Object(w.setupComponents)(["container","header","header-title","hero","main","navigation","search","search-query","search-reset","search-result","skip","tabs","toc"],{document$:G});var Z=t.search&&t.search.index?t.search.index:void 0,tt=Object(g.c)(t.url.worker.search,{base:t.url.base,index:Z,location$:F}),et=Object(w.useComponent)("header").pipe(Object(w.mountHeader)({viewport$:Y}),Object(s.a)(1)),nt=Object(w.useComponent)("main").pipe(Object(w.mountMain)({header$:et,viewport$:Y}),Object(s.a)(1)),rt=Object(w.useComponent)("search-query").pipe(Object(w.mountSearchQuery)(tt),Object(s.a)(1)),ct=Object(w.useComponent)("search-reset").pipe(Object(w.mountSearchReset)(),Object(s.a)(1)),at=Object(w.useComponent)("search-result").pipe(Object(w.mountSearchResult)(tt,{query$:rt}),Object(s.a)(1)),ot=Object(w.useComponent)("search").pipe(Object(w.mountSearch)({query$:rt,reset$:ct,result$:at}),Object(s.a)(1)),it=Object(w.useComponent)("navigation").pipe(Object(w.mountNavigation)({header$:et,main$:nt,viewport$:Y,screen$:X}),Object(s.a)(1)),ut=Object(w.useComponent)("toc").pipe(Object(w.mountTableOfContents)({header$:et,main$:nt,viewport$:Y,tablet$:V}),Object(s.a)(1)),bt=Object(w.useComponent)("tabs").pipe(Object(w.mountTabs)({header$:et,viewport$:Y,screen$:X}),Object(s.a)(1)),ft=Object(w.useComponent)("hero").pipe(Object(w.mountHero)({header$:et,viewport$:Y}),Object(s.a)(1)),st=function(){var t=Object(y.q)().pipe(Object(_.a)((function(t){return Object(r.a)({mode:Object(y.e)("search")?"search":"global"},t)})),Object(h.a)());return t.pipe(Object(v.a)((function(t){return"search"===t.mode})),Object(l.a)(Object(w.useComponent)("search-query"),Object(w.useComponent)("search-result"))).subscribe((function(t){var e=Object(r.c)(t,3),n=e[0],c=e[1],a=e[2],o=Object(y.a)();switch(n.type){case"Enter":o===c&&n.claim();break;case"Escape":case"Tab":Object(y.l)("search",!1),Object(y.i)(c,!1);break;case"ArrowUp":case"ArrowDown":if(void 0===o)Object(y.i)(c);else{var i=Object(r.e)([c],Object(y.d)("[href]",a)),u=Math.max(0,(Math.max(0,i.indexOf(o))+i.length+("ArrowUp"===n.type?-1:1))%i.length);Object(y.i)(i[u])}n.claim();break;default:c!==Object(y.a)()&&Object(y.i)(c)}})),t.pipe(Object(v.a)((function(t){if("global"===t.mode){var e=Object(y.a)();if(void 0!==e)return!Object(y.h)(e)}return!1})),Object(l.a)(Object(w.useComponent)("search-query"))).subscribe((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];switch(n.type){case"f":case"s":Object(y.i)(c),Object(y.j)(c),n.claim();break;case"p":case",":var a=Object(y.b)("[href][rel=prev]");void 0!==a&&a.click();break;case"n":case".":var o=Object(y.b)("[href][rel=next]");void 0!==o&&o.click()}})),t}();!function(t){var e=t.document$,n=t.hash$,c=e.pipe(Object(_.a)((function(){return Object(y.d)("details")})));Object(f.a)(Object(y.t)("print").pipe(Object(v.a)(H.a)),Object(i.a)(window,"beforeprint")).pipe(Object(P.a)(c)).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.setAttribute("open","")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),n.pipe(Object(_.a)((function(t){return Object(y.b)('[id="'+t+'"]')})),Object(v.a)((function(t){return void 0!==t})),Object(p.a)((function(t){var e=t.closest("details");e&&!e.open&&e.setAttribute("open","")}))).subscribe((function(t){return t.scrollIntoView()}))}({document$:G,hash$:K}),function(t){t.document$.pipe(Object(U.a)(1),Object(l.a)(Object(w.useComponent)("container")),Object(_.a)((function(t){var e=Object(r.c)(t,2)[1];return Object(y.d)("script",e)}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){var o=a.value;if(o.src||/(^|\/javascript)$/i.test(o.type)){var i=document.createElement("script"),u=o.src?"src":"innerText";i[u]=o[u],o.replaceWith(i)}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){t.document$.pipe(Object(_.a)((function(){return Object(y.c)(".md-source[href]")})),Object(O.a)((function(t){var e=t.href;return Object(k.a)(""+Object(k.c)(e),(function(){return D(e)}))})),Object(z.a)((function(){return b.a}))).subscribe((function(t){var e,n;try{for(var c=Object(r.f)(Object(y.d)(".md-source__repository")),a=c.next();!a.done;a=c.next()){var o=a.value;o.hasAttribute("data-md-state")||(o.setAttribute("data-md-state","done"),o.appendChild(Object(T.c)(t)))}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$,n=document.createElement("table");e.pipe(Object(_.a)((function(){return Object(y.d)("table:not([class])")}))).subscribe((function(t){var e,c;try{for(var a=Object(r.f)(t),o=a.next();!o.done;o=a.next()){var i=o.value;i.replaceWith(n),n.replaceWith(Object(T.d)(i))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(c=a.return)&&c.call(a)}finally{if(e)throw e.error}}}))}({document$:G}),function(t){var e=t.document$.pipe(Object(_.a)((function(){return Object(y.d)("[data-md-scrollfix]")})),Object(s.a)(1));e.subscribe((function(t){var e,n;try{for(var c=Object(r.f)(t),a=c.next();!a.done;a=c.next()){a.value.removeAttribute("data-md-scrollfix")}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=c.return)&&n.call(c)}finally{if(e)throw e.error}}})),Object(q.a)(Q,e,b.a).pipe(Object(O.a)((function(t){return f.a.apply(void 0,Object(r.e)(t.map((function(t){return Object(i.a)(t,"touchstart").pipe(Object(S.a)(t))}))))}))).subscribe((function(t){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)}))}({document$:G});var lt=function(t){var e=(void 0===t?{}:t).duration,n=new C.a,r=document.createElement("div");return r.classList.add("md-dialog","md-typeset"),n.pipe(Object(O.a)((function(t){return Object(u.a)(document.body).pipe(Object(_.a)((function(t){return t.appendChild(r)})),Object(d.b)(o.a),Object(j.a)(1),Object(p.a)((function(e){e.innerHTML=t,e.setAttribute("data-md-state","open")})),Object(j.a)(e||2e3),Object(p.a)((function(t){return t.removeAttribute("data-md-state")})),Object(j.a)(400),Object(p.a)((function(t){t.innerHTML="",t.remove()})))}))).subscribe(),n}(),Ot=function(t){var e=t.document$,n=t.dialog$;if(!$.isSupported())return b.a;e.subscribe((function(){Object(y.d)("pre > code").forEach((function(t,e){var n=t.parentElement;n.id="__code_"+e,n.insertBefore(Object(T.a)(n.id),t)}))}));var r=Object(x.a)((function(t){new $(".md-clipboard").on("success",t)})).pipe(Object(h.a)());return r.pipe(Object(p.a)((function(t){return t.clearSelection()})),Object(S.a)(Object(k.f)("clipboard.copied"))).subscribe(n),r}({document$:G,dialog$:lt});Object(a.a)([Object(y.u)("search"),V]).pipe(Object(l.a)(Y),Object(O.a)((function(t){var e=Object(r.c)(t,2),n=Object(r.c)(e[0],2),c=n[0],a=n[1],i=e[1].offset.y,u=c&&!a;return G.pipe(Object(j.a)(u?400:100),Object(d.b)(o.a),Object(p.a)((function(t){var e=t.body;return u?W(e,i):J(e)})))}))).subscribe();var jt=Object(i.a)(document.body,"click").pipe(Object(v.a)((function(t){return!(t.metaKey||t.ctrlKey)})),Object(O.a)((function(t){if(t.target instanceof HTMLElement){var e=t.target.closest("a");if(e&&Object(y.g)(e))return Object(y.f)(e)||t.preventDefault(),Object(u.a)(e)}return b.a})),Object(h.a)());if(jt.subscribe((function(){Object(y.l)("drawer",!1)})),t.features.includes("instant")){"scrollRestoration"in history&&(history.scrollRestoration="manual");try{for(var dt=Object(r.f)(['link[rel="shortcut icon"]','link[rel="stylesheet"]']),pt=dt.next();!pt.done;pt=dt.next()){var vt=pt.value;try{for(var ht=(I=void 0,Object(r.f)(Object(y.d)(vt))),mt=ht.next();!mt.done;mt=ht.next()){var yt=mt.value;yt.href=yt.href}}catch(t){I={error:t}}finally{try{mt&&!mt.done&&(B=ht.return)&&B.call(ht)}finally{if(I)throw I.error}}}}catch(t){e={error:t}}finally{try{pt&&!pt.done&&(n=dt.return)&&n.call(dt)}finally{if(e)throw e.error}}!function(t){var e=t.document$,n=t.viewport$,c=t.link$,a=t.location$,o=c.pipe(Object(_.a)((function(t){return{url:new URL(t.href)}})),Object(h.a)()),u=o.pipe(Object(L.a)((function(t,e){return t.url.href===e.url.href})),Object(v.a)((function(t){var e=t.url;return!Object(y.f)(e)})),Object(h.a)()),b=Object(i.a)(window,"popstate").pipe(Object(v.a)((function(t){return null!==t.state})),Object(_.a)((function(t){return{url:new URL(location.href),offset:t.state}})),Object(h.a)());Object(f.a)(u,b).pipe(Object(A.a)("url")).subscribe(a),u.subscribe((function(t){var e=t.url;history.pushState({},"",e.toString())})),n.pipe(Object(N.a)(250),Object(E.a)("offset")).subscribe((function(t){var e=t.offset;history.replaceState(e,"")})),Object(f.a)(o,b).pipe(Object(R.a)(2,1),Object(v.a)((function(t){var e=Object(r.c)(t,2),n=e[0],c=e[1];return n.url.pathname===c.url.pathname&&!Object(y.f)(c.url)})),Object(_.a)((function(t){return Object(r.c)(t,2)[1]}))).subscribe((function(t){var e=t.offset;Object(y.m)(e||{y:0})}));var s=Object(f.a)(u,b).pipe(Object(M.a)(e));s.subscribe((function(t){var e=t.url,n=t.offset;e.hash&&!n?(console.log("set hash!"),Object(y.k)(e.hash)):Object(y.m)(n||{y:0})})),s.pipe(Object(l.a)(e)).subscribe((function(t){var e,n,c=Object(r.c)(t,2)[1],a=c.title,o=c.head;document.dispatchEvent(new CustomEvent("DOMContentSwitch")),document.title=a;try{for(var i=Object(r.f)(['link[rel="canonical"]','meta[name="author"]','meta[name="description"]']),u=i.next();!u.done;u=i.next()){var b=u.value,f=Object(y.b)(b,o),s=Object(y.b)(b,document.head);void 0!==f&&void 0!==s&&s.replaceWith(f)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}))}({document$:G,link$:jt,location$:F,viewport$:Y})}st.pipe(Object(v.a)((function(t){return"global"===t.mode&&["Tab"].includes(t.type)})),Object(m.a)(1)).subscribe((function(){var t,e;try{for(var n=Object(r.f)(Object(y.d)(".headerlink")),c=n.next();!c.done;c=n.next()){c.value.style.visibility="visible"}}catch(e){t={error:e}}finally{try{c&&!c.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}}));var gt={document$:G,viewport$:Y,header$:et,hero$:ft,main$:nt,navigation$:it,search$:ot,tabs$:bt,toc$:ut,clipboard$:Ot,keyboard$:st,dialog$:lt};return f.a.apply(void 0,Object(r.e)(Object(c.a)(gt))).subscribe(),gt}n.d(e,"setScrollLock",(function(){return W})),n.d(e,"resetScrollLock",(function(){return J})),n.d(e,"initialize",(function(){return B})),document.documentElement.classList.remove("no-js"),document.documentElement.classList.add("js"),navigator.userAgent.match(/(iPad|iPhone|iPod)/g)&&document.documentElement.classList.add("ios")}])); -//# sourceMappingURL=bundle.9330522f.min.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.9330522f.min.js.map b/material/assets/javascripts/bundle.9330522f.min.js.map deleted file mode 100644 index 0473223c3..000000000 --- a/material/assets/javascripts/bundle.9330522f.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","isLocationInternal","url","ref","host","test","pathname","isLocationAnchor","hash","watchLocation","BehaviorSubject","URL","location","href","getLocationHash","substring","setLocationHash","el","document","createElement","click","watchLocationHash","fromEvent","pipe","map","startWith","filter","share","watchDocumentSwitch","location$","distinctUntilKeyChanged","skip","switchMap","ajax","responseType","withCredentials","pluck","catchError","setLocation","watchDocument","merge","mapTo","shareReplay","getElement","selector","node","querySelector","undefined","getElementOrThrow","ReferenceError","getActiveElement","activeElement","HTMLElement","getElements","Array","from","querySelectorAll","setElementFocus","focus","blur","watchElementFocus","focus$","blur$","getElementOffset","x","scrollLeft","y","scrollTop","watchElementOffset","setElementSelection","HTMLInputElement","Error","select","isSusceptibleToKeyboard","tagName","isContentEditable","watchKeyboard","ev","metaKey","ctrlKey","type","claim","preventDefault","stopPropagation","watchMedia","query","media","matchMedia","fromEventPattern","next","addListener","matches","toggles","drawer","search","getToggle","checked","setToggle","watchToggle","getViewportOffset","Math","max","pageXOffset","pageYOffset","setViewportOffset","scrollTo","getViewportSize","width","innerWidth","height","innerHeight","watchViewport","combineLatest","offset","size","watchViewportAt","header$","viewport$","offset$","offsetLeft","offsetTop","watchWorker","worker","tx$","rx$","addEventListener","throttle","leading","trailing","tap","message","postMessage","switchMapTo","isConfig","config","base","setAttribute","setAttributeNS","appendChild","child","innerHTML","toString","Node","isArray","h","tag","attributes","createElementNS","keys","attr","children","cache","factory","defer","sessionStorage","getItem","of","JSON","parse","value$","subscribe","setItem","stringify","err","lang","translate","innerText","replace","truncate","round","toFixed","len","charCodeAt","setSidebarOffset","style","top","resetSidebarOffset","setSidebarHeight","resetSidebarHeight","setSidebarLock","resetSidebarLock","removeAttribute","components$","setupComponents","names","document$","reduce","components","prev","replaceWith","useComponent","setAnchorBlur","resetAnchorBlur","setAnchorActive","classList","toggle","resetAnchorActive","remove","css","container","renderClipboard","id","path","class","title","xmlns","viewBox","item","link","article","section","teaser","renderSearchResult","sections","text","tabIndex","facts","fact","renderSource","wrapper","table","renderTable","setOverflowScrolling","webkitOverflowScrolling","resetOverflowScrolling","SearchMessageType","isSearchResultMessage","RESULT","setupSearchWorker","index","Worker","origin$","take","Subject","withLatestFrom","origin","index$","isConfigDefaultLang","isConfigDefaultSeparator","separator","pipeline","split","Boolean","rest","console","log","SETUP","mountNavigation","main$","screen$","screen","sidebar","els","layer","watchSidebar","adjust$","parseFloat","getComputedStyle","parentElement","getPropertyValue","height$","adjust","min","lock$","lock","applySidebar","watchNavigationLayer","Map","label","input","htmlFor","set","applyNavigationLayer","mountTableOfContents","tablet$","tablet","sidebar$","anchors$","anchors","watchAnchorList","decodeURIComponent","target","header","anchor","pop","a","b","applyAnchorList","forEach","mountSearch","query$","reset$","result$","defaultTransform","trim","mountSearchQuery","options","fn","transform","delay","distinctUntilChanged","watchSearchQuery","QUERY","mountSearchReset","watchSearchReset","addToSearchResultList","applySearchResult","fetch$","list","meta","textContent","setSearchResultMeta","resetSearchResultMeta","observeOn","animationFrame","scan","scrollHeight","offsetHeight","finalize","resetSearchResultList","mountSearchResult","identity","mountHeader","styles","sticky","includes","position","watchHeader","type$","main","hx","setHeaderTitleActive","resetHeaderTitleActive","applyHeaderType","mountHero","hidden","setHeroHidden","resetHeroHidden","applyHero","mountMain","active","setHeaderShadow","resetHeaderShadow","bottom","active$","watchMain","mountTabs","setTabsHidden","resetTabsHidden","applyTabs","isAppleDevice","navigator","userAgent","fetchSourceFacts","toLowerCase","user","repo","status","stargazers_count","forks_count","public_repos","fetchSourceFactsFromGitHub","project","encodeURIComponent","star_count","fetchSourceFactsFromGitLab","setScrollLock","resetScrollLock","parseInt","initialize","SyntaxError","hash$","features","search$","navigation$","toc$","tabs$","hero$","keyboard$","indexOf","setupKeyboard","els$","details","closest","open","scrollIntoView","patchDetails","src","script","patchScripts","hasAttribute","patchSource","sentinel","patchTables","iif","patchScrollfix","dialog$","duration","dialog","add","body","setupDialog","clipboard$","block","parent","insertBefore","on","clearSelection","setupClipboard","link$","history","scrollRestoration","state$","push$","pop$","state","pushState","debounceTime","replaceState","bufferCount","instant$","sample","head","dispatchEvent","CustomEvent","setupInstantLoading","visibility","values","documentElement","match"],"mappings":"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","file":"assets/javascripts/bundle.9330522f.min.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([88,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean),\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n ...rest\n }))\n )\n .subscribe(console.log)\n\n /* Send index to worker */\n index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js b/material/assets/javascripts/bundle.js deleted file mode 100644 index 3dfbbd3b0..000000000 --- a/material/assets/javascripts/bundle.js +++ /dev/null @@ -1,7560 +0,0 @@ -(function(e, a) { for(var i in a) e[i] = a[i]; }(window, /******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "assets/javascripts/bundle": 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // add entry module to deferred list -/******/ deferredModules.push(["./src/assets/javascripts/index.ts","assets/javascripts/vendor"]); -/******/ // run deferred modules when ready -/******/ return checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "./src/assets/javascripts/browser/document/_/index.ts": -/*!************************************************************!*\ - !*** ./src/assets/javascripts/browser/document/_/index.ts ***! - \************************************************************/ -/*! exports provided: watchDocument */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return watchDocument; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch document - * - * If the location observable is passed, instant loading will be enabled which - * means that new values will be emitted every time the location changes. - * - * @return Document observable - */ -function watchDocument(_a) { - var location$ = (_a === void 0 ? {} : _a).location$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(document, "DOMContentLoaded") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(document)), typeof location$ !== "undefined" - ? Object(_switch__WEBPACK_IMPORTED_MODULE_2__["watchDocumentSwitch"])({ location$: location$ }) - : rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/document/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/browser/document/index.ts ***! - \**********************************************************/ -/*! exports provided: watchDocument, watchDocumentSwitch */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/document/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); - -/* harmony import */ var _switch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./switch */ "./src/assets/javascripts/browser/document/switch/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _switch__WEBPACK_IMPORTED_MODULE_1__["watchDocumentSwitch"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/document/switch/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/browser/document/switch/index.ts ***! - \*****************************************************************/ -/*! exports provided: watchDocumentSwitch */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return watchDocumentSwitch; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../location */ "./src/assets/javascripts/browser/location/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch document switch - * - * This function returns an observables that fetches a document if the provided - * location observable emits a new value (i.e. URL). If the emitted URL points - * to the same page, the request is effectively ignored (i.e. when only the - * fragment identifier changes). - * - * In case the request fails, the location change is dispatched regularly. - * - * @param options - Options - * - * @return Document observable - */ -function watchDocumentSwitch(_a) { - var location$ = _a.location$; - return location$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("pathname"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["skip"])(1), - /* Fetch document */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (url) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ - url: url.href, - responseType: "document", - withCredentials: true - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { - Object(_location__WEBPACK_IMPORTED_MODULE_3__["setLocation"])(url); - return rxjs__WEBPACK_IMPORTED_MODULE_0__["NEVER"]; - })); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/element/_/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/browser/element/_/index.ts ***! - \***********************************************************/ -/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return getElement; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return getElementOrThrow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return getActiveElement; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return getElements; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve an element matching the query selector - * - * @template T - Element type - * - * @param selector - Query selector - * @param node - Node of reference - * - * @return Element or nothing - */ -function getElement(selector, node) { - if (node === void 0) { node = document; } - return node.querySelector(selector) || undefined; -} -/** - * Retrieve an element matching a query selector or throw a reference error - * - * @template T - Element type - * - * @param selector - Query selector - * @param node - Node of reference - * - * @return Element - */ -function getElementOrThrow(selector, node) { - if (node === void 0) { node = document; } - var el = getElement(selector, node); - if (typeof el === "undefined") - throw new ReferenceError("Missing element: expected \"" + selector + "\" to be present"); - return el; -} -/** - * Retrieve the currently active element - * - * @return Element or nothing - */ -function getActiveElement() { - return document.activeElement instanceof HTMLElement - ? document.activeElement - : undefined; -} -/** - * Retrieve all elements matching the query selector - * - * @template T - Element type - * - * @param selector - Query selector - * @param node - Node of reference - * - * @return Elements - */ -function getElements(selector, node) { - if (node === void 0) { node = document; } - return Array.from(node.querySelectorAll(selector)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/element/focus/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/browser/element/focus/index.ts ***! - \***************************************************************/ -/*! exports provided: setElementFocus, watchElementFocus */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return setElementFocus; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return watchElementFocus; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../_ */ "./src/assets/javascripts/browser/element/_/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set element focus - * - * @param el - Element - * @param value - Whether the element should be focused - */ -function setElementFocus(el, value) { - if (value === void 0) { value = true; } - if (value) - el.focus(); - else - el.blur(); -} -/* ------------------------------------------------------------------------- */ -/** - * Watch element focus - * - * @param el - Element - * - * @return Element focus observable - */ -function watchElementFocus(el) { - var focus$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "focus"); - var blur$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "blur"); - /* Map events to boolean state */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(focus$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(true)), blur$.pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(false))) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el === Object(___WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/element/index.ts": -/*!*********************************************************!*\ - !*** ./src/assets/javascripts/browser/element/index.ts ***! - \*********************************************************/ -/*! exports provided: getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/element/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElement"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getActiveElement"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getElements"]; }); - -/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focus */ "./src/assets/javascripts/browser/element/focus/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _focus__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); - -/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/element/offset/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["getElementOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_2__["watchElementOffset"]; }); - -/* harmony import */ var _select__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./select */ "./src/assets/javascripts/browser/element/select/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _select__WEBPACK_IMPORTED_MODULE_3__["setElementSelection"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/element/offset/index.ts": -/*!****************************************************************!*\ - !*** ./src/assets/javascripts/browser/element/offset/index.ts ***! - \****************************************************************/ -/*! exports provided: getElementOffset, watchElementOffset */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return getElementOffset; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return watchElementOffset; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve element offset - * - * @param el - Element - * - * @return Element offset - */ -function getElementOffset(el) { - return { - x: el.scrollLeft, - y: el.scrollTop - }; -} -/* ------------------------------------------------------------------------- */ -/** - * Watch element offset - * - * @param el - Element - * - * @return Element offset observable - */ -function watchElementOffset(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return getElementOffset(el); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getElementOffset(el)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/element/select/index.ts": -/*!****************************************************************!*\ - !*** ./src/assets/javascripts/browser/element/select/index.ts ***! - \****************************************************************/ -/*! exports provided: setElementSelection */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return setElementSelection; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set element text selection - * - * @param el - Element - */ -function setElementSelection(el) { - if (el instanceof HTMLInputElement) - el.select(); - else - throw new Error("Not implemented"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/index.ts": -/*!*************************************************!*\ - !*** ./src/assets/javascripts/browser/index.ts ***! - \*************************************************/ -/*! exports provided: isSusceptibleToKeyboard, watchKeyboard, watchMedia, getToggle, setToggle, watchToggle, watchWorker, watchDocument, watchDocumentSwitch, getElement, getElementOrThrow, getActiveElement, getElements, setElementFocus, watchElementFocus, getElementOffset, watchElementOffset, setElementSelection, getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash, watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _document__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./document */ "./src/assets/javascripts/browser/document/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocument", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocument"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchDocumentSwitch", function() { return _document__WEBPACK_IMPORTED_MODULE_0__["watchDocumentSwitch"]; }); - -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/assets/javascripts/browser/element/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElement"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOrThrow", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOrThrow"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveElement", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getActiveElement"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElements", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElements"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementFocus"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementFocus", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementFocus"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["getElementOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchElementOffset", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["watchElementOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementSelection", function() { return _element__WEBPACK_IMPORTED_MODULE_1__["setElementSelection"]; }); - -/* harmony import */ var _keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keyboard */ "./src/assets/javascripts/browser/keyboard/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return _keyboard__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"]; }); - -/* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./location */ "./src/assets/javascripts/browser/location/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationInternal"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["getLocationHash"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _location__WEBPACK_IMPORTED_MODULE_3__["watchLocationHash"]; }); - -/* harmony import */ var _media__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./media */ "./src/assets/javascripts/browser/media/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return _media__WEBPACK_IMPORTED_MODULE_4__["watchMedia"]; }); - -/* harmony import */ var _toggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./toggle */ "./src/assets/javascripts/browser/toggle/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["getToggle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["setToggle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return _toggle__WEBPACK_IMPORTED_MODULE_5__["watchToggle"]; }); - -/* harmony import */ var _viewport__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./viewport */ "./src/assets/javascripts/browser/viewport/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewport"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportAt"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["setViewportOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["getViewportSize"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _viewport__WEBPACK_IMPORTED_MODULE_6__["watchViewportSize"]; }); - -/* harmony import */ var _worker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./worker */ "./src/assets/javascripts/browser/worker/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return _worker__WEBPACK_IMPORTED_MODULE_7__["watchWorker"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/keyboard/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/browser/keyboard/index.ts ***! - \**********************************************************/ -/*! exports provided: isSusceptibleToKeyboard, watchKeyboard */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSusceptibleToKeyboard", function() { return isSusceptibleToKeyboard; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchKeyboard", function() { return watchKeyboard; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Check whether an element may receive keyboard input - * - * @param el - Element - * - * @return Test result - */ -function isSusceptibleToKeyboard(el) { - switch (el.tagName) { - /* Form elements */ - case "INPUT": - case "SELECT": - case "TEXTAREA": - return true; - /* Everything else */ - default: - return el.isContentEditable; - } -} -/* ------------------------------------------------------------------------- */ -/** - * Watch keyboard - * - * @return Keyboard observable - */ -function watchKeyboard() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "keydown") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (ev) { return ({ - type: ev.key, - claim: function () { - ev.preventDefault(); - ev.stopPropagation(); - } - }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/location/_/index.ts": -/*!************************************************************!*\ - !*** ./src/assets/javascripts/browser/location/_/index.ts ***! - \************************************************************/ -/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return getLocation; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return setLocation; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return isLocationInternal; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return isLocationAnchor; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return watchLocation; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve location - * - * This function will return a `URL` object (and not `Location`) in order to - * normalize typings across the application. Furthermore, locations need to be - * tracked without setting them and `Location` is a singleton which represents - * the current location. - * - * @return URL - */ -function getLocation() { - return new URL(location.href); -} -/** - * Set location - * - * @param url - URL to change to - */ -function setLocation(url) { - location.href = url.href; -} -/* ------------------------------------------------------------------------- */ -/** - * Check whether a URL is an internal link or a file (except `.html`) - * - * @param url - URL or HTML anchor element - * @param ref - Reference URL - * - * @return Test result - */ -function isLocationInternal(url, ref) { - if (ref === void 0) { ref = location; } - return url.host === ref.host - && /^(?:\/[\w-]+)*(?:\/?|\.html)$/i.test(url.pathname); -} -/** - * Check whether a URL is an anchor link on the current page - * - * @param url - URL or HTML anchor element - * @param ref - Reference URL - * - * @return Test result - */ -function isLocationAnchor(url, ref) { - if (ref === void 0) { ref = location; } - return url.pathname === ref.pathname - && url.hash.length > 0; -} -/* ------------------------------------------------------------------------- */ -/** - * Watch location - * - * @return Location subject - */ -function watchLocation() { - return new rxjs__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](getLocation()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/location/hash/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/browser/location/hash/index.ts ***! - \***************************************************************/ -/*! exports provided: getLocationHash, setLocationHash, watchLocationHash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return getLocationHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return setLocationHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return watchLocationHash; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve location hash - * - * @return Location hash - */ -function getLocationHash() { - return location.hash.substring(1); -} -/** - * Set location hash - * - * Setting a new fragment identifier via `location.hash` will have no effect - * if the value doesn't change. However, when a new fragment identifier is set, - * we want the browser to target the respective element at all times, which is - * why we use this dirty little trick. - * - * @param hash - Location hash - */ -function setLocationHash(hash) { - var el = document.createElement("a"); - el.href = hash; - el.click(); -} -/* ------------------------------------------------------------------------- */ -/** - * Watch location hash - * - * @return Location hash observable - */ -function watchLocationHash() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "hashchange") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getLocationHash), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getLocationHash()), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (hash) { return hash.length > 0; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/location/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/browser/location/index.ts ***! - \**********************************************************/ -/*! exports provided: getLocation, setLocation, isLocationInternal, isLocationAnchor, watchLocation, getLocationHash, setLocationHash, watchLocationHash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/location/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["getLocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setLocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationInternal", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationInternal"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isLocationAnchor", function() { return ___WEBPACK_IMPORTED_MODULE_0__["isLocationAnchor"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchLocation"]; }); - -/* harmony import */ var _hash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hash */ "./src/assets/javascripts/browser/location/hash/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["getLocationHash"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["setLocationHash"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchLocationHash", function() { return _hash__WEBPACK_IMPORTED_MODULE_1__["watchLocationHash"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/media/index.ts": -/*!*******************************************************!*\ - !*** ./src/assets/javascripts/browser/media/index.ts ***! - \*******************************************************/ -/*! exports provided: watchMedia */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMedia", function() { return watchMedia; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch media query - * - * @param query - Media query - * - * @return Media observable - */ -function watchMedia(query) { - var media = matchMedia(query); - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { - return media.addListener(function () { return next(media.matches); }); - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(media.matches), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["shareReplay"])(1)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/toggle/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/browser/toggle/index.ts ***! - \********************************************************/ -/*! exports provided: getToggle, setToggle, watchToggle */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToggle", function() { return getToggle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToggle", function() { return setToggle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchToggle", function() { return watchToggle; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element */ "./src/assets/javascripts/browser/element/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * Toggle map - */ -var toggles = { - drawer: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=drawer]"), - search: Object(_element__WEBPACK_IMPORTED_MODULE_2__["getElementOrThrow"])("[data-md-toggle=search]") -}; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve the value of a toggle - * - * @param name - Toggle - * - * @return Toggle value - */ -function getToggle(name) { - return toggles[name].checked; -} -/** - * Set toggle - * - * Simulating a click event seems to be the most cross-browser compatible way - * of changing the value while also emitting a `change` event. Before, Material - * used `CustomEvent` to programmatically change the value of a toggle, but this - * is a much simpler and cleaner solution which doesn't require a polyfill. - * - * @param name - Toggle - * @param value - Toggle value - */ -function setToggle(name, value) { - if (toggles[name].checked !== value) - toggles[name].click(); -} -/* ------------------------------------------------------------------------- */ -/** - * Watch toggle - * - * @param name - Toggle - * - * @return Toggle value observable - */ -function watchToggle(name) { - var el = toggles[name]; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "change") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return el.checked; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(el.checked)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/viewport/_/index.ts": -/*!************************************************************!*\ - !*** ./src/assets/javascripts/browser/viewport/_/index.ts ***! - \************************************************************/ -/*! exports provided: watchViewport, watchViewportAt */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return watchViewport; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return watchViewportAt; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); -/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch viewport - * - * @return Viewport observable - */ -function watchViewport() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([ - Object(_offset__WEBPACK_IMPORTED_MODULE_3__["watchViewportOffset"])(), - Object(_size__WEBPACK_IMPORTED_MODULE_4__["watchViewportSize"])() - ]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), offset = _b[0], size = _b[1]; - return ({ offset: offset, size: size }); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); -} -/** - * Watch viewport relative to element - * - * @param el - Element - * @param options - Options - * - * @return Viewport observable - */ -function watchViewportAt(el, _a) { - var header$ = _a.header$, viewport$ = _a.viewport$; - var offset$ = viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return ({ - x: el.offsetLeft, - y: el.offsetTop - }); })); - /* Compute relative viewport, return hot observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, viewport$, offset$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), height = _b[0].height, _c = _b[1], offset = _c.offset, size = _c.size, _d = _b[2], x = _d.x, y = _d.y; - return ({ - offset: { - x: offset.x - x, - y: offset.y - y + height - }, - size: size - }); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/viewport/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/browser/viewport/index.ts ***! - \**********************************************************/ -/*! exports provided: watchViewport, watchViewportAt, getViewportOffset, setViewportOffset, watchViewportOffset, getViewportSize, watchViewportSize */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/browser/viewport/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewport", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewport"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportAt", function() { return ___WEBPACK_IMPORTED_MODULE_0__["watchViewportAt"]; }); - -/* harmony import */ var _offset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./offset */ "./src/assets/javascripts/browser/viewport/offset/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["getViewportOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["setViewportOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return _offset__WEBPACK_IMPORTED_MODULE_1__["watchViewportOffset"]; }); - -/* harmony import */ var _size__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./size */ "./src/assets/javascripts/browser/viewport/size/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["getViewportSize"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return _size__WEBPACK_IMPORTED_MODULE_2__["watchViewportSize"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/viewport/offset/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/browser/viewport/offset/index.ts ***! - \*****************************************************************/ -/*! exports provided: getViewportOffset, setViewportOffset, watchViewportOffset */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportOffset", function() { return getViewportOffset; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setViewportOffset", function() { return setViewportOffset; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportOffset", function() { return watchViewportOffset; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve viewport offset - * - * On iOS Safari, viewport offset can be negative due to overflow scrolling. - * As this may induce strange behaviors downstream, we'll just limit it to 0. - * - * @return Viewport offset - */ -function getViewportOffset() { - return { - x: Math.max(0, pageXOffset), - y: Math.max(0, pageYOffset) - }; -} -/** - * Set viewport offset - * - * @param offset - Viewport offset - */ -function setViewportOffset(_a) { - var x = _a.x, y = _a.y; - window.scrollTo(x || 0, y || 0); -} -/* ------------------------------------------------------------------------- */ -/** - * Watch viewport offset - * - * @return Viewport offset observable - */ -function watchViewportOffset() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "scroll"), Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize")) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportOffset), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportOffset())); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/viewport/size/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/browser/viewport/size/index.ts ***! - \***************************************************************/ -/*! exports provided: getViewportSize, watchViewportSize */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getViewportSize", function() { return getViewportSize; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchViewportSize", function() { return watchViewportSize; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Retrieve viewport size - * - * @return Viewport size - */ -function getViewportSize() { - return { - width: innerWidth, - height: innerHeight - }; -} -/* ------------------------------------------------------------------------- */ -/** - * Watch viewport size - * - * @return Viewport size observable - */ -function watchViewportSize() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(window, "resize") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(getViewportSize), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(getViewportSize())); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/browser/worker/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/browser/worker/index.ts ***! - \********************************************************/ -/*! exports provided: watchWorker */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchWorker", function() { return watchWorker; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch a web worker - * - * This function returns an observable that will send all values emitted by the - * message observable to the web worker. Web worker communication is expected - * to be bidirectional (request-response) and synchronous. Messages that are - * emitted during a pending request are throttled, the last one is emitted. - * - * @param worker - Web worker - * @param options - Options - * - * @return Worker message observable - */ -function watchWorker(worker, _a) { - var tx$ = _a.tx$; - /* Intercept messages from worker-like objects */ - var rx$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEventPattern"])(function (next) { - return worker.addEventListener("message", next); - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("data")); - /* Send and receive messages, return hot observable */ - return tx$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["throttle"])(function () { return rx$; }, { leading: true, trailing: true }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (message) { return worker.postMessage(message); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(rx$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/_/index.ts": -/*!******************************************************!*\ - !*** ./src/assets/javascripts/components/_/index.ts ***! - \******************************************************/ -/*! exports provided: setupComponents, useComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return setupComponents; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return useComponent; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * Component map observable - */ -var components$; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup bindings to components with given names - * - * This function will maintain bindings to the elements identified by the given - * names in-between document switches and update the elements in-place. - * - * @param names - Component names - * @param options - Options - */ -function setupComponents(names, _a) { - var document$ = _a.document$; - components$ = document$ - .pipe( - /* Build component map */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (document) { return names.reduce(function (components, name) { - var _a; - var el = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]", document); - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({}, components), typeof el !== "undefined" ? (_a = {}, _a[name] = el, _a) : {}); - }, {}); }), - /* Re-compute component map on document switch */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (prev, next) { - var e_1, _a; - try { - for (var names_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(names), names_1_1 = names_1.next(); !names_1_1.done; names_1_1 = names_1.next()) { - var name = names_1_1.value; - switch (name) { - /* Top-level components: update */ - case "header-title": - case "container": - case "skip": - if (name in prev && typeof prev[name] !== "undefined") { - prev[name].replaceWith(next[name]); - prev[name] = next[name]; - } - break; - /* All other components: rebind */ - default: - if (typeof next[name] !== "undefined") - prev[name] = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("[data-md-component=" + name + "]"); - else - delete prev[name]; - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (names_1_1 && !names_1_1.done && (_a = names_1.return)) _a.call(names_1); - } - finally { if (e_1) throw e_1.error; } - } - return prev; - }), - /* Convert to hot observable */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); -} -function useComponent(name) { - return components$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (components) { return (typeof components[name] !== "undefined" - ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])(components[name]) - : rxjs__WEBPACK_IMPORTED_MODULE_1__["EMPTY"]); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/header/_/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/components/header/_/index.ts ***! - \*************************************************************/ -/*! exports provided: mountHeader */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return mountHeader; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/header/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount header from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountHeader(_a) { - var viewport$ = _a.viewport$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { - var header$ = Object(_react__WEBPACK_IMPORTED_MODULE_5__["watchHeader"])(el, { viewport$: viewport$ }); - /* Compute whether the header should switch to page header */ - var type$ = Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("main") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (main) { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])("h1, h2, h3, h4, h5, h6", main); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (hx) { return typeof hx !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(Object(___WEBPACK_IMPORTED_MODULE_4__["useComponent"])("header-title")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), hx = _b[0], title = _b[1]; - return Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchViewportAt"])(hx, { header$: header$, viewport$: viewport$ }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var y = _a.offset.y; - return y >= hx.offsetHeight ? "page" : "site"; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applyHeaderType"])(title)); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])("site")); - /* Combine into single observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([header$, type$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), header = _b[0], type = _b[1]; - return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ type: type }, header)); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/header/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/header/index.ts ***! - \***********************************************************/ -/*! exports provided: mountHeader, watchHeader, applyHeaderType, setHeaderTitleActive, resetHeaderTitleActive */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/header/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHeader"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/header/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/header/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/header/react/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/components/header/react/index.ts ***! - \*****************************************************************/ -/*! exports provided: watchHeader, applyHeaderType */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return watchHeader; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return applyHeaderType; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/header/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch header - * - * The header is wrapped in an observable to pave the way for auto-hiding or - * other dynamic behaviors that may be implemented later on. - * - * @param el - Header element - * @param options - Options - * - * @return Header observable - */ -function watchHeader(el, _a) { - var viewport$ = _a.viewport$; - return viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function () { - var styles = getComputedStyle(el); - var sticky = [ - "sticky", - "-webkit-sticky" /* Old Safari */ - ].includes(styles.position); - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ - sticky: sticky, - height: sticky ? el.offsetHeight : 0 - }); - })); -} -/* ------------------------------------------------------------------------- */ -/** - * Apply header title type - * - * @param el - Header title element - * - * @return Operator function - */ -function applyHeaderType(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (type) { - Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeaderTitleActive"])(el, type === "page"); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderTitleActive"])(el); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/header/set/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/header/set/index.ts ***! - \***************************************************************/ -/*! exports provided: setHeaderTitleActive, resetHeaderTitleActive */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return setHeaderTitleActive; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return resetHeaderTitleActive; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set header title active - * - * @param el - Header title element - * @param value - Whether the title is shown - */ -function setHeaderTitleActive(el, value) { - el.setAttribute("data-md-state", value ? "active" : ""); -} -/** - * Reset header title active - * - * @param el - Header title element - */ -function resetHeaderTitleActive(el) { - el.removeAttribute("data-md-state"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/hero/_/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/hero/_/index.ts ***! - \***********************************************************/ -/*! exports provided: mountHero */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return mountHero; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/hero/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount hero from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountHero(_a) { - var header$ = _a.header$, viewport$ = _a.viewport$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { - var y = _a.offset.y; - return ({ hidden: y >= 20 }); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHero"])(el)); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/hero/index.ts": -/*!*********************************************************!*\ - !*** ./src/assets/javascripts/components/hero/index.ts ***! - \*********************************************************/ -/*! exports provided: mountHero, applyHero, setHeroHidden, resetHeroHidden */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/hero/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountHero"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/hero/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHero"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/hero/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/hero/react/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/hero/react/index.ts ***! - \***************************************************************/ -/*! exports provided: applyHero */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return applyHero; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/hero/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Apply hero - * - * @param el - Hero element - * - * @return Operator function - */ -function applyHero(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { - var hidden = _a.hidden; - Object(_set__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"])(el, hidden); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"])(el); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/hero/set/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/components/hero/set/index.ts ***! - \*************************************************************/ -/*! exports provided: setHeroHidden, resetHeroHidden */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return setHeroHidden; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return resetHeroHidden; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set hero hidden - * - * @param el - Hero element - * @param value - Whether the element is hidden - */ -function setHeroHidden(el, value) { - el.setAttribute("data-md-state", value ? "hidden" : ""); -} -/** - * Reset hero hidden - * - * @param el - Hero element - */ -function resetHeroHidden(el) { - el.removeAttribute("data-md-state"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/index.ts": -/*!****************************************************!*\ - !*** ./src/assets/javascripts/components/index.ts ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupComponents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupComponents"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useComponent", function() { return ___WEBPACK_IMPORTED_MODULE_0__["useComponent"]; }); - -/* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./header */ "./src/assets/javascripts/components/header/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["mountHeader"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchHeader", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["watchHeader"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderType", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["applyHeaderType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["setHeaderTitleActive"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderTitleActive", function() { return _header__WEBPACK_IMPORTED_MODULE_1__["resetHeaderTitleActive"]; }); - -/* harmony import */ var _hero__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hero */ "./src/assets/javascripts/components/hero/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["mountHero"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHero", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["applyHero"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["setHeroHidden"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeroHidden", function() { return _hero__WEBPACK_IMPORTED_MODULE_2__["resetHeroHidden"]; }); - -/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./main */ "./src/assets/javascripts/components/main/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["mountMain"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["watchMain"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _main__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"]; }); - -/* harmony import */ var _navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./navigation */ "./src/assets/javascripts/components/navigation/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _navigation__WEBPACK_IMPORTED_MODULE_4__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _navigation__WEBPACK_IMPORTED_MODULE_4__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/components/search/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearch"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchQuery"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchQuery"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchReset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["watchSearchReset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["mountSearchResult"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _search__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"]; }); - -/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shared */ "./src/assets/javascripts/components/shared/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _shared__WEBPACK_IMPORTED_MODULE_6__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _shared__WEBPACK_IMPORTED_MODULE_6__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var _tabs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabs */ "./src/assets/javascripts/components/tabs/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["mountTabs"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["applyTabs"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["setTabsHidden"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _tabs__WEBPACK_IMPORTED_MODULE_7__["resetTabsHidden"]; }); - -/* harmony import */ var _toc__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./toc */ "./src/assets/javascripts/components/toc/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _toc__WEBPACK_IMPORTED_MODULE_8__) if(["setupComponents","useComponent","mountHeader","watchHeader","applyHeaderType","setHeaderTitleActive","resetHeaderTitleActive","mountHero","applyHero","setHeroHidden","resetHeroHidden","mountMain","watchMain","applyHeaderShadow","setHeaderShadow","resetHeaderShadow","mountSearch","mountSearchQuery","watchSearchQuery","mountSearchReset","watchSearchReset","mountSearchResult","applySearchResult","setSearchResultMeta","resetSearchResultMeta","addToSearchResultList","resetSearchResultList","mountTabs","applyTabs","setTabsHidden","resetTabsHidden","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _toc__WEBPACK_IMPORTED_MODULE_8__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/main/_/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/main/_/index.ts ***! - \***********************************************************/ -/*! exports provided: mountMain */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return mountMain; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../_ */ "./src/assets/javascripts/components/_/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/main/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount main area from source observable - * - * The header must be connected to the main area observable outside of the - * operator function, as the header will persist in-between document switches - * while the main area is replaced. However, the header observable must be - * passed to this function, so we connect both via a long-living subject. - * - * @param options - Options - * - * @return Operator function - */ -function mountMain(_a) { - var header$ = _a.header$, viewport$ = _a.viewport$; - var main$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); - /* Connect to main area observable via long-living subject */ - Object(___WEBPACK_IMPORTED_MODULE_2__["useComponent"])("header") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (header) { return main$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("active"), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyHeaderShadow"])(header)); })) - .subscribe(); - /* Return operator */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_3__["watchMain"])(el, { header$: header$, viewport$: viewport$ }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (main) { return main$.next(main); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/main/index.ts": -/*!*********************************************************!*\ - !*** ./src/assets/javascripts/components/main/index.ts ***! - \*********************************************************/ -/*! exports provided: mountMain, watchMain, applyHeaderShadow, setHeaderShadow, resetHeaderShadow */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/main/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountMain", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountMain"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/main/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchMain"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyHeaderShadow"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/main/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setHeaderShadow"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetHeaderShadow"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/main/react/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/main/react/index.ts ***! - \***************************************************************/ -/*! exports provided: watchMain, applyHeaderShadow */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchMain", function() { return watchMain; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyHeaderShadow", function() { return applyHeaderShadow; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/main/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch main area - * - * This function returns an observable that computes the visual parameters of - * the main area which depends on the viewport vertical offset and height, as - * well as the height of the header element, if the header is fixed. - * - * @param el - Main area element - * @param options - Options - * - * @return Main area observable - */ -function watchMain(el, _a) { - var header$ = _a.header$, viewport$ = _a.viewport$; - /* Compute necessary adjustment for header */ - var adjust$ = header$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("height")); - /* Compute the main area's visible height */ - var height$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], _c = _b[1], y = _c.offset.y, height = _c.size.height; - var top = el.offsetTop; - var bottom = el.offsetHeight + top; - return height - - Math.max(0, top - y, adjust) - - Math.max(0, height + y - bottom); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (height) { return Math.max(0, height); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Compute whether the viewport offset is past the main area's top */ - var active$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, viewport$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), adjust = _b[0], y = _b[1].offset.y; - return y >= el.offsetTop - adjust; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Combine into a single observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([adjust$, height$, active$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), adjust = _b[0], height = _b[1], active = _b[2]; - return ({ - offset: el.offsetTop - adjust, - height: height, - active: active - }); - })); -} -/* ------------------------------------------------------------------------- */ -/** - * Apply header shadow - * - * @param el - Header element - * - * @return Operator function - */ -function applyHeaderShadow(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { - var active = _a.active; - Object(_set__WEBPACK_IMPORTED_MODULE_3__["setHeaderShadow"])(el, active); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetHeaderShadow"])(el); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/main/set/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/components/main/set/index.ts ***! - \*************************************************************/ -/*! exports provided: setHeaderShadow, resetHeaderShadow */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setHeaderShadow", function() { return setHeaderShadow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetHeaderShadow", function() { return resetHeaderShadow; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set header shadow - * - * @param el - Header element - * @param value - Whether the shadow is shown - */ -function setHeaderShadow(el, value) { - el.setAttribute("data-md-state", value ? "shadow" : ""); -} -/** - * Reset header shadow - * - * @param el - Header element - */ -function resetHeaderShadow(el) { - el.removeAttribute("data-md-state"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/_/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/_/index.ts ***! - \*****************************************************************/ -/*! exports provided: mountNavigation */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return mountNavigation; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); -/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount navigation from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountNavigation(_a) { - var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, screen$ = _a.screen$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { - /* [screen +]: Mount navigation in sidebar */ - if (screen) { - return Object(_shared__WEBPACK_IMPORTED_MODULE_3__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) - .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_3__["applySidebar"])(el, { header$: header$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (sidebar) { return ({ sidebar: sidebar }); })); - /* [screen -]: Mount navigation in drawer */ - } - else { - var els = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("nav", el); - return Object(_layer__WEBPACK_IMPORTED_MODULE_4__["watchNavigationLayer"])(els) - .pipe(Object(_layer__WEBPACK_IMPORTED_MODULE_4__["applyNavigationLayer"])(els), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (layer) { return ({ layer: layer }); })); - } - })); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/index.ts ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountNavigation", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountNavigation"]; }); - -/* harmony import */ var _layer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layer */ "./src/assets/javascripts/components/navigation/layer/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _layer__WEBPACK_IMPORTED_MODULE_1__) if(["mountNavigation","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _layer__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/layer/_/index.ts": -/*!***********************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/layer/_/index.ts ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/layer/index.ts": -/*!*********************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/layer/index.ts ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/navigation/layer/_/index.ts"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/navigation/layer/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchNavigationLayer"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyNavigationLayer"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setOverflowScrolling"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetOverflowScrolling"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/layer/react/index.ts": -/*!***************************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/layer/react/index.ts ***! - \***************************************************************************/ -/*! exports provided: watchNavigationLayer, applyNavigationLayer */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchNavigationLayer", function() { return watchNavigationLayer; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyNavigationLayer", function() { return applyNavigationLayer; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/navigation/layer/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch navigation layer - * - * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus - * contained in the drawer, but as the navigational layers are nested, we can - * only add it to the topmost layer or extremely weird cropping will occur. - * This implementation keeps track of the previous and current layer. - * - * @param els - Navigation elements - * - * @return Navigation layer observable - */ -function watchNavigationLayer(els) { - var e_1, _a; - var table = new Map(); - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - var label = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("label", el); - if (typeof label !== "undefined") { - var input = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])("#" + label.htmlFor); - table.set(input, el); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - /* Determine topmost layer */ - var layer$ = rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys()).map(function (input) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(input, "change")); }))).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", table.get(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["findLast"])(function (_a) { - var checked = _a.checked; - return checked; - }, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table.keys())))); })); - /* Return previous and next layer */ - return layer$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (next) { return ({ next: next }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { - var prev = _a.next; - var next = _b.next; - return ({ prev: prev, next: next }); - })); -} -/* ------------------------------------------------------------------------- */ -/** - * Apply navigation layer - * - * @param els - Navigation elements - * - * @return Operator function - */ -function applyNavigationLayer(els) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { - var prev = _a.prev; - if (prev) - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(prev); - }), - /* Wait until transition has finished */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["delay"])(250), - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { - var next = _a.next; - Object(_set__WEBPACK_IMPORTED_MODULE_5__["setOverflowScrolling"])(next); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { - var e_2, _a; - try { - for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { - var el = els_2_1.value; - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetOverflowScrolling"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElementOrThrow"])(".md-nav__list", el)); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); - } - finally { if (e_2) throw e_2.error; } - } - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/navigation/layer/set/index.ts": -/*!*************************************************************************!*\ - !*** ./src/assets/javascripts/components/navigation/layer/set/index.ts ***! - \*************************************************************************/ -/*! exports provided: setOverflowScrolling, resetOverflowScrolling */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOverflowScrolling", function() { return setOverflowScrolling; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetOverflowScrolling", function() { return resetOverflowScrolling; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set overflow scrolling - * - * @param el - Scrollable element - */ -function setOverflowScrolling(el) { - el.style.webkitOverflowScrolling = "touch"; -} -/** - * Reset overflow scrolling - * - * @param el - Scrollable element - */ -function resetOverflowScrolling(el) { - el.style.webkitOverflowScrolling = ""; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/_/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/components/search/_/index.ts ***! - \*************************************************************/ -/*! exports provided: mountSearch */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return mountSearch; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount search from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountSearch(_a) { - var query$ = _a.query$, reset$ = _a.reset$, result$ = _a.result$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function () { return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([query$, result$, reset$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), query = _b[0], result = _b[1]; - return ({ query: query, result: result }); - })); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/search/index.ts ***! - \***********************************************************/ -/*! exports provided: mountSearch, mountSearchQuery, watchSearchQuery, mountSearchReset, watchSearchReset, mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearch", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearch"]; }); - -/* harmony import */ var _query__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./query */ "./src/assets/javascripts/components/search/query/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["mountSearchQuery"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _query__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); - -/* harmony import */ var _reset__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reset */ "./src/assets/javascripts/components/search/reset/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["mountSearchReset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _reset__WEBPACK_IMPORTED_MODULE_2__["watchSearchReset"]; }); - -/* harmony import */ var _result__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./result */ "./src/assets/javascripts/components/search/result/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["mountSearchResult"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["applySearchResult"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["setSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["addToSearchResultList"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _result__WEBPACK_IMPORTED_MODULE_3__["resetSearchResultList"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/query/_/index.ts": -/*!*******************************************************************!*\ - !*** ./src/assets/javascripts/components/search/query/_/index.ts ***! - \*******************************************************************/ -/*! exports provided: mountSearchQuery */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return mountSearchQuery; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/query/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount search query from source observable - * - * @param handler - Worker handler - * @param options - Options - * - * @return Operator function - */ -function mountSearchQuery(_a, options) { - var tx$ = _a.tx$; - if (options === void 0) { options = {}; } - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { - var query$ = Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchQuery"])(el, options); - /* Subscribe worker to search query */ - query$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("value"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { - var value = _a.value; - return ({ - type: workers__WEBPACK_IMPORTED_MODULE_3__["SearchMessageType"].QUERY, - data: value - }); - })) - .subscribe(tx$.next.bind(tx$)); - /* Toggle search on focus */ - query$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilKeyChanged"])("focus")) - .subscribe(function (_a) { - var focus = _a.focus; - if (focus) - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", focus); - }); - /* Return search query */ - return query$; - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/query/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/components/search/query/index.ts ***! - \*****************************************************************/ -/*! exports provided: mountSearchQuery, watchSearchQuery */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/query/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchQuery", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchQuery"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/query/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchQuery"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/query/react/index.ts": -/*!***********************************************************************!*\ - !*** ./src/assets/javascripts/components/search/query/react/index.ts ***! - \***********************************************************************/ -/*! exports provided: watchSearchQuery */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchQuery", function() { return watchSearchQuery; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Helper functions - * ------------------------------------------------------------------------- */ -/** - * Default transformation function - * - * Rogue control characters are filtered before handing the query to the - * search index, as `lunr` will throw otherwise. - * - * @param value - Query value - * - * @return Transformed query value - */ -function defaultTransform(value) { - return value - .replace(/(?:^|\s+)[*+-:^~]+(?=\s+|$)/g, "") - .trim() - .replace(/\s+|\b$/g, "* "); -} -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch search query - * - * Note that the focus event which triggers re-reading the current query value - * is delayed by `1ms` so the input's empty state is allowed to propagate. - * - * @param el - Search query element - * @param options - Options - * - * @return Search query observable - */ -function watchSearchQuery(el, _a) { - var transform = (_a === void 0 ? {} : _a).transform; - var fn = transform || defaultTransform; - /* Intercept keyboard events */ - var value$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "keyup"), Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "focus").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["delay"])(1))) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return fn(el.value); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["startWith"])(fn(el.value)), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Intercept focus events */ - var focus$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementFocus"])(el); - /* Combine into a single observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([value$, focus$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), value = _b[0], focus = _b[1]; - return ({ value: value, focus: focus }); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/reset/_/index.ts": -/*!*******************************************************************!*\ - !*** ./src/assets/javascripts/components/search/reset/_/index.ts ***! - \*******************************************************************/ -/*! exports provided: mountSearchReset */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return mountSearchReset; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../_ */ "./src/assets/javascripts/components/_/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount search reset from source observable - * - * @return Operator function - */ -function mountSearchReset() { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return Object(_react__WEBPACK_IMPORTED_MODULE_4__["watchSearchReset"])(el) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMapTo"])(Object(___WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["startWith"])(undefined)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/reset/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/components/search/reset/index.ts ***! - \*****************************************************************/ -/*! exports provided: mountSearchReset, watchSearchReset */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/reset/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchReset", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchReset"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/reset/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSearchReset"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/reset/react/index.ts": -/*!***********************************************************************!*\ - !*** ./src/assets/javascripts/components/search/reset/react/index.ts ***! - \***********************************************************************/ -/*! exports provided: watchSearchReset */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSearchReset", function() { return watchSearchReset; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch search reset - * - * @param el - Search reset element - * - * @return Search reset observable - */ -function watchSearchReset(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["fromEvent"])(el, "click") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["mapTo"])(undefined)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/result/_/index.ts": -/*!********************************************************************!*\ - !*** ./src/assets/javascripts/components/search/result/_/index.ts ***! - \********************************************************************/ -/*! exports provided: mountSearchResult */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return mountSearchResult; }); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var workers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! workers */ "./src/assets/javascripts/workers/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/search/result/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount search result from source observable - * - * @param handler - Worker handler - * @param options - Options - * - * @return Operator function - */ -function mountSearchResult(_a, _b) { - var rx$ = _a.rx$; - var query$ = _b.query$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { - var container = el.parentElement; - /* Compute whether there are more search results to fetch */ - var fetch$ = Object(browser__WEBPACK_IMPORTED_MODULE_3__["watchElementOffset"])(container) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var y = _a.y; - return y >= container.scrollHeight - container.offsetHeight - 16; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_0__["identity"])); - /* Apply search results */ - return rx$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(workers__WEBPACK_IMPORTED_MODULE_4__["isSearchResultMessage"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("data"), Object(_react__WEBPACK_IMPORTED_MODULE_5__["applySearchResult"])(el, { query$: query$, fetch$: fetch$ })); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/result/index.ts": -/*!******************************************************************!*\ - !*** ./src/assets/javascripts/components/search/result/index.ts ***! - \******************************************************************/ -/*! exports provided: mountSearchResult, applySearchResult, setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/search/result/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountSearchResult", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountSearchResult"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/search/result/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySearchResult"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/search/result/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultMeta"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["addToSearchResultList"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSearchResultList"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/result/react/index.ts": -/*!************************************************************************!*\ - !*** ./src/assets/javascripts/components/search/result/react/index.ts ***! - \************************************************************************/ -/*! exports provided: applySearchResult */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySearchResult", function() { return applySearchResult; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/search/result/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Apply search results - * - * This function will perform a lazy rendering of the search results, depending - * on the vertical offset of the search result container. When the scroll offset - * reaches the bottom of the element, more results are fetched and rendered. - * - * @param el - Search result element - * @param options - Options - * - * @return Operator function - */ -function applySearchResult(el, _a) { - var query$ = _a.query$, fetch$ = _a.fetch$; - var list = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__list", el); - var meta = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-search-result__meta", el); - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( - /* Apply search result metadata */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(query$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), result = _b[0], query = _b[1]; - if (query.value) { - Object(_set__WEBPACK_IMPORTED_MODULE_5__["setSearchResultMeta"])(meta, result.length); - } - else { - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultMeta"])(meta); - } - return result; - }), - /* Apply search result list */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (result) { return fetch$ - .pipe( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["scan"])(function (index) { - var container = el.parentElement; - while (index < result.length) { - Object(_set__WEBPACK_IMPORTED_MODULE_5__["addToSearchResultList"])(list, Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSearchResult"])(result[index++])); - if (container.scrollHeight - container.offsetHeight > 16) - break; - } - return index; - }, 0), - /* Re-map to search result */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(result), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetSearchResultList"])(list); - })); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/search/result/set/index.ts": -/*!**********************************************************************!*\ - !*** ./src/assets/javascripts/components/search/result/set/index.ts ***! - \**********************************************************************/ -/*! exports provided: setSearchResultMeta, resetSearchResultMeta, addToSearchResultList, resetSearchResultList */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSearchResultMeta", function() { return setSearchResultMeta; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultMeta", function() { return resetSearchResultMeta; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToSearchResultList", function() { return addToSearchResultList; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSearchResultList", function() { return resetSearchResultList; }); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set number of search results - * - * @param el - Search result metadata element - * @param value - Number of results - */ -function setSearchResultMeta(el, value) { - switch (value) { - /* No results */ - case 0: - el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.none"); - break; - /* One result */ - case 1: - el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.one"); - break; - /* Multiple result */ - default: - el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.other", value.toString()); - } -} -/** - * Reset number of search results - * - * @param el - Search result metadata element - */ -function resetSearchResultMeta(el) { - el.textContent = Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("search.result.placeholder"); -} -/* ------------------------------------------------------------------------- */ -/** - * Add an element to the search result list - * - * @param el - Search result list element - * @param child - Search result element - */ -function addToSearchResultList(el, child) { - el.appendChild(child); -} -/** - * Reset search result list - * - * @param el - Search result list element - */ -function resetSearchResultList(el) { - el.innerHTML = ""; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/shared/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/shared/index.ts ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _sidebar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sidebar */ "./src/assets/javascripts/components/shared/sidebar/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _sidebar__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _sidebar__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/shared/sidebar/_/index.ts": -/*!*********************************************************************!*\ - !*** ./src/assets/javascripts/components/shared/sidebar/_/index.ts ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/***/ }), - -/***/ "./src/assets/javascripts/components/shared/sidebar/index.ts": -/*!*******************************************************************!*\ - !*** ./src/assets/javascripts/components/shared/sidebar/index.ts ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/shared/sidebar/_/index.ts"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/shared/sidebar/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchSidebar"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applySidebar"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarOffset"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarHeight"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarHeight"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setSidebarLock"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetSidebarLock"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/shared/sidebar/react/index.ts": -/*!*************************************************************************!*\ - !*** ./src/assets/javascripts/components/shared/sidebar/react/index.ts ***! - \*************************************************************************/ -/*! exports provided: watchSidebar, applySidebar */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchSidebar", function() { return watchSidebar; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applySidebar", function() { return applySidebar; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/shared/sidebar/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch sidebar - * - * This function returns an observable that computes the visual parameters of - * the sidebar which depends on the vertical viewport offset, as well as the - * height of the main area. When the page is scrolled beyond the header, the - * sidebar is locked and fills the remaining space. - * - * @param el - Sidebar element - * @param options - Options - * - * @return Sidebar observable - */ -function watchSidebar(el, _a) { - var main$ = _a.main$, viewport$ = _a.viewport$; - /* Adjust for internal main area offset */ - var adjust$ = viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("size"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return parseFloat(getComputedStyle(el.parentElement) - .getPropertyValue("padding-top")); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Compute the sidebar's available height */ - var height$ = viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], _c = _b[2], offset = _c.offset, height = _c.height; - return (height - + Math.min(adjust, Math.max(0, y - offset)) - - adjust); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Compute whether the sidebar should be locked */ - var lock$ = viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(adjust$, main$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), y = _b[0].offset.y, adjust = _b[1], offset = _b[2].offset; - return (y >= offset + adjust); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])()); - /* Combine into single observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([height$, lock$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), height = _b[0], lock = _b[1]; - return ({ height: height, lock: lock }); - })); -} -/* ------------------------------------------------------------------------- */ -/** - * Apply sidebar - * - * @param el - Sidebar element - * @param options - Options - * - * @return Operator function - */ -function applySidebar(el, _a) { - var header$ = _a.header$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_1__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(header$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = _b[0], height = _c.height, lock = _c.lock, offset = _b[1].height; - Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarHeight"])(el, height); - Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarLock"])(el, lock); - /* Set offset in locked state depending on header height */ - if (lock) - Object(_set__WEBPACK_IMPORTED_MODULE_3__["setSidebarOffset"])(el, offset); - else - Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); - }), - /* Re-map to sidebar */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), sidebar = _b[0]; - return sidebar; - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarOffset"])(el); - Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarHeight"])(el); - Object(_set__WEBPACK_IMPORTED_MODULE_3__["resetSidebarLock"])(el); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/shared/sidebar/set/index.ts": -/*!***********************************************************************!*\ - !*** ./src/assets/javascripts/components/shared/sidebar/set/index.ts ***! - \***********************************************************************/ -/*! exports provided: setSidebarOffset, resetSidebarOffset, setSidebarHeight, resetSidebarHeight, setSidebarLock, resetSidebarLock */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarOffset", function() { return setSidebarOffset; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarOffset", function() { return resetSidebarOffset; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarHeight", function() { return setSidebarHeight; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarHeight", function() { return resetSidebarHeight; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSidebarLock", function() { return setSidebarLock; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSidebarLock", function() { return resetSidebarLock; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set sidebar offset - * - * @param el - Sidebar element - * @param value - Sidebar offset - */ -function setSidebarOffset(el, value) { - el.style.top = value + "px"; -} -/** - * Reset sidebar offset - * - * @param el - Sidebar element - */ -function resetSidebarOffset(el) { - el.style.top = ""; -} -/* ------------------------------------------------------------------------- */ -/** - * Set sidebar height - * - * @param el - Sidebar element - * @param value - Sidebar height - */ -function setSidebarHeight(el, value) { - el.style.height = value + "px"; -} -/** - * Reset sidebar height - * - * @param el - Sidebar element - */ -function resetSidebarHeight(el) { - el.style.height = ""; -} -/* ------------------------------------------------------------------------- */ -/** - * Set sidebar lock - * - * @param el - Sidebar element - * @param value - Whether the sidebar is locked - */ -function setSidebarLock(el, value) { - el.setAttribute("data-md-state", value ? "lock" : ""); -} -/** - * Reset sidebar lock - * - * @param el - Sidebar element - */ -function resetSidebarLock(el) { - el.removeAttribute("data-md-state"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/tabs/_/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/components/tabs/_/index.ts ***! - \***********************************************************/ -/*! exports provided: mountTabs */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return mountTabs; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../react */ "./src/assets/javascripts/components/tabs/react/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount tabs from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountTabs(_a) { - var header$ = _a.header$, viewport$ = _a.viewport$, screen$ = _a.screen$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (el) { return screen$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (screen) { - /* [screen +]: Mount tabs above screen breakpoint */ - if (screen) { - return Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchViewportAt"])(el, { header$: header$, viewport$: viewport$ }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { - var y = _a.offset.y; - return ({ hidden: y >= 10 }); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["distinctUntilChanged"])(), Object(_react__WEBPACK_IMPORTED_MODULE_3__["applyTabs"])(el)); - /* [screen -]: Unmount tabs below screen breakpoint */ - } - else { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])({ hidden: true }); - } - })); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/tabs/index.ts": -/*!*********************************************************!*\ - !*** ./src/assets/javascripts/components/tabs/index.ts ***! - \*********************************************************/ -/*! exports provided: mountTabs, applyTabs, setTabsHidden, resetTabsHidden */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/tabs/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTabs", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTabs"]; }); - -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/tabs/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyTabs"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/tabs/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/tabs/react/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/tabs/react/index.ts ***! - \***************************************************************/ -/*! exports provided: applyTabs */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyTabs", function() { return applyTabs; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/tabs/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Apply tabs - * - * @param el - Tabs element - * - * @return Operator function - */ -function applyTabs(el) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (_a) { - var hidden = _a.hidden; - Object(_set__WEBPACK_IMPORTED_MODULE_2__["setTabsHidden"])(el, hidden); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["finalize"])(function () { - Object(_set__WEBPACK_IMPORTED_MODULE_2__["resetTabsHidden"])(el); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/tabs/set/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/components/tabs/set/index.ts ***! - \*************************************************************/ -/*! exports provided: setTabsHidden, resetTabsHidden */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setTabsHidden", function() { return setTabsHidden; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetTabsHidden", function() { return resetTabsHidden; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set tabs hidden - * - * @param el - Tabs element - * @param value - Whether the element is hidden - */ -function setTabsHidden(el, value) { - el.setAttribute("data-md-state", value ? "hidden" : ""); -} -/** - * Reset tabs hidden - * - * @param el - Tabs element - */ -function resetTabsHidden(el) { - el.removeAttribute("data-md-state"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/_/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/components/toc/_/index.ts ***! - \**********************************************************/ -/*! exports provided: mountTableOfContents */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return mountTableOfContents; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _shared__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared */ "./src/assets/javascripts/components/shared/index.ts"); -/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Mount table of contents from source observable - * - * @param options - Options - * - * @return Operator function - */ -function mountTableOfContents(_a) { - var header$ = _a.header$, main$ = _a.main$, viewport$ = _a.viewport$, tablet$ = _a.tablet$; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["pipe"])(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (el) { return tablet$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (tablet) { - /* [tablet +]: Mount table of contents in sidebar */ - if (tablet) { - var els = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-nav__link", el); - /* Watch and apply sidebar */ - var sidebar$ = Object(_shared__WEBPACK_IMPORTED_MODULE_4__["watchSidebar"])(el, { main$: main$, viewport$: viewport$ }) - .pipe(Object(_shared__WEBPACK_IMPORTED_MODULE_4__["applySidebar"])(el, { header$: header$ })); - /* Watch and apply anchor list (scroll spy) */ - var anchors$ = Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["watchAnchorList"])(els, { header$: header$, viewport$: viewport$ }) - .pipe(Object(_anchor__WEBPACK_IMPORTED_MODULE_5__["applyAnchorList"])(els)); - /* Combine into a single hot observable */ - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["combineLatest"])([sidebar$, anchors$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), sidebar = _b[0], anchors = _b[1]; - return ({ sidebar: sidebar, anchors: anchors }); - })); - /* [tablet -]: Unmount table of contents */ - } - else { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["of"])({}); - } - })); })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/anchor/_/index.ts": -/*!*****************************************************************!*\ - !*** ./src/assets/javascripts/components/toc/anchor/_/index.ts ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/anchor/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/components/toc/anchor/index.ts ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/anchor/_/index.ts"); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in ___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== 'default') (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return ___WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var _react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./react */ "./src/assets/javascripts/components/toc/anchor/react/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["watchAnchorList"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return _react__WEBPACK_IMPORTED_MODULE_1__["applyAnchorList"]; }); - -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorBlur"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorBlur"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["setAnchorActive"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return _set__WEBPACK_IMPORTED_MODULE_2__["resetAnchorActive"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/anchor/react/index.ts": -/*!*********************************************************************!*\ - !*** ./src/assets/javascripts/components/toc/anchor/react/index.ts ***! - \*********************************************************************/ -/*! exports provided: watchAnchorList, applyAnchorList */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "watchAnchorList", function() { return watchAnchorList; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyAnchorList", function() { return applyAnchorList; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _set__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../set */ "./src/assets/javascripts/components/toc/anchor/set/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Watch anchor list - * - * This is effectively a scroll-spy implementation which will account for the - * fixed header and automatically re-calculate anchor offsets when the viewport - * is resized. The returned observable will only emit if the anchor list needs - * to be repainted. - * - * This implementation tracks an anchor element's entire path starting from its - * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the - * Material theme currently doesn't make use of this information, it enables - * the styling of the entire hierarchy through customization. - * - * Note that the current anchor is the last item of the `prev` anchor list. - * - * @param els - Anchor elements - * @param options - Options - * - * @return Anchor list observable - */ -function watchAnchorList(els, _a) { - var e_1, _b; - var header$ = _a.header$, viewport$ = _a.viewport$; - var table = new Map(); - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - var id = decodeURIComponent(el.hash.substring(1)); - var target = Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); - if (typeof target !== "undefined") - table.set(el, target); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_b = els_1.return)) _b.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - /* Compute necessary adjustment for header */ - var adjust$ = header$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (header) { return 18 + header.height; })); - /* Compute partition of previous and next anchors */ - var partition$ = viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilKeyChanged"])("size"), - /* Build index to map anchor paths to vertical offsets */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { - var path = []; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(table).reduce(function (index, _a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), anchor = _b[0], target = _b[1]; - while (path.length) { - var last = table.get(path[path.length - 1]); - if (last.tagName >= target.tagName) { - path.pop(); - } - else { - break; - } - } - /* If the current anchor is hidden, continue with its parent */ - var offset = target.offsetTop; - while (!offset && target.parentElement) { - target = target.parentElement; - offset = target.offsetTop; - } - /* Map reversed anchor path to vertical offset */ - return index.set(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["reverse"])(path = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(path, [anchor])), offset); - }, new Map()); - }), - /* Re-compute partition when viewport offset changes */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (index) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["combineLatest"])([adjust$, viewport$]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["scan"])(function (_a, _b) { - var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _c[0], next = _c[1]; - var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b, 2), adjust = _d[0], y = _d[1].offset.y; - /* Look forward */ - while (next.length) { - var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next[0], 2), offset = _e[1]; - if (offset - adjust < y) { - prev = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(prev, [next.shift()]); - } - else { - break; - } - } - /* Look backward */ - while (prev.length) { - var _f = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(prev[prev.length - 1], 2), offset = _f[1]; - if (offset - adjust >= y) { - next = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([prev.pop()], next); - } - else { - break; - } - } - /* Return partition */ - return [prev, next]; - }, [[], Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(index)]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["distinctUntilChanged"])(function (a, b) { - return a[0] === b[0] - && a[1] === b[1]; - })); })); - /* Compute and return anchor list migrations */ - return partition$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; - return ({ - prev: prev.map(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; - return path; - }), - next: next.map(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), path = _b[0]; - return path; - }) - }); - }), - /* Extract anchor list migrations */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["startWith"])({ prev: [], next: [] }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), a = _b[0], b = _b[1]; - /* Moving down */ - if (a.prev.length < b.prev.length) { - return { - prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length), - next: [] - }; - /* Moving up */ - } - else { - return { - prev: b.prev.slice(-1), - next: b.next.slice(0, b.next.length - a.next.length) - }; - } - })); -} -/* ------------------------------------------------------------------------- */ -/** - * Apply anchor list - * - * @param els - Anchor elements - * - * @return Operator function - */ -function applyAnchorList(els) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["pipe"])( - /* Defer repaint to next animation frame */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_2__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (_a) { - var e_2, _b; - var prev = _a.prev, next = _a.next; - try { - /* Look forward */ - for (var next_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(next), next_1_1 = next_1.next(); !next_1_1.done; next_1_1 = next_1.next()) { - var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(next_1_1.value, 1), el = _c[0]; - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (next_1_1 && !next_1_1.done && (_b = next_1.return)) _b.call(next_1); - } - finally { if (e_2) throw e_2.error; } - } - /* Look backward */ - prev.forEach(function (_a, index) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 1), el = _b[0]; - Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorActive"])(el, index === prev.length - 1); - Object(_set__WEBPACK_IMPORTED_MODULE_5__["setAnchorBlur"])(el, true); - }); - }), - /* Reset on complete or error */ - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["finalize"])(function () { - var e_3, _a; - try { - for (var els_2 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_2_1 = els_2.next(); !els_2_1.done; els_2_1 = els_2.next()) { - var el = els_2_1.value; - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorActive"])(el); - Object(_set__WEBPACK_IMPORTED_MODULE_5__["resetAnchorBlur"])(el); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (els_2_1 && !els_2_1.done && (_a = els_2.return)) _a.call(els_2); - } - finally { if (e_3) throw e_3.error; } - } - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/anchor/set/index.ts": -/*!*******************************************************************!*\ - !*** ./src/assets/javascripts/components/toc/anchor/set/index.ts ***! - \*******************************************************************/ -/*! exports provided: setAnchorBlur, resetAnchorBlur, setAnchorActive, resetAnchorActive */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorBlur", function() { return setAnchorBlur; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorBlur", function() { return resetAnchorBlur; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAnchorActive", function() { return setAnchorActive; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetAnchorActive", function() { return resetAnchorActive; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Set anchor blur - * - * @param el - Anchor element - * @param value - Whether the anchor is blurred - */ -function setAnchorBlur(el, value) { - el.setAttribute("data-md-state", value ? "blur" : ""); -} -/** - * Reset anchor blur - * - * @param el - Anchor element - */ -function resetAnchorBlur(el) { - el.removeAttribute("data-md-state"); -} -/* ------------------------------------------------------------------------- */ -/** - * Set anchor active - * - * @param el - Anchor element - * @param value - Whether the anchor is active - */ -function setAnchorActive(el, value) { - el.classList.toggle("md-nav__link--active", value); -} -/** - * Reset anchor active - * - * @param el - Anchor element - */ -function resetAnchorActive(el) { - el.classList.remove("md-nav__link--active"); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/components/toc/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/components/toc/index.ts ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/components/toc/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mountTableOfContents", function() { return ___WEBPACK_IMPORTED_MODULE_0__["mountTableOfContents"]; }); - -/* harmony import */ var _anchor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./anchor */ "./src/assets/javascripts/components/toc/anchor/index.ts"); -/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _anchor__WEBPACK_IMPORTED_MODULE_1__) if(["mountTableOfContents","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _anchor__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/index.ts": -/*!*****************************************!*\ - !*** ./src/assets/javascripts/index.ts ***! - \*****************************************/ -/*! exports provided: setScrollLock, resetScrollLock, initialize */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setScrollLock", function() { return setScrollLock; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetScrollLock", function() { return resetScrollLock; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initialize", function() { return initialize; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _stylesheets_main_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stylesheets/main.scss */ "./src/assets/stylesheets/main.scss"); -/* harmony import */ var _stylesheets_palette_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stylesheets/palette.scss */ "./src/assets/stylesheets/palette.scss"); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var _browser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var _workers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./workers */ "./src/assets/javascripts/workers/index.ts"); -/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); -/* harmony import */ var _integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./integrations/clipboard */ "./src/assets/javascripts/integrations/clipboard/index.ts"); -/* harmony import */ var integrations_dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! integrations/dialog */ "./src/assets/javascripts/integrations/dialog/index.ts"); -/* harmony import */ var _integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./integrations/keyboard */ "./src/assets/javascripts/integrations/keyboard/index.ts"); -/* harmony import */ var integrations_instant__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! integrations/instant */ "./src/assets/javascripts/integrations/instant/index.ts"); -/* harmony import */ var patches__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! patches */ "./src/assets/javascripts/patches/index.ts"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -// TODO: remove this after we finished refactoring -// tslint:disable - - - - - - - - - - - - - - -/* ------------------------------------------------------------------------- */ -document.documentElement.classList.remove("no-js"); -document.documentElement.classList.add("js"); -/* Test for iOS */ -if (navigator.userAgent.match(/(iPad|iPhone|iPod)/g)) - document.documentElement.classList.add("ios"); -/** - * Set scroll lock - * - * @param el - Scrollable element - * @param value - Vertical offset - */ -function setScrollLock(el, value) { - el.setAttribute("data-md-state", "lock"); - el.style.top = "-" + value + "px"; -} -/** - * Reset scroll lock - * - * @param el - Scrollable element - */ -function resetScrollLock(el) { - var value = -1 * parseInt(el.style.top, 10); - el.removeAttribute("data-md-state"); - el.style.top = ""; - if (value) - window.scrollTo(0, value); -} -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Initialize Material for MkDocs - * - * @param config - Configuration - */ -function initialize(config) { - var e_1, _a, e_2, _b; - if (!Object(utilities__WEBPACK_IMPORTED_MODULE_14__["isConfig"])(config)) - throw new SyntaxError("Invalid configuration: " + JSON.stringify(config)); - /* Setup user interface observables */ - var location$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocation"])(); - var hash$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchLocationHash"])(); - var viewport$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchViewport"])(); - var tablet$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 960px)"); - var screen$ = Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchMedia"])("(min-width: 1220px)"); - /* Setup document observable */ - var document$ = config.features.includes("instant") - ? Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])({ location$: location$ }) - : Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchDocument"])(); - /* Setup component bindings */ - Object(components__WEBPACK_IMPORTED_MODULE_8__["setupComponents"])([ - "container", - "header", - "header-title", - "hero", - "main", - "navigation", - "search", - "search-query", - "search-reset", - "search-result", - "skip", - "tabs", - "toc" /* Table of contents */ - ], { document$: document$ }); - /* ----------------------------------------------------------------------- */ - // External index - var index = config.search && config.search.index - ? config.search.index - : undefined; - // TODO: pass URL config as first parameter, options as second - var worker = Object(_workers__WEBPACK_IMPORTED_MODULE_7__["setupSearchWorker"])(config.url.worker.search, { - base: config.url.base, index: index, location$: location$ - }); - /* ----------------------------------------------------------------------- */ - /* Create header observable */ - var header$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("header") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHeader"])({ viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - var main$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("main") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountMain"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* ----------------------------------------------------------------------- */ - /* Mount search query */ - var query$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-query") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchQuery"])(worker), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* Mount search reset */ - var reset$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-reset") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchReset"])(), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* Mount search result */ - var result$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search-result") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearchResult"])(worker, { query$: query$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* ----------------------------------------------------------------------- */ - var search$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("search") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountSearch"])({ query$: query$, reset$: reset$, result$: result$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* ----------------------------------------------------------------------- */ - var navigation$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("navigation") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountNavigation"])({ header$: header$, main$: main$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1) // shareReplay because there might be late subscribers - ); - var toc$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("toc") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTableOfContents"])({ header$: header$, main$: main$, viewport$: viewport$, tablet$: tablet$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - var tabs$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("tabs") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountTabs"])({ header$: header$, viewport$: viewport$, screen$: screen$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - var hero$ = Object(components__WEBPACK_IMPORTED_MODULE_8__["useComponent"])("hero") - .pipe(Object(components__WEBPACK_IMPORTED_MODULE_8__["mountHero"])({ header$: header$, viewport$: viewport$ }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["shareReplay"])(1)); - /* ----------------------------------------------------------------------- */ - var keyboard$ = Object(_integrations_keyboard__WEBPACK_IMPORTED_MODULE_11__["setupKeyboard"])(); - Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchDetails"])({ document$: document$, hash$: hash$ }); - Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScripts"])({ document$: document$ }); - Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchSource"])({ document$: document$ }); - Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchTables"])({ document$: document$ }); - /* Force 1px scroll offset to trigger overflow scrolling */ - Object(patches__WEBPACK_IMPORTED_MODULE_13__["patchScrollfix"])({ document$: document$ }); - /* Setup clipboard and dialog */ - var dialog$ = Object(integrations_dialog__WEBPACK_IMPORTED_MODULE_10__["setupDialog"])(); - var clipboard$ = Object(_integrations_clipboard__WEBPACK_IMPORTED_MODULE_9__["setupClipboard"])({ document$: document$, dialog$: dialog$ }); - /* ----------------------------------------------------------------------- */ - // // put into search... - // hash$ - // .pipe( - // switchMap(hash => useToggle("search") - // .pipe( - // filter(x => x.checked), // only active - // tap(toggle => setToggle(toggle, false)), - // delay(125), // ensure that it runs after the body scroll reset... - // mapTo(hash) - // ) - // ) - // ) - // .subscribe(hash => { - // getElement(`[id="${hash}"]`)!.scrollIntoView() - // }) - // Scroll lock // document -> document$ => { body } !? - // put into search... - Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["combineLatest"])([ - Object(_browser__WEBPACK_IMPORTED_MODULE_6__["watchToggle"])("search"), - tablet$, - ]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["withLatestFrom"])(viewport$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_b[0], 2), toggle = _c[0], tablet = _c[1], y = _b[1].offset.y; - var active = toggle && !tablet; - return document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["delay"])(active ? 400 : 100), // TOOD: directly combine this with the hash! - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_4__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["tap"])(function (_a) { - var body = _a.body; - return active - ? setScrollLock(body, y) - : resetScrollLock(body); - })); - })) - .subscribe(); - /* ----------------------------------------------------------------------- */ - /* Intercept internal link clicks */ - var link$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["fromEvent"])(document.body, "click") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (ev) { return !(ev.metaKey || ev.ctrlKey); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(function (ev) { - if (ev.target instanceof HTMLElement) { - var el = ev.target.closest("a"); // TODO: abstract as link click? - if (el && Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationInternal"])(el)) { - if (!Object(_browser__WEBPACK_IMPORTED_MODULE_6__["isLocationAnchor"])(el)) - ev.preventDefault(); - return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["of"])(el); - } - } - return rxjs__WEBPACK_IMPORTED_MODULE_4__["NEVER"]; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["share"])()); - /* Always close drawer on click */ - link$.subscribe(function () { - Object(_browser__WEBPACK_IMPORTED_MODULE_6__["setToggle"])("drawer", false); - }); - // somehow call this setupNavigation ? - // instant loading - if (config.features.includes("instant")) { - /* Disable automatic scroll restoration, as it doesn't work nicely */ - if ("scrollRestoration" in history) - history.scrollRestoration = "manual"; - try { - /* Resolve relative links for stability */ - for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ - "link[rel=\"shortcut icon\"]", - "link[rel=\"stylesheet\"]" - ]), _d = _c.next(); !_d.done; _d = _c.next()) { - var selector = _d.value; - try { - for (var _e = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(selector))), _f = _e.next(); !_f.done; _f = _e.next()) { - var el = _f.value; - el.href = el.href; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_1) throw e_1.error; } - } - Object(integrations_instant__WEBPACK_IMPORTED_MODULE_12__["setupInstantLoading"])({ - document$: document$, link$: link$, location$: location$, viewport$: viewport$ - }); - } - /* ----------------------------------------------------------------------- */ - // if we use a single tab outside of search, unhide all permalinks. - // TODO: experimental. necessary!? - keyboard$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["filter"])(function (key) { return key.mode === "global" && ["Tab"].includes(key.type); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["take"])(1)) - .subscribe(function () { - var e_3, _a; - try { - for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(_browser__WEBPACK_IMPORTED_MODULE_6__["getElements"])(".headerlink")), _c = _b.next(); !_c.done; _c = _b.next()) { - var link = _c.value; - link.style.visibility = "visible"; - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_3) throw e_3.error; } - } - }); - /* ----------------------------------------------------------------------- */ - var state = { - /* Browser observables */ - document$: document$, - viewport$: viewport$, - /* Component observables */ - header$: header$, - hero$: hero$, - main$: main$, - navigation$: navigation$, - search$: search$, - tabs$: tabs$, - toc$: toc$, - /* Integation observables */ - clipboard$: clipboard$, - keyboard$: keyboard$, - dialog$: dialog$ - }; - /* Subscribe to all observables */ - rxjs__WEBPACK_IMPORTED_MODULE_4__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(Object(ramda__WEBPACK_IMPORTED_MODULE_3__["values"])(state))).subscribe(); - return state; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/integrations/clipboard/index.ts": -/*!****************************************************************!*\ - !*** ./src/assets/javascripts/integrations/clipboard/index.ts ***! - \****************************************************************/ -/*! exports provided: setupClipboard */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupClipboard", function() { return setupClipboard; }); -/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clipboard */ "./node_modules/clipboard/dist/clipboard.js"); -/* harmony import */ var clipboard__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(clipboard__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup clipboard - * - * This function implements the Clipboard.js integration and injects a button - * into all code blocks when the document changes. - * - * @param options - Options - * - * @return Clipboard observable - */ -function setupClipboard(_a) { - var document$ = _a.document$, dialog$ = _a.dialog$; - if (!clipboard__WEBPACK_IMPORTED_MODULE_0__["isSupported"]()) - return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; - /* Inject 'copy-to-clipboard' buttons */ - document$.subscribe(function () { - var blocks = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("pre > code"); - blocks.forEach(function (block, index) { - var parent = block.parentElement; - parent.id = "__code_" + index; - parent.insertBefore(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderClipboard"])(parent.id), block); - }); - }); - /* Initialize and setup clipboard */ - var clipboard$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEventPattern"])(function (next) { - new clipboard__WEBPACK_IMPORTED_MODULE_0__(".md-clipboard").on("success", next); - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); - /* Display notification for clipboard event */ - clipboard$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["tap"])(function (ev) { return ev.clearSelection(); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("clipboard.copied"))) - .subscribe(dialog$); - /* Return clipboard */ - return clipboard$; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/integrations/dialog/index.ts": -/*!*************************************************************!*\ - !*** ./src/assets/javascripts/integrations/dialog/index.ts ***! - \*************************************************************/ -/*! exports provided: setupDialog */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupDialog", function() { return setupDialog; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup dialog - * - * @param options - Options - * - * @return Dialog observable - */ -function setupDialog(_a) { - var duration = (_a === void 0 ? {} : _a).duration; - var dialog$ = new rxjs__WEBPACK_IMPORTED_MODULE_0__["Subject"](); - /* Create dialog */ - var dialog = document.createElement("div"); // TODO: improve scoping - dialog.classList.add("md-dialog", "md-typeset"); - /* Display dialog */ - dialog$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["switchMap"])(function (text) { return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(document.body) // useComponent("container") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (container) { return container.appendChild(dialog); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["observeOn"])(rxjs__WEBPACK_IMPORTED_MODULE_0__["animationFrameScheduler"]), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(1), // Strangley it doesnt work when we push things to the new animation frame... - Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { - el.innerHTML = text; - el.setAttribute("data-md-state", "open"); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(duration || 2000), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { return el.removeAttribute("data-md-state"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["delay"])(400), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["tap"])(function (el) { - el.innerHTML = ""; - el.remove(); - })); })) - .subscribe(); - /* Return dialog subject */ - return dialog$; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/integrations/instant/index.ts": -/*!**************************************************************!*\ - !*** ./src/assets/javascripts/integrations/instant/index.ts ***! - \**************************************************************/ -/*! exports provided: setupInstantLoading */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupInstantLoading", function() { return setupInstantLoading; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup instant loading - * - * @param options - Options - * - * @return TODO ? - */ -function setupInstantLoading(_a) { - var document$ = _a.document$, viewport$ = _a.viewport$, link$ = _a.link$, location$ = _a.location$; - var state$ = link$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (el) { return ({ url: new URL(el.href) }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); - /* Intercept internal links to dispatch */ - var push$ = state$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilChanged"])(function (prev, next) { return prev.url.href === next.url.href; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { - var url = _a.url; - return !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(url); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); - /* Intercept popstate events (history back and forward) */ - var pop$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(window, "popstate") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (ev) { return ev.state !== null; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (ev) { return ({ - url: new URL(location.href), - offset: ev.state - }); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["share"])()); - /* Emit location change */ - Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("url")) - .subscribe(location$); - /* History: dispatch internal link */ - push$.subscribe(function (_a) { - var url = _a.url; - history.pushState({}, "", url.toString()); - }); - /* History: debounce update of viewport offset */ - viewport$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["debounceTime"])(250), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["distinctUntilKeyChanged"])("offset")) - .subscribe(function (_a) { - var offset = _a.offset; - history.replaceState(offset, ""); - }); - /* Apply viewport offset from history */ - Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(state$, pop$) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["bufferCount"])(2, 1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), prev = _b[0], next = _b[1]; - return prev.url.pathname === next.url.pathname - && !Object(browser__WEBPACK_IMPORTED_MODULE_3__["isLocationAnchor"])(next.url); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), state = _b[1]; - return state; - })) - .subscribe(function (_a) { - var offset = _a.offset; - Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); - }); - /* Intercept actual instant loading */ - var instant$ = Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"])(push$, pop$) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["sample"])(document$)); - // TODO: from here on, everything is beta.... ############################### - instant$.subscribe(function (_a) { - var url = _a.url, offset = _a.offset; - if (url.hash && !offset) { - console.log("set hash!"); - Object(browser__WEBPACK_IMPORTED_MODULE_3__["setLocationHash"])(url.hash); // must delay, if search is open! - } - else { - Object(browser__WEBPACK_IMPORTED_MODULE_3__["setViewportOffset"])(offset || { y: 0 }); - } - }); - instant$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["withLatestFrom"])(document$)) - .subscribe(function (_a) { - var e_1, _b; - var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), _d = _c[1], title = _d.title, head = _d.head; - document.dispatchEvent(new CustomEvent("DOMContentSwitch")); - document.title = title; - try { - /* Replace meta tags */ - for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])([ - "link[rel=\"canonical\"]", - "meta[name=\"author\"]", - "meta[name=\"description\"]" - ]), _f = _e.next(); !_f.done; _f = _e.next()) { - var selector = _f.value; - var next = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, head); - var prev = Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElement"])(selector, document.head); - if (typeof next !== "undefined" && - typeof prev !== "undefined") { - prev.replaceWith(next); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_1) throw e_1.error; } - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/integrations/keyboard/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/integrations/keyboard/index.ts ***! - \***************************************************************/ -/*! exports provided: setupKeyboard */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupKeyboard", function() { return setupKeyboard; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup keyboard - * - * This function will setup the keyboard handlers and ensure that keys are - * correctly propagated. Currently there are two modes: - * - * - `global`: This mode is active when the search is closed. It is intended - * to assign hotkeys to specific functions of the site. Currently the search, - * previous and next page can be triggered. - * - * - `search`: This mode is active when the search is open. It maps certain - * navigational keys to offer search results that can be entirely navigated - * through keyboard input. - * - * The keyboard observable is returned and can be used to monitor the keyboard - * in order toassign further hotkeys to custom functions. - * - * @return Keyboard observable - */ -function setupKeyboard() { - var keyboard$ = Object(browser__WEBPACK_IMPORTED_MODULE_2__["watchKeyboard"])() - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (key) { return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ mode: Object(browser__WEBPACK_IMPORTED_MODULE_2__["getToggle"])("search") ? "search" : "global" }, key)); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["share"])()); - /* Setup search keyboard handlers */ - keyboard$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { - var mode = _a.mode; - return mode === "search"; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"), Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-result"))) - .subscribe(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 3), key = _b[0], query = _b[1], result = _b[2]; - var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); - switch (key.type) { - /* Enter: prevent form submission */ - case "Enter": - if (active === query) - key.claim(); - break; - /* Escape or Tab: close search */ - case "Escape": - case "Tab": - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setToggle"])("search", false); - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query, false); - break; - /* Vertical arrows: select previous or next search result */ - case "ArrowUp": - case "ArrowDown": - if (typeof active === "undefined") { - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); - } - else { - var els = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([query], Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("[href]", result)); - var i = Math.max(0, (Math.max(0, els.indexOf(active)) + els.length + (key.type === "ArrowUp" ? -1 : +1)) % els.length); - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(els[i]); - } - /* Prevent scrolling of page */ - key.claim(); - break; - /* All other keys: hand to search query */ - default: - if (query !== Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])()) - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); - } - }); - /* Setup global keyboard handlers */ - keyboard$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { - var mode = _a.mode; - if (mode === "global") { - var active = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getActiveElement"])(); - if (typeof active !== "undefined") - return !Object(browser__WEBPACK_IMPORTED_MODULE_2__["isSusceptibleToKeyboard"])(active); - } - return false; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("search-query"))) - .subscribe(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), key = _b[0], query = _b[1]; - switch (key.type) { - /* Open search and select query */ - case "f": - case "s": - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementFocus"])(query); - Object(browser__WEBPACK_IMPORTED_MODULE_2__["setElementSelection"])(query); - key.claim(); - break; - /* Go to previous page */ - case "p": - case ",": - var prev = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=prev]"); - if (typeof prev !== "undefined") - prev.click(); - break; - /* Go to next page */ - case "n": - case ".": - var next = Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElement"])("[href][rel=next]"); - if (typeof next !== "undefined") - next.click(); - break; - } - }); - /* Return keyboard */ - return keyboard$; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/details/index.ts": -/*!*********************************************************!*\ - !*** ./src/assets/javascripts/patches/details/index.ts ***! - \*********************************************************/ -/*! exports provided: patchDetails */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return patchDetails; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Patch all `details` elements - * - * This function will ensure that all `details` tags are opened prior to - * printing, so the whole content of the page is included, and on anchor jumps. - * - * @param options - Options - */ -function patchDetails(_a) { - var document$ = _a.document$, hash$ = _a.hash$; - var els$ = document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElements"])("details"); })); - /* Open all details before printing */ - Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["merge"])(Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchMedia"])("print").pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(ramda__WEBPACK_IMPORTED_MODULE_1__["identity"])), /* Webkit */ Object(rxjs__WEBPACK_IMPORTED_MODULE_2__["fromEvent"])(window, "beforeprint") /* IE, FF */) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMapTo"])(els$)) - .subscribe(function (els) { - var e_1, _a; - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - el.setAttribute("open", ""); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - }); - /* Open parent details and fix anchor jump */ - hash$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (id) { return Object(browser__WEBPACK_IMPORTED_MODULE_4__["getElement"])("[id=\"" + id + "\"]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["filter"])(function (el) { return typeof el !== "undefined"; }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["tap"])(function (el) { - var details = el.closest("details"); - if (details && !details.open) - details.setAttribute("open", ""); - })) - .subscribe(function (el) { return el.scrollIntoView(); }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/index.ts": -/*!*************************************************!*\ - !*** ./src/assets/javascripts/patches/index.ts ***! - \*************************************************/ -/*! exports provided: patchDetails, patchScripts, patchScrollfix, patchSource, patchTables */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _details__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./details */ "./src/assets/javascripts/patches/details/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchDetails", function() { return _details__WEBPACK_IMPORTED_MODULE_0__["patchDetails"]; }); - -/* harmony import */ var _script__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./script */ "./src/assets/javascripts/patches/script/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return _script__WEBPACK_IMPORTED_MODULE_1__["patchScripts"]; }); - -/* harmony import */ var _scrollfix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scrollfix */ "./src/assets/javascripts/patches/scrollfix/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return _scrollfix__WEBPACK_IMPORTED_MODULE_2__["patchScrollfix"]; }); - -/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/patches/source/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return _source__WEBPACK_IMPORTED_MODULE_3__["patchSource"]; }); - -/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/patches/table/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return _table__WEBPACK_IMPORTED_MODULE_4__["patchTables"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/script/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/patches/script/index.ts ***! - \********************************************************/ -/*! exports provided: patchScripts */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScripts", function() { return patchScripts; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! components */ "./src/assets/javascripts/components/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Patch all `script` elements - * - * This function must be run after a document switch, which means the first - * emission must be ignored. - * - * @param options - Options - */ -function patchScripts(_a) { - var document$ = _a.document$; - var els$ = document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["skip"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["withLatestFrom"])(Object(components__WEBPACK_IMPORTED_MODULE_3__["useComponent"])("container")), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), el = _b[1]; - return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("script", el); - })); - /* Evaluate all scripts via replacement */ - els$.subscribe(function (els) { - var e_1, _a; - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - if (el.src || /(^|\/javascript)$/i.test(el.type)) { - var script = document.createElement("script"); - var key = el.src ? "src" : "innerText"; - script[key] = el[key]; - el.replaceWith(script); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/scrollfix/index.ts": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/patches/scrollfix/index.ts ***! - \***********************************************************/ -/*! exports provided: patchScrollfix */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchScrollfix", function() { return patchScrollfix; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Helper functions - * ------------------------------------------------------------------------- */ -/** - * Check whether the given device is an Apple device - * - * @return Test result - */ -function isAppleDevice() { - return /(iPad|iPhone|iPod)/.test(navigator.userAgent); -} -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Patch all elements with `data-md-scrollfix` attributes - * - * This is a year-old patch which ensures that overflow scrolling works at the - * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon - * the start of a touch event. - * - * @see https://bit.ly/2SCtAOO - Original source - * - * @param options - Options - */ -function patchScrollfix(_a) { - var document$ = _a.document$; - var els$ = document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])("[data-md-scrollfix]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["shareReplay"])(1)); - /* Remove marker attribute, so we'll only add the fix once */ - els$.subscribe(function (els) { - var e_1, _a; - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - el.removeAttribute("data-md-scrollfix"); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - }); - /* Patch overflow scrolling on touch start */ - Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["iif"])(isAppleDevice, els$, rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (els) { return rxjs__WEBPACK_IMPORTED_MODULE_1__["merge"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])(els.map(function (el) { return (Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["fromEvent"])(el, "touchstart") - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["mapTo"])(el))); }))); })) - .subscribe(function (el) { - var top = el.scrollTop; - /* We're at the top of the container */ - if (top === 0) { - el.scrollTop = 1; - /* We're at the bottom of the container */ - } - else if (top + el.offsetHeight === el.scrollHeight) { - el.scrollTop = top - 1; - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/source/github/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/patches/source/github/index.ts ***! - \***************************************************************/ -/*! exports provided: fetchSourceFactsFromGitHub */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitHub", function() { return fetchSourceFactsFromGitHub; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Fetch GitHub source facts - * - * @param user - GitHub user - * @param repo - GitHub repository - * - * @return Source facts observable - */ -function fetchSourceFactsFromGitHub(user, repo) { - return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_1__["ajax"])({ - url: typeof repo !== "undefined" - ? "https://api.github.com/repos/" + user + "/" + repo - : "https://api.github.com/users/" + user, - responseType: "json" - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["filter"])(function (_a) { - var status = _a.status; - return status === 200; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (data) { - /* GitHub repository */ - if (typeof repo !== "undefined") { - var stargazers_count = data.stargazers_count, forks_count = data.forks_count; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ - Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(stargazers_count || 0) + " Stars", - Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(forks_count || 0) + " Forks" - ]); - /* GitHub user/organization */ - } - else { - var public_repos = data.public_repos; - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])([ - Object(utilities__WEBPACK_IMPORTED_MODULE_3__["round"])(public_repos || 0) + " Repositories" - ]); - } - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/source/gitlab/index.ts": -/*!***************************************************************!*\ - !*** ./src/assets/javascripts/patches/source/gitlab/index.ts ***! - \***************************************************************/ -/*! exports provided: fetchSourceFactsFromGitLab */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchSourceFactsFromGitLab", function() { return fetchSourceFactsFromGitLab; }); -/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Fetch GitLab source facts - * - * @param base - GitLab base - * @param project - GitLab project - * - * @return Source facts observable - */ -function fetchSourceFactsFromGitLab(base, project) { - return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_0__["ajax"])({ - url: "https://" + base + "/api/v4/projects/" + encodeURIComponent(project), - responseType: "json" - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (_a) { - var status = _a.status; - return status === 200; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["pluck"])("response"), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function (_a) { - var star_count = _a.star_count, forks_count = _a.forks_count; - return ([ - Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(star_count) + " Stars", - Object(utilities__WEBPACK_IMPORTED_MODULE_2__["round"])(forks_count) + " Forks" - ]); - })); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/source/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/patches/source/index.ts ***! - \********************************************************/ -/*! exports provided: patchSource */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchSource", function() { return patchSource; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* harmony import */ var _github__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./github */ "./src/assets/javascripts/patches/source/github/index.ts"); -/* harmony import */ var _gitlab__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gitlab */ "./src/assets/javascripts/patches/source/gitlab/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - - - -/* ---------------------------------------------------------------------------- - * Helper functions - * ------------------------------------------------------------------------- */ -/** - * Fetch source facts - * - * @param url - Source repository URL - * - * @return Source facts observable - */ -function fetchSourceFacts(url) { - var _a = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/(git(?:hub|lab))/i) || [], 1), type = _a[0]; - switch (type.toLowerCase()) { - /* GitHub repository */ - case "github": - var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+github\.com\/([^\/]+)\/?([^\/]+)/i), 3), user = _b[1], repo = _b[2]; - return Object(_github__WEBPACK_IMPORTED_MODULE_6__["fetchSourceFactsFromGitHub"])(user, repo); - /* GitLab repository */ - case "gitlab": - var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(url.match(/^.+?([^\/]*gitlab[^\/]+)\/(.+)/i), 3), base = _c[1], project = _c[2]; - return Object(_gitlab__WEBPACK_IMPORTED_MODULE_7__["fetchSourceFactsFromGitLab"])(base, project); - /* Everything else */ - default: - return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; - } -} -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Patch elements containing repository information - * - * This function will retrieve the URL from the repository link and try to - * query data from integrated source code platforms like GitHub or GitLab. - * - * @param options - Options - */ -function patchSource(_a) { - var document$ = _a.document$; - document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElementOrThrow"])(".md-source[href]"); }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (_a) { - var href = _a.href; - return (Object(utilities__WEBPACK_IMPORTED_MODULE_5__["cache"])("" + Object(utilities__WEBPACK_IMPORTED_MODULE_5__["hash"])(href), function () { return fetchSourceFacts(href); })); - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["catchError"])(function () { return rxjs__WEBPACK_IMPORTED_MODULE_1__["NEVER"]; })) - .subscribe(function (facts) { - var e_1, _a; - try { - for (var _b = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(browser__WEBPACK_IMPORTED_MODULE_3__["getElements"])(".md-source__repository")), _c = _b.next(); !_c.done; _c = _b.next()) { - var el = _c.value; - if (!el.hasAttribute("data-md-state")) { - el.setAttribute("data-md-state", "done"); - el.appendChild(Object(templates__WEBPACK_IMPORTED_MODULE_4__["renderSource"])(facts)); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/patches/table/index.ts": -/*!*******************************************************!*\ - !*** ./src/assets/javascripts/patches/table/index.ts ***! - \*******************************************************/ -/*! exports provided: patchTables */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patchTables", function() { return patchTables; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var templates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! templates */ "./src/assets/javascripts/templates/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Patch all `table` elements - * - * This function will re-render all tables by wrapping them to improve overflow - * scrolling on smaller screen sizes. - * - * @param options - Options - */ -function patchTables(_a) { - var document$ = _a.document$; - var sentinel = document.createElement("table"); - document$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_1__["map"])(function () { return Object(browser__WEBPACK_IMPORTED_MODULE_2__["getElements"])("table:not([class])"); })) - .subscribe(function (els) { - var e_1, _a; - try { - for (var els_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(els), els_1_1 = els_1.next(); !els_1_1.done; els_1_1 = els_1.next()) { - var el = els_1_1.value; - el.replaceWith(sentinel); - sentinel.replaceWith(Object(templates__WEBPACK_IMPORTED_MODULE_3__["renderTable"])(el)); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (els_1_1 && !els_1_1.done && (_a = els_1.return)) _a.call(els_1); - } - finally { if (e_1) throw e_1.error; } - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/templates/clipboard/index.tsx": -/*!**************************************************************!*\ - !*** ./src/assets/javascripts/templates/clipboard/index.tsx ***! - \**************************************************************/ -/*! exports provided: renderClipboard */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return renderClipboard; }); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * CSS classes - */ -var css = { - container: "md-clipboard md-icon" -}; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Render a 'copy-to-clipboard' button - * - * @param id - Unique identifier - * - * @return Element - */ -function renderClipboard(id) { - var path = __webpack_require__(/*! material-design-icons-svg/paths/content-copy.json */ "./node_modules/material-design-icons-svg/paths/content-copy.json"); - return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("button", { class: css.container, title: Object(utilities__WEBPACK_IMPORTED_MODULE_0__["translate"])("clipboard.copy"), "data-clipboard-target": "#" + id + " code" }, - Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, - Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("path", { d: path })))); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/templates/index.ts": -/*!***************************************************!*\ - !*** ./src/assets/javascripts/templates/index.ts ***! - \***************************************************/ -/*! exports provided: renderClipboard, renderSearchResult, renderSource, renderTable */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clipboard */ "./src/assets/javascripts/templates/clipboard/index.tsx"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderClipboard", function() { return _clipboard__WEBPACK_IMPORTED_MODULE_0__["renderClipboard"]; }); - -/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/templates/search/index.tsx"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return _search__WEBPACK_IMPORTED_MODULE_1__["renderSearchResult"]; }); - -/* harmony import */ var _source__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./source */ "./src/assets/javascripts/templates/source/index.tsx"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return _source__WEBPACK_IMPORTED_MODULE_2__["renderSource"]; }); - -/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./table */ "./src/assets/javascripts/templates/table/index.tsx"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return _table__WEBPACK_IMPORTED_MODULE_3__["renderTable"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/templates/search/index.tsx": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/templates/search/index.tsx ***! - \***********************************************************/ -/*! exports provided: renderSearchResult */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSearchResult", function() { return renderSearchResult; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * CSS classes - */ -var css = { - item: "md-search-result__item", - link: "md-search-result__link", - article: "md-search-result__article md-search-result__article--document", - section: "md-search-result__article", - title: "md-search-result__title", - teaser: "md-search-result__teaser" -}; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Render a search result - * - * @param result - Search result - * - * @return Element - */ -function renderSearchResult(_a) { - var article = _a.article, sections = _a.sections; - // create page with icon - var path = __webpack_require__(/*! material-design-icons-svg/paths/file-search-outline.json */ "./node_modules/material-design-icons-svg/paths/file-search-outline.json"); - var children = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__spread"])([article], sections).map(function (document) { - var location = document.location, title = document.title, text = document.text; - return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("a", { href: location, class: css.link, tabIndex: -1 }, - Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("article", { class: "parent" in document ? css.section : css.article }, - !("parent" in document) - ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("div", { class: "md-search-result__icon md-icon" }, - Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24" }, - Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("path", { d: path }))) - : null, - Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("h1", { class: css.title }, title), - text.length - ? Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("p", { class: css.teaser }, Object(utilities__WEBPACK_IMPORTED_MODULE_1__["truncate"])(text, 320)) - : undefined))); - }); - return (Object(utilities__WEBPACK_IMPORTED_MODULE_1__["h"])("li", { class: css.item }, children)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/templates/source/index.tsx": -/*!***********************************************************!*\ - !*** ./src/assets/javascripts/templates/source/index.tsx ***! - \***********************************************************/ -/*! exports provided: renderSource */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderSource", function() { return renderSource; }); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * CSS classes - */ -var css = { - facts: "md-source__facts", - fact: "md-source__fact" -}; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Render source facts - * - * @param facts - Source facts - * - * @return Element - */ -function renderSource(facts) { - var children = facts.map(function (fact) { return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("li", { class: css.fact }, fact)); }); - return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("ul", { class: css.facts }, children)); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/templates/table/index.tsx": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/templates/table/index.tsx ***! - \**********************************************************/ -/*! exports provided: renderTable */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderTable", function() { return renderTable; }); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * CSS classes - */ -var css = { - wrapper: "md-typeset__scrollwrap", - table: "md-typeset__table" -}; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Render a table inside a wrapper to improve scrolling on mobile - * - * @param table - Table element - * - * @return Element - */ -function renderTable(table) { - return (Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.wrapper }, - Object(utilities__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: css.table }, table))); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/utilities/config/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/utilities/config/index.ts ***! - \**********************************************************/ -/*! exports provided: isConfig */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return isConfig; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Ensure that the given value is a valid configuration - * - * We could use `jsonschema` or any other schema validation framework, but that - * would just add more bloat to the bundle, so we'll keep it plain and simple. - * - * @param config - Configuration - * - * @return Test result - */ -function isConfig(config) { - return typeof config === "object" - && typeof config.url === "object" - && typeof config.url.base === "string" - && typeof config.url.worker === "object" - && typeof config.url.worker.search === "string"; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/utilities/index.ts": -/*!***************************************************!*\ - !*** ./src/assets/javascripts/utilities/index.ts ***! - \***************************************************/ -/*! exports provided: isConfig, h, cache, translate, truncate, round, hash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config */ "./src/assets/javascripts/utilities/config/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isConfig", function() { return _config__WEBPACK_IMPORTED_MODULE_0__["isConfig"]; }); - -/* harmony import */ var _jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jsx */ "./src/assets/javascripts/utilities/jsx/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "h", function() { return _jsx__WEBPACK_IMPORTED_MODULE_1__["h"]; }); - -/* harmony import */ var _rxjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rxjs */ "./src/assets/javascripts/utilities/rxjs/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return _rxjs__WEBPACK_IMPORTED_MODULE_2__["cache"]; }); - -/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./string */ "./src/assets/javascripts/utilities/string/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["translate"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["truncate"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "round", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["round"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return _string__WEBPACK_IMPORTED_MODULE_3__["hash"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - -/***/ }), - -/***/ "./src/assets/javascripts/utilities/jsx/index.ts": -/*!*******************************************************!*\ - !*** ./src/assets/javascripts/utilities/jsx/index.ts ***! - \*******************************************************/ -/*! exports provided: h */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return h; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ramda */ "./node_modules/ramda/es/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - -/* ---------------------------------------------------------------------------- - * Helper functions - * ------------------------------------------------------------------------- */ -/** - * Create an element - * - * @param tag - HTML or SVG tag - * - * @return Element - */ -function createElement(tag) { - switch (tag) { - /* SVG elements */ - case "svg": - case "path": - return document.createElementNS("http://www.w3.org/2000/svg", tag); - /* HTML elements */ - default: - return document.createElement(tag); - } -} -/** - * Set an attribute - * - * @param el - Element - * @param name - Attribute name - * @param value - Attribute value - */ -function setAttribute(el, name, value) { - switch (name) { - /* Attributes to be ignored */ - case "xmlns": - break; - /* Attributes of SVG elements */ - case "viewBox": - case "d": - if (typeof value !== "boolean") - el.setAttributeNS(null, name, value); - else if (value) - el.setAttributeNS(null, name, ""); - break; - /* Attributes of HTML elements */ - default: - if (typeof value !== "boolean") - el.setAttribute(name, value); - else if (value) - el.setAttribute(name, ""); - } -} -/** - * Append a child node to an element - * - * @param el - Element - * @param child - Child node(s) - */ -function appendChild(el, child) { - var e_1, _a; - /* Handle primitive types (including raw HTML) */ - if (typeof child === "string" || typeof child === "number") { - el.innerHTML += child.toString(); - /* Handle nodes */ - } - else if (child instanceof Node) { - el.appendChild(child); - /* Handle nested children */ - } - else if (Array.isArray(child)) { - try { - for (var child_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(child), child_1_1 = child_1.next(); !child_1_1.done; child_1_1 = child_1.next()) { - var node = child_1_1.value; - appendChild(el, node); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (child_1_1 && !child_1_1.done && (_a = child_1.return)) _a.call(child_1); - } - finally { if (e_1) throw e_1.error; } - } - } -} -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * JSX factory - * - * @param tag - HTML or SVG tag - * @param attributes - HTML attributes - * @param children - Child elements - * - * @return Element - */ -function h(tag, attributes) { - var e_2, _a, e_3, _b; - var children = []; - for (var _i = 2; _i < arguments.length; _i++) { - children[_i - 2] = arguments[_i]; - } - var el = createElement(tag); - /* Set attributes, if any */ - if (attributes) - try { - for (var _c = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_1__["keys"])(attributes)), _d = _c.next(); !_d.done; _d = _c.next()) { - var attr = _d.value; - setAttribute(el, attr, attributes[attr]); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - try { - /* Append child nodes */ - for (var children_1 = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) { - var child = children_1_1.value; - appendChild(el, child); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (children_1_1 && !children_1_1.done && (_b = children_1.return)) _b.call(children_1); - } - finally { if (e_3) throw e_3.error; } - } - /* Return element */ - return el; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/utilities/rxjs/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/utilities/rxjs/index.ts ***! - \********************************************************/ -/*! exports provided: cache */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cache", function() { return cache; }); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Cache the last value emitted by an observable in session storage - * - * If the key is not found in session storage, the factory is executed and the - * latest value emitted will automatically be persisted to sessions storage. - * Note that the values emitted by the returned observable must be serializable - * as `JSON`, or data will be lost. - * - * @template T - Value type - * - * @param key - Cache key - * @param factory - Observable factory - * - * @return Value observable - */ -function cache(key, factory) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { - var data = sessionStorage.getItem(key); - if (data) { - return Object(rxjs__WEBPACK_IMPORTED_MODULE_0__["of"])(JSON.parse(data)); - /* Retrieve value from observable factory and write to storage */ - } - else { - var value$ = factory(); - value$.subscribe(function (value) { - try { - sessionStorage.setItem(key, JSON.stringify(value)); - } - catch (err) { - /* Uncritical, just swallow */ - } - }); - /* Return value */ - return value$; - } - }); -} - - -/***/ }), - -/***/ "./src/assets/javascripts/utilities/string/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/utilities/string/index.ts ***! - \**********************************************************/ -/*! exports provided: translate, truncate, round, hash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return translate; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "truncate", function() { return truncate; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "round", function() { return round; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hash", function() { return hash; }); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -/* ---------------------------------------------------------------------------- - * Data - * ------------------------------------------------------------------------- */ -/** - * Translations - */ -var lang; -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Translate the given key - * - * @param key - Key to be translated - * @param value - Value to be replaced - * - * @return Translation - */ -function translate(key, value) { - if (typeof lang === "undefined") { - var el = Object(browser__WEBPACK_IMPORTED_MODULE_0__["getElementOrThrow"])("#__lang"); - lang = JSON.parse(el.innerText); - } - if (typeof lang[key] === "undefined") { - throw new ReferenceError("Invalid translation: " + key); - } - return typeof value !== "undefined" - ? lang[key].replace("#", value) - : lang[key]; -} -/** - * Truncate a string after the given number of characters - * - * This is not a very reasonable approach, since the summaries kind of suck. - * It would be better to create something more intelligent, highlighting the - * search occurrences and making a better summary out of it, but this note was - * written three years ago, so who knows if we'll ever fix it. - * - * @param value - Value to be truncated - * @param n - Number of characters - * - * @return Truncated value - */ -function truncate(value, n) { - var i = n; - if (value.length > i) { - while (value[i] !== " " && --i > 0) - ; // tslint:disable-line - return value.substring(0, i) + "..."; - } - return value; -} -/** - * Round a number for display with source facts - * - * This is a reverse engineered version of GitHub's weird rounding algorithm - * for stars, forks and all other numbers. While all numbers below `1,000` are - * returned as-is, bigger numbers are converted to fixed numbers: - * - * - `1,049` => `1k` - * - `1,050` => `1.1k` - * - `1,949` => `1.9k` - * - `1,950` => `2k` - * - * @param value - Original value - * - * @return Rounded value - */ -function round(value) { - if (value > 999) { - var digits = +((value - 950) % 1000 > 99); - return ((value + 1) / 1000).toFixed(digits) + "k"; - } - else { - return value.toString(); - } -} -/** - * Simple hash function - * - * @see https://bit.ly/2wsVjJ4 - Original source - * - * @param value - Value to be hashed - * - * @return Hash as 32bit integer - */ -function hash(value) { - var h = 0; - for (var i = 0, len = value.length; i < len; i++) { - h = ((h << 5) - h) + value.charCodeAt(i); - h |= 0; // Convert to 32bit integer - } - return h; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/workers/index.ts": -/*!*************************************************!*\ - !*** ./src/assets/javascripts/workers/index.ts ***! - \*************************************************/ -/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./search */ "./src/assets/javascripts/workers/search/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["SearchMessageType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchSetupMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchDumpMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchQueryMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _search__WEBPACK_IMPORTED_MODULE_0__["isSearchResultMessage"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - -/***/ }), - -/***/ "./src/assets/javascripts/workers/search/_/index.ts": -/*!**********************************************************!*\ - !*** ./src/assets/javascripts/workers/search/_/index.ts ***! - \**********************************************************/ -/*! exports provided: setupSearchWorker */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return setupSearchWorker; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm5/index.js"); -/* harmony import */ var rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/ajax */ "./node_modules/rxjs/_esm5/ajax/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm5/operators/index.js"); -/* harmony import */ var browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! browser */ "./src/assets/javascripts/browser/index.ts"); -/* harmony import */ var utilities__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! utilities */ "./src/assets/javascripts/utilities/index.ts"); -/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../message */ "./src/assets/javascripts/workers/search/message/index.ts"); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - - - - -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Setup search web worker - * - * This function will create a web worker to setup and query the search index - * which is done using `lunr`. The index can be passed explicitly in order to - * enable hacks like _localsearch_ via search index embedding as JSON. If no - * index is given, this function will load it from the default location. - * - * @param url - Worker url - * @param options - Options - * - * @return Worker handler - */ -function setupSearchWorker(url, _a) { - var base = _a.base, index = _a.index, location$ = _a.location$; - var worker = new Worker(url); - /* Ensure stable base URL */ - var origin$ = location$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["take"])(1), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { - var href = _a.href; - return new URL(base, href) - .toString() - .replace(/\/$/, ""); - })); - /* Create communication channels and resolve relative links */ - var tx$ = new rxjs__WEBPACK_IMPORTED_MODULE_1__["Subject"](); - var rx$ = Object(browser__WEBPACK_IMPORTED_MODULE_4__["watchWorker"])(worker, { tx$: tx$ }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["withLatestFrom"])(origin$), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { - var e_1, _b, e_2, _c; - var _d = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__read"])(_a, 2), message = _d[0], origin = _d[1]; - if (Object(_message__WEBPACK_IMPORTED_MODULE_6__["isSearchResultMessage"])(message)) { - try { - for (var _e = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(message.data), _f = _e.next(); !_f.done; _f = _e.next()) { - var _g = _f.value, article = _g.article, sections = _g.sections; - article.location = origin + "/" + article.location; - try { - for (var sections_1 = (e_2 = void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__values"])(sections)), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) { - var section = sections_1_1.value; - section.location = origin + "/" + section.location; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (sections_1_1 && !sections_1_1.done && (_c = sections_1.return)) _c.call(sections_1); - } - finally { if (e_2) throw e_2.error; } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_1) throw e_1.error; } - } - } - return message; - }), Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["shareReplay"])(1)); - /* Fetch index if it wasn't passed explicitly */ - var index$ = typeof index !== "undefined" - ? Object(rxjs__WEBPACK_IMPORTED_MODULE_1__["from"])(index) - : origin$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["switchMap"])(function (origin) { return Object(rxjs_ajax__WEBPACK_IMPORTED_MODULE_2__["ajax"])({ - url: origin + "/search/search_index.json", - responseType: "json", - withCredentials: true - }) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["pluck"])("response")); })); - function isConfigDefaultLang(config) { - return config.lang.length === 1 && config.lang[0] === "en"; - } - function isConfigDefaultSeparator(config) { - return config.separator === "[\s\-]+"; - } - index$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) { - var config = _a.config, rest = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__rest"])(_a, ["config"]); - return (Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__assign"])({ config: { - lang: isConfigDefaultLang(config) - ? [Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.lang")] - : config.lang, - separator: isConfigDefaultSeparator(config) - ? Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.separator") - : config.separator - }, pipeline: Object(utilities__WEBPACK_IMPORTED_MODULE_5__["translate"])("search.config.pipeline") - .split(/\s*,\s*/) - .filter(Boolean) }, rest)); - })) - // .subscribe(console.log) - // /* Send index to worker */ - // index$ - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_3__["map"])(function (data) { return ({ - type: _message__WEBPACK_IMPORTED_MODULE_6__["SearchMessageType"].SETUP, - data: data - }); })) - .subscribe(tx$.next.bind(tx$)); - /* Return worker handler */ - return { tx$: tx$, rx$: rx$ }; -} - - -/***/ }), - -/***/ "./src/assets/javascripts/workers/search/index.ts": -/*!********************************************************!*\ - !*** ./src/assets/javascripts/workers/search/index.ts ***! - \********************************************************/ -/*! exports provided: setupSearchWorker, SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_ */ "./src/assets/javascripts/workers/search/_/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setupSearchWorker", function() { return ___WEBPACK_IMPORTED_MODULE_0__["setupSearchWorker"]; }); - -/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./message */ "./src/assets/javascripts/workers/search/message/index.ts"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["SearchMessageType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchSetupMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchDumpMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchQueryMessage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return _message__WEBPACK_IMPORTED_MODULE_1__["isSearchResultMessage"]; }); - -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - - - - -/***/ }), - -/***/ "./src/assets/javascripts/workers/search/message/index.ts": -/*!****************************************************************!*\ - !*** ./src/assets/javascripts/workers/search/message/index.ts ***! - \****************************************************************/ -/*! exports provided: SearchMessageType, isSearchSetupMessage, isSearchDumpMessage, isSearchQueryMessage, isSearchResultMessage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SearchMessageType", function() { return SearchMessageType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchSetupMessage", function() { return isSearchSetupMessage; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchDumpMessage", function() { return isSearchDumpMessage; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchQueryMessage", function() { return isSearchQueryMessage; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSearchResultMessage", function() { return isSearchResultMessage; }); -/* - * Copyright (c) 2016-2020 Martin Donath - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/* ---------------------------------------------------------------------------- - * Types - * ------------------------------------------------------------------------- */ -/** - * Search message type - */ -var SearchMessageType; -(function (SearchMessageType) { - SearchMessageType[SearchMessageType["SETUP"] = 0] = "SETUP"; - SearchMessageType[SearchMessageType["DUMP"] = 1] = "DUMP"; - SearchMessageType[SearchMessageType["QUERY"] = 2] = "QUERY"; - SearchMessageType[SearchMessageType["RESULT"] = 3] = "RESULT"; /* Search results */ -})(SearchMessageType || (SearchMessageType = {})); -/* ---------------------------------------------------------------------------- - * Functions - * ------------------------------------------------------------------------- */ -/** - * Type guard for search setup messages - * - * @param message - Search worker message - * - * @return Test result - */ -function isSearchSetupMessage(message) { - return message.type === SearchMessageType.SETUP; -} -/** - * Type guard for search dump messages - * - * @param message - Search worker message - * - * @return Test result - */ -function isSearchDumpMessage(message) { - return message.type === SearchMessageType.DUMP; -} -/** - * Type guard for search query messages - * - * @param message - Search worker message - * - * @return Test result - */ -function isSearchQueryMessage(message) { - return message.type === SearchMessageType.QUERY; -} -/** - * Type guard for search result messages - * - * @param message - Search worker message - * - * @return Test result - */ -function isSearchResultMessage(message) { - return message.type === SearchMessageType.RESULT; -} - - -/***/ }), - -/***/ "./src/assets/stylesheets/main.scss": -/*!******************************************!*\ - !*** ./src/assets/stylesheets/main.scss ***! - \******************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css"); - -/***/ }), - -/***/ "./src/assets/stylesheets/palette.scss": -/*!*********************************************!*\ - !*** ./src/assets/stylesheets/palette.scss ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css"); - -/***/ }) - -/******/ }))); -//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/material/assets/javascripts/bundle.js.map b/material/assets/javascripts/bundle.js.map deleted file mode 100644 index 8febd08ea..000000000 --- a/material/assets/javascripts/bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/assets/javascripts/browser/document/_/index.ts","webpack:///./src/assets/javascripts/browser/document/index.ts","webpack:///./src/assets/javascripts/browser/document/switch/index.ts","webpack:///./src/assets/javascripts/browser/element/_/index.ts","webpack:///./src/assets/javascripts/browser/element/focus/index.ts","webpack:///./src/assets/javascripts/browser/element/index.ts","webpack:///./src/assets/javascripts/browser/element/offset/index.ts","webpack:///./src/assets/javascripts/browser/element/select/index.ts","webpack:///./src/assets/javascripts/browser/index.ts","webpack:///./src/assets/javascripts/browser/keyboard/index.ts","webpack:///./src/assets/javascripts/browser/location/_/index.ts","webpack:///./src/assets/javascripts/browser/location/hash/index.ts","webpack:///./src/assets/javascripts/browser/location/index.ts","webpack:///./src/assets/javascripts/browser/media/index.ts","webpack:///./src/assets/javascripts/browser/toggle/index.ts","webpack:///./src/assets/javascripts/browser/viewport/_/index.ts","webpack:///./src/assets/javascripts/browser/viewport/index.ts","webpack:///./src/assets/javascripts/browser/viewport/offset/index.ts","webpack:///./src/assets/javascripts/browser/viewport/size/index.ts","webpack:///./src/assets/javascripts/browser/worker/index.ts","webpack:///./src/assets/javascripts/components/_/index.ts","webpack:///./src/assets/javascripts/components/header/_/index.ts","webpack:///./src/assets/javascripts/components/header/index.ts","webpack:///./src/assets/javascripts/components/header/react/index.ts","webpack:///./src/assets/javascripts/components/header/set/index.ts","webpack:///./src/assets/javascripts/components/hero/_/index.ts","webpack:///./src/assets/javascripts/components/hero/index.ts","webpack:///./src/assets/javascripts/components/hero/react/index.ts","webpack:///./src/assets/javascripts/components/hero/set/index.ts","webpack:///./src/assets/javascripts/components/index.ts","webpack:///./src/assets/javascripts/components/main/_/index.ts","webpack:///./src/assets/javascripts/components/main/index.ts","webpack:///./src/assets/javascripts/components/main/react/index.ts","webpack:///./src/assets/javascripts/components/main/set/index.ts","webpack:///./src/assets/javascripts/components/navigation/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/_/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/react/index.ts","webpack:///./src/assets/javascripts/components/navigation/layer/set/index.ts","webpack:///./src/assets/javascripts/components/search/_/index.ts","webpack:///./src/assets/javascripts/components/search/index.ts","webpack:///./src/assets/javascripts/components/search/query/_/index.ts","webpack:///./src/assets/javascripts/components/search/query/index.ts","webpack:///./src/assets/javascripts/components/search/query/react/index.ts","webpack:///./src/assets/javascripts/components/search/reset/_/index.ts","webpack:///./src/assets/javascripts/components/search/reset/index.ts","webpack:///./src/assets/javascripts/components/search/reset/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/_/index.ts","webpack:///./src/assets/javascripts/components/search/result/index.ts","webpack:///./src/assets/javascripts/components/search/result/react/index.ts","webpack:///./src/assets/javascripts/components/search/result/set/index.ts","webpack:///./src/assets/javascripts/components/shared/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/_/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/react/index.ts","webpack:///./src/assets/javascripts/components/shared/sidebar/set/index.ts","webpack:///./src/assets/javascripts/components/tabs/_/index.ts","webpack:///./src/assets/javascripts/components/tabs/index.ts","webpack:///./src/assets/javascripts/components/tabs/react/index.ts","webpack:///./src/assets/javascripts/components/tabs/set/index.ts","webpack:///./src/assets/javascripts/components/toc/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/_/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/react/index.ts","webpack:///./src/assets/javascripts/components/toc/anchor/set/index.ts","webpack:///./src/assets/javascripts/components/toc/index.ts","webpack:///./src/assets/javascripts/index.ts","webpack:///./src/assets/javascripts/integrations/clipboard/index.ts","webpack:///./src/assets/javascripts/integrations/dialog/index.ts","webpack:///./src/assets/javascripts/integrations/instant/index.ts","webpack:///./src/assets/javascripts/integrations/keyboard/index.ts","webpack:///./src/assets/javascripts/patches/details/index.ts","webpack:///./src/assets/javascripts/patches/index.ts","webpack:///./src/assets/javascripts/patches/script/index.ts","webpack:///./src/assets/javascripts/patches/scrollfix/index.ts","webpack:///./src/assets/javascripts/patches/source/github/index.ts","webpack:///./src/assets/javascripts/patches/source/gitlab/index.ts","webpack:///./src/assets/javascripts/patches/source/index.ts","webpack:///./src/assets/javascripts/patches/table/index.ts","webpack:///./src/assets/javascripts/templates/clipboard/index.tsx","webpack:///./src/assets/javascripts/templates/index.ts","webpack:///./src/assets/javascripts/templates/search/index.tsx","webpack:///./src/assets/javascripts/templates/source/index.tsx","webpack:///./src/assets/javascripts/templates/table/index.tsx","webpack:///./src/assets/javascripts/utilities/config/index.ts","webpack:///./src/assets/javascripts/utilities/index.ts","webpack:///./src/assets/javascripts/utilities/jsx/index.ts","webpack:///./src/assets/javascripts/utilities/rxjs/index.ts","webpack:///./src/assets/javascripts/utilities/string/index.ts","webpack:///./src/assets/javascripts/workers/index.ts","webpack:///./src/assets/javascripts/workers/search/_/index.ts","webpack:///./src/assets/javascripts/workers/search/index.ts","webpack:///./src/assets/javascripts/workers/search/message/index.ts","webpack:///./src/assets/stylesheets/main.scss","webpack:///./src/assets/stylesheets/palette.scss"],"names":[],"mappings":"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","file":"assets/javascripts/bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"assets/javascripts/bundle\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"./src/assets/javascripts/index.ts\",\"assets/javascripts/vendor\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay } from \"rxjs/operators\"\n\nimport { watchDocumentSwitch } from \"../switch\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$?: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * If the location observable is passed, instant loading will be enabled which\n * means that new values will be emitted every time the location changes.\n *\n * @return Document observable\n */\nexport function watchDocument(\n { location$ }: WatchOptions = {}\n): Observable {\n return merge(\n fromEvent(document, \"DOMContentLoaded\")\n .pipe(\n mapTo(document)\n ),\n typeof location$ !== \"undefined\"\n ? watchDocumentSwitch({ location$ })\n : NEVER\n )\n .pipe(\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./switch\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n catchError,\n distinctUntilKeyChanged,\n pluck,\n share,\n skip,\n switchMap\n} from \"rxjs/operators\"\n\nimport { setLocation } from \"../../location\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document switch\n *\n * This function returns an observables that fetches a document if the provided\n * location observable emits a new value (i.e. URL). If the emitted URL points\n * to the same page, the request is effectively ignored (i.e. when only the\n * fragment identifier changes).\n *\n * In case the request fails, the location change is dispatched regularly.\n *\n * @param options - Options\n *\n * @return Document observable\n */\nexport function watchDocumentSwitch(\n { location$ }: WatchOptions\n): Observable {\n return location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n skip(1),\n\n /* Fetch document */\n switchMap(url => ajax({\n url: url.href,\n responseType: \"document\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\"),\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element or nothing\n */\nexport function getElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Element\n */\nexport function getElementOrThrow(\n selector: string, node: ParentNode = document\n): T {\n const el = getElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n return el\n}\n\n/**\n * Retrieve the currently active element\n *\n * @return Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : undefined\n}\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @return Elements\n */\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { mapTo, shareReplay, startWith } from \"rxjs/operators\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element focus\n *\n * @param el - Element\n * @param value - Whether the element should be focused\n */\nexport function setElementFocus(\nel: HTMLElement, value: boolean = true\n): void {\n if (value)\n el.focus()\n else\n el.blur()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * @param el - Element\n *\n * @return Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n const focus$ = fromEvent(el, \"focus\")\n const blur$ = fromEvent(el, \"blur\")\n\n /* Map events to boolean state */\n return merge(\n focus$.pipe(mapTo(true)),\n blur$.pipe(mapTo(false))\n )\n .pipe(\n startWith(el === getActiveElement()),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./focus\"\nexport * from \"./offset\"\nexport * from \"./select\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @return Element offset\n */\nexport function getElementOffset(el: HTMLElement): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @return Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el)),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set element text selection\n *\n * @param el - Element\n */\nexport function setElementSelection(\n el: HTMLElement\n): void {\n if (el instanceof HTMLInputElement)\n el.select()\n else\n throw new Error(\"Not implemented\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./document\"\nexport * from \"./element\"\nexport * from \"./keyboard\"\nexport * from \"./location\"\nexport * from \"./media\"\nexport * from \"./toggle\"\nexport * from \"./viewport\"\nexport * from \"./worker\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Key\n */\nexport interface Key {\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n *\n * @return Test result\n */\nexport function isSusceptibleToKeyboard(el: HTMLElement): boolean {\n switch (el.tagName) {\n\n /* Form elements */\n case \"INPUT\":\n case \"SELECT\":\n case \"TEXTAREA\":\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @return Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n })),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { BehaviorSubject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function will return a `URL` object (and not `Location`) in order to\n * normalize typings across the application. Furthermore, locations need to be\n * tracked without setting them and `Location` is a singleton which represents\n * the current location.\n *\n * @return URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Check whether a URL is an internal link or a file (except `.html`)\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationInternal(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.host === ref.host\n && /^(?:\\/[\\w-]+)*(?:\\/?|\\.html)$/i.test(url.pathname)\n}\n\n/**\n * Check whether a URL is an anchor link on the current page\n *\n * @param url - URL or HTML anchor element\n * @param ref - Reference URL\n *\n * @return Test result\n */\nexport function isLocationAnchor(\n url: URL | HTMLAnchorElement,\n ref: URL | Location = location\n): boolean {\n return url.pathname === ref.pathname\n && url.hash.length > 0\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @return Location subject\n */\nexport function watchLocation(): BehaviorSubject {\n return new BehaviorSubject(getLocation())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { filter, map, share, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @return Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. However, when a new fragment identifier is set,\n * we want the browser to target the respective element at all times, which is\n * why we use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = document.createElement(\"a\")\n el.href = hash\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @return Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./hash\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEventPattern } from \"rxjs\"\nimport { shareReplay, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * @param query - Media query\n *\n * @return Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next =>\n media.addListener(() => next(media.matches))\n )\n .pipe(\n startWith(media.matches),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElementOrThrow(`[data-md-toggle=drawer]`),\n search: getElementOrThrow(`[data-md-toggle=search]`)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @return Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n shareReplay\n} from \"rxjs/operators\"\n\nimport { Header } from \"components\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch at options\n */\ninterface WatchAtOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @return Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @return Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { header$, viewport$ }: WatchAtOptions\n): Observable {\n const offset$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map((): ViewportOffset => ({\n x: el.offsetLeft,\n y: el.offsetTop\n }))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n })),\n shareReplay(1)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./offset\"\nexport * from \"./size\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @return Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, pageXOffset),\n y: Math.max(0, pageYOffset)\n }\n}\n\n/**\n * Set viewport offset\n *\n * @param offset - Viewport offset\n */\nexport function setViewportOffset(\n { x, y }: Partial\n): void {\n window.scrollTo(x || 0, y || 0)\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @return Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { map, startWith } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @return Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @return Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\")\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEventPattern } from \"rxjs\"\nimport {\n pluck,\n share,\n switchMapTo,\n tap,\n throttle\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that will send all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @return Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEventPattern(next =>\n worker.addEventListener(\"message\", next)\n )\n .pipe(\n pluck(\"data\")\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMapTo(rx$),\n share()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable, of } from \"rxjs\"\nimport {\n distinctUntilChanged,\n map,\n scan,\n shareReplay,\n switchMap\n} from \"rxjs/operators\"\n\nimport { getElement } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component\n */\nexport type Component =\n | \"container\" /* Container */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"hero\" /* Hero */\n | \"main\" /* Main area */\n | \"navigation\" /* Navigation */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-reset\" /* Search reset */\n | \"search-result\" /* Search results */\n | \"skip\" /* Skip link */\n | \"tabs\" /* Tabs */\n | \"toc\" /* Table of contents */\n\n/**\n * Component map\n */\nexport type ComponentMap = {\n [P in Component]?: HTMLElement\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Component map observable\n */\nlet components$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup bindings to components with given names\n *\n * This function will maintain bindings to the elements identified by the given\n * names in-between document switches and update the elements in-place.\n *\n * @param names - Component names\n * @param options - Options\n */\nexport function setupComponents(\n names: Component[], { document$ }: WatchOptions\n): void {\n components$ = document$\n .pipe(\n\n /* Build component map */\n map(document => names.reduce((components, name) => {\n const el = getElement(`[data-md-component=${name}]`, document)\n return {\n ...components,\n ...typeof el !== \"undefined\" ? { [name]: el } : {}\n }\n }, {})),\n\n /* Re-compute component map on document switch */\n scan((prev, next) => {\n for (const name of names) {\n switch (name) {\n\n /* Top-level components: update */\n case \"header-title\":\n case \"container\":\n case \"skip\":\n if (name in prev && typeof prev[name] !== \"undefined\") {\n prev[name]!.replaceWith(next[name]!)\n prev[name] = next[name]\n }\n break\n\n /* All other components: rebind */\n default:\n if (typeof next[name] !== \"undefined\")\n prev[name] = getElement(`[data-md-component=${name}]`)\n else\n delete prev[name]\n }\n }\n return prev\n }),\n\n /* Convert to hot observable */\n shareReplay(1)\n )\n}\n\n/**\n * Retrieve a component\n *\n * The returned observable will only re-emit if the element changed, i.e. if\n * it was replaced from a document which was switched to.\n *\n * @template T - Element type\n *\n * @param name - Component name\n *\n * @return Element observable\n */\nexport function useComponent(\n name: \"search-query\"\n): Observable\nexport function useComponent(\n name: Component\n): Observable\nexport function useComponent(\n name: Component\n): Observable {\n return components$\n .pipe(\n switchMap(components => (\n typeof components[name] !== \"undefined\"\n ? of(components[name] as T)\n : EMPTY\n )),\n distinctUntilChanged()\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n getElement,\n watchViewportAt\n} from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport {\n applyHeaderType,\n watchHeader\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header type\n */\nexport type HeaderType =\n | \"site\" /* Header shows site title */\n | \"page\" /* Header shows page title */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n type: HeaderType /* Header type */\n sticky: boolean /* Header stickyness */\n height: number /* Header visible height */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount header from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHeader(\n { viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const header$ = watchHeader(el, { viewport$ })\n\n /* Compute whether the header should switch to page header */\n const type$ = useComponent(\"main\")\n .pipe(\n map(main => getElement(\"h1, h2, h3, h4, h5, h6\", main)!),\n filter(hx => typeof hx !== \"undefined\"),\n withLatestFrom(useComponent(\"header-title\")),\n switchMap(([hx, title]) => watchViewportAt(hx, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => {\n return y >= hx.offsetHeight ? \"page\" : \"site\"\n }),\n distinctUntilChanged(),\n applyHeaderType(title)\n )\n ),\n startWith(\"site\")\n )\n\n /* Combine into single observable */\n return combineLatest([header$, type$])\n .pipe(\n map(([header, type]): Header => ({ type, ...header })),\n shareReplay(1)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n of,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n finalize,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header, HeaderType } from \"../_\"\nimport {\n resetHeaderTitleActive,\n setHeaderTitleActive\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * The header is wrapped in an observable to pave the way for auto-hiding or\n * other dynamic behaviors that may be implemented later on.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @return Header observable\n */\nexport function watchHeader(\n el: HTMLElement, { viewport$ }: WatchOptions\n): Observable> {\n return viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n switchMap(() => {\n const styles = getComputedStyle(el)\n const sticky = [\n \"sticky\", /* Modern browsers */\n \"-webkit-sticky\" /* Old Safari */\n ].includes(styles.position)\n return of({\n sticky,\n height: sticky ? el.offsetHeight : 0\n })\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header title type\n *\n * @param el - Header title element\n *\n * @return Operator function\n */\nexport function applyHeaderType(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(type => {\n setHeaderTitleActive(el, type === \"page\")\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderTitleActive(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header title active\n *\n * @param el - Header title element\n * @param value - Whether the title is shown\n */\nexport function setHeaderTitleActive(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"active\" : \"\")\n}\n\n/**\n * Reset header title active\n *\n * @param el - Header title element\n */\nexport function resetHeaderTitleActive(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyHero } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Hero\n */\nexport interface Hero {\n hidden: boolean /* Whether the hero is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount hero from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountHero(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 20 })),\n distinctUntilChanged(),\n applyHero(el)\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Hero } from \"../_\"\nimport {\n resetHeroHidden,\n setHeroHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply hero\n *\n * @param el - Hero element\n *\n * @return Operator function\n */\nexport function applyHero(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setHeroHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeroHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set hero hidden\n *\n * @param el - Hero element\n * @param value - Whether the element is hidden\n */\nexport function setHeroHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset hero hidden\n *\n * @param el - Hero element\n */\nexport function resetHeroHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./header\"\nexport * from \"./hero\"\nexport * from \"./main\"\nexport * from \"./navigation\"\nexport * from \"./search\"\nexport * from \"./shared\"\nexport * from \"./tabs\"\nexport * from \"./toc\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, Subject, pipe } from \"rxjs\"\nimport { distinctUntilKeyChanged, switchMap, tap } from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { useComponent } from \"../../_\"\nimport { Header } from \"../../header\"\nimport {\n applyHeaderShadow,\n watchMain\n} from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Scrolled past top offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount main area from source observable\n *\n * The header must be connected to the main area observable outside of the\n * operator function, as the header will persist in-between document switches\n * while the main area is replaced. However, the header observable must be\n * passed to this function, so we connect both via a long-living subject.\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountMain(\n { header$, viewport$ }: MountOptions\n): OperatorFunction {\n const main$ = new Subject
    ()\n\n /* Connect to main area observable via long-living subject */\n useComponent(\"header\")\n .pipe(\n switchMap(header => main$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n applyHeaderShadow(header)\n )\n )\n )\n .subscribe()\n\n /* Return operator */\n return pipe(\n switchMap(el => watchMain(el, { header$, viewport$ })),\n tap(main => main$.next(main))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n pluck,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../_\"\nimport {\n resetHeaderShadow,\n setHeaderShadow\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @return Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { header$, viewport$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n pluck(\"height\")\n )\n\n /* Compute the main area's visible height */\n const height$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y }, size: { height } }]) => {\n const top = el.offsetTop\n const bottom = el.offsetHeight + top\n return height\n - Math.max(0, top - y, adjust)\n - Math.max(0, height + y - bottom)\n }),\n map(height => Math.max(0, height)),\n distinctUntilChanged()\n )\n\n /* Compute whether the viewport offset is past the main area's top */\n const active$ = combineLatest([adjust$, viewport$])\n .pipe(\n map(([adjust, { offset: { y } }]) => y >= el.offsetTop - adjust),\n distinctUntilChanged()\n )\n\n /* Combine into a single observable */\n return combineLatest([adjust$, height$, active$])\n .pipe(\n map(([adjust, height, active]) => ({\n offset: el.offsetTop - adjust,\n height,\n active\n }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply header shadow\n *\n * @param el - Header element\n *\n * @return Operator function\n */\nexport function applyHeaderShadow(\n el: HTMLElement\n): MonoTypeOperatorFunction
    {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ active }) => {\n setHeaderShadow(el, active)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetHeaderShadow(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set header shadow\n *\n * @param el - Header element\n * @param value - Whether the shadow is shown\n */\nexport function setHeaderShadow(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"shadow\" : \"\")\n}\n\n/**\n * Reset header shadow\n *\n * @param el - Header element\n */\nexport function resetHeaderShadow(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n NavigationLayer,\n applyNavigationLayer,\n watchNavigationLayer\n} from \"../layer\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation for [screen -]\n */\ninterface NavigationBelowScreen {\n layer: NavigationLayer /* Active layer */\n}\n\n/**\n * Navigation for [screen +]\n */\ninterface NavigationAboveScreen {\n sidebar: Sidebar /* Sidebar */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Navigation\n */\nexport type Navigation =\n | NavigationBelowScreen\n | NavigationAboveScreen\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Screen media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount navigation from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountNavigation(\n { header$, main$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount navigation in sidebar */\n if (screen) {\n return watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ }),\n map(sidebar => ({ sidebar }))\n )\n\n /* [screen -]: Mount navigation in drawer */\n } else {\n const els = getElements(\"nav\", el)\n return watchNavigationLayer(els)\n .pipe(\n applyNavigationLayer(els),\n map(layer => ({ layer }))\n )\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./layer\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation layer\n */\nexport interface NavigationLayer {\n prev?: HTMLElement /* Layer (previous) */\n next: HTMLElement /* Layer (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { findLast } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n fromEvent,\n merge,\n pipe\n} from \"rxjs\"\nimport {\n delay,\n finalize,\n map,\n observeOn,\n scan,\n tap\n} from \"rxjs/operators\"\n\nimport { getElement, getElementOrThrow } from \"browser\"\n\nimport { NavigationLayer } from \"../_\"\nimport {\n resetOverflowScrolling,\n setOverflowScrolling\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation layer\n *\n * On iOS we want to add `-webkit-overflow-scrolling: touch` for the menus\n * contained in the drawer, but as the navigational layers are nested, we can\n * only add it to the topmost layer or extremely weird cropping will occur.\n * This implementation keeps track of the previous and current layer.\n *\n * @param els - Navigation elements\n *\n * @return Navigation layer observable\n */\nexport function watchNavigationLayer(\n els: HTMLElement[]\n): Observable {\n const table = new Map()\n for (const el of els) {\n const label = getElement(\"label\", el)\n if (typeof label !== \"undefined\") {\n const input = getElementOrThrow(`#${label.htmlFor}`)\n table.set(input, el)\n }\n }\n\n /* Determine topmost layer */\n const layer$ = merge(...[...table.keys()].map(input => (\n fromEvent(input, \"change\")\n )))\n .pipe(\n map(() => getElementOrThrow(\".md-nav__list\", table.get(\n findLast(({ checked }) => checked, [...table.keys()])!\n )))\n )\n\n /* Return previous and next layer */\n return layer$\n .pipe(\n map(next => ({ next })),\n scan(({ next: prev }, { next }) => ({ prev, next }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply navigation layer\n *\n * @param els - Navigation elements\n *\n * @return Operator function\n */\nexport function applyNavigationLayer(\n els: HTMLElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev }) => {\n if (prev)\n resetOverflowScrolling(prev)\n }),\n\n /* Wait until transition has finished */\n delay(250),\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ next }) => {\n setOverflowScrolling(next)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els)\n resetOverflowScrolling(\n getElementOrThrow(\".md-nav__list\", el)\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Global augmentations\n */\ndeclare global {\n interface CSSStyleDeclaration {\n webkitOverflowScrolling: \"touch\" | \"\"\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function setOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"touch\"\n}\n\n/**\n * Reset overflow scrolling\n *\n * @param el - Scrollable element\n */\nexport function resetOverflowScrolling(\n el: HTMLElement\n): void {\n el.style.webkitOverflowScrolling = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, combineLatest, pipe } from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { SearchResult } from \"integrations/search\"\n\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport interface Search {\n query: SearchQuery /* Search query */\n result: SearchResult[] /* Search result list */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n reset$: Observable /* Search reset observable */\n result$: Observable /* Search result observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearch(\n { query$, reset$, result$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(() => combineLatest([query$, result$, reset$])\n .pipe(\n map(([query, result]) => ({ query, result }))\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./query\"\nexport * from \"./reset\"\nexport * from \"./result\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, setToggle } from \"browser\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchQueryMessage\n} from \"workers\"\n\nimport { watchSearchQuery } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search query from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchQuery(\n { tx$ }: WorkerHandler, options: MountOptions = {}\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const query$ = watchSearchQuery(el, options)\n\n /* Subscribe worker to search query */\n query$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Toggle search on focus */\n query$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus)\n setToggle(\"search\", focus)\n })\n\n /* Return search query */\n return query$\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, combineLatest, fromEvent, merge } from \"rxjs\"\nimport {\n delay,\n distinctUntilChanged,\n map,\n startWith\n} from \"rxjs/operators\"\n\nimport { watchElementFocus } from \"browser\"\n\nimport { SearchQuery } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n transform?(value: string): string /* Transformation function */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * Rogue control characters are filtered before handing the query to the\n * search index, as `lunr` will throw otherwise.\n *\n * @param value - Query value\n *\n * @return Transformed query value\n */\nfunction defaultTransform(value: string): string {\n return value\n .replace(/(?:^|\\s+)[*+-:^~]+(?=\\s+|$)/g, \"\")\n .trim()\n .replace(/\\s+|\\b$/g, \"* \")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param options - Options\n *\n * @return Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { transform }: WatchOptions = {}\n): Observable {\n const fn = transform || defaultTransform\n\n /* Intercept keyboard events */\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1))\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(fn(el.value)),\n distinctUntilChanged()\n )\n\n /* Intercept focus events */\n const focus$ = watchElementFocus(el)\n\n /* Combine into a single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus }))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { OperatorFunction, pipe } from \"rxjs\"\nimport {\n mapTo,\n startWith,\n switchMap,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport { setElementFocus } from \"browser\"\n\nimport { useComponent } from \"../../../_\"\nimport { watchSearchReset } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search reset from source observable\n *\n * @return Operator function\n */\nexport function mountSearchReset(): OperatorFunction {\n return pipe(\n switchMap(el => watchSearchReset(el)\n .pipe(\n switchMapTo(useComponent(\"search-query\")),\n tap(setElementFocus),\n mapTo(undefined)\n )\n ),\n startWith(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, fromEvent } from \"rxjs\"\nimport { mapTo } from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search reset\n *\n * @param el - Search reset element\n *\n * @return Search reset observable\n */\nexport function watchSearchReset(\n el: HTMLElement\n): Observable {\n return fromEvent(el, \"click\")\n .pipe(\n mapTo(undefined)\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, OperatorFunction, pipe } from \"rxjs\"\nimport {\n distinctUntilChanged,\n filter,\n map,\n pluck,\n switchMap\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchElementOffset } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport {\n SearchMessage,\n isSearchResultMessage\n} from \"workers\"\n\nimport { SearchQuery } from \"../../query\"\nimport { applySearchResult } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result from source observable\n *\n * @param handler - Worker handler\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountSearchResult(\n { rx$ }: WorkerHandler, { query$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => {\n const container = el.parentElement!\n\n /* Compute whether there are more search results to fetch */\n const fetch$ = watchElementOffset(container)\n .pipe(\n map(({ y }) => {\n return y >= container.scrollHeight - container.offsetHeight - 16\n }),\n distinctUntilChanged(),\n filter(identity)\n )\n\n /* Apply search results */\n return rx$\n .pipe(\n filter(isSearchResultMessage),\n pluck(\"data\"),\n applySearchResult(el, { query$, fetch$ })\n )\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport {\n finalize,\n map,\n mapTo,\n observeOn,\n scan,\n switchMap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { getElementOrThrow } from \"browser\"\nimport { SearchResult } from \"integrations/search\"\nimport { renderSearchResult } from \"templates\"\n\nimport { SearchQuery } from \"../../query\"\nimport {\n addToSearchResultList,\n resetSearchResultList,\n resetSearchResultMeta,\n setSearchResultMeta\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n query$: Observable /* Search query observable */\n fetch$: Observable /* Result fetch observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply search results\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container. When the scroll offset\n * reaches the bottom of the element, more results are fetched and rendered.\n *\n * @param el - Search result element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySearchResult(\n el: HTMLElement, { query$, fetch$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n const list = getElementOrThrow(\".md-search-result__list\", el)\n const meta = getElementOrThrow(\".md-search-result__meta\", el)\n return pipe(\n\n /* Apply search result metadata */\n withLatestFrom(query$),\n map(([result, query]) => {\n if (query.value) {\n setSearchResultMeta(meta, result.length)\n } else {\n resetSearchResultMeta(meta)\n }\n return result\n }),\n\n /* Apply search result list */\n switchMap(result => fetch$\n .pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n scan(index => {\n const container = el.parentElement!\n while (index < result.length) {\n addToSearchResultList(list, renderSearchResult(result[index++]))\n if (container.scrollHeight - container.offsetHeight > 16)\n break\n }\n return index\n }, 0),\n\n /* Re-map to search result */\n mapTo(result),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSearchResultList(list)\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set number of search results\n *\n * @param el - Search result metadata element\n * @param value - Number of results\n */\nexport function setSearchResultMeta(\n el: HTMLElement, value: number\n): void {\n switch (value) {\n\n /* No results */\n case 0:\n el.textContent = translate(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n el.textContent = translate(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n el.textContent = translate(\"search.result.other\", value.toString())\n }\n}\n\n/**\n * Reset number of search results\n *\n * @param el - Search result metadata element\n */\nexport function resetSearchResultMeta(\n el: HTMLElement\n): void {\n el.textContent = translate(\"search.result.placeholder\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Add an element to the search result list\n *\n * @param el - Search result list element\n * @param child - Search result element\n */\nexport function addToSearchResultList(\n el: HTMLElement, child: HTMLElement\n): void {\n el.appendChild(child)\n}\n\n/**\n * Reset search result list\n *\n * @param el - Search result list element\n */\nexport function resetSearchResultList(\n el: HTMLElement\n): void {\n el.innerHTML = \"\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./sidebar\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n lock: boolean /* Sidebar lock */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { Viewport } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { Main } from \"../../../main\"\nimport { Sidebar } from \"../_\"\nimport {\n resetSidebarHeight,\n resetSidebarLock,\n resetSidebarOffset,\n setSidebarHeight,\n setSidebarLock,\n setSidebarOffset\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Apply options\n */\ninterface ApplyOptions {\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { main$, viewport$ }: WatchOptions\n): Observable {\n\n /* Adjust for internal main area offset */\n const adjust$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n map(() => parseFloat(\n getComputedStyle(el.parentElement!)\n .getPropertyValue(\"padding-top\")\n )),\n distinctUntilChanged()\n )\n\n /* Compute the sidebar's available height */\n const height$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset, height }]) => (\n height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n )),\n distinctUntilChanged()\n )\n\n /* Compute whether the sidebar should be locked */\n const lock$ = viewport$\n .pipe(\n withLatestFrom(adjust$, main$),\n map(([{ offset: { y } }, adjust, { offset }]) => (\n y >= offset + adjust\n )),\n distinctUntilChanged()\n )\n\n /* Combine into single observable */\n return combineLatest([height$, lock$])\n .pipe(\n map(([height, lock]) => ({ height, lock }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply sidebar\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @return Operator function\n */\nexport function applySidebar(\n el: HTMLElement, { header$ }: ApplyOptions\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n withLatestFrom(header$),\n tap(([{ height, lock }, { height: offset }]) => {\n setSidebarHeight(el, height)\n setSidebarLock(el, lock)\n\n /* Set offset in locked state depending on header height */\n if (lock)\n setSidebarOffset(el, offset)\n else\n resetSidebarOffset(el)\n }),\n\n /* Re-map to sidebar */\n map(([sidebar]) => sidebar),\n\n /* Reset on complete or error */\n finalize(() => {\n resetSidebarOffset(el)\n resetSidebarHeight(el)\n resetSidebarLock(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar offset\n *\n * @param el - Sidebar element\n * @param value - Sidebar offset\n */\nexport function setSidebarOffset(\n el: HTMLElement, value: number\n): void {\n el.style.top = `${value}px`\n}\n\n/**\n * Reset sidebar offset\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarOffset(\n el: HTMLElement\n): void {\n el.style.top = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar height\n *\n * @param el - Sidebar element\n * @param value - Sidebar height\n */\nexport function setSidebarHeight(\n el: HTMLElement, value: number\n): void {\n el.style.height = `${value}px`\n}\n\n/**\n * Reset sidebar height\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarHeight(\n el: HTMLElement\n): void {\n el.style.height = \"\"\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set sidebar lock\n *\n * @param el - Sidebar element\n * @param value - Whether the sidebar is locked\n */\nexport function setSidebarLock(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"lock\" : \"\")\n}\n\n/**\n * Reset sidebar lock\n *\n * @param el - Sidebar element\n */\nexport function resetSidebarLock(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, OperatorFunction, of, pipe } from \"rxjs\"\nimport { distinctUntilChanged, map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, watchViewportAt } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { applyTabs } from \"../react\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabs\n */\nexport interface Tabs {\n hidden: boolean /* Whether the tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n screen$: Observable /* Media screen observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount tabs from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTabs(\n { header$, viewport$, screen$ }: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => screen$\n .pipe(\n switchMap(screen => {\n\n /* [screen +]: Mount tabs above screen breakpoint */\n if (screen) {\n return watchViewportAt(el, { header$, viewport$ })\n .pipe(\n map(({ offset: { y } }) => ({ hidden: y >= 10 })),\n distinctUntilChanged(),\n applyTabs(el)\n )\n\n /* [screen -]: Unmount tabs below screen breakpoint */\n } else {\n return of({ hidden: true })\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n MonoTypeOperatorFunction,\n animationFrameScheduler,\n pipe\n} from \"rxjs\"\nimport { finalize, observeOn, tap } from \"rxjs/operators\"\n\nimport { Tabs } from \"../_\"\nimport {\n resetTabsHidden,\n setTabsHidden\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Apply tabs\n *\n * @param el - Tabs element\n *\n * @return Operator function\n */\nexport function applyTabs(\n el: HTMLElement\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ hidden }) => {\n setTabsHidden(el, hidden)\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n resetTabsHidden(el)\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set tabs hidden\n *\n * @param el - Tabs element\n * @param value - Whether the element is hidden\n */\nexport function setTabsHidden(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"hidden\" : \"\")\n}\n\n/**\n * Reset tabs hidden\n *\n * @param el - Tabs element\n */\nexport function resetTabsHidden(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n OperatorFunction,\n combineLatest,\n of,\n pipe\n} from \"rxjs\"\nimport { map, switchMap } from \"rxjs/operators\"\n\nimport { Viewport, getElements } from \"browser\"\n\nimport { Header } from \"../../header\"\nimport { Main } from \"../../main\"\nimport {\n Sidebar,\n applySidebar,\n watchSidebar\n} from \"../../shared\"\nimport {\n AnchorList,\n applyAnchorList,\n watchAnchorList\n} from \"../anchor\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents for [tablet -]\n */\ninterface TableOfContentsBelowTablet {} // tslint:disable-line\n\n/**\n * Table of contents for [tablet +]\n */\ninterface TableOfContentsAboveTablet {\n sidebar: Sidebar /* Sidebar */\n anchors: AnchorList /* Anchor list */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport type TableOfContents =\n | TableOfContentsBelowTablet\n | TableOfContentsAboveTablet\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Tablet media observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents from source observable\n *\n * @param options - Options\n *\n * @return Operator function\n */\nexport function mountTableOfContents(\n { header$, main$, viewport$, tablet$}: MountOptions\n): OperatorFunction {\n return pipe(\n switchMap(el => tablet$\n .pipe(\n switchMap(tablet => {\n\n /* [tablet +]: Mount table of contents in sidebar */\n if (tablet) {\n const els = getElements(\".md-nav__link\", el)\n\n /* Watch and apply sidebar */\n const sidebar$ = watchSidebar(el, { main$, viewport$ })\n .pipe(\n applySidebar(el, { header$ })\n )\n\n /* Watch and apply anchor list (scroll spy) */\n const anchors$ = watchAnchorList(els, { header$, viewport$ })\n .pipe(\n applyAnchorList(els)\n )\n\n /* Combine into a single hot observable */\n return combineLatest([sidebar$, anchors$])\n .pipe(\n map(([sidebar, anchors]) => ({ sidebar, anchors }))\n )\n\n /* [tablet -]: Unmount table of contents */\n } else {\n return of({})\n }\n })\n )\n )\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Anchor list\n */\nexport interface AnchorList {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./react\"\nexport * from \"./set\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { reverse } from \"ramda\"\nimport {\n MonoTypeOperatorFunction,\n Observable,\n animationFrameScheduler,\n combineLatest,\n pipe\n} from \"rxjs\"\nimport {\n bufferCount,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n finalize,\n map,\n observeOn,\n scan,\n startWith,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\nimport { Viewport, getElement } from \"browser\"\n\nimport { Header } from \"../../../header\"\nimport { AnchorList } from \"../_\"\nimport {\n resetAnchorActive,\n resetAnchorBlur,\n setAnchorActive,\n setAnchorBlur\n} from \"../set\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n header$: Observable
    /* Header observable */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch anchor list\n *\n * This is effectively a scroll-spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the anchor list needs\n * to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param els - Anchor elements\n * @param options - Options\n *\n * @return Anchor list observable\n */\nexport function watchAnchorList(\n els: HTMLAnchorElement[], { header$, viewport$ }: WatchOptions\n): Observable {\n const table = new Map()\n for (const el of els) {\n const id = decodeURIComponent(el.hash.substring(1))\n const target = getElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(el, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(header => 18 + header.height)\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\"),\n\n /* Build index to map anchor paths to vertical offsets */\n map(() => {\n let path: HTMLAnchorElement[] = []\n return [...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n reverse(path = [...path, anchor]),\n offset\n )\n }, new Map())\n }),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(index => combineLatest([adjust$, viewport$])\n .pipe(\n scan(([prev, next], [adjust, { offset: { y } }]) => {\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => {\n return a[0] === b[0]\n && a[1] === b[1]\n })\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Apply anchor list\n *\n * @param els - Anchor elements\n *\n * @return Operator function\n */\nexport function applyAnchorList(\n els: HTMLAnchorElement[]\n): MonoTypeOperatorFunction {\n return pipe(\n\n /* Defer repaint to next animation frame */\n observeOn(animationFrameScheduler),\n tap(({ prev, next }) => {\n\n /* Look forward */\n for (const [el] of next) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n\n /* Look backward */\n prev.forEach(([el], index) => {\n setAnchorActive(el, index === prev.length - 1)\n setAnchorBlur(el, true)\n })\n }),\n\n /* Reset on complete or error */\n finalize(() => {\n for (const el of els) {\n resetAnchorActive(el)\n resetAnchorBlur(el)\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set anchor blur\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is blurred\n */\nexport function setAnchorBlur(\n el: HTMLElement, value: boolean\n): void {\n el.setAttribute(\"data-md-state\", value ? \"blur\" : \"\")\n}\n\n/**\n * Reset anchor blur\n *\n * @param el - Anchor element\n */\nexport function resetAnchorBlur(\n el: HTMLElement\n): void {\n el.removeAttribute(\"data-md-state\")\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Set anchor active\n *\n * @param el - Anchor element\n * @param value - Whether the anchor is active\n */\nexport function setAnchorActive(\n el: HTMLElement, value: boolean\n): void {\n el.classList.toggle(\"md-nav__link--active\", value)\n}\n\n/**\n * Reset anchor active\n *\n * @param el - Anchor element\n */\nexport function resetAnchorActive(\n el: HTMLElement\n): void {\n el.classList.remove(\"md-nav__link--active\")\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./anchor\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// TODO: remove this after we finished refactoring\n// tslint:disable\n\nimport \"../stylesheets/main.scss\"\nimport \"../stylesheets/palette.scss\"\n\nimport { values } from \"ramda\"\nimport {\n merge,\n combineLatest,\n animationFrameScheduler,\n fromEvent,\n of,\n NEVER,\n from\n} from \"rxjs\"\nimport {\n delay,\n switchMap,\n tap,\n filter,\n withLatestFrom,\n observeOn,\n take,\n shareReplay,\n share\n} from \"rxjs/operators\"\n\nimport {\n watchToggle,\n setToggle,\n getElements,\n watchMedia,\n watchDocument,\n watchLocation,\n watchLocationHash,\n watchViewport,\n isLocationInternal,\n isLocationAnchor\n} from \"./browser\"\nimport { setupSearchWorker } from \"./workers\"\n\nimport {\n mountHeader,\n mountHero,\n mountMain,\n mountNavigation,\n mountSearch,\n mountTableOfContents,\n mountTabs,\n useComponent,\n setupComponents,\n mountSearchQuery,\n mountSearchReset,\n mountSearchResult\n} from \"components\"\nimport { setupClipboard } from \"./integrations/clipboard\"\nimport { setupDialog } from \"integrations/dialog\"\nimport { setupKeyboard } from \"./integrations/keyboard\"\nimport { setupInstantLoading } from \"integrations/instant\"\nimport {\n patchTables,\n patchDetails,\n patchScrollfix,\n patchSource,\n patchScripts\n} from \"patches\"\nimport { isConfig } from \"utilities\"\n\n/* ------------------------------------------------------------------------- */\n\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Test for iOS */\nif (navigator.userAgent.match(/(iPad|iPhone|iPod)/g))\n document.documentElement.classList.add(\"ios\")\n\n/**\n * Set scroll lock\n *\n * @param el - Scrollable element\n * @param value - Vertical offset\n */\nexport function setScrollLock(\n el: HTMLElement, value: number\n): void {\n el.setAttribute(\"data-md-state\", \"lock\")\n el.style.top = `-${value}px`\n}\n\n/**\n * Reset scroll lock\n *\n * @param el - Scrollable element\n */\nexport function resetScrollLock(\n el: HTMLElement\n): void {\n const value = -1 * parseInt(el.style.top, 10)\n el.removeAttribute(\"data-md-state\")\n el.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Initialize Material for MkDocs\n *\n * @param config - Configuration\n */\nexport function initialize(config: unknown) {\n if (!isConfig(config))\n throw new SyntaxError(`Invalid configuration: ${JSON.stringify(config)}`)\n\n /* Setup user interface observables */\n const location$ = watchLocation()\n const hash$ = watchLocationHash()\n const viewport$ = watchViewport()\n const tablet$ = watchMedia(\"(min-width: 960px)\")\n const screen$ = watchMedia(\"(min-width: 1220px)\")\n\n /* Setup document observable */\n const document$ = config.features.includes(\"instant\")\n ? watchDocument({ location$ })\n : watchDocument()\n\n /* Setup component bindings */\n setupComponents([\n \"container\", /* Container */\n \"header\", /* Header */\n \"header-title\", /* Header title */\n \"hero\", /* Hero */\n \"main\", /* Main area */\n \"navigation\", /* Navigation */\n \"search\", /* Search */\n \"search-query\", /* Search input */\n \"search-reset\", /* Search reset */\n \"search-result\", /* Search results */\n \"skip\", /* Skip link */\n \"tabs\", /* Tabs */\n \"toc\" /* Table of contents */\n ], { document$ })\n\n /* ----------------------------------------------------------------------- */\n\n // External index\n const index = config.search && config.search.index\n ? config.search.index\n : undefined\n\n // TODO: pass URL config as first parameter, options as second\n const worker = setupSearchWorker(config.url.worker.search, {\n base: config.url.base, index, location$\n })\n\n /* ----------------------------------------------------------------------- */\n\n /* Create header observable */\n const header$ = useComponent(\"header\")\n .pipe(\n mountHeader({ viewport$ }),\n shareReplay(1)\n )\n\n const main$ = useComponent(\"main\")\n .pipe(\n mountMain({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n /* Mount search query */\n const query$ = useComponent(\"search-query\")\n .pipe(\n mountSearchQuery(worker),\n shareReplay(1)\n )\n\n /* Mount search reset */\n const reset$ = useComponent(\"search-reset\")\n .pipe(\n mountSearchReset(),\n shareReplay(1)\n )\n\n /* Mount search result */\n const result$ = useComponent(\"search-result\")\n .pipe(\n mountSearchResult(worker, { query$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const search$ = useComponent(\"search\")\n .pipe(\n mountSearch({ query$, reset$, result$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const navigation$ = useComponent(\"navigation\")\n .pipe(\n mountNavigation({ header$, main$, viewport$, screen$ }),\n shareReplay(1) // shareReplay because there might be late subscribers\n )\n\n const toc$ = useComponent(\"toc\")\n .pipe(\n mountTableOfContents({ header$, main$, viewport$, tablet$ }),\n shareReplay(1)\n )\n\n const tabs$ = useComponent(\"tabs\")\n .pipe(\n mountTabs({ header$, viewport$, screen$ }),\n shareReplay(1)\n )\n\n const hero$ = useComponent(\"hero\")\n .pipe(\n mountHero({ header$, viewport$ }),\n shareReplay(1)\n )\n\n /* ----------------------------------------------------------------------- */\n\n const keyboard$ = setupKeyboard()\n\n patchDetails({ document$, hash$ })\n patchScripts({ document$ })\n patchSource({ document$ })\n patchTables({ document$ })\n\n /* Force 1px scroll offset to trigger overflow scrolling */\n patchScrollfix({ document$ })\n\n /* Setup clipboard and dialog */\n const dialog$ = setupDialog()\n const clipboard$ = setupClipboard({ document$, dialog$ })\n\n /* ----------------------------------------------------------------------- */\n\n // // put into search...\n // hash$\n // .pipe(\n // switchMap(hash => useToggle(\"search\")\n // .pipe(\n // filter(x => x.checked), // only active\n // tap(toggle => setToggle(toggle, false)),\n // delay(125), // ensure that it runs after the body scroll reset...\n // mapTo(hash)\n // )\n // )\n // )\n // .subscribe(hash => {\n // getElement(`[id=\"${hash}\"]`)!.scrollIntoView()\n // })\n\n // Scroll lock // document -> document$ => { body } !?\n // put into search...\n combineLatest([\n watchToggle(\"search\"),\n tablet$,\n ])\n .pipe(\n withLatestFrom(viewport$),\n switchMap(([[toggle, tablet], { offset: { y }}]) => {\n const active = toggle && !tablet\n return document$\n .pipe(\n delay(active ? 400 : 100), // TOOD: directly combine this with the hash!\n observeOn(animationFrameScheduler),\n tap(({ body }) => active\n ? setScrollLock(body, y)\n : resetScrollLock(body)\n )\n )\n })\n )\n .subscribe()\n\n /* ----------------------------------------------------------------------- */\n\n /* Intercept internal link clicks */\n const link$ = fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n switchMap(ev => {\n if (ev.target instanceof HTMLElement) {\n const el = ev.target.closest(\"a\") // TODO: abstract as link click?\n if (el && isLocationInternal(el)) {\n if (!isLocationAnchor(el))\n ev.preventDefault()\n return of(el)\n }\n }\n return NEVER\n }),\n share()\n )\n\n /* Always close drawer on click */\n link$.subscribe(() => {\n setToggle(\"drawer\", false)\n })\n\n // somehow call this setupNavigation ?\n\n // instant loading\n if (config.features.includes(\"instant\")) {\n\n /* Disable automatic scroll restoration, as it doesn't work nicely */\n if (\"scrollRestoration\" in history)\n history.scrollRestoration = \"manual\"\n\n /* Resolve relative links for stability */\n for (const selector of [\n `link[rel=\"shortcut icon\"]`,\n `link[rel=\"stylesheet\"]`\n ])\n for (const el of getElements(selector))\n el.href = el.href\n\n setupInstantLoading({\n document$, link$, location$, viewport$\n })\n\n }\n\n /* ----------------------------------------------------------------------- */\n\n // if we use a single tab outside of search, unhide all permalinks.\n // TODO: experimental. necessary!?\n keyboard$\n .pipe(\n filter(key => key.mode === \"global\" && [\"Tab\"].includes(key.type)),\n take(1)\n )\n .subscribe(() => {\n for (const link of getElements(\".headerlink\"))\n link.style.visibility = \"visible\"\n })\n\n /* ----------------------------------------------------------------------- */\n\n const state = {\n\n /* Browser observables */\n document$,\n viewport$,\n\n /* Component observables */\n header$,\n hero$,\n main$,\n navigation$,\n search$,\n tabs$,\n toc$,\n\n /* Integation observables */\n clipboard$,\n keyboard$,\n dialog$\n }\n\n /* Subscribe to all observables */\n merge(...values(state))\n .subscribe()\n return state\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport * as ClipboardJS from \"clipboard\"\nimport { NEVER, Observable, Subject, fromEventPattern } from \"rxjs\"\nimport { mapTo, share, tap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderClipboard } from \"templates\"\nimport { translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n dialog$: Subject /* Dialog subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup clipboard\n *\n * This function implements the Clipboard.js integration and injects a button\n * into all code blocks when the document changes.\n *\n * @param options - Options\n *\n * @return Clipboard observable\n */\nexport function setupClipboard(\n { document$, dialog$ }: SetupOptions\n): Observable {\n if (!ClipboardJS.isSupported())\n return NEVER\n\n /* Inject 'copy-to-clipboard' buttons */\n document$.subscribe(() => {\n const blocks = getElements(\"pre > code\")\n blocks.forEach((block, index) => {\n const parent = block.parentElement!\n parent.id = `__code_${index}`\n parent.insertBefore(renderClipboard(parent.id), block)\n })\n })\n\n /* Initialize and setup clipboard */\n const clipboard$ = fromEventPattern(next => {\n new ClipboardJS(\".md-clipboard\").on(\"success\", next)\n })\n .pipe(\n share()\n )\n\n /* Display notification for clipboard event */\n clipboard$\n .pipe(\n tap(ev => ev.clearSelection()),\n mapTo(translate(\"clipboard.copied\"))\n )\n .subscribe(dialog$)\n\n /* Return clipboard */\n return clipboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject, animationFrameScheduler, of } from \"rxjs\"\nimport {\n delay,\n map,\n observeOn,\n switchMap,\n tap\n} from \"rxjs/operators\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n duration?: number /* Display duration (default: 2s) */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup dialog\n *\n * @param options - Options\n *\n * @return Dialog observable\n */\nexport function setupDialog(\n { duration }: SetupOptions = {}\n): Subject {\n const dialog$ = new Subject()\n\n /* Create dialog */\n const dialog = document.createElement(\"div\") // TODO: improve scoping\n dialog.classList.add(\"md-dialog\", \"md-typeset\")\n\n /* Display dialog */\n dialog$\n .pipe(\n switchMap(text => of(document.body) // useComponent(\"container\")\n .pipe(\n map(container => container.appendChild(dialog)),\n observeOn(animationFrameScheduler),\n delay(1), // Strangley it doesnt work when we push things to the new animation frame...\n tap(el => {\n el.innerHTML = text\n el.setAttribute(\"data-md-state\", \"open\")\n }),\n delay(duration || 2000),\n tap(el => el.removeAttribute(\"data-md-state\")),\n delay(400),\n tap(el => {\n el.innerHTML = \"\"\n el.remove()\n })\n )\n )\n )\n .subscribe()\n\n /* Return dialog subject */\n return dialog$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, fromEvent, merge } from \"rxjs\"\nimport {\n bufferCount,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n pluck,\n sample,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Viewport,\n ViewportOffset,\n getElement,\n isLocationAnchor,\n setLocationHash,\n setViewportOffset\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\ninterface State {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Observable /* Document observable */\n viewport$: Observable /* Viewport observable */\n link$: Observable /* Internal link observable */\n location$: Subject /* Location subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup instant loading\n *\n * @param options - Options\n *\n * @return TODO ?\n */\nexport function setupInstantLoading(\n { document$, viewport$, link$, location$ }: SetupOptions\n) { // TODO: add return type\n const state$ = link$\n .pipe(\n map(el => ({ url: new URL(el.href) })),\n share()\n )\n\n /* Intercept internal links to dispatch */\n const push$ = state$\n .pipe(\n distinctUntilChanged((prev, next) => prev.url.href === next.url.href),\n filter(({ url }) => !isLocationAnchor(url)),\n share()\n )\n\n /* Intercept popstate events (history back and forward) */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n pluck(\"url\")\n )\n .subscribe(location$)\n\n /* History: dispatch internal link */\n push$.subscribe(({ url }) => {\n history.pushState({}, \"\", url.toString())\n })\n\n /* History: debounce update of viewport offset */\n viewport$\n .pipe(\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Apply viewport offset from history */\n merge(state$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([prev, next]) => {\n return prev.url.pathname === next.url.pathname\n && !isLocationAnchor(next.url)\n }),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n setViewportOffset(offset || { y: 0 })\n })\n\n /* Intercept actual instant loading */\n const instant$ = merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n\n // TODO: from here on, everything is beta.... ###############################\n\n instant$.subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n console.log(\"set hash!\")\n setLocationHash(url.hash) // must delay, if search is open!\n } else {\n setViewportOffset(offset || { y: 0 })\n }\n })\n\n instant$\n .pipe(\n withLatestFrom(document$)\n )\n .subscribe(([, { title, head }]) => {\n document.dispatchEvent(new CustomEvent(\"DOMContentSwitch\"))\n document.title = title\n\n /* Replace meta tags */\n for (const selector of [\n `link[rel=\"canonical\"]`,\n `meta[name=\"author\"]`,\n `meta[name=\"description\"]`\n ]) {\n const next = getElement(selector, head)\n const prev = getElement(selector, document.head)\n if (\n typeof next !== \"undefined\" &&\n typeof prev !== \"undefined\"\n ) {\n prev.replaceWith(next)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport {\n filter,\n map,\n share,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport {\n Key,\n getActiveElement,\n getElement,\n getElements,\n getToggle,\n isSusceptibleToKeyboard,\n setElementFocus,\n setElementSelection,\n setToggle,\n watchKeyboard\n} from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard extends Key {\n mode: KeyboardMode /* Keyboard mode */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup keyboard\n *\n * This function will setup the keyboard handlers and ensure that keys are\n * correctly propagated. Currently there are two modes:\n *\n * - `global`: This mode is active when the search is closed. It is intended\n * to assign hotkeys to specific functions of the site. Currently the search,\n * previous and next page can be triggered.\n *\n * - `search`: This mode is active when the search is open. It maps certain\n * navigational keys to offer search results that can be entirely navigated\n * through keyboard input.\n *\n * The keyboard observable is returned and can be used to monitor the keyboard\n * in order toassign further hotkeys to custom functions.\n *\n * @return Keyboard observable\n */\nexport function setupKeyboard(): Observable {\n const keyboard$ = watchKeyboard()\n .pipe(\n map(key => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n ...key\n })),\n share()\n )\n\n /* Setup search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\"),\n withLatestFrom(\n useComponent(\"search-query\"),\n useComponent(\"search-result\")\n )\n )\n .subscribe(([key, query, result]) => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: prevent form submission */\n case \"Enter\":\n if (active === query)\n key.claim()\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n setElementFocus(query, false)\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n setElementFocus(query)\n } else {\n const els = [query, ...getElements(\"[href]\", result)]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n setElementFocus(els[i])\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n setElementFocus(query)\n }\n })\n\n /* Setup global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active)\n }\n return false\n }),\n withLatestFrom(useComponent(\"search-query\"))\n )\n .subscribe(([key, query]) => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n setElementFocus(query)\n setElementSelection(query)\n key.claim()\n break\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n /* Return keyboard */\n return keyboard$\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { identity } from \"ramda\"\nimport { Observable, fromEvent, merge } from \"rxjs\"\nimport {\n filter,\n map,\n switchMapTo,\n tap\n} from \"rxjs/operators\"\n\nimport {\n getElement,\n getElements,\n watchMedia\n} from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n hash$: Observable /* Location hash observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `details` elements\n *\n * This function will ensure that all `details` tags are opened prior to\n * printing, so the whole content of the page is included, and on anchor jumps.\n *\n * @param options - Options\n */\nexport function patchDetails(\n { document$, hash$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"details\"))\n )\n\n /* Open all details before printing */\n merge(\n watchMedia(\"print\").pipe(filter(identity)), /* Webkit */\n fromEvent(window, \"beforeprint\") /* IE, FF */\n )\n .pipe(\n switchMapTo(els$)\n )\n .subscribe(els => {\n for (const el of els)\n el.setAttribute(\"open\", \"\")\n })\n\n /* Open parent details and fix anchor jump */\n hash$\n .pipe(\n map(id => getElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\"),\n tap(el => {\n const details = el.closest(\"details\")\n if (details && !details.open)\n details.setAttribute(\"open\", \"\")\n })\n )\n .subscribe(el => el.scrollIntoView())\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./details\"\nexport * from \"./script\"\nexport * from \"./scrollfix\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map, skip, withLatestFrom } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { useComponent } from \"components\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `script` elements\n *\n * This function must be run after a document switch, which means the first\n * emission must be ignored.\n *\n * @param options - Options\n */\nexport function patchScripts(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n skip(1),\n withLatestFrom(useComponent(\"container\")),\n map(([, el]) => getElements(\"script\", el))\n )\n\n /* Evaluate all scripts via replacement */\n els$.subscribe(els => {\n for (const el of els) {\n if (el.src || /(^|\\/javascript)$/i.test(el.type)) {\n const script = document.createElement(\"script\")\n const key = el.src ? \"src\" : \"innerText\"\n script[key] = el[key]\n el.replaceWith(script)\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable, fromEvent, iif, merge } from \"rxjs\"\nimport { map, mapTo, shareReplay, switchMap } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @return Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n const els$ = document$\n .pipe(\n map(() => getElements(\"[data-md-scrollfix]\")),\n shareReplay(1)\n )\n\n /* Remove marker attribute, so we'll only add the fix once */\n els$.subscribe(els => {\n for (const el of els)\n el.removeAttribute(\"data-md-scrollfix\")\n })\n\n /* Patch overflow scrolling on touch start */\n iif(isAppleDevice, els$, NEVER)\n .pipe(\n switchMap(els => merge(...els.map(el => (\n fromEvent(el, \"touchstart\")\n .pipe(\n mapTo(el)\n )\n ))))\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport { Observable, of } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, pluck, switchMap } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub source facts\n *\n * @param user - GitHub user\n * @param repo - GitHub repository\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n return ajax({\n url: typeof repo !== \"undefined\"\n ? `https://api.github.com/repos/${user}/${repo}`\n : `https://api.github.com/users/${user}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n switchMap(data => {\n\n /* GitHub repository */\n if (typeof repo !== \"undefined\") {\n const { stargazers_count, forks_count }: Repo = data\n return of([\n `${round(stargazers_count || 0)} Stars`,\n `${round(forks_count || 0)} Forks`\n ])\n\n /* GitHub user/organization */\n } else {\n const { public_repos }: User = data\n return of([\n `${round(public_repos || 0)} Repositories`\n ])\n }\n })\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport { Observable } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport { filter, map, pluck } from \"rxjs/operators\"\n\nimport { round } from \"utilities\"\n\nimport { SourceFacts } from \"..\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab source facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @return Source facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n return ajax({\n url: `https://${base}/api/v4/projects/${encodeURIComponent(project)}`,\n responseType: \"json\"\n })\n .pipe(\n filter(({ status }) => status === 200),\n pluck(\"response\"),\n map(({ star_count, forks_count }: ProjectSchema) => ([\n `${round(star_count)} Stars`,\n `${round(forks_count)} Forks`\n ]))\n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { NEVER, Observable } from \"rxjs\"\nimport { catchError, map, switchMap } from \"rxjs/operators\"\n\nimport { getElementOrThrow, getElements } from \"browser\"\nimport { renderSource } from \"templates\"\nimport { cache, hash } from \"utilities\"\n\nimport { fetchSourceFactsFromGitHub } from \"./github\"\nimport { fetchSourceFactsFromGitLab } from \"./gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Source facts\n */\nexport type SourceFacts = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch source facts\n *\n * @param url - Source repository URL\n *\n * @return Source facts observable\n */\nfunction fetchSourceFacts(\n url: string\n): Observable {\n const [type] = url.match(/(git(?:hub|lab))/i) || []\n switch (type.toLowerCase()) {\n\n /* GitHub repository */\n case \"github\":\n const [, user, repo] = url.match(/^.+github\\.com\\/([^\\/]+)\\/?([^\\/]+)/i)\n return fetchSourceFactsFromGitHub(user, repo)\n\n /* GitLab repository */\n case \"gitlab\":\n const [, base, project] = url.match(/^.+?([^\\/]*gitlab[^\\/]+)\\/(.+)/i)\n return fetchSourceFactsFromGitLab(base, project)\n\n /* Everything else */\n default:\n return NEVER\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch elements containing repository information\n *\n * This function will retrieve the URL from the repository link and try to\n * query data from integrated source code platforms like GitHub or GitLab.\n *\n * @param options - Options\n */\nexport function patchSource(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n map(() => getElementOrThrow(\".md-source[href]\")),\n switchMap(({ href }) => (\n cache(`${hash(href)}`, () => fetchSourceFacts(href))\n )),\n catchError(() => NEVER)\n )\n .subscribe(facts => {\n for (const el of getElements(\".md-source__repository\")) {\n if (!el.hasAttribute(\"data-md-state\")) {\n el.setAttribute(\"data-md-state\", \"done\")\n el.appendChild(renderSource(facts))\n }\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable } from \"rxjs\"\nimport { map } from \"rxjs/operators\"\n\nimport { getElements } from \"browser\"\nimport { renderTable } from \"templates\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all `table` elements\n *\n * This function will re-render all tables by wrapping them to improve overflow\n * scrolling on smaller screen sizes.\n *\n * @param options - Options\n */\nexport function patchTables(\n { document$ }: MountOptions\n): void {\n const sentinel = document.createElement(\"table\")\n document$\n .pipe(\n map(() => getElements(\"table:not([class])\"))\n )\n .subscribe(els => {\n for (const el of els) {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h, translate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n container: \"md-clipboard md-icon\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @return Element\n */\nexport function renderClipboard(\n id: string\n) {\n const path = require(\"material-design-icons-svg/paths/content-copy.json\")\n return (\n \n \n \n \n \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./clipboard\"\nexport * from \"./search\"\nexport * from \"./source\"\nexport * from \"./table\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchResult } from \"integrations/search\"\nimport { h, truncate } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n item: \"md-search-result__item\",\n link: \"md-search-result__link\",\n article: \"md-search-result__article md-search-result__article--document\",\n section: \"md-search-result__article\",\n title: \"md-search-result__title\",\n teaser: \"md-search-result__teaser\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @return Element\n */\nexport function renderSearchResult(\n { article, sections }: SearchResult\n) {\n\n // create page with icon\n const path = require(\"material-design-icons-svg/paths/file-search-outline.json\")\n\n const children = [article, ...sections].map(document => {\n const { location, title, text } = document\n return (\n \n
    \n {!(\"parent\" in document)\n ?
    \n \n \n \n
    \n : null\n }\n

    {title}

    \n {text.length\n ?

    {truncate(text, 320)}

    \n : undefined\n }\n
    \n
    \n )\n })\n return (\n
  • \n {children}\n
  • \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"patches/source\"\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n facts: \"md-source__facts\",\n fact: \"md-source__fact\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render source facts\n *\n * @param facts - Source facts\n *\n * @return Element\n */\nexport function renderSource(\n facts: SourceFacts\n) {\n const children = facts.map(fact => (\n
  • {fact}
  • \n ))\n return (\n
      \n {children}\n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"utilities\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * CSS classes\n */\nconst css = {\n wrapper: \"md-typeset__scrollwrap\",\n table: \"md-typeset__table\"\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @return Element\n */\nexport function renderTable(\n table: HTMLTableElement\n) {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flags\n */\nexport type Feature =\n | \"tabs\" /* Tabs navigation */\n | \"instant\" /* Instant loading\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * URL configuration\n */\nexport interface UrlConfig {\n base: string /* Base URL */\n worker: {\n search: string /* Search worker URL */\n }\n}\n\n/**\n * Search configuration\n */\nexport interface SearchConfig {\n index?: Promise\n query?: (value: string) => string\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n url: UrlConfig\n features: Feature[] /* Feature flags */\n search?: SearchConfig\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Ensure that the given value is a valid configuration\n *\n * We could use `jsonschema` or any other schema validation framework, but that\n * would just add more bloat to the bundle, so we'll keep it plain and simple.\n *\n * @param config - Configuration\n *\n * @return Test result\n */\nexport function isConfig(config: any): config is Config {\n return typeof config === \"object\"\n && typeof config.url === \"object\"\n && typeof config.url.base === \"string\"\n && typeof config.url.worker === \"object\"\n && typeof config.url.worker.search === \"string\"\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./config\"\nexport * from \"./jsx\"\nexport * from \"./rxjs\"\nexport * from \"./string\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n// tslint:disable no-null-keyword\n\nimport { JSX as JSXInternal } from \"preact\"\nimport { keys } from \"ramda\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML and SVG attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | SVGElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create an element\n *\n * @param tag - HTML or SVG tag\n *\n * @return Element\n */\nfunction createElement(tag: string): HTMLElement | SVGElement {\n switch (tag) {\n\n /* SVG elements */\n case \"svg\":\n case \"path\":\n return document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n\n /* HTML elements */\n default:\n return document.createElement(tag)\n }\n}\n\n/**\n * Set an attribute\n *\n * @param el - Element\n * @param name - Attribute name\n * @param value - Attribute value\n */\nfunction setAttribute(\n el: HTMLElement | SVGElement, name: string, value: string) {\n switch (name) {\n\n /* Attributes to be ignored */\n case \"xmlns\":\n break\n\n /* Attributes of SVG elements */\n case \"viewBox\":\n case \"d\":\n if (typeof value !== \"boolean\")\n el.setAttributeNS(null, name, value)\n else if (value)\n el.setAttributeNS(null, name, \"\")\n break\n\n /* Attributes of HTML elements */\n default:\n if (typeof value !== \"boolean\")\n el.setAttribute(name, value)\n else if (value)\n el.setAttribute(name, \"\")\n }\n}\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(\n el: HTMLElement | SVGElement, child: Child | Child[]\n): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @param tag - HTML or SVG tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @return Element\n */\nexport function h(\n tag: string, attributes: Attributes | null, ...children: Child[]\n): HTMLElement | SVGElement {\n const el = createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of keys(attributes))\n setAttribute(el, attr, attributes[attr])\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement | SVGElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, defer, of } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Cache the last value emitted by an observable in session storage\n *\n * If the key is not found in session storage, the factory is executed and the\n * latest value emitted will automatically be persisted to sessions storage.\n * Note that the values emitted by the returned observable must be serializable\n * as `JSON`, or data will be lost.\n *\n * @template T - Value type\n *\n * @param key - Cache key\n * @param factory - Observable factory\n *\n * @return Value observable\n */\nexport function cache(\n key: string, factory: () => Observable\n): Observable {\n return defer(() => {\n const data = sessionStorage.getItem(key)\n if (data) {\n return of(JSON.parse(data) as T)\n\n /* Retrieve value from observable factory and write to storage */\n } else {\n const value$ = factory()\n value$.subscribe(value => {\n try {\n sessionStorage.setItem(key, JSON.stringify(value))\n } catch (err) {\n /* Uncritical, just swallow */\n }\n })\n\n /* Return value */\n return value$\n }\n })\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElementOrThrow } from \"browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Translation keys\n */\ntype TranslateKey =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Translations\n */\nlet lang: Record\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Translate the given key\n *\n * @param key - Key to be translated\n * @param value - Value to be replaced\n *\n * @return Translation\n */\nexport function translate(key: TranslateKey, value?: string): string {\n if (typeof lang === \"undefined\") {\n const el = getElementOrThrow(\"#__lang\")\n lang = JSON.parse(el.innerText)\n }\n if (typeof lang[key] === \"undefined\") {\n throw new ReferenceError(`Invalid translation: ${key}`)\n }\n return typeof value !== \"undefined\"\n ? lang[key].replace(\"#\", value)\n : lang[key]\n}\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @return Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0); // tslint:disable-line\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with source facts\n *\n * This is a reverse engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @return Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 1) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n\n/**\n * Simple hash function\n *\n * @see https://bit.ly/2wsVjJ4 - Original source\n *\n * @param value - Value to be hashed\n *\n * @return Hash as 32bit integer\n */\nexport function hash(value: string): number {\n let h = 0\n for (let i = 0, len = value.length; i < len; i++) {\n h = ((h << 5) - h) + value.charCodeAt(i)\n h |= 0 // Convert to 32bit integer\n }\n return h\n }\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./search\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, Subject, from } from \"rxjs\"\nimport { ajax } from \"rxjs/ajax\"\nimport {\n map,\n pluck,\n shareReplay,\n switchMap,\n take,\n tap,\n withLatestFrom\n} from \"rxjs/operators\"\n\nimport { WorkerHandler, watchWorker } from \"browser\"\nimport { SearchIndexConfig, SearchIndexOptions } from \"integrations/search\"\n\nimport { translate } from \"utilities\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n base: string /* Base url */\n index?: Promise /* Promise resolving with index */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup search web worker\n *\n * This function will create a web worker to setup and query the search index\n * which is done using `lunr`. The index can be passed explicitly in order to\n * enable hacks like _localsearch_ via search index embedding as JSON. If no\n * index is given, this function will load it from the default location.\n *\n * @param url - Worker url\n * @param options - Options\n *\n * @return Worker handler\n */\nexport function setupSearchWorker(\n url: string, { base, index, location$ }: SetupOptions\n): WorkerHandler {\n const worker = new Worker(url)\n\n /* Ensure stable base URL */\n const origin$ = location$\n .pipe(\n take(1),\n map(({ href }) => new URL(base, href)\n .toString()\n .replace(/\\/$/, \"\")\n )\n )\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n withLatestFrom(origin$),\n map(([message, origin]) => {\n if (isSearchResultMessage(message)) {\n for (const { article, sections } of message.data) {\n article.location = `${origin}/${article.location}`\n for (const section of sections)\n section.location = `${origin}/${section.location}`\n }\n }\n return message\n }),\n shareReplay(1)\n )\n\n /* Fetch index if it wasn't passed explicitly */\n const index$ = typeof index !== \"undefined\"\n ? from(index)\n : origin$\n .pipe(\n switchMap(origin => ajax({\n url: `${origin}/search/search_index.json`,\n responseType: \"json\",\n withCredentials: true\n })\n .pipe(\n pluck(\"response\")\n )\n )\n )\n\n function isConfigDefaultLang(config: SearchIndexConfig) {\n return config.lang.length === 1 && config.lang[0] === \"en\"\n }\n\n function isConfigDefaultSeparator(config: SearchIndexConfig) {\n return config.separator === \"[\\s\\-]+\"\n }\n\n index$\n .pipe(\n map(({ config, ...rest }) => ({\n config: {\n lang: isConfigDefaultLang(config)\n ? [translate(\"search.config.lang\")]\n : config.lang,\n separator: isConfigDefaultSeparator(config)\n ? translate(\"search.config.separator\")\n : config.separator\n },\n pipeline: translate(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as any, // Hack\n ...rest\n }))\n )\n // .subscribe(console.log)\n\n // /* Send index to worker */\n // index$\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return worker handler */\n return { tx$, rx$ }\n}\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nexport * from \"./_\"\nexport * from \"./message\"\n","/*\n * Copyright (c) 2016-2020 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndexOptions, SearchResult } from \"integrations/search\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n DUMP, /* Search index dump */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndexOptions /* Message data */\n}\n\n/**\n * A message containing the a dump of the search index\n */\nexport interface SearchDumpMessage {\n type: SearchMessageType.DUMP /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * A message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult[] /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * A message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchDumpMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search dump messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchDumpMessage(\n message: SearchMessage\n): message is SearchDumpMessage {\n return message.type === SearchMessageType.DUMP\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @return Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/main.css\";","export default \"/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/material/palette.css\";"],"sourceRoot":""} \ No newline at end of file diff --git a/material/assets/manifest.json b/material/assets/manifest.json index f63f3652c..c9854252c 100644 --- a/material/assets/manifest.json +++ b/material/assets/manifest.json @@ -1,10 +1,10 @@ { - "assets/javascripts/bundle.js": "assets/javascripts/bundle.js", - "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.js.map", - "assets/javascripts/vendor.js": "assets/javascripts/vendor.js", - "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.js.map", - "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.js", - "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.js.map", - "assets/stylesheets/main.css": "assets/stylesheets/main.css", - "assets/stylesheets/palette.css": "assets/stylesheets/palette.css" + "assets/javascripts/bundle.js": "assets/javascripts/bundle.5b33ad8d.min.js", + "assets/javascripts/bundle.js.map": "assets/javascripts/bundle.5b33ad8d.min.js.map", + "assets/javascripts/vendor.js": "assets/javascripts/vendor.31a2e7b9.min.js", + "assets/javascripts/vendor.js.map": "assets/javascripts/vendor.31a2e7b9.min.js.map", + "assets/javascripts/worker/search.js": "assets/javascripts/worker/search.edc88caf.min.js", + "assets/javascripts/worker/search.js.map": "assets/javascripts/worker/search.edc88caf.min.js.map", + "assets/stylesheets/main.css": "assets/stylesheets/main.14bb5ffa.min.css", + "assets/stylesheets/palette.css": "assets/stylesheets/palette.f5f04e6f.min.css" } \ No newline at end of file diff --git a/material/assets/stylesheets/main.css b/material/assets/stylesheets/main.css deleted file mode 100644 index 969e3aee5..000000000 --- a/material/assets/stylesheets/main.css +++ /dev/null @@ -1,2940 +0,0 @@ -@charset "UTF-8"; -html { - box-sizing: border-box; -} - -*, -*::before, -*::after { - box-sizing: inherit; -} - -html { - -webkit-text-size-adjust: none; - -moz-text-size-adjust: none; - -ms-text-size-adjust: none; - text-size-adjust: none; -} - -body { - margin: 0; -} - -hr { - overflow: visible; - box-sizing: content-box; -} - -a { - -webkit-text-decoration-skip: objects; -} - -a, -button, -label, -input { - -webkit-tap-highlight-color: transparent; -} - -a { - color: inherit; - text-decoration: none; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 80%; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -img { - border-style: none; -} - -table { - border-collapse: separate; - border-spacing: 0; -} - -td, -th { - font-weight: normal; - vertical-align: top; -} - -button { - margin: 0; - padding: 0; - border: 0; - background: transparent; - font-size: inherit; -} - -input { - border: 0; - outline: 0; -} - -:root { - --md-default-fg-color: hsla(0, 0%, 0%, 0.87); - --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54); - --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.26); - --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07); - --md-default-bg-color: hsla(0, 0%, 100%, 1); - --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7); - --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3); - --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12); - --md-primary-fg-color: hsla(231deg, 48%, 48%, 1); - --md-primary-fg-color--light: hsla(230deg, 44%, 64%, 1); - --md-primary-fg-color--dark: hsla(232deg, 54%, 41%, 1); - --md-primary-bg-color: var(--md-default-bg-color); - --md-primary-bg-color--light: var(--md-default-bg-color--light); - --md-accent-fg-color: hsla(231deg, 99%, 66%, 1); - --md-accent-fg-color--transparent: hsla(231deg, 99%, 66%, 0.1); - --md-accent-bg-color: var(--md-default-bg-color); - --md-accent-bg-color--light: var(--md-default-bg-color--light); - --md-code-bg-color: hsla(0, 0%, 92.5%, 0.5); - --md-code-fg-color: hsla(200, 18%, 26%, 1); -} - -.md-icon svg { - display: block; - width: 1.2rem; - height: 1.2rem; - margin: 0 auto; - fill: currentColor; -} - -body { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body, -input { - color: var(--md-default-fg-color); - -webkit-font-feature-settings: "kern", "liga"; - font-feature-settings: "kern", "liga"; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -code, -pre, -kbd { - color: var(--md-default-fg-color); - -webkit-font-feature-settings: "kern"; - font-feature-settings: "kern"; - font-family: "Courier New", Courier, monospace; -} - -.md-typeset { - font-size: 0.8rem; - line-height: 1.6; - -webkit-print-color-adjust: exact; -} -.md-typeset p, -.md-typeset ul, -.md-typeset ol, -.md-typeset blockquote { - margin: 1em 0; -} -.md-typeset h1 { - margin: 0 0 2rem; - color: var(--md-default-fg-color--light); - font-size: 1.5625rem; - font-weight: 300; - letter-spacing: -0.01em; - line-height: 1.3; -} -.md-typeset h2 { - margin: 2rem 0 0.8rem; - font-size: 1.25rem; - font-weight: 300; - letter-spacing: -0.01em; - line-height: 1.4; -} -.md-typeset h3 { - margin: 1.6rem 0 0.8rem; - font-size: 1rem; - font-weight: 400; - letter-spacing: -0.01em; - line-height: 1.5; -} -.md-typeset h2 + h3 { - margin-top: 0.8rem; -} -.md-typeset h4 { - margin: 0.8rem 0; - font-size: 0.8rem; - font-weight: 700; - letter-spacing: -0.01em; -} -.md-typeset h5, -.md-typeset h6 { - margin: 0.8rem 0; - color: var(--md-default-fg-color--light); - font-size: 0.64rem; - font-weight: 700; - letter-spacing: -0.01em; -} -.md-typeset h5 { - text-transform: uppercase; -} -.md-typeset hr { - margin: 1.5em 0; - border-bottom: 0.05rem dotted var(--md-default-fg-color--lighter); -} -.md-typeset a { - color: var(--md-primary-fg-color); - word-break: break-word; -} -.md-typeset a, .md-typeset a::before { - transition: color 125ms; -} -.md-typeset a:focus, .md-typeset a:hover { - color: var(--md-accent-fg-color); -} -.md-typeset code, -.md-typeset pre, -.md-typeset kbd { - background-color: var(--md-code-bg-color); - color: var(--md-code-fg-color); - font-size: 85%; - direction: ltr; -} -.md-typeset code { - margin: 0 0.2941176471em; - padding: 0.0735294118em 0; - border-radius: 0.1rem; - box-shadow: 0.2941176471em 0 0 var(--md-code-bg-color), -0.2941176471em 0 0 var(--md-code-bg-color); - word-break: break-word; - -webkit-box-decoration-break: clone; - box-decoration-break: clone; -} -.md-typeset h1 code, -.md-typeset h2 code, -.md-typeset h3 code, -.md-typeset h4 code, -.md-typeset h5 code, -.md-typeset h6 code { - margin: 0; - background-color: transparent; - box-shadow: none; -} -.md-typeset a > code { - margin: inherit; - padding: inherit; - border-radius: initial; - background-color: inherit; - color: inherit; - box-shadow: none; -} -.md-typeset pre { - position: relative; - margin: 1em 0; - border-radius: 0.1rem; - line-height: 1.4; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-overflow-scrolling: touch; -} -.md-typeset pre > code { - display: block; - margin: 0; - padding: 0.525rem 0.6rem; - background-color: transparent; - font-size: inherit; - box-shadow: none; - -webkit-box-decoration-break: slice; - box-decoration-break: slice; - overflow: auto; - word-break: normal; -} -.md-typeset pre > code::-webkit-scrollbar { - width: 0.2rem; - height: 0.2rem; -} -.md-typeset pre > code::-webkit-scrollbar-thumb { - background-color: var(--md-default-fg-color--lighter); -} -.md-typeset pre > code::-webkit-scrollbar-thumb:hover { - background-color: var(--md-accent-fg-color); -} -.md-typeset kbd { - display: inline-block; - padding: 0 0.5882352941em; - border-radius: 0.1rem; - font-size: 0.75em; - line-height: 1.5; - box-shadow: 0 0.1rem 0 0.05rem var(--md-default-fg-color--lighter), 0 0.1rem 0 var(--md-default-fg-color--lighter), inset 0 -0.1rem 0.2rem var(--md-default-bg-color); - word-break: break-word; - vertical-align: text-top; -} -.md-typeset mark { - margin: 0 0.25em; - padding: 0.0625em 0; - border-radius: 0.1rem; - background-color: rgba(255, 235, 59, 0.5); - box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5); - word-break: break-word; - -webkit-box-decoration-break: clone; - box-decoration-break: clone; -} -.md-typeset abbr { - border-bottom: 0.05rem dotted var(--md-default-fg-color--light); - text-decoration: none; - cursor: help; -} -.md-typeset small { - opacity: 0.75; -} -.md-typeset sup, -.md-typeset sub { - margin-left: 0.078125em; -} -[dir=rtl] .md-typeset sup, -[dir=rtl] .md-typeset sub { - margin-right: 0.078125em; - margin-left: initial; -} -.md-typeset blockquote { - padding-left: 0.6rem; - border-left: 0.2rem solid var(--md-default-fg-color--lighter); - color: var(--md-default-fg-color--light); -} -[dir=rtl] .md-typeset blockquote { - padding-right: 0.6rem; - padding-left: initial; - border-right: 0.2rem solid var(--md-default-fg-color--lighter); - border-left: initial; -} -.md-typeset ul { - list-style-type: disc; -} -.md-typeset ul, -.md-typeset ol { - margin-left: 0.625em; - padding: 0; -} -[dir=rtl] .md-typeset ul, -[dir=rtl] .md-typeset ol { - margin-right: 0.625em; - margin-left: initial; -} -.md-typeset ul ol, -.md-typeset ol ol { - list-style-type: lower-alpha; -} -.md-typeset ul ol ol, -.md-typeset ol ol ol { - list-style-type: lower-roman; -} -.md-typeset ul li, -.md-typeset ol li { - margin-bottom: 0.5em; - margin-left: 1.25em; -} -[dir=rtl] .md-typeset ul li, -[dir=rtl] .md-typeset ol li { - margin-right: 1.25em; - margin-left: initial; -} -.md-typeset ul li p, -.md-typeset ul li blockquote, -.md-typeset ol li p, -.md-typeset ol li blockquote { - margin: 0.5em 0; -} -.md-typeset ul li:last-child, -.md-typeset ol li:last-child { - margin-bottom: 0; -} -.md-typeset ul li ul, -.md-typeset ul li ol, -.md-typeset ol li ul, -.md-typeset ol li ol { - margin: 0.5em 0 0.5em 0.625em; -} -[dir=rtl] .md-typeset ul li ul, -[dir=rtl] .md-typeset ul li ol, -[dir=rtl] .md-typeset ol li ul, -[dir=rtl] .md-typeset ol li ol { - margin-right: 0.625em; - margin-left: initial; -} -.md-typeset dd { - margin: 1em 0 1em 1.875em; -} -[dir=rtl] .md-typeset dd { - margin-right: 1.875em; - margin-left: initial; -} -.md-typeset iframe, -.md-typeset img, -.md-typeset svg { - max-width: 100%; -} -.md-typeset table:not([class]) { - display: inline-block; - max-width: 100%; - border-radius: 0.1rem; - background: var(--md-default-bg-color); - font-size: 0.64rem; - box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); - overflow: auto; - -webkit-overflow-scrolling: touch; -} -.md-typeset table:not([class]) + * { - margin-top: 1.5em; -} -.md-typeset table:not([class]) th:not([align]), -.md-typeset table:not([class]) td:not([align]) { - text-align: left; -} -[dir=rtl] .md-typeset table:not([class]) th:not([align]), -[dir=rtl] .md-typeset table:not([class]) td:not([align]) { - text-align: right; -} -.md-typeset table:not([class]) th { - min-width: 5rem; - padding: 0.6rem 0.8rem; - background-color: var(--md-default-fg-color--light); - color: var(--md-default-bg-color); - vertical-align: top; -} -.md-typeset table:not([class]) td { - padding: 0.6rem 0.8rem; - border-top: 0.05rem solid var(--md-default-fg-color--lightest); - vertical-align: top; -} -.md-typeset table:not([class]) tr { - transition: background-color 125ms; -} -.md-typeset table:not([class]) tr:hover { - background-color: rgba(0, 0, 0, 0.035); - box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; -} -.md-typeset table:not([class]) tr:first-child td { - border-top: 0; -} -.md-typeset table:not([class]) a { - word-break: normal; -} -.md-typeset__scrollwrap { - margin: 1em -0.8rem; - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} -.md-typeset .md-typeset__table { - display: inline-block; - margin-bottom: 0.5em; - padding: 0 0.8rem; -} -.md-typeset .md-typeset__table table { - display: table; - width: 100%; - margin: 0; - overflow: hidden; -} - -html { - height: 100%; - background-color: var(--md-default-bg-color); - font-size: 125%; - overflow-x: hidden; -} - -body { - display: flex; - position: relative; - flex-direction: column; - width: 100%; - min-height: 100%; - font-size: 0.5rem; -} - -hr { - display: block; - height: 0.05rem; - padding: 0; - border: 0; -} - -.md-grid { - max-width: 61rem; - margin-right: auto; - margin-left: auto; -} - -.md-container { - display: flex; - flex-direction: column; - flex-grow: 1; -} - -.md-main { - flex-grow: 1; -} -.md-main__inner { - height: 100%; - padding-top: 1.5rem; - padding-bottom: 0.05rem; -} - -.md-ellipsis { - display: block; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} - -.md-toggle { - display: none; -} - -.md-overlay { - position: fixed; - top: 0; - width: 0; - height: 0; - transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; - background-color: var(--md-default-fg-color--light); - opacity: 0; - z-index: 3; -} - -.md-skip { - position: fixed; - margin: 0.5rem; - padding: 0.3rem 0.5rem; - transform: translateY(0.4rem); - border-radius: 0.1rem; - background-color: var(--md-default-fg-color); - color: var(--md-default-bg-color); - font-size: 0.64rem; - opacity: 0; -} -.md-skip:focus { - transform: translateY(0); - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 175ms 75ms; - opacity: 1; - z-index: 10; -} - -@page { - margin: 25mm; -} -.md-announce { - background-color: var(--md-default-fg-color); -} -.md-announce__inner { - min-height: 2.4rem; - padding: 0 0.8rem; - color: var(--md-default-bg-color); - font-size: 0.7rem; - line-height: 2.4rem; -} - -.md-clipboard { - position: absolute; - top: 0.4rem; - right: 0.4rem; - width: 1.2rem; - height: 1.2rem; - transition: color 250ms; - border-radius: 0.1rem; - color: var(--md-default-fg-color--lightest); - cursor: pointer; - z-index: 1; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.md-clipboard svg { - width: 0.9rem; - height: 0.9rem; -} -pre:hover .md-clipboard { - color: var(--md-default-fg-color--light); -} -pre .md-clipboard:focus, pre .md-clipboard:hover { - color: var(--md-accent-fg-color); -} -.md-content__inner { - margin: 0 0.8rem 1.2rem; - padding-top: 0.6rem; -} -.md-content__inner::before { - display: block; - height: 0.4rem; - content: ""; -} -.md-content__inner > :last-child { - margin-bottom: 0; -} -.md-content__button { - margin: 0.4rem 0; - margin-left: 0.4rem; - padding: 0; - float: right; -} -[dir=rtl] .md-content__button { - margin-right: 0.4rem; - margin-left: initial; - float: left; -} -[dir=rtl] .md-content__button svg { - transform: scaleX(-1); -} -.md-typeset .md-content__button { - color: var(--md-default-fg-color--lighter); -} -.md-content__button svg { - display: inline; - vertical-align: top; -} - -.md-dialog { - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); - display: block; - position: fixed; - right: 0.8rem; - bottom: 0.8rem; - left: initial; - min-width: 11.1rem; - padding: 0.4rem 0.6rem; - transform: translateY(100%); - transition: transform 0ms 400ms, opacity 400ms; - border: none; - border-radius: 0.1rem; - background: var(--md-default-fg-color); - color: var(--md-default-bg-color); - font-size: 0.7rem; - opacity: 0; - z-index: 2; -} -[dir=rtl] .md-dialog { - right: initial; - left: 0.8rem; -} -.md-dialog[data-md-state=open] { - transform: translateY(0); - transition: transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1), opacity 400ms; - opacity: 1; -} - -.md-header { - position: -webkit-sticky; - position: sticky; - top: 0; - right: 0; - left: 0; - height: 2.4rem; - transition: background-color 250ms, color 250ms; - background-color: var(--md-primary-fg-color); - color: var(--md-primary-bg-color); - box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0), 0 0.2rem 0.4rem rgba(0, 0, 0, 0); - z-index: 2; -} -.no-js .md-header { - transition: none; - box-shadow: none; -} -.md-header[data-md-state=shadow] { - transition: background-color 250ms, color 250ms, box-shadow 250ms; - box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2); -} - -.md-header-nav { - display: flex; - padding: 0 0.2rem; -} -.md-header-nav__button { - position: relative; - margin: 0.2rem; - padding: 0.4rem; - transition: opacity 250ms; - cursor: pointer; - z-index: 1; -} -[dir=rtl] .md-header-nav__button svg { - transform: scaleX(-1); -} -.md-header-nav__button:focus, .md-header-nav__button:hover { - opacity: 0.7; -} -.md-header-nav__button.md-logo { - margin: 0.2rem; - padding: 0.4rem; -} -.md-header-nav__button.md-logo img, -.md-header-nav__button.md-logo svg { - display: block; - width: 1.2rem; - height: 1.2rem; - fill: currentColor; -} -.no-js .md-header-nav__button[for=__search] { - display: none; -} -.md-header-nav__topic { - display: block; - position: absolute; - width: 100%; - padding: 0 1rem; - transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.md-header-nav__topic + .md-header-nav__topic { - transform: translateX(1.25rem); - transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; - opacity: 0; - z-index: -1; - pointer-events: none; -} -[dir=rtl] .md-header-nav__topic + .md-header-nav__topic { - transform: translateX(-1.25rem); -} -.no-js .md-header-nav__topic { - position: initial; -} -.no-js .md-header-nav__topic + .md-header-nav__topic { - display: none; -} -.md-header-nav__title { - flex-grow: 1; - font-size: 0.9rem; - line-height: 2.4rem; -} -.md-header-nav__title[data-md-state=active] .md-header-nav__topic { - transform: translateX(-1.25rem); - transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms; - opacity: 0; - z-index: -1; - pointer-events: none; -} -[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic { - transform: translateX(1.25rem); -} -.md-header-nav__title[data-md-state=active] .md-header-nav__topic + .md-header-nav__topic { - transform: translateX(0); - transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; - opacity: 1; - z-index: 0; - pointer-events: initial; -} -.md-header-nav__title > .md-header-nav__ellipsis { - position: relative; - width: 100%; - height: 100%; -} -.md-header-nav__source { - display: none; -} - -.md-hero { - transition: background 250ms; - background-color: var(--md-primary-fg-color); - color: var(--md-primary-bg-color); - font-size: 1rem; - overflow: hidden; -} -.md-hero__inner { - margin-top: 1rem; - padding: 0.8rem 0.8rem 0.4rem; - transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; - transition-delay: 100ms; -} -[data-md-state=hidden] .md-hero__inner { - pointer-events: none; - transform: translateY(0.625rem); - transition: transform 0ms 400ms, opacity 100ms 0ms; - opacity: 0; -} -.md-hero--expand .md-hero__inner { - margin-bottom: 1.2rem; -} - -.md-footer { - background-color: var(--md-default-fg-color); - color: var(--md-default-bg-color); -} - -.md-footer-nav__inner { - padding: 0.2rem; - overflow: auto; -} -.md-footer-nav__link { - display: flex; - padding-top: 1.4rem; - padding-bottom: 0.4rem; - transition: opacity 250ms; -} -.md-footer-nav__link:focus, .md-footer-nav__link:hover { - opacity: 0.7; -} -.md-footer-nav__link--prev { - width: 25%; - float: left; -} -[dir=rtl] .md-footer-nav__link--prev { - float: right; -} -[dir=rtl] .md-footer-nav__link--prev svg { - transform: scaleX(-1); -} -.md-footer-nav__link--next { - width: 75%; - float: right; - text-align: right; -} -[dir=rtl] .md-footer-nav__link--next { - float: left; - text-align: left; -} -[dir=rtl] .md-footer-nav__link--next svg { - transform: scaleX(-1); -} -.md-footer-nav__title { - position: relative; - flex-grow: 1; - max-width: calc(100% - 2.4rem); - padding: 0 1rem; - font-size: 0.9rem; - line-height: 2.4rem; -} -.md-footer-nav__button { - margin: 0.2rem; - padding: 0.4rem; -} -.md-footer-nav__direction { - position: absolute; - right: 0; - left: 0; - margin-top: -1rem; - padding: 0 1rem; - color: var(--md-default-bg-color--light); - font-size: 0.64rem; -} - -.md-footer-meta { - background-color: var(--md-default-fg-color--lighter); -} -.md-footer-meta__inner { - padding: 0.2rem; - overflow: auto; -} -html .md-footer-meta.md-typeset a { - color: var(--md-default-bg-color--light); -} -html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover { - color: var(--md-default-bg-color); -} - -.md-footer-copyright { - margin: 0 0.6rem; - padding: 0.4rem 0; - color: var(--md-default-bg-color--lighter); - font-size: 0.64rem; -} -.md-footer-copyright__highlight { - color: var(--md-default-bg-color--light); -} - -.md-footer-social { - margin: 0 0.4rem; - padding: 0.2rem 0 0.6rem; -} -.md-footer-social__link { - display: inline-block; - width: 1.6rem; - height: 1.6rem; - transition: color 250ms; - text-align: center; -} -.md-footer-social__link::before { - line-height: 1.9; -} -.md-footer-social__link svg { - width: 0.8rem; - vertical-align: -25%; - fill: currentColor; -} - -.md-nav { - font-size: 0.7rem; - line-height: 1.3; -} -.md-nav__title { - display: block; - padding: 0 0.6rem; - font-weight: 700; - text-overflow: ellipsis; - overflow: hidden; -} -.md-nav__title .md-nav__button { - display: none; -} -.md-nav__title .md-nav__button img { - width: 100%; - height: auto; -} -.md-nav__title .md-nav__button.md-logo img, -.md-nav__title .md-nav__button.md-logo svg { - display: block; - width: 2.4rem; - height: 2.4rem; -} -.md-nav__title .md-nav__button.md-logo svg { - fill: currentColor; -} -.md-nav__list { - margin: 0; - padding: 0; - list-style: none; -} -.md-nav__item { - padding: 0 0.6rem; -} -.md-nav__item:last-child { - padding-bottom: 0.6rem; -} -.md-nav__item .md-nav__item { - padding-right: 0; -} -[dir=rtl] .md-nav__item .md-nav__item { - padding-right: 0.6rem; - padding-left: 0; -} -.md-nav__item .md-nav__item:last-child { - padding-bottom: 0; -} -.md-nav__link { - display: block; - margin-top: 0.625em; - transition: color 125ms; - text-overflow: ellipsis; - cursor: pointer; - overflow: hidden; - scroll-snap-align: start; -} -html .md-nav__link[for=__toc] { - display: none; -} -html .md-nav__link[for=__toc] ~ .md-nav { - display: none; -} -.md-nav__link[data-md-state=blur] { - color: var(--md-default-fg-color--light); -} -.md-nav__item .md-nav__link--active { - color: var(--md-primary-fg-color); -} -.md-nav__item--nested > .md-nav__link { - color: inherit; -} -.md-nav__link:focus, .md-nav__link:hover { - color: var(--md-accent-fg-color); -} -.md-nav__source { - display: none; -} - -.md-search { - position: relative; -} -.no-js .md-search { - display: none; -} -.md-search__overlay { - opacity: 0; - z-index: 1; -} -.md-search__inner { - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -.md-search__form { - position: relative; -} -.md-search__input { - position: relative; - padding: 0 2.2rem 0 3.6rem; - text-overflow: ellipsis; - z-index: 2; -} -[dir=rtl] .md-search__input { - padding: 0 3.6rem 0 2.2rem; -} -.md-search__input::-webkit-input-placeholder { - -webkit-transition: color 250ms; - transition: color 250ms; -} -.md-search__input::-moz-placeholder { - -moz-transition: color 250ms; - transition: color 250ms; -} -.md-search__input::-ms-input-placeholder { - -ms-transition: color 250ms; - transition: color 250ms; -} -.md-search__input::placeholder { - transition: color 250ms; -} -.md-search__input::-webkit-input-placeholder { - color: var(--md-default-fg-color--light); -} -.md-search__input::-moz-placeholder { - color: var(--md-default-fg-color--light); -} -.md-search__input::-ms-input-placeholder { - color: var(--md-default-fg-color--light); -} -.md-search__input ~ .md-search__icon, .md-search__input::placeholder { - color: var(--md-default-fg-color--light); -} -.md-search__input::-ms-clear { - display: none; -} -.md-search__icon { - position: absolute; - width: 1.2rem; - height: 1.2rem; - transition: color 250ms, opacity 250ms; - cursor: pointer; - z-index: 2; -} -.md-search__icon:hover { - opacity: 0.7; -} -.md-search__icon[for=__search] { - top: 0.3rem; - left: 0.5rem; -} -[dir=rtl] .md-search__icon[for=__search] { - right: 0.5rem; - left: initial; -} -[dir=rtl] .md-search__icon[for=__search] svg { - transform: scaleX(-1); -} -.md-search__icon[type=reset] { - top: 0.3rem; - right: 0.5rem; - transform: scale(0.75); - transition: transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms; - opacity: 0; - pointer-events: none; -} -[dir=rtl] .md-search__icon[type=reset] { - right: initial; - left: 0.5rem; -} -[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset] { - transform: scale(1); - opacity: 1; - pointer-events: initial; -} -[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type=reset]:hover { - opacity: 0.7; -} -.md-search__output { - position: absolute; - width: 100%; - border-radius: 0 0 0.1rem 0.1rem; - overflow: hidden; - z-index: 1; -} -.md-search__scrollwrap { - height: 100%; - background-color: var(--md-default-bg-color); - box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); - overflow-y: auto; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-scroll-snap-type: y mandatory; - -ms-scroll-snap-type: y mandatory; - scroll-snap-type: y mandatory; - -webkit-overflow-scrolling: touch; -} - -.md-search-result { - color: var(--md-default-fg-color); - word-break: break-word; -} -.md-search-result__meta { - padding: 0 0.8rem; - background-color: var(--md-default-fg-color--lightest); - color: var(--md-default-fg-color--light); - font-size: 0.64rem; - line-height: 1.8rem; - scroll-snap-align: start; -} -.md-search-result__list { - margin: 0; - padding: 0; - border-top: 0.05rem solid var(--md-default-fg-color--lightest); - list-style: none; -} -.md-search-result__item { - box-shadow: 0 -0.05rem 0 var(--md-default-fg-color--lightest); -} -.md-search-result__link { - display: block; - transition: background 250ms; - outline: 0; - overflow: hidden; - scroll-snap-align: start; -} -.md-search-result__link:focus, .md-search-result__link:hover { - background-color: var(--md-accent-fg-color--transparent); -} -.md-search-result__link:focus .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before { - opacity: 0.7; -} -.md-search-result__link:last-child .md-search-result__teaser { - margin-bottom: 0.6rem; -} -.md-search-result__article { - position: relative; - padding: 0 0.8rem; - overflow: auto; -} -.md-search-result__article--document .md-search-result__title { - margin: 0.55rem 0; - font-size: 0.8rem; - font-weight: 400; - line-height: 1.4; -} -.md-search-result__icon { - position: absolute; - left: 0; - margin: 0.1rem; - padding: 0.4rem; - color: var(--md-default-fg-color--light); -} -[dir=rtl] .md-search-result__icon { - right: 0; - left: initial; -} -[dir=rtl] .md-search-result__icon svg { - transform: scaleX(-1); -} -.md-search-result__title { - margin: 0.5em 0; - font-size: 0.64rem; - font-weight: 700; - line-height: 1.4; -} -.md-search-result__teaser { - display: -webkit-box; - max-height: 1.65rem; - margin: 0.5em 0; - color: var(--md-default-fg-color--light); - font-size: 0.64rem; - line-height: 1.4; - text-overflow: ellipsis; - overflow: hidden; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} -.md-search-result em { - font-style: normal; - font-weight: 700; - text-decoration: underline; -} - -.md-sidebar { - position: absolute; - width: 12.1rem; - padding: 1.2rem 0; - overflow: hidden; -} -.md-sidebar[data-md-state=lock] { - position: fixed; - top: 2.4rem; -} -.md-sidebar--secondary { - display: none; -} -.md-sidebar__scrollwrap { - max-height: 100%; - margin: 0 0.2rem; - overflow-y: auto; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-scroll-snap-type: y mandatory; - -ms-scroll-snap-type: y mandatory; - scroll-snap-type: y mandatory; -} -.md-sidebar__scrollwrap::-webkit-scrollbar { - width: 0.2rem; - height: 0.2rem; -} -.md-sidebar__scrollwrap::-webkit-scrollbar-thumb { - background-color: var(--md-default-fg-color--lighter); -} -.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover { - background-color: var(--md-accent-fg-color); -} - -@-webkit-keyframes md-source__facts--done { - 0% { - height: 0; - } - 100% { - height: 0.65rem; - } -} - -@keyframes md-source__facts--done { - 0% { - height: 0; - } - 100% { - height: 0.65rem; - } -} -@-webkit-keyframes md-source__fact--done { - 0% { - transform: translateY(100%); - opacity: 0; - } - 50% { - opacity: 0; - } - 100% { - transform: translateY(0%); - opacity: 1; - } -} -@keyframes md-source__fact--done { - 0% { - transform: translateY(100%); - opacity: 0; - } - 50% { - opacity: 0; - } - 100% { - transform: translateY(0%); - opacity: 1; - } -} -.md-source { - display: block; - transition: opacity 250ms; - font-size: 0.65rem; - line-height: 1.25; - white-space: nowrap; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; -} -[dir=rtl] .md-source { - padding-right: initial; - padding-left: 0.6rem; -} -.md-source:hover { - opacity: 0.7; -} -.md-source__icon { - display: inline-block; - width: 2.4rem; - height: 2.4rem; - vertical-align: middle; -} -.md-source__icon svg { - margin-top: 0.6rem; - margin-left: 0.6rem; -} -[dir=rtl] .md-source__icon svg { - margin-right: 0.6rem; - margin-left: initial; -} -.md-source__icon + .md-source__repository { - margin-left: -2rem; - padding-left: 2rem; -} -[dir=rtl] .md-source__icon + .md-source__repository { - margin-right: -2rem; - margin-left: initial; - padding-right: 2rem; - padding-left: initial; -} -.md-source__repository { - display: inline-block; - max-width: calc(100% - 1.2rem); - margin-left: 0.6rem; - font-weight: 700; - text-overflow: ellipsis; - overflow: hidden; - vertical-align: middle; -} -.md-source__facts { - margin: 0; - padding: 0; - font-size: 0.55rem; - font-weight: 700; - list-style-type: none; - opacity: 0.75; - overflow: hidden; -} -[data-md-state=done] .md-source__facts { - -webkit-animation: md-source__facts--done 250ms ease-in; - animation: md-source__facts--done 250ms ease-in; -} -.md-source__fact { - float: left; -} -[dir=rtl] .md-source__fact { - float: right; -} -[data-md-state=done] .md-source__fact { - -webkit-animation: md-source__fact--done 400ms ease-out; - animation: md-source__fact--done 400ms ease-out; -} -.md-source__fact::before { - margin: 0 0.1rem; - content: "·"; -} -.md-source__fact:first-child::before { - display: none; -} - -.md-tabs { - width: 100%; - transition: background 250ms; - background-color: var(--md-primary-fg-color); - color: var(--md-primary-bg-color); - overflow: auto; -} -.no-js .md-tabs { - transition: none; -} -.md-tabs__list { - margin: 0; - margin-left: 0.2rem; - padding: 0; - list-style: none; - white-space: nowrap; -} -[dir=rtl] .md-tabs__list { - margin-right: 0.2rem; - margin-left: initial; -} -.md-tabs__item { - display: inline-block; - height: 2.4rem; - padding-right: 0.6rem; - padding-left: 0.6rem; -} -.md-tabs__link { - display: block; - margin-top: 0.8rem; - transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms; - font-size: 0.7rem; - opacity: 0.7; -} -.no-js .md-tabs__link { - transition: none; -} -.md-tabs__link--active, .md-tabs__link:hover { - color: inherit; - opacity: 1; -} -.md-tabs__item:nth-child(2) .md-tabs__link { - transition-delay: 20ms; -} -.md-tabs__item:nth-child(3) .md-tabs__link { - transition-delay: 40ms; -} -.md-tabs__item:nth-child(4) .md-tabs__link { - transition-delay: 60ms; -} -.md-tabs__item:nth-child(5) .md-tabs__link { - transition-delay: 80ms; -} -.md-tabs__item:nth-child(6) .md-tabs__link { - transition-delay: 100ms; -} -.md-tabs__item:nth-child(7) .md-tabs__link { - transition-delay: 120ms; -} -.md-tabs__item:nth-child(8) .md-tabs__link { - transition-delay: 140ms; -} -.md-tabs__item:nth-child(9) .md-tabs__link { - transition-delay: 160ms; -} -.md-tabs__item:nth-child(10) .md-tabs__link { - transition-delay: 180ms; -} -.md-tabs__item:nth-child(11) .md-tabs__link { - transition-delay: 200ms; -} -.md-tabs__item:nth-child(12) .md-tabs__link { - transition-delay: 220ms; -} -.md-tabs__item:nth-child(13) .md-tabs__link { - transition-delay: 240ms; -} -.md-tabs__item:nth-child(14) .md-tabs__link { - transition-delay: 260ms; -} -.md-tabs__item:nth-child(15) .md-tabs__link { - transition-delay: 280ms; -} -.md-tabs__item:nth-child(16) .md-tabs__link { - transition-delay: 300ms; -} -.md-tabs[data-md-state=hidden] { - pointer-events: none; -} -.md-tabs[data-md-state=hidden] .md-tabs__link { - transform: translateY(50%); - transition: color 250ms, transform 0ms 400ms, opacity 100ms; - opacity: 0; -} - -.md-typeset .admonition, .md-typeset details { - margin: 1.5625em 0; - padding: 0 0.6rem; - border-left: 0.2rem solid #448aff; - border-radius: 0.1rem; - font-size: 0.64rem; - box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1); - overflow: auto; -} -[dir=rtl] .md-typeset .admonition, [dir=rtl] .md-typeset details { - border-right: 0.2rem solid #448aff; - border-left: none; -} -html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child { - margin-bottom: 0.6rem; -} -.md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details { - margin: 1em 0; -} -.md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.abstract, .md-typeset details.abstract { - border-left-color: #00b0ff; -} -.md-typeset .admonition.tldr > :first-child, .md-typeset details.tldr > :first-child, .md-typeset .admonition.summary > :first-child, .md-typeset details.summary > :first-child, .md-typeset .admonition.abstract > :first-child, .md-typeset details.abstract > :first-child { - background-color: rgba(0, 176, 255, 0.1); -} -.md-typeset .admonition.tldr > :first-child::before, .md-typeset details.tldr > :first-child::before, .md-typeset .admonition.summary > :first-child::before, .md-typeset details.summary > :first-child::before, .md-typeset .admonition.abstract > :first-child::before, .md-typeset details.abstract > :first-child::before { - background-color: #00b0ff; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info { - border-left-color: #00b8d4; -} -.md-typeset .admonition.todo > :first-child, .md-typeset details.todo > :first-child, .md-typeset .admonition.info > :first-child, .md-typeset details.info > :first-child { - background-color: rgba(0, 184, 212, 0.1); -} -.md-typeset .admonition.todo > :first-child::before, .md-typeset details.todo > :first-child::before, .md-typeset .admonition.info > :first-child::before, .md-typeset details.info > :first-child::before { - background-color: #00b8d4; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.tip, .md-typeset details.tip { - border-left-color: #00bfa5; -} -.md-typeset .admonition.important > :first-child, .md-typeset details.important > :first-child, .md-typeset .admonition.hint > :first-child, .md-typeset details.hint > :first-child, .md-typeset .admonition.tip > :first-child, .md-typeset details.tip > :first-child { - background-color: rgba(0, 191, 165, 0.1); -} -.md-typeset .admonition.important > :first-child::before, .md-typeset details.important > :first-child::before, .md-typeset .admonition.hint > :first-child::before, .md-typeset details.hint > :first-child::before, .md-typeset .admonition.tip > :first-child::before, .md-typeset details.tip > :first-child::before { - background-color: #00bfa5; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.success, .md-typeset details.success { - border-left-color: #00c853; -} -.md-typeset .admonition.done > :first-child, .md-typeset details.done > :first-child, .md-typeset .admonition.check > :first-child, .md-typeset details.check > :first-child, .md-typeset .admonition.success > :first-child, .md-typeset details.success > :first-child { - background-color: rgba(0, 200, 83, 0.1); -} -.md-typeset .admonition.done > :first-child::before, .md-typeset details.done > :first-child::before, .md-typeset .admonition.check > :first-child::before, .md-typeset details.check > :first-child::before, .md-typeset .admonition.success > :first-child::before, .md-typeset details.success > :first-child::before { - background-color: #00c853; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.question, .md-typeset details.question { - border-left-color: #64dd17; -} -.md-typeset .admonition.faq > :first-child, .md-typeset details.faq > :first-child, .md-typeset .admonition.help > :first-child, .md-typeset details.help > :first-child, .md-typeset .admonition.question > :first-child, .md-typeset details.question > :first-child { - background-color: rgba(100, 221, 23, 0.1); -} -.md-typeset .admonition.faq > :first-child::before, .md-typeset details.faq > :first-child::before, .md-typeset .admonition.help > :first-child::before, .md-typeset details.help > :first-child::before, .md-typeset .admonition.question > :first-child::before, .md-typeset details.question > :first-child::before { - background-color: #64dd17; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.warning, .md-typeset details.warning { - border-left-color: #ff9100; -} -.md-typeset .admonition.attention > :first-child, .md-typeset details.attention > :first-child, .md-typeset .admonition.caution > :first-child, .md-typeset details.caution > :first-child, .md-typeset .admonition.warning > :first-child, .md-typeset details.warning > :first-child { - background-color: rgba(255, 145, 0, 0.1); -} -.md-typeset .admonition.attention > :first-child::before, .md-typeset details.attention > :first-child::before, .md-typeset .admonition.caution > :first-child::before, .md-typeset details.caution > :first-child::before, .md-typeset .admonition.warning > :first-child::before, .md-typeset details.warning > :first-child::before { - background-color: #ff9100; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.failure, .md-typeset details.failure { - border-left-color: #ff5252; -} -.md-typeset .admonition.missing > :first-child, .md-typeset details.missing > :first-child, .md-typeset .admonition.fail > :first-child, .md-typeset details.fail > :first-child, .md-typeset .admonition.failure > :first-child, .md-typeset details.failure > :first-child { - background-color: rgba(255, 82, 82, 0.1); -} -.md-typeset .admonition.missing > :first-child::before, .md-typeset details.missing > :first-child::before, .md-typeset .admonition.fail > :first-child::before, .md-typeset details.fail > :first-child::before, .md-typeset .admonition.failure > :first-child::before, .md-typeset details.failure > :first-child::before { - background-color: #ff5252; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger { - border-left-color: #ff1744; -} -.md-typeset .admonition.error > :first-child, .md-typeset details.error > :first-child, .md-typeset .admonition.danger > :first-child, .md-typeset details.danger > :first-child { - background-color: rgba(255, 23, 68, 0.1); -} -.md-typeset .admonition.error > :first-child::before, .md-typeset details.error > :first-child::before, .md-typeset .admonition.danger > :first-child::before, .md-typeset details.danger > :first-child::before { - background-color: #ff1744; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.bug, .md-typeset details.bug { - border-left-color: #f50057; -} -.md-typeset .admonition.bug > :first-child, .md-typeset details.bug > :first-child { - background-color: rgba(245, 0, 87, 0.1); -} -.md-typeset .admonition.bug > :first-child::before, .md-typeset details.bug > :first-child::before { - background-color: #f50057; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.example, .md-typeset details.example { - border-left-color: #651fff; -} -.md-typeset .admonition.example > :first-child, .md-typeset details.example > :first-child { - background-color: rgba(101, 31, 255, 0.1); -} -.md-typeset .admonition.example > :first-child::before, .md-typeset details.example > :first-child::before { - background-color: #651fff; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote { - border-left-color: #9e9e9e; -} -.md-typeset .admonition.cite > :first-child, .md-typeset details.cite > :first-child, .md-typeset .admonition.quote > :first-child, .md-typeset details.quote > :first-child { - background-color: rgba(158, 158, 158, 0.1); -} -.md-typeset .admonition.cite > :first-child::before, .md-typeset details.cite > :first-child::before, .md-typeset .admonition.quote > :first-child::before, .md-typeset details.quote > :first-child::before { - background-color: #9e9e9e; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .admonition-title, .md-typeset summary { - margin: 0 -0.6rem; - padding: 0.4rem 0.6rem 0.4rem 2rem; - background-color: rgba(68, 138, 255, 0.1); - font-weight: 700; -} -[dir=rtl] .md-typeset .admonition-title, [dir=rtl] .md-typeset summary { - padding: 0.4rem 2rem 0.4rem 0.6rem; -} -.md-typeset .admonition-title:last-child, .md-typeset summary:last-child { - margin-bottom: 0; -} -.md-typeset .admonition-title::before, .md-typeset summary::before { - position: absolute; - width: 1rem; - height: 1rem; - margin-left: -1.4rem; - background-color: #448aff; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); - content: ""; -} -[dir=rtl] .md-typeset .admonition-title::before, [dir=rtl] .md-typeset summary::before { - margin-right: -1.4rem; - margin-left: initial; -} - -.codehilite .o, .highlight .o { - color: inherit; -} -.codehilite .ow, .highlight .ow { - color: inherit; -} -.codehilite .ge, .highlight .ge { - color: #000000; -} -.codehilite .gr, .highlight .gr { - color: #AA0000; -} -.codehilite .gh, .highlight .gh { - color: #999999; -} -.codehilite .go, .highlight .go { - color: #888888; -} -.codehilite .gp, .highlight .gp { - color: #555555; -} -.codehilite .gs, .highlight .gs { - color: inherit; -} -.codehilite .gu, .highlight .gu { - color: #AAAAAA; -} -.codehilite .gt, .highlight .gt { - color: #AA0000; -} -.codehilite .gd, .highlight .gd { - background-color: #FFDDDD; -} -.codehilite .gi, .highlight .gi { - background-color: #DDFFDD; -} -.codehilite .k, .highlight .k { - color: #3B78E7; -} -.codehilite .kc, .highlight .kc { - color: #A71D5D; -} -.codehilite .kd, .highlight .kd { - color: #3B78E7; -} -.codehilite .kn, .highlight .kn { - color: #3B78E7; -} -.codehilite .kp, .highlight .kp { - color: #A71D5D; -} -.codehilite .kr, .highlight .kr { - color: #3E61A2; -} -.codehilite .kt, .highlight .kt { - color: #3E61A2; -} -.codehilite .c, .highlight .c { - color: #999999; -} -.codehilite .cm, .highlight .cm { - color: #999999; -} -.codehilite .cp, .highlight .cp { - color: #666666; -} -.codehilite .c1, .highlight .c1 { - color: #999999; -} -.codehilite .ch, .highlight .ch { - color: #999999; -} -.codehilite .cs, .highlight .cs { - color: #999999; -} -.codehilite .na, .highlight .na { - color: #C2185B; -} -.codehilite .nb, .highlight .nb { - color: #C2185B; -} -.codehilite .bp, .highlight .bp { - color: #3E61A2; -} -.codehilite .nc, .highlight .nc { - color: #C2185B; -} -.codehilite .no, .highlight .no { - color: #3E61A2; -} -.codehilite .nd, .highlight .nd { - color: #666666; -} -.codehilite .ni, .highlight .ni { - color: #666666; -} -.codehilite .ne, .highlight .ne { - color: #C2185B; -} -.codehilite .nf, .highlight .nf { - color: #C2185B; -} -.codehilite .nl, .highlight .nl { - color: #3B5179; -} -.codehilite .nn, .highlight .nn { - color: #EC407A; -} -.codehilite .nt, .highlight .nt { - color: #3B78E7; -} -.codehilite .nv, .highlight .nv { - color: #3E61A2; -} -.codehilite .vc, .highlight .vc { - color: #3E61A2; -} -.codehilite .vg, .highlight .vg { - color: #3E61A2; -} -.codehilite .vi, .highlight .vi { - color: #3E61A2; -} -.codehilite .nx, .highlight .nx { - color: #EC407A; -} -.codehilite .m, .highlight .m { - color: #E74C3C; -} -.codehilite .mf, .highlight .mf { - color: #E74C3C; -} -.codehilite .mh, .highlight .mh { - color: #E74C3C; -} -.codehilite .mi, .highlight .mi { - color: #E74C3C; -} -.codehilite .il, .highlight .il { - color: #E74C3C; -} -.codehilite .mo, .highlight .mo { - color: #E74C3C; -} -.codehilite .s, .highlight .s { - color: #0D904F; -} -.codehilite .sb, .highlight .sb { - color: #0D904F; -} -.codehilite .sc, .highlight .sc { - color: #0D904F; -} -.codehilite .sd, .highlight .sd { - color: #999999; -} -.codehilite .s2, .highlight .s2 { - color: #0D904F; -} -.codehilite .se, .highlight .se { - color: #183691; -} -.codehilite .sh, .highlight .sh { - color: #183691; -} -.codehilite .si, .highlight .si { - color: #183691; -} -.codehilite .sx, .highlight .sx { - color: #183691; -} -.codehilite .sr, .highlight .sr { - color: #009926; -} -.codehilite .s1, .highlight .s1 { - color: #0D904F; -} -.codehilite .ss, .highlight .ss { - color: #0D904F; -} -.codehilite .err, .highlight .err { - color: #A61717; -} -.codehilite .w, .highlight .w { - color: transparent; -} -.codehilite .hll, .highlight .hll { - display: block; - margin: 0 -0.6rem; - padding: 0 0.6rem; - background-color: rgba(255, 235, 59, 0.5); -} - -.codehilitetable, .highlighttable { - display: block; - overflow: hidden; -} -.codehilitetable tbody, .highlighttable tbody, -.codehilitetable td, -.highlighttable td { - display: block; - padding: 0; -} -.codehilitetable tr, .highlighttable tr { - display: flex; -} -.codehilitetable pre, .highlighttable pre, -.codehilitetable .linenodiv, -.highlighttable .linenodiv { - margin: 0; - border-radius: 0; -} -.codehilitetable .linenodiv, .highlighttable .linenodiv { - padding: 0.525rem 0.6rem; -} -.codehilitetable .linenos, .highlighttable .linenos { - color: var(--md-default-fg-color--lighter); - box-shadow: inset 0 0 0 0.05rem var(--md-code-bg-color); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.codehilitetable .linenos pre, .highlighttable .linenos pre { - background-color: transparent; - color: inherit; - text-align: right; -} -.codehilitetable .code, .highlighttable .code { - flex: 1; - overflow: hidden; -} - -.md-typeset > .codehilitetable, .md-typeset > .highlighttable { - margin: 1em 0; - border-radius: 0.2em; -} - -.md-typeset [id^="fnref:"] { - display: inline-block; -} -.md-typeset [id^="fnref:"]:target { - margin-top: -3.8rem; - padding-top: 3.8rem; - pointer-events: none; -} -.md-typeset [id^="fn:"]::before { - display: none; - height: 0; - content: ""; -} -.md-typeset [id^="fn:"]:target::before { - display: block; - margin-top: -3.5rem; - padding-top: 3.5rem; - pointer-events: none; -} -.md-typeset .footnote { - color: var(--md-default-fg-color--light); - font-size: 0.64rem; -} -.md-typeset .footnote ol { - margin-left: 0; -} -.md-typeset .footnote li { - transition: color 250ms; -} -.md-typeset .footnote li:target { - color: var(--md-default-fg-color); -} -.md-typeset .footnote li :first-child { - margin-top: 0; -} -.md-typeset .footnote li:hover .footnote-backref, .md-typeset .footnote li:target .footnote-backref { - transform: translateX(0); - opacity: 1; -} -.md-typeset .footnote li:hover .footnote-backref:hover, .md-typeset .footnote li:target .footnote-backref { - color: var(--md-accent-fg-color); -} -.md-typeset .footnote-ref { - display: inline-block; - pointer-events: initial; -} -.md-typeset .footnote-ref::before { - display: inline; - margin: 0 0.2em; - border-left: 0.05rem solid var(--md-default-fg-color--lighter); - font-size: 1.25em; - content: ""; - vertical-align: -0.25rem; -} -.md-typeset .footnote-backref { - display: inline-block; - transform: translateX(0.25rem); - transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms; - color: var(--md-default-fg-color--lighter); - font-size: 0; - opacity: 0; - vertical-align: text-bottom; -} -[dir=rtl] .md-typeset .footnote-backref { - transform: translateX(-0.25rem); -} -.md-typeset .footnote-backref::before { - display: inline-block; - width: 0.8rem; - height: 0.8rem; - background-color: currentColor; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); - content: ""; -} -[dir=rtl] .md-typeset .footnote-backref::before svg { - transform: scaleX(-1); -} - -.md-typeset .headerlink { - display: inline-block; - margin-left: 0.5rem; - transform: translate(0, 0.25rem); - transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms 500ms; - opacity: 0; - visibility: hidden; -} -[dir=rtl] .md-typeset .headerlink { - margin-right: 0.5rem; - margin-left: initial; -} -html body .md-typeset .headerlink { - color: var(--md-default-fg-color--lighter); -} -.md-typeset :hover .headerlink, -.md-typeset :target .headerlink, -.md-typeset .headerlink:focus { - transform: translate(0, 0); - transition: transform 250ms 250ms, color 250ms, opacity 125ms 250ms, visibility 0ms; - opacity: 1; - visibility: visible; -} -.md-typeset .headerlink:focus, -.md-typeset .headerlink:hover, -.md-typeset :target .headerlink { - color: var(--md-accent-fg-color); -} -.md-typeset h3[id]::before, .md-typeset h2[id]::before, .md-typeset h1[id]::before { - display: block; - margin-top: -0.4rem; - padding-top: 0.4rem; - content: ""; -} -.md-typeset h3[id]:target::before, .md-typeset h2[id]:target::before, .md-typeset h1[id]:target::before { - margin-top: -3.4rem; - padding-top: 3.4rem; -} -.md-typeset h4[id]::before { - display: block; - margin-top: -0.45rem; - padding-top: 0.45rem; - content: ""; -} -.md-typeset h4[id]:target::before { - margin-top: -3.45rem; - padding-top: 3.45rem; -} -.md-typeset h6[id]::before, .md-typeset h5[id]::before { - display: block; - margin-top: -0.6rem; - padding-top: 0.6rem; - content: ""; -} -.md-typeset h6[id]:target::before, .md-typeset h5[id]:target::before { - margin-top: -3.6rem; - padding-top: 3.6rem; -} -.md-typeset .MJXc-display { - margin: 0.75em 0; - padding: 0.75em 0; - overflow: auto; - -webkit-overflow-scrolling: touch; -} -.md-typeset .MathJax_CHTML { - outline: 0; -} - -.md-typeset del.critic, -.md-typeset ins.critic, -.md-typeset .critic.comment { - margin: 0 0.25em; - padding: 0.0625em 0; - border-radius: 0.1rem; - -webkit-box-decoration-break: clone; - box-decoration-break: clone; -} -.md-typeset del.critic { - background-color: #FFDDDD; - box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; -} -.md-typeset ins.critic { - background-color: #DDFFDD; - box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; -} -.md-typeset .critic.comment { - color: #999999; -} -.md-typeset .critic.comment::before { - content: "/* "; -} -.md-typeset .critic.comment::after { - content: " */"; -} -.md-typeset .critic.block { - display: block; - margin: 1em 0; - padding-right: 0.8rem; - padding-left: 0.8rem; - box-shadow: none; -} -.md-typeset .critic.block :first-child { - margin-top: 0.5em; -} -.md-typeset .critic.block :last-child { - margin-bottom: 0.5em; -} - -.md-typeset details { - display: block; - padding-top: 0; -} -.md-typeset details[open] > summary::after { - transform: rotate(180deg); -} -.md-typeset details:not([open]) { - padding-bottom: 0; -} -.md-typeset details:not([open]) > summary { - border-bottom: none; -} -.md-typeset details summary { - position: relative; - padding-right: 2rem; -} -[dir=rtl] .md-typeset details summary { - padding-left: 2rem; -} -.md-typeset summary { - display: block; - outline: none; - cursor: pointer; -} -.md-typeset summary::-webkit-details-marker { - display: none; -} -.md-typeset summary::after { - position: absolute; - right: 0.6rem; - width: 1rem; - height: 1rem; - background-color: var(--md-default-fg-color--lighter); - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); - content: ""; -} -[dir=rtl] .md-typeset summary::after { - right: initial; - left: 0.6rem; -} - -.md-typeset .emojione, -.md-typeset .twemoji, -.md-typeset .gemoji { - width: 1rem; - vertical-align: text-top; -} - -.highlight [data-linenos]::before { - display: inline-block; - position: -webkit-sticky; - position: sticky; - left: -0.6rem; - margin-right: 0.6rem; - margin-left: -0.6rem; - padding-left: 0.6rem; - border-right: 0.05rem solid var(--md-default-fg-color--lightest); - color: var(--md-default-fg-color--lighter); - content: attr(data-linenos); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.md-typeset code.codehilite, .md-typeset code.highlight { - margin: 0 0.2941176471em; - padding: 0.0735294118em 0; -} - -.md-typeset .tabbed-content { - display: none; - order: 99; - width: 100%; - background-color: var(--md-code-bg-color); -} -.md-typeset .tabbed-content pre { - margin: 0; - border-radius: 0; -} -.md-typeset .tabbed-set { - display: flex; - position: relative; - flex-wrap: wrap; - margin: 1em 0; - border: 0.05rem solid var(--md-default-fg-color--lightest); - border-radius: 0.1rem; -} -.md-typeset .tabbed-set > input { - display: none; -} -.md-typeset .tabbed-set > input:checked + label { - border-color: var(--md-accent-fg-color); - color: var(--md-accent-fg-color); -} -.md-typeset .tabbed-set > input:checked + label + .tabbed-content { - display: block; - padding: 0 0.6rem; -} -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > :last-child { - margin-bottom: 0.6rem; -} -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child { - margin: 0 -0.6rem; -} -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > pre:only-child pre, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlight:only-child pre, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .highlighttable:only-child pre, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilite:only-child pre, -.md-typeset .tabbed-set > input:checked + label + .tabbed-content > .codehilitetable:only-child pre { - background: transparent; -} -.md-typeset .tabbed-set > label { - width: auto; - padding: 0.6rem; - padding-bottom: 0.5rem; - transition: color 125ms, border 250ms; - border-bottom: 0.1rem solid transparent; - color: var(--md-default-fg-color--light); - font-size: 0.64rem; - font-weight: 700; - cursor: pointer; -} -html .md-typeset .tabbed-set > label:hover { - color: var(--md-accent-fg-color); -} - -.md-typeset .task-list-item { - position: relative; - list-style-type: none; -} -.md-typeset .task-list-item [type=checkbox] { - position: absolute; - top: 0.45em; - left: -2em; -} -[dir=rtl] .md-typeset .task-list-item [type=checkbox] { - right: -2em; - left: initial; -} -.md-typeset .task-list-control .task-list-indicator::before { - position: absolute; - top: 0.15em; - left: -1.5em; - width: 1.25em; - height: 1.25em; - background-color: var(--md-default-fg-color--lightest); - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); - content: ""; -} -[dir=rtl] .md-typeset .task-list-control .task-list-indicator::before { - right: -1.5em; - left: initial; -} -.md-typeset .task-list-control [type=checkbox]:checked + .task-list-indicator::before { - background-color: #00e676; - -webkit-mask-image: url("data:image/svg+xml;utf8,"); - mask-image: url("data:image/svg+xml;utf8,"); -} -.md-typeset .task-list-control [type=checkbox] { - opacity: 0; - z-index: -1; -} -@media print { - .md-typeset a::after { - color: var(--md-default-fg-color--light); - content: " [" attr(href) "]"; - } - .md-typeset code, -.md-typeset pre, -.md-typeset kbd { - white-space: pre-wrap; - } - .md-clipboard { - display: none; - } - .md-content__button { - display: none; - } - .md-dialog { - display: none; - } - .md-header { - display: none; - } - .md-footer { - display: none; - } - .md-sidebar { - display: none; - } - .md-tabs { - display: none; - } - .md-typeset .headerlink { - display: none; - } -} -@media screen and (max-width: 44.9375em) { - .md-typeset > pre { - margin: 1em -0.8rem; - border-radius: 0; - } - .md-typeset > pre > code { - padding: 0.525rem 0.8rem; - } - .md-footer-nav__link--prev .md-footer-nav__title { - display: none; - } - .md-search-result__teaser { - max-height: 2.5rem; - -webkit-line-clamp: 3; - } - .codehilite .hll, .highlight .hll { - margin: 0 -0.8rem; - padding: 0 0.8rem; - } - .md-typeset > .codehilite, .md-typeset > .highlight { - margin: 1em -0.8rem; - } - .md-typeset > .codehilite code, .md-typeset > .highlight code { - padding: 0.525rem 0.8rem; - } - .md-typeset > .codehilitetable, .md-typeset > .highlighttable { - margin: 1em -0.8rem; - border-radius: 0; - } - .md-typeset > .codehilitetable .linenodiv, .md-typeset > .highlighttable .linenodiv { - padding: 0.5rem 0.8rem; - } - .md-typeset > p > .MJXc-display { - margin: 0.75em -0.8rem; - padding: 0.25em 0.8rem; - } - .highlight [data-linenos]::before { - left: -1.6rem; - margin-left: -1.6rem; - padding-left: 1.6rem; - } - .md-typeset > .tabbed-set { - margin: 1em -0.8rem; - border: 0; - border-top: 0.05rem solid var(--md-default-fg-color--lightest); - border-radius: 0; - } - .md-typeset > .tabbed-set code { - padding: 0.525rem 0.8rem; - } - .md-typeset > .tabbed-set input:first-child + label { - margin-left: 0.2rem; - } -} -@media screen and (min-width: 100em) { - html { - font-size: 137.5%; - } -} -@media screen and (min-width: 125em) { - html { - font-size: 150%; - } -} -@media screen and (max-width: 59.9375em) { - body[data-md-state=lock] { - position: fixed; - } - html .md-nav__link[for=__toc] { - display: block; - padding-right: 2.4rem; - } - html .md-nav__link[for=__toc] + .md-nav__link { - display: none; - } - html .md-nav__link[for=__toc] ~ .md-nav { - display: flex; - } - html [dir=rtl] .md-nav__link { - padding-right: 0.8rem; - padding-left: 2.4rem; - } - .md-nav__source { - display: block; - padding: 0 0.2rem; - background-color: var(--md-primary-fg-color--dark); - color: var(--md-primary-bg-color); - } - .md-search__overlay { - position: absolute; - top: 0.2rem; - left: -2.2rem; - width: 2rem; - height: 2rem; - transform-origin: center; - transition: transform 300ms 100ms, opacity 200ms 200ms; - border-radius: 1rem; - background-color: var(--md-default-bg-color); - overflow: hidden; - pointer-events: none; - } - [dir=rtl] .md-search__overlay { - right: -2.2rem; - left: initial; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { - transition: transform 400ms, opacity 100ms; - opacity: 1; - } - .md-search__inner { - position: fixed; - top: 0; - left: 100%; - width: 100%; - height: 100%; - transform: translateX(5%); - transition: right 0ms 300ms, left 0ms 300ms, transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms 150ms; - opacity: 0; - z-index: 2; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__inner { - left: 0; - transform: translateX(0); - transition: right 0ms 0ms, left 0ms 0ms, transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms 150ms; - opacity: 1; - } - [dir=rtl] [data-md-toggle=search]:checked ~ .md-header .md-search__inner { - right: 0; - left: initial; - } - html [dir=rtl] .md-search__inner { - right: 100%; - left: initial; - transform: translateX(-5%); - } - .md-search__input { - width: 100%; - height: 2.4rem; - font-size: 0.9rem; - } - .md-search__icon[for=__search] { - top: 0.6rem; - left: 0.8rem; - } - [dir=rtl] .md-search__icon[for=__search] { - right: 0.8rem; - left: initial; - } - .md-search__icon[for=__search] svg:first-child { - display: none; - } - .md-search__icon[type=reset] { - top: 0.6rem; - right: 0.8rem; - } - [dir=rtl] .md-search__icon[type=reset] { - right: initial; - left: 0.8rem; - } - .md-search__output { - top: 2.4rem; - bottom: 0; - } - .md-search-result__icon { - display: none; - } -} -@media screen and (max-width: 76.1875em) { - [data-md-toggle=drawer]:checked ~ .md-overlay { - width: 100%; - height: 100%; - transition: width 0ms, height 0ms, opacity 250ms; - opacity: 1; - } - .md-header-nav__button.md-logo { - display: none; - } - .md-hero__inner { - margin-top: 2.4rem; - margin-bottom: 1.2rem; - } - .md-nav { - background-color: var(--md-default-bg-color); - } - .md-nav--primary, .md-nav--primary .md-nav { - display: flex; - position: absolute; - top: 0; - right: 0; - left: 0; - flex-direction: column; - height: 100%; - z-index: 1; - } - .md-nav--primary .md-nav__title, -.md-nav--primary .md-nav__item { - font-size: 0.8rem; - line-height: 1.5; - } - .md-nav--primary .md-nav__title { - position: relative; - height: 5.6rem; - padding: 3rem 0.8rem 0.2rem; - background-color: var(--md-default-fg-color--lightest); - color: var(--md-default-fg-color--light); - font-weight: 400; - line-height: 2.4rem; - white-space: nowrap; - cursor: pointer; - } - .md-nav--primary .md-nav__title .md-nav__icon { - display: block; - position: absolute; - top: 0.4rem; - left: 0.4rem; - width: 1.2rem; - height: 1.2rem; - margin: 0.2rem; - } - [dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon { - right: 0.4rem; - left: initial; - } - .md-nav--primary .md-nav__title ~ .md-nav__list { - background-color: var(--md-default-bg-color); - box-shadow: inset 0 0.05rem 0 var(--md-default-fg-color--lightest); - overflow-y: auto; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-scroll-snap-type: y mandatory; - -ms-scroll-snap-type: y mandatory; - scroll-snap-type: y mandatory; - } - .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child { - border-top: 0; - } - .md-nav--primary .md-nav__title[for=__drawer] { - position: relative; - background-color: var(--md-primary-fg-color); - color: var(--md-primary-bg-color); - } - .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { - display: block; - position: absolute; - top: 0.2rem; - left: 0.2rem; - margin: 0.2rem; - padding: 0.4rem; - font-size: 2.4rem; - } - html [dir=rtl] .md-nav--primary .md-nav__title[for=__drawer] .md-nav__button { - right: 0.2rem; - left: initial; - } - .md-nav--primary .md-nav__list { - flex: 1; - } - .md-nav--primary .md-nav__item { - padding: 0; - border-top: 0.05rem solid var(--md-default-fg-color--lightest); - } - [dir=rtl] .md-nav--primary .md-nav__item { - padding: 0; - } - .md-nav--primary .md-nav__item--nested > .md-nav__link { - padding-right: 2.4rem; - } - [dir=rtl] .md-nav--primary .md-nav__item--nested > .md-nav__link { - padding-right: 0.8rem; - padding-left: 2.4rem; - } - .md-nav--primary .md-nav__item--active > .md-nav__link { - color: var(--md-primary-fg-color); - } - .md-nav--primary .md-nav__link { - position: relative; - margin-top: 0; - padding: 0.6rem 0.8rem; - } - .md-nav--primary .md-nav__link .md-nav__icon { - position: absolute; - top: 50%; - right: 0.6rem; - margin-top: -0.6rem; - color: inherit; - font-size: 1.2rem; - } - [dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon { - right: initial; - left: 0.6rem; - } - [dir=rtl] .md-nav--primary .md-nav__icon svg { - transform: scale(-1); - } - .md-nav--primary .md-nav--secondary .md-nav__link { - position: static; - } - .md-nav--primary .md-nav--secondary .md-nav { - position: static; - background-color: transparent; - } - .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { - padding-left: 1.4rem; - } - [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link { - padding-right: 1.4rem; - padding-left: initial; - } - .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { - padding-left: 2rem; - } - [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link { - padding-right: 2rem; - padding-left: initial; - } - .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { - padding-left: 2.6rem; - } - [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link { - padding-right: 2.6rem; - padding-left: initial; - } - .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { - padding-left: 3.2rem; - } - [dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link { - padding-right: 3.2rem; - padding-left: initial; - } - .md-nav__toggle ~ .md-nav { - display: flex; - transform: translateX(100%); - transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), opacity 125ms 50ms; - opacity: 0; - } - [dir=rtl] .md-nav__toggle ~ .md-nav { - transform: translateX(-100%); - } - .md-nav__toggle:checked ~ .md-nav { - transform: translateX(0); - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms 125ms; - opacity: 1; - } - .md-sidebar--primary { - position: fixed; - top: 0; - left: -12.1rem; - width: 12.1rem; - height: 100%; - transform: translateX(0); - transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms; - background-color: var(--md-default-bg-color); - z-index: 3; - } - [dir=rtl] .md-sidebar--primary { - right: -12.1rem; - left: initial; - } - [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { - box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4); - transform: translateX(12.1rem); - } - [dir=rtl] [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary { - transform: translateX(-12.1rem); - } - .md-sidebar--primary .md-sidebar__scrollwrap { - overflow: hidden; - } - .md-sidebar--primary .md-sidebar__scrollwrap { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - margin: 0; - -webkit-scroll-snap-type: none; - -ms-scroll-snap-type: none; - scroll-snap-type: none; - } - .md-tabs { - display: none; - } -} -@media screen and (min-width: 60em) { - .md-content { - margin-right: 12.1rem; - } - [dir=rtl] .md-content { - margin-right: initial; - margin-left: 12.1rem; - } - .md-header-nav__button[for=__search] { - display: none; - } - .md-header-nav__source { - display: block; - width: 11.7rem; - max-width: 11.7rem; - margin-left: 1rem; - } - [dir=rtl] .md-header-nav__source { - margin-right: 1rem; - margin-left: initial; - } - .md-nav--secondary .md-nav__title[for=__toc] { - scroll-snap-align: start; - } - .md-nav--secondary .md-nav__title .md-nav__icon { - display: none; - } - .md-search { - padding: 0.2rem 0; - } - .md-search__overlay { - position: fixed; - top: 0; - left: 0; - width: 0; - height: 0; - transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms; - background-color: var(--md-default-fg-color--light); - cursor: pointer; - } - [dir=rtl] .md-search__overlay { - right: 0; - left: initial; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { - width: 100%; - height: 100%; - transition: width 0ms, height 0ms, opacity 250ms; - opacity: 1; - } - .md-search__inner { - position: relative; - width: 11.7rem; - padding: 0.1rem 0; - float: right; - transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1); - } - [dir=rtl] .md-search__inner { - float: left; - } - .md-search__form { - border-radius: 0.1rem; - } - .md-search__input { - width: 100%; - height: 1.8rem; - padding-left: 2.2rem; - transition: background-color 250ms, color 250ms; - border-radius: 0.1rem; - background-color: var(--md-default-fg-color--lighter); - color: inherit; - font-size: 0.8rem; - } - [dir=rtl] .md-search__input { - padding-right: 2.2rem; - } - .md-search__input + .md-search__icon { - color: var(--md-primary-bg-color); - } - .md-search__input::-webkit-input-placeholder { - color: var(--md-primary-bg-color--light); - } - .md-search__input::-moz-placeholder { - color: var(--md-primary-bg-color--light); - } - .md-search__input::-ms-input-placeholder { - color: var(--md-primary-bg-color--light); - } - .md-search__input::placeholder { - color: var(--md-primary-bg-color--light); - } - .md-search__input:hover { - background-color: var(--md-default-bg-color--lightest); - } - [data-md-toggle=search]:checked ~ .md-header .md-search__input { - border-radius: 0.1rem 0.1rem 0 0; - background-color: var(--md-default-bg-color); - color: var(--md-default-fg-color); - text-overflow: clip; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__input::-webkit-input-placeholder { - color: var(--md-default-fg-color--light); - } - [data-md-toggle=search]:checked ~ .md-header .md-search__input::-moz-placeholder { - color: var(--md-default-fg-color--light); - } - [data-md-toggle=search]:checked ~ .md-header .md-search__input::-ms-input-placeholder { - color: var(--md-default-fg-color--light); - } - [data-md-toggle=search]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle=search]:checked ~ .md-header .md-search__input::placeholder { - color: var(--md-default-fg-color--light); - } - .md-search__icon[for=__search] svg:last-child { - display: none; - } - .md-search__output { - top: 1.9rem; - transition: opacity 400ms; - opacity: 0; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__output { - box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4); - opacity: 1; - } - .md-search__scrollwrap { - max-height: 0; - } - [data-md-toggle=search]:checked ~ .md-header .md-search__scrollwrap { - max-height: 75vh; - } - .md-search__scrollwrap::-webkit-scrollbar { - width: 0.2rem; - height: 0.2rem; - } - .md-search__scrollwrap::-webkit-scrollbar-thumb { - background-color: var(--md-default-fg-color--lighter); - } - .md-search__scrollwrap::-webkit-scrollbar-thumb:hover { - background-color: var(--md-accent-fg-color); - } - .md-search-result__meta { - padding-left: 2.2rem; - } - [dir=rtl] .md-search-result__meta { - padding-right: 2.2rem; - padding-left: initial; - } - .md-search-result__article { - padding-left: 2.2rem; - } - [dir=rtl] .md-search-result__article { - padding-right: 2.2rem; - padding-left: 0.8rem; - } - .md-sidebar--secondary { - display: block; - margin-left: calc(100% - 12.1rem); - } - [dir=rtl] .md-sidebar--secondary { - margin-right: calc(100% - 12.1rem); - margin-left: initial; - } - .md-sidebar--secondary .md-sidebar__scrollwrap { - -webkit-overflow-scrolling: touch; - } -} -@media screen and (min-width: 76.25em) { - .md-content { - margin-left: 12.1rem; - } - [dir=rtl] .md-content { - margin-right: 12.1rem; - } - .md-content__inner { - margin-right: 1.2rem; - margin-left: 1.2rem; - } - .md-header-nav__button[for=__drawer] { - display: none; - } - .md-header-nav__source { - margin-left: 1.4rem; - } - [dir=rtl] .md-header-nav__source { - margin-right: 1.4rem; - } - .md-nav { - transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1); - } - .md-nav--primary .md-nav__title[for=__drawer] { - scroll-snap-align: start; - } - .md-nav--primary .md-nav__title .md-nav__icon { - display: none; - } - .md-nav__toggle ~ .md-nav { - display: none; - } - .md-nav__toggle:checked ~ .md-nav { - display: block; - } - .md-nav__item--nested > .md-nav > .md-nav__title { - display: none; - } - .md-nav__icon { - height: 0.9rem; - float: right; - transition: transform 250ms; - } - .md-nav__icon svg { - display: inline-block; - width: 0.9rem; - height: 0.9rem; - vertical-align: -0.1rem; - } - .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link .md-nav__icon { - transform: rotateZ(90deg); - } - [data-md-toggle=search]:checked ~ .md-header .md-search__inner { - width: 34.4rem; - } - .md-search__scrollwrap { - width: 34.4rem; - } - .md-sidebar--secondary { - margin-left: 48.9rem; - } - [dir=rtl] .md-sidebar--secondary { - margin-right: 48.9rem; - margin-left: initial; - } - .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested { - display: none; - } - .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title { - display: block; - padding: 0 0.6rem; - pointer-events: none; - scroll-snap-align: start; - } - .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title[for=__drawer] { - display: none; - } - .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item { - display: none; - } - .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active { - display: block; - padding: 0; - } - .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active > .md-nav__link { - display: none; - } - .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item { - padding: 0 0.6rem; - } - .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title { - display: none; - } -} -@media screen and (min-width: 45em) { - .md-footer-nav__link { - width: 50%; - } - .md-footer-copyright { - max-width: 75%; - float: left; - } - [dir=rtl] .md-footer-copyright { - float: right; - } - .md-footer-social { - padding: 0.6rem 0; - float: right; - } - [dir=rtl] .md-footer-social { - float: left; - } -} -@media screen and (max-width: 29.9375em) { - [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { - transform: scale(45); - } -} -@media screen and (min-width: 30em) and (max-width: 44.9375em) { - [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { - transform: scale(60); - } -} -@media screen and (min-width: 45em) and (max-width: 59.9375em) { - [data-md-toggle=search]:checked ~ .md-header .md-search__overlay { - transform: scale(75); - } -} -@media screen and (min-width: 60em) and (max-width: 76.1875em) { - [data-md-toggle=search]:checked ~ .md-header .md-search__inner { - width: 23.4rem; - } - .md-search__scrollwrap { - width: 23.4rem; - } - .md-search-result__teaser { - max-height: 2.5rem; - -webkit-line-clamp: 3; - } -} -@media (-webkit-max-device-pixel-ratio: 1), (max-resolution: 1dppx) { - .md-search__scrollwrap { - transform: translateZ(0); - } -} -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/main.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_reset.scss */ -/*# sourceURL=main.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_colors.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_icons.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/base/_typeset.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_base.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_announce.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_clipboard.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_content.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_dialog.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/node_modules/material-shadows/material-shadows.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_header.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_hero.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_footer.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_nav.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_search.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_sidebar.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_source.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/layout/_tabs.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_admonition.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_codehilite.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_footnotes.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/_permalinks.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_arithmatex.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_critic.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_details.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_emoji.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_highlight.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_inlinehilite.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tabbed.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/extensions/pymdown/_tasklist.scss */ -/*# sourceURL=/Users/squidfunk/Desktop/General/Sources/mkdocs-material-typescript/src/assets/stylesheets/utilities/_break.scss */ -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9tYWluLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvYmFzZS9fcmVzZXQuc2NzcyIsIm1haW4uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19jb2xvcnMuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9iYXNlL19pY29ucy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2Jhc2UvX3R5cGVzZXQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Jhc2Uuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Fubm91bmNlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19jbGlwYm9hcmQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2NvbnRlbnQuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2RpYWxvZy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9ub2RlX21vZHVsZXMvbWF0ZXJpYWwtc2hhZG93cy9tYXRlcmlhbC1zaGFkb3dzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19oZWFkZXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2hlcm8uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX2Zvb3Rlci5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fbmF2LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvbGF5b3V0L19zZWFyY2guc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NpZGViYXIuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9sYXlvdXQvX3NvdXJjZS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2xheW91dC9fdGFicy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvX2FkbW9uaXRpb24uc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL19jb2RlaGlsaXRlLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fZm9vdG5vdGVzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9fcGVybWFsaW5rcy5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fYXJpdGhtYXRleC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fY3JpdGljLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19kZXRhaWxzLnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19lbW9qaS5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9faGlnaGxpZ2h0LnNjc3MiLCIvVXNlcnMvc3F1aWRmdW5rL0Rlc2t0b3AvR2VuZXJhbC9Tb3VyY2VzL21rZG9jcy1tYXRlcmlhbC10eXBlc2NyaXB0L3NyYy9hc3NldHMvc3R5bGVzaGVldHMvZXh0ZW5zaW9ucy9weW1kb3duL19pbmxpbmVoaWxpdGUuc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy9leHRlbnNpb25zL3B5bWRvd24vX3RhYmJlZC5zY3NzIiwiL1VzZXJzL3NxdWlkZnVuay9EZXNrdG9wL0dlbmVyYWwvU291cmNlcy9ta2RvY3MtbWF0ZXJpYWwtdHlwZXNjcmlwdC9zcmMvYXNzZXRzL3N0eWxlc2hlZXRzL2V4dGVuc2lvbnMvcHltZG93bi9fdGFza2xpc3Quc2NzcyIsIi9Vc2Vycy9zcXVpZGZ1bmsvRGVza3RvcC9HZW5lcmFsL1NvdXJjZXMvbWtkb2NzLW1hdGVyaWFsLXR5cGVzY3JpcHQvc3JjL2Fzc2V0cy9zdHlsZXNoZWV0cy91dGlsaXRpZXMvX2JyZWFrLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQUE7QUM2QkE7RUFDRSxzQkFBQTtBQzNCRjs7QUQrQkE7OztFQUdFLG1CQUFBO0FDNUJGOztBRGdDQTtFQUNFLDhCQUFBO0tBQUEsMkJBQUE7TUFBQSwwQkFBQTtVQUFBLHNCQUFBO0FDMUJGOztBRDhCQTtFQUNFLFNBQUE7QUMzQkY7O0FEK0JBO0VBQ0UsaUJBQUE7RUFDQSx1QkFBQTtBQzVCRjs7QURnQ0E7RUFDRSxxQ0FBQTtBQzdCRjs7QURpQ0E7Ozs7RUFJRSx3Q0FBQTtBQzlCRjs7QURrQ0E7RUFDRSxjQUFBO0VBQ0EscUJBQUE7QUMvQkY7O0FEbUNBO0VBQ0UsY0FBQTtBQ2hDRjs7QURvQ0E7O0VBRUUsa0JBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLHdCQUFBO0FDakNGOztBRHFDQTtFQUNFLGVBQUE7QUNsQ0Y7O0FEc0NBO0VBQ0UsV0FBQTtBQ25DRjs7QUR1Q0E7RUFDRSxrQkFBQTtBQ3BDRjs7QUR3Q0E7RUFDRSx5QkFBQTtFQUNBLGlCQUFBO0FDckNGOztBRHlDQTs7RUFFRSxtQkFBQTtFQUNBLG1CQUFBO0FDdENGOztBRDBDQTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7QUN2Q0Y7O0FEMkNBO0VBQ0UsU0FBQTtFQUNBLFVBQUE7QUN4Q0Y7O0FDL0RBO0VBR0UsNENBQUE7RUFDQSxtREFBQTtFQUNBLHFEQUFBO0VBQ0Esc0RBQUE7RUFDQSwyQ0FBQTtFQUNBLG9EQUFBO0VBQ0Esc0RBQUE7RUFDQSx3REFBQTtFQUdBLGdEQUFBO0VBQ0EsdURBQUE7RUFDQSxzREFBQTtFQUNBLGlEQUFBO0VBQ0EsK0RBQUE7RUFHQSwrQ0FBQTtFQUNBLDhEQUFBO0VBQ0EsZ0RBQUE7RUFDQSw4REFBQTtFQUdBLDJDQUFBO0VBQ0EsMENBQUE7QUQwREY7O0FFakZFO0VBQ0UsY0FBQTtFQUNBLGFBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0FGb0ZKOztBRzVGQTtFQUNFLG1DQUFBO0VBQ0Esa0NBQUE7QUgrRkY7O0FHM0ZBOztFQUVFLGlDQUFBO0VBQ0EsNkNBQUE7VUFBQSxxQ0FBQTtFQUNBLDJEQUFBO0FIK0ZGOztBRzNGQTs7O0VBR0UsaUNBQUE7RUFDQSxxQ0FBQTtVQUFBLDZCQUFBO0VBQ0EsOENBQUE7QUgrRkY7O0FHcEZBO0VBQ0UsaUJBQUE7RUFDQSxnQkFBQTtFQUdBLGlDQUFBO0FIcUZGO0FHbEZFOzs7O0VBSUUsYUFBQTtBSG9GSjtBR2hGRTtFQUNFLGdCQUFBO0VBQ0Esd0NBQUE7RUFDQSxvQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxnQkFBQTtBSGtGSjtBRzlFRTtFQUNFLHFCQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7QUhnRko7QUc1RUU7RUFDRSx1QkFBQTtFQUNBLGVBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7QUg4RUo7QUcxRUU7RUFDRSxrQkFBQTtBSDRFSjtBR3hFRTtFQUNFLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0FIMEVKO0FHdEVFOztFQUVFLGdCQUFBO0VBQ0Esd0NBQUE7RUFDQSxrQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7QUh3RUo7QUdwRUU7RUFDRSx5QkFBQTtBSHNFSjtBR2xFRTtFQUNFLGVBQUE7RUFDQSxpRUFBQTtBSG9FSjtBR2hFRTtFQUNFLGlDQUFBO0VBQ0Esc0JBQUE7QUhrRUo7QUcvREk7RUFFRSx1QkFBQTtBSGdFTjtBRzVESTtFQUVFLGdDQUFBO0FINkROO0FHOUNFOzs7RUFHRSx5Q0FBQTtFQUNBLDhCQUFBO0VBQ0EsY0FBQTtFQUNBLGNBQUE7QUhnREo7QUd2Q0U7RUFHRSx3QkFBQTtFQUNBLHlCQUFBO0VBQ0EscUJBQUE7RUFDQSxtR0FBQTtFQUdBLHNCQUFBO0VBQ0EsbUNBQUE7VUFBQSwyQkFBQTtBSHNDSjtBR2xDRTs7Ozs7O0VBTUUsU0FBQTtFQUNBLDZCQUFBO0VBQ0EsZ0JBQUE7QUhvQ0o7QUdoQ0U7RUFDRSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSxzQkFBQTtFQUNBLHlCQUFBO0VBQ0EsY0FBQTtFQUNBLGdCQUFBO0FIa0NKO0FHOUJFO0VBQ0Usa0JBQUE7RUFDQSxhQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTtFQUVBLG1DQUFBO1VBQUEsMkJBQUE7RUFDQSxpQ0FBQTtBSGdDSjtBRzdCSTtFQUNFLGNBQUE7RUFDQSxTQUFBO0VBQ0Esd0JBQUE7RUFDQSw2QkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQ0FBQTtVQUFBLDJCQUFBO0VBQ0EsY0FBQTtFQUNBLGtCQUFBO0FIZ0NOO0FHN0JNO0VBQ0UsYUFBQTtFQUNBLGNBQUE7QUgrQlI7QUczQk07RUFDRSxxREFBQTtBSDZCUjtBRzFCUTtFQUNFLDJDQUFBO0FINEJWO0FHTkU7RUFHRSxxQkFBQTtFQUNBLHlCQUFBO0VBQ0EscUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0EscUtBQUE7RUFJQSxzQkFBQTtFQUNBLHdCQUFBO0FIR0o7QUdDRTtFQUNFLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxxQkFBQTtFQUNBLHlDQUFBO0VBQ0EsbUZBQUE7RUFHQSxzQkFBQTtFQUNBLG1DQUFBO1VBQUEsMkJBQUE7QUhBSjtBR0lFO0VBQ0UsK0RBQUE7RUFDQSxxQkFBQTtFQUNBLFlBQUE7QUhGSjtBR01FO0VBQ0UsYUFBQTtBSEpKO0FHUUU7O0VBRUUsdUJBQUE7QUhOSjtBR1NJOztFQUNFLHdCQUFBO0VBQ0Esb0JBQUE7QUhOTjtBR1dFO0VBQ0Usb0JBQUE7RUFDQSw2REFBQTtFQUNBLHdDQUFBO0FIVEo7QUdZSTtFQUNFLHFCQUFBO0VBQ0EscUJBQUE7RUFDQSw4REFBQTtFQUNBLG9CQUFBO0FIVk47QUdlRTtFQUNFLHFCQUFBO0FIYko7QUdpQkU7O0VBRUUsb0JBQUE7RUFDQSxVQUFBO0FIZko7QUdrQkk7O0VBQ0UscUJBQUE7RUFDQSxvQkFBQTtBSGZOO0FHbUJJOztFQUNFLDRCQUFBO0FIaEJOO0FHbUJNOztFQUNFLDRCQUFBO0FIaEJSO0FHcUJJOztFQUNFLG9CQUFBO0VBQ0EsbUJBQUE7QUhsQk47QUdxQk07O0VBQ0Usb0JBQUE7RUFDQSxvQkFBQTtBSGxCUjtBR3NCTTs7OztFQUVFLGVBQUE7QUhsQlI7QUdzQk07O0VBQ0UsZ0JBQUE7QUhuQlI7QUd1Qk07Ozs7RUFFRSw2QkFBQTtBSG5CUjtBR3NCUTs7OztFQUNFLHFCQUFBO0VBQ0Esb0JBQUE7QUhqQlY7QUd3QkU7RUFDRSx5QkFBQTtBSHRCSjtBR3lCSTtFQUNFLHFCQUFBO0VBQ0Esb0JBQUE7QUh2Qk47QUc0QkU7OztFQUdFLGVBQUE7QUgxQko7QUc4QkU7RUFDRSxxQkFBQTtFQUNBLGVBQUE7RUFDQSxxQkFBQTtFQUNBLHNDQUFBO0VBQ0Esa0JBQUE7RUFDQSwrRUFBQTtFQUdBLGNBQUE7RUFDQSxpQ0FBQTtBSDlCSjtBR21DSTtFQUNFLGlCQUFBO0FIakNOO0FHcUNJOztFQUVFLGdCQUFBO0FIbkNOO0FHc0NNOztFQUNFLGlCQUFBO0FIbkNSO0FHd0NJO0VBQ0UsZUFBQTtFQUNBLHNCQUFBO0VBQ0EsbURBQUE7RUFDQSxpQ0FBQTtFQUNBLG1CQUFBO0FIdENOO0FHMENJO0VBQ0Usc0JBQUE7RUFDQSw4REFBQTtFQUNBLG1CQUFBO0FIeENOO0FHNENJO0VBQ0Usa0NBQUE7QUgxQ047QUc2Q007RUFDRSxzQ0FBQTtFQUNBLHdEQUFBO0FIM0NSO0FHK0NNO0VBQ0UsYUFBQTtBSDdDUjtBR21ESTtFQUNFLGtCQUFBO0FIakROO0FHc0RFO0VBQ0UsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLGlDQUFBO0FIcERKO0FHd0RFO0VBQ0UscUJBQUE7RUFDQSxvQkFBQTtFQUNBLGlCQUFBO0FIdERKO0FHeURJO0VBQ0UsY0FBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0VBQ0EsZ0JBQUE7QUh2RE47O0FJL1pBO0VBQ0UsWUFBQTtFQUNBLDRDQUFBO0VBT0EsZUFBQTtFQUtBLGtCQUFBO0FKd1pGOztBSTFZQTtFQUNFLGFBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLGdCQUFBO0VBR0EsaUJBQUE7QUoyWUY7O0FJOVhBO0VBQ0UsY0FBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0VBQ0EsU0FBQTtBSmlZRjs7QUk3WEE7RUFDRSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7QUpnWUY7O0FJNVhBO0VBQ0UsYUFBQTtFQUNBLHNCQUFBO0VBQ0EsWUFBQTtBSitYRjs7QUkzWEE7RUFDRSxZQUFBO0FKOFhGO0FJM1hFO0VBQ0UsWUFBQTtFQUNBLG1CQUFBO0VBSUEsdUJBQUE7QUowWEo7O0FJclhBO0VBQ0UsY0FBQTtFQUNBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtBSndYRjs7QUloWEE7RUFDRSxhQUFBO0FKbVhGOztBSS9XQTtFQUNFLGVBQUE7RUFDQSxNQUFBO0VBQ0EsUUFBQTtFQUNBLFNBQUE7RUFDQSw0REFBQTtFQUlBLG1EQUFBO0VBQ0EsVUFBQTtFQUNBLFVBQUE7QUorV0Y7O0FJeFZBO0VBQ0UsZUFBQTtFQUNBLGNBQUE7RUFDQSxzQkFBQTtFQUNBLDZCQUFBO0VBQ0EscUJBQUE7RUFDQSw0Q0FBQTtFQUNBLGlDQUFBO0VBQ0Esa0JBQUE7RUFDQSxVQUFBO0FKMlZGO0FJeFZFO0VBQ0Usd0JBQUE7RUFDQSw0RUFBQTtFQUdBLFVBQUE7RUFDQSxXQUFBO0FKd1ZKOztBSS9VQTtFQUNFLFlBQUE7QUprVkY7QUtoZ0JBO0VBQ0UsNENBQUE7QUxrZ0JGO0FLL2ZFO0VBQ0Usa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlDQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtBTGlnQko7O0FNMWdCQTtFQUNFLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtFQUNBLHVCQUFBO0VBQ0EscUJBQUE7RUFDQSwyQ0FBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0VBRUEsbUNBQUE7VUFBQSwyQkFBQTtBTjZnQkY7QU1yZ0JFO0VBQ0UsYUFBQTtFQUNBLGNBQUE7QU51Z0JKO0FNbmdCRTtFQUNFLHdDQUFBO0FOcWdCSjtBTWpnQkU7RUFFRSxnQ0FBQTtBTmtnQko7QU8zZ0JFO0VBQ0UsdUJBQUE7RUFDQSxtQkFBQTtBUDZnQko7QU9uZ0JJO0VBQ0UsY0FBQTtFQUNBLGNBQUE7RUFDQSxXQUFBO0FQcWdCTjtBT2pnQkk7RUFDRSxnQkFBQTtBUG1nQk47QU85ZkU7RUFDRSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7QVBnZ0JKO0FPN2ZJO0VBQ0Usb0JBQUE7RUFDQSxvQkFBQTtFQUNBLFdBQUE7QVArZk47QU81Zk07RUFDRSxxQkFBQTtBUDhmUjtBT3pmSTtFQUNFLDBDQUFBO0FQMmZOO0FPdmZJO0VBQ0UsZUFBQTtFQUNBLG1CQUFBO0FQeWZOOztBUXBrQkE7RUNGRSwrR0FBQTtFREtBLGNBQUE7RUFDQSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxzQkFBQTtFQUNBLDJCQUFBO0VBQ0EsOENBQUE7RUFHQSxZQUFBO0VBQ0EscUJBQUE7RUFDQSxzQ0FBQTtFQUNBLGlDQUFBO0VBQ0EsaUJBQUE7RUFDQSxVQUFBO0VBQ0EsVUFBQTtBUm9rQkY7QVFqa0JFO0VBQ0UsY0FBQTtFQUNBLFlBQUE7QVJta0JKO0FRL2pCRTtFQUNFLHdCQUFBO0VBQ0EsOEVBQUE7RUFHQSxVQUFBO0FSK2pCSjs7QVVqbUJBO0VBQ0Usd0JBQUE7RUFBQSxnQkFBQTtFQUNBLE1BQUE7RUFDQSxRQUFBO0VBQ0EsT0FBQTtFQUNBLGNBQUE7RUFDQSwrQ0FBQTtFQUdBLDRDQUFBO0VBQ0EsaUNBQUE7RUFHQSx5RUFBQTtFQUdBLFVBQUE7QVYrbEJGO0FVNWxCRTtFQUNFLGdCQUFBO0VBQ0EsZ0JBQUE7QVY4bEJKO0FVMWxCRTtFQUNFLGlFQUFBO0VBSUEsNkVBQUE7QVZ5bEJKOztBVTdrQkE7RUFDRSxhQUFBO0VBQ0EsaUJBQUE7QVZnbEJGO0FVN2tCRTtFQUNFLGtCQUFBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7RUFDQSx5QkFBQTtFQUNBLGVBQUE7RUFDQSxVQUFBO0FWK2tCSjtBVXprQk07RUFDRSxxQkFBQTtBVjJrQlI7QVV0a0JJO0VBRUUsWUFBQTtBVnVrQk47QVVua0JJO0VBQ0UsY0FBQTtFQUNBLGVBQUE7QVZxa0JOO0FVbGtCTTs7RUFFRSxjQUFBO0VBQ0EsYUFBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtBVm9rQlI7QVUvakJJO0VBQ0UsYUFBQTtBVmlrQk47QVVqaUJFO0VBQ0UsY0FBQTtFQUNBLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLGVBQUE7RUFDQSx5RUFBQTtFQUdBLHVCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUVBLG1DQUFBO1VBQUEsMkJBQUE7QVZpaUJKO0FVOWhCSTtFQUNFLDhCQUFBO0VBQ0EseUVBQUE7RUFHQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLG9CQUFBO0FWOGhCTjtBVTNoQk07RUFDRSwrQkFBQTtBVjZoQlI7QVV4aEJJO0VBQ0UsaUJBQUE7QVYwaEJOO0FVdGhCSTtFQUNFLGFBQUE7QVZ3aEJOO0FVbmhCRTtFQUNFLFlBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0FWcWhCSjtBVWxoQkk7RUFDRSwrQkFBQTtFQUNBLHlFQUFBO0VBR0EsVUFBQTtFQUNBLFdBQUE7RUFDQSxvQkFBQTtBVmtoQk47QVUvZ0JNO0VBQ0UsOEJBQUE7QVZpaEJSO0FVN2dCTTtFQUNFLHdCQUFBO0VBQ0EseUVBQUE7RUFHQSxVQUFBO0VBQ0EsVUFBQTtFQUNBLHVCQUFBO0FWNmdCUjtBVXhnQkk7RUFDRSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0FWMGdCTjtBVXJnQkU7RUFDRSxhQUFBO0FWdWdCSjs7QVdsdEJBO0VBQ0UsNEJBQUE7RUFDQSw0Q0FBQTtFQUNBLGlDQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FYcXRCRjtBV2x0QkU7RUFDRSxnQkFBQTtFQUNBLDZCQUFBO0VBQ0EseUVBQUE7RUFHQSx1QkFBQTtBWGt0Qko7QVd6c0JJO0VBQ0Usb0JBQUE7RUFDQSwrQkFBQTtFQUNBLGtEQUFBO0VBR0EsVUFBQTtBWHlzQk47QVdyc0JJO0VBQ0UscUJBQUE7QVh1c0JOOztBWXp1QkE7RUFDRSw0Q0FBQTtFQUNBLGlDQUFBO0FaNHVCRjs7QVlodUJFO0VBQ0UsZUFBQTtFQUNBLGNBQUE7QVptdUJKO0FZL3RCRTtFQUNFLGFBQUE7RUFDQSxtQkFBQTtFQUNBLHNCQUFBO0VBQ0EseUJBQUE7QVppdUJKO0FZenRCSTtFQUVFLFlBQUE7QVowdEJOO0FZdHRCSTtFQUNFLFVBQUE7RUFDQSxXQUFBO0Fad3RCTjtBWXJ0Qk07RUFDRSxZQUFBO0FadXRCUjtBWXB0QlE7RUFDRSxxQkFBQTtBWnN0QlY7QVl2c0JJO0VBQ0UsVUFBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtBWnlzQk47QVl0c0JNO0VBQ0UsV0FBQTtFQUNBLGdCQUFBO0Fad3NCUjtBWXJzQlE7RUFDRSxxQkFBQTtBWnVzQlY7QVloc0JFO0VBQ0Usa0JBQUE7RUFDQSxZQUFBO0VBQ0EsOEJBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtBWmtzQko7QVk5ckJFO0VBQ0UsY0FBQTtFQUNBLGVBQUE7QVpnc0JKO0FZNXJCRTtFQUNFLGtCQUFBO0VBQ0EsUUFBQTtFQUNBLE9BQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSx3Q0FBQTtFQUNBLGtCQUFBO0FaOHJCSjs7QVl6ckJBO0VBQ0UscURBQUE7QVo0ckJGO0FZenJCRTtFQUNFLGVBQUE7RUFDQSxjQUFBO0FaMnJCSjtBWXZyQkU7RUFDRSx3Q0FBQTtBWnlyQko7QVl0ckJJO0VBRUUsaUNBQUE7QVp1ckJOOztBWWpyQkE7RUFDRSxnQkFBQTtFQUNBLGlCQUFBO0VBQ0EsMENBQUE7RUFDQSxrQkFBQTtBWm9yQkY7QVl0cUJFO0VBQ0Usd0NBQUE7QVp3cUJKOztBWW5xQkE7RUFDRSxnQkFBQTtFQUNBLHdCQUFBO0Fac3FCRjtBWXhwQkU7RUFDRSxxQkFBQTtFQUNBLGFBQUE7RUFDQSxjQUFBO0VBQ0EsdUJBQUE7RUFDQSxrQkFBQTtBWjBwQko7QVl2cEJJO0VBQ0UsZ0JBQUE7QVp5cEJOO0FZcnBCSTtFQUNFLGFBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0FadXBCTjs7QWFuMUJBO0VBQ0UsaUJBQUE7RUFDQSxnQkFBQTtBYnMxQkY7QWFuMUJFO0VBQ0UsY0FBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0FicTFCSjtBYWwxQkk7RUFDRSxhQUFBO0FibzFCTjtBYWoxQk07RUFDRSxXQUFBO0VBQ0EsWUFBQTtBYm0xQlI7QWE1MEJROztFQUVFLGNBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtBYjgwQlY7QWExMEJRO0VBQ0Usa0JBQUE7QWI0MEJWO0FhcjBCRTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQUE7QWJ1MEJKO0FhbjBCRTtFQUNFLGlCQUFBO0FicTBCSjtBYWwwQkk7RUFDRSxzQkFBQTtBYm8wQk47QWFoMEJJO0VBQ0UsZ0JBQUE7QWJrMEJOO0FhL3pCTTtFQUNFLHFCQUFBO0VBQ0EsZUFBQTtBYmkwQlI7QWE3ekJNO0VBQ0UsaUJBQUE7QWIrekJSO0FhenpCRTtFQUNFLGNBQUE7RUFDQSxtQkFBQTtFQUNBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSx3QkFBQTtBYjJ6Qko7QWF2ekJJO0VBQ0UsYUFBQTtBYnl6Qk47QWF0ekJNO0VBQ0UsYUFBQTtBYnd6QlI7QWFuekJJO0VBQ0Usd0NBQUE7QWJxekJOO0FhanpCSTtFQUNFLGlDQUFBO0FibXpCTjtBYS95Qkk7RUFDRSxjQUFBO0FiaXpCTjtBYTd5Qkk7RUFFRSxnQ0FBQTtBYjh5Qk47QWF6eUJFO0VBQ0UsYUFBQTtBYjJ5Qko7O0FjMTVCQTtFQUNFLGtCQUFBO0FkNjVCRjtBYzE1QkU7RUFDRSxhQUFBO0FkNDVCSjtBY241QkU7RUFDRSxVQUFBO0VBQ0EsVUFBQTtBZHE1Qko7QWMvekJFO0VBRUUsbUNBQUE7VUFBQSwyQkFBQTtBZGkwQko7QWN2dkJFO0VBQ0Usa0JBQUE7QWR5dkJKO0FjaHZCRTtFQUNFLGtCQUFBO0VBQ0EsMEJBQUE7RUFDQSx1QkFBQTtFQUNBLFVBQUE7QWRrdkJKO0FjL3VCSTtFQUNFLDBCQUFBO0FkaXZCTjtBYzd1Qkk7RUFDRSwrQkFBQTtFQUFBLHVCQUFBO0FkZ3ZCTjtBY2p2Qkk7RUFDRSw0QkFBQTtFQUFBLHVCQUFBO0Fkb3ZCTjtBY3J2Qkk7RUFDRSwyQkFBQTtFQUFBLHVCQUFBO0Fkd3ZCTjtBY3p2Qkk7RUFDRSx1QkFBQTtBZDJ2Qk47QWN2dkJJO0VBRUUsd0NBQUE7QWR3dkJOO0FjMXZCSTtFQUVFLHdDQUFBO0FkMnZCTjtBYzd2Qkk7RUFFRSx3Q0FBQTtBZDh2Qk47QWNod0JJO0VBRUUsd0NBQUE7QWRpd0JOO0FjN3ZCSTtFQUNFLGFBQUE7QWQrdkJOO0FjbnNCRTtFQUNFLGtCQUFBO0VBQ0EsYUFBQTtFQUNBLGNBQUE7RUFDQSxzQ0FBQTtFQUdBLGVBQUE7RUFDQSxVQUFBO0FkbXNCSjtBY2hzQkk7RUFDRSxZQUFBO0Fka3NCTjtBYzlyQkk7RUFDRSxXQUFBO0VBQ0EsWUFBQTtBZGdzQk47QWM3ckJNO0VBQ0UsYUFBQTtFQUNBLGFBQUE7QWQrckJSO0FjNXJCUTtFQUNFLHFCQUFBO0FkOHJCVjtBYzlwQkk7RUFDRSxXQUFBO0VBQ0EsYUFBQTtFQUNBLHNCQUFBO0VBQ0EseUVBQUE7RUFHQSxVQUFBO0VBQ0Esb0JBQUE7QWQ4cEJOO0FjM3BCTTtFQUNFLGNBQUE7RUFDQSxZQUFBO0FkNnBCUjtBYzdvQk07RUFDRSxtQkFBQTtFQUNBLFVBQUE7RUFDQSx1QkFBQTtBZCtvQlI7QWM1b0JRO0VBQ0UsWUFBQTtBZDhvQlY7QWN2b0JFO0VBQ0Usa0JBQUE7RUFDQSxXQUFBO0VBQ0EsZ0NBQUE7RUFDQSxnQkFBQTtFQUNBLFVBQUE7QWR5b0JKO0Fjam5CRTtFQUNFLFlBQUE7RUFDQSw0Q0FBQTtFQUNBLGtFQUFBO0VBQ0EsZ0JBQUE7RUFFQSxtQ0FBQTtVQUFBLDJCQUFBO0VBQ0EscUNBQUE7TUFBQSxpQ0FBQTtVQUFBLDZCQUFBO0VBQ0EsaUNBQUE7QWRxbkJKOztBY3ZrQkE7RUFDRSxpQ0FBQTtFQUNBLHNCQUFBO0FkMGtCRjtBY3ZrQkU7RUFDRSxpQkFBQTtFQUNBLHNEQUFBO0VBQ0Esd0NBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esd0JBQUE7QWR5a0JKO0FjMWpCRTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0EsOERBQUE7RUFDQSxnQkFBQTtBZDRqQko7QWN4akJFO0VBQ0UsNkRBQUE7QWQwakJKO0FjdGpCRTtFQUNFLGNBQUE7RUFDQSw0QkFBQTtFQUNBLFVBQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0Fkd2pCSjtBY3JqQkk7RUFFRSx3REFBQTtBZHNqQk47QWNuakJNO0VBQ0UsWUFBQTtBZHFqQlI7QWNoakJJO0VBQ0UscUJBQUE7QWRrakJOO0FjN2lCRTtFQUNFLGtCQUFBO0VBQ0EsaUJBQUE7RUFDQSxjQUFBO0FkK2lCSjtBYzloQk07RUFDRSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtBZGdpQlI7QWMxaEJFO0VBQ0Usa0JBQUE7RUFDQSxPQUFBO0VBQ0EsY0FBQTtFQUNBLGVBQUE7RUFDQSx3Q0FBQTtBZDRoQko7QWN6aEJJO0VBQ0UsUUFBQTtFQUNBLGFBQUE7QWQyaEJOO0FjeGhCTTtFQUNFLHFCQUFBO0FkMGhCUjtBYy9nQkU7RUFDRSxlQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0FkaWhCSjtBYzNnQkU7RUFDRSxvQkFBQTtFQUNBLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLHdDQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHVCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw0QkFBQTtFQUNBLHFCQUFBO0FkNmdCSjtBYzNmRTtFQUNFLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSwwQkFBQTtBZDZmSjs7QWV0bUNBO0VBQ0Usa0JBQUE7RUFDQSxjQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBZnltQ0Y7QWVqbUNFO0VBQ0UsZUFBQTtFQUNBLFdBQUE7QWZtbUNKO0FlcmpDRTtFQUNFLGFBQUE7QWZ1akNKO0FldmhDRTtFQUNFLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUVBLG1DQUFBO1VBQUEsMkJBQUE7RUFDQSxxQ0FBQTtNQUFBLGlDQUFBO1VBQUEsNkJBQUE7QWYyaENKO0FlemdDSTtFQUNFLGFBQUE7RUFDQSxjQUFBO0FmMmdDTjtBZXZnQ0k7RUFDRSxxREFBQTtBZnlnQ047QWV0Z0NNO0VBQ0UsMkNBQUE7QWZ3Z0NSOztBZ0JocENBO0VBQ0U7SUFDRSxTQUFBO0VoQm1wQ0Y7RWdCaHBDQTtJQUNFLGVBQUE7RWhCa3BDRjtBQUNGOztBZ0J6cENBO0VBQ0U7SUFDRSxTQUFBO0VoQjRwQ0Y7RWdCenBDQTtJQUNFLGVBQUE7RWhCMnBDRjtBQUNGO0FnQnZwQ0E7RUFDRTtJQUNFLDJCQUFBO0lBQ0EsVUFBQTtFaEJ5cENGO0VnQnRwQ0E7SUFDRSxVQUFBO0VoQndwQ0Y7RWdCcnBDQTtJQUNFLHlCQUFBO0lBQ0EsVUFBQTtFaEJ1cENGO0FBQ0Y7QWdCcHFDQTtFQUNFO0lBQ0UsMkJBQUE7SUFDQSxVQUFBO0VoQnNxQ0Y7RWdCbnFDQTtJQUNFLFVBQUE7RWhCcXFDRjtFZ0JscUNBO0lBQ0UseUJBQUE7SUFDQSxVQUFBO0VoQm9xQ0Y7QUFDRjtBZ0I1cENBO0VBQ0UsY0FBQTtFQUNBLHlCQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0VBRUEsbUNBQUE7VUFBQSwyQkFBQTtBaEI4cENGO0FnQjNwQ0U7RUFDRSxzQkFBQTtFQUNBLG9CQUFBO0FoQjZwQ0o7QWdCenBDRTtFQUNFLFlBQUE7QWhCMnBDSjtBZ0J2cENFO0VBQ0UscUJBQUE7RUFDQSxhQUFBO0VBQ0EsY0FBQTtFQUNBLHNCQUFBO0FoQnlwQ0o7QWdCdHBDSTtFQUNFLGtCQUFBO0VBQ0EsbUJBQUE7QWhCd3BDTjtBZ0JycENNO0VBQ0Usb0JBQUE7RUFDQSxvQkFBQTtBaEJ1cENSO0FnQmxwQ0k7RUFDRSxrQkFBQTtFQUNBLGtCQUFBO0FoQm9wQ047QWdCanBDTTtFQUNFLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtFQUNBLHFCQUFBO0FoQm1wQ1I7QWdCN29DRTtFQUNFLHFCQUFBO0VBQ0EsOEJBQUE7RUFDQSxtQkFBQTtFQUNBLGdCQUFBO0VBQ0EsdUJBQUE7RUFDQSxnQkFBQTtFQUNBLHNCQUFBO0FoQitvQ0o7QWdCM29DRTtFQUNFLFNBQUE7RUFDQSxVQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLHFCQUFBO0VBQ0EsYUFBQTtFQUNBLGdCQUFBO0FoQjZvQ0o7QWdCMW9DSTtFQUNFLHVEQUFBO1VBQUEsK0NBQUE7QWhCNm9DTjtBZ0J4b0NFO0VBQ0UsV0FBQTtBaEIwb0NKO0FnQnZvQ0k7RUFDRSxZQUFBO0FoQnlvQ047QWdCcm9DSTtFQUNFLHVEQUFBO1VBQUEsK0NBQUE7QWhCd29DTjtBZ0Jwb0NJO0VBQ0UsZ0JBQUE7RUFDQSxZQUFBO0FoQnNvQ047QWdCbG9DSTtFQUNFLGFBQUE7QWhCb29DTjs7QWlCM3dDQTtFQUNFLFdBQUE7RUFDQSw0QkFBQTtFQUNBLDRDQUFBO0VBQ0EsaUNBQUE7RUFDQSxjQUFBO0FqQjh3Q0Y7QWlCM3dDRTtFQUNFLGdCQUFBO0FqQjZ3Q0o7QWlCL3ZDRTtFQUNFLFNBQUE7RUFDQSxtQkFBQTtFQUNBLFVBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0FqQml3Q0o7QWlCOXZDSTtFQUNFLG9CQUFBO0VBQ0Esb0JBQUE7QWpCZ3dDTjtBaUIzdkNFO0VBQ0UscUJBQUE7RUFDQSxjQUFBO0VBQ0EscUJBQUE7RUFDQSxvQkFBQTtBakI2dkNKO0FpQnh2Q0U7RUFDRSxjQUFBO0VBQ0Esa0JBQUE7RUFDQSx5RUFBQTtFQUdBLGlCQUFBO0VBQ0EsWUFBQTtBakJ3dkNKO0FpQnJ2Q0k7RUFDRSxnQkFBQTtBakJ1dkNOO0FpQm52Q0k7RUFFRSxjQUFBO0VBQ0EsVUFBQTtBakJvdkNOO0FpQi91Q007RUFDRSxzQkFBQTtBakJpdkNSO0FpQmx2Q007RUFDRSxzQkFBQTtBakJvdkNSO0FpQnJ2Q007RUFDRSxzQkFBQTtBakJ1dkNSO0FpQnh2Q007RUFDRSxzQkFBQTtBakIwdkNSO0FpQjN2Q007RUFDRSx1QkFBQTtBakI2dkNSO0FpQjl2Q007RUFDRSx1QkFBQTtBakJnd0NSO0FpQmp3Q007RUFDRSx1QkFBQTtBakJtd0NSO0FpQnB3Q007RUFDRSx1QkFBQTtBakJzd0NSO0FpQnZ3Q007RUFDRSx1QkFBQTtBakJ5d0NSO0FpQjF3Q007RUFDRSx1QkFBQTtBakI0d0NSO0FpQjd3Q007RUFDRSx1QkFBQTtBakIrd0NSO0FpQmh4Q007RUFDRSx1QkFBQTtBakJreENSO0FpQm54Q007RUFDRSx1QkFBQTtBakJxeENSO0FpQnR4Q007RUFDRSx1QkFBQTtBakJ3eENSO0FpQnp4Q007RUFDRSx1QkFBQTtBakIyeENSO0FpQnJ4Q0U7RUFDRSxvQkFBQTtBakJ1eENKO0FpQm54Q0k7RUFDRSwwQkFBQTtFQUNBLDJEQUFBO0VBSUEsVUFBQTtBakJreENOOztBa0J2MkNFO0VBQ0Usa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGlDQUFBO0VBQ0EscUJBQUE7RUFDQSxrQkFBQTtFQUNBLCtFQUFBO0VBR0EsY0FBQTtBbEJ3MkNKO0FrQnIyQ0k7RUFDRSxrQ0FBQTtFQUNBLGlCQUFBO0FsQnUyQ047QWtCbjJDSTtFQUNFLHFCQUFBO0FsQnEyQ047QWtCajJDSTtFQUNFLGFBQUE7QWxCbTJDTjtBa0I5MENNO0VBRUUsMEJBQUE7QWxCKzBDUjtBa0I1MENRO0VBQ0Usd0NBQUE7QWxCODBDVjtBa0IzMENVO0VBQ0UseUJBQUE7RUFDQSxvTUFBQTtVQUFBLDRMQUFBO0FsQjgwQ1o7QWtCejFDTTtFQUVFLDBCQUFBO0FsQjAxQ1I7QWtCdjFDUTtFQUNFLHdDQUFBO0FsQnkxQ1Y7QWtCdDFDVTtFQUNFLHlCQUFBO0VBQ0EsZ1BBQUE7VUFBQSx3T0FBQTtBbEJ5MUNaO0FrQnAyQ007RUFFRSwwQkFBQTtBbEJxMkNSO0FrQmwyQ1E7RUFDRSx3Q0FBQTtBbEJvMkNWO0FrQmoyQ1U7RUFDRSx5QkFBQTtFQUNBLCsvQkFBQTtVQUFBLHUvQkFBQTtBbEJvMkNaO0FrQi8yQ007RUFFRSwwQkFBQTtBbEJnM0NSO0FrQjcyQ1E7RUFDRSx1Q0FBQTtBbEIrMkNWO0FrQjUyQ1U7RUFDRSx5QkFBQTtFQUNBLGlSQUFBO1VBQUEseVFBQUE7QWxCKzJDWjtBa0IxM0NNO0VBRUUsMEJBQUE7QWxCMjNDUjtBa0J4M0NRO0VBQ0UseUNBQUE7QWxCMDNDVjtBa0J2M0NVO0VBQ0UseUJBQUE7RUFDQSx5Y0FBQTtVQUFBLGljQUFBO0FsQjAzQ1o7QWtCcjRDTTtFQUVFLDBCQUFBO0FsQnM0Q1I7QWtCbjRDUTtFQUNFLHdDQUFBO0FsQnE0Q1Y7QWtCbDRDVTtFQUNFLHlCQUFBO0VBQ0EseUxBQUE7VUFBQSxpTEFBQTtBbEJxNENaO0FrQmg1Q007RUFFRSwwQkFBQTtBbEJpNUNSO0FrQjk0Q1E7RUFDRSx3Q0FBQTtBbEJnNUNWO0FrQjc0Q1U7RUFDRSx5QkFBQTtFQUNBLGdWQUFBO1VBQUEsd1VBQUE7QWxCZzVDWjtBa0IzNUNNO0VBRUUsMEJBQUE7QWxCNDVDUjtBa0J6NUNRO0VBQ0Usd0NBQUE7QWxCMjVDVjtBa0J4NUNVO0VBQ0UseUJBQUE7RUFDQSxpWEFBQTtVQUFBLHlXQUFBO0FsQjI1Q1o7QWtCdDZDTTtFQUVFLDBCQUFBO0FsQnU2Q1I7QWtCcDZDUTtFQUNFLHVDQUFBO0FsQnM2Q1Y7QWtCbjZDVTtFQUNFLHlCQUFBO0VBQ0EseWpCQUFBO1VBQUEsaWpCQUFBO0FsQnM2Q1o7QWtCajdDTTtFQUVFLDBCQUFBO0FsQms3Q1I7QWtCLzZDUTtFQUNFLHlDQUFBO0FsQmk3Q1Y7QWtCOTZDVTtFQUNFLHlCQUFBO0VBQ0EsK1VBQUE7VUFBQSx1VUFBQTtBbEJpN0NaO0FrQjU3Q007RUFFRSwwQkFBQTtBbEI2N0NSO0FrQjE3Q1E7RUFDRSwwQ0FBQTtBbEI0N0NWO0FrQno3Q1U7RUFDRSx5QkFBQTtFQUNBLDhMQUFBO1VBQUEsc0xBQUE7QWxCNDdDWjtBa0IzNkNFO0VBQ0UsaUJBQUE7RUFDQSxrQ0FBQTtFQUNBLHlDQUFBO0VBQ0EsZ0JBQUE7QWxCNjZDSjtBa0IxNkNJO0VBQ0Usa0NBQUE7QWxCNDZDTjtBa0J4NkNJO0VBQ0UsZ0JBQUE7QWxCMDZDTjtBa0J0NkNJO0VBQ0Usa0JBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLG9CQUFBO0VBQ0EseUJBQUE7RUFDQSwyUkFBQTtVQUFBLG1SQUFBO0VBQ0EsV0FBQTtBbEJ5NkNOO0FrQnQ2Q007RUFDRSxxQkFBQTtFQUNBLG9CQUFBO0FsQnc2Q1I7O0FtQjE3Q0U7RUFBTSxjQUFBO0FuQjg3Q1I7QW1CNzdDRTtFQUFNLGNBQUE7QW5CZzhDUjtBbUI3N0NFO0VBQU0sY0FBQTtBbkJnOENSO0FtQi83Q0U7RUFBTSxjQUFBO0FuQms4Q1I7QW1CajhDRTtFQUFNLGNBQUE7QW5CbzhDUjtBbUJuOENFO0VBQU0sY0FBQTtBbkJzOENSO0FtQnI4Q0U7RUFBTSxjQUFBO0FuQnc4Q1I7QW1CdjhDRTtFQUFNLGNBQUE7QW5CMDhDUjtBbUJ6OENFO0VBQU0sY0FBQTtBbkI0OENSO0FtQjM4Q0U7RUFBTSxjQUFBO0FuQjg4Q1I7QW1CMzhDRTtFQUFNLHlCQUFBO0FuQjg4Q1I7QW1CNzhDRTtFQUFNLHlCQUFBO0FuQmc5Q1I7QW1CNzhDRTtFQUFNLGNBQUE7QW5CZzlDUjtBbUIvOENFO0VBQU0sY0FBQTtBbkJrOUNSO0FtQmo5Q0U7RUFBTSxjQUFBO0FuQm85Q1I7QW1CbjlDRTtFQUFNLGNBQUE7QW5CczlDUjtBbUJyOUNFO0VBQU0sY0FBQTtBbkJ3OUNSO0FtQnY5Q0U7RUFBTSxjQUFBO0FuQjA5Q1I7QW1CejlDRTtFQUFNLGNBQUE7QW5CNDlDUjtBbUJ6OUNFO0VBQU0sY0FBQTtBbkI0OUNSO0FtQjM5Q0U7RUFBTSxjQUFBO0FuQjg5Q1I7QW1CNzlDRTtFQUFNLGNBQUE7QW5CZytDUjtBbUIvOUNFO0VBQU0sY0FBQTtBbkJrK0NSO0FtQmorQ0U7RUFBTSxjQUFBO0FuQm8rQ1I7QW1CbitDRTtFQUFNLGNBQUE7QW5CcytDUjtBbUJuK0NFO0VBQU0sY0FBQTtBbkJzK0NSO0FtQnIrQ0U7RUFBTSxjQUFBO0FuQncrQ1I7QW1CditDRTtFQUFNLGNBQUE7QW5CMCtDUjtBbUJ6K0NFO0VBQU0sY0FBQTtBbkI0K0NSO0FtQjMrQ0U7RUFBTSxjQUFBO0FuQjgrQ1I7QW1CNytDRTtFQUFNLGNBQUE7QW5CZy9DUjtBbUIvK0NFO0VBQU0sY0FBQTtBbkJrL0NSO0FtQmovQ0U7RUFBTSxjQUFBO0FuQm8vQ1I7QW1Cbi9DRTtFQUFNLGNBQUE7QW5Ccy9DUjtBbUJyL0NFO0VBQU0sY0FBQTtBbkJ3L0NSO0FtQnYvQ0U7RUFBTSxjQUFBO0FuQjAvQ1I7QW1Cei9DRTtFQUFNLGNBQUE7QW5CNC9DUjtBbUIzL0NFO0VBQU0sY0FBQTtBbkI4L0NSO0FtQjcvQ0U7RUFBTSxjQUFBO0FuQmdnRFI7QW1CLy9DRTtFQUFNLGNBQUE7QW5Ca2dEUjtBbUJqZ0RFO0VBQU0sY0FBQTtBbkJvZ0RSO0FtQm5nREU7RUFBTSxjQUFBO0FuQnNnRFI7QW1CbmdERTtFQUFNLGNBQUE7QW5Cc2dEUjtBbUJyZ0RFO0VBQU0sY0FBQTtBbkJ3Z0RSO0FtQnZnREU7RUFBTSxjQUFBO0FuQjBnRFI7QW1CemdERTtFQUFNLGNBQUE7QW5CNGdEUjtBbUIzZ0RFO0VBQU0sY0FBQTtBbkI4Z0RSO0FtQjdnREU7RUFBTSxjQUFBO0FuQmdoRFI7QW1CN2dERTtFQUFNLGNBQUE7QW5CZ2hEUjtBbUIvZ0RFO0VBQU0sY0FBQTtBbkJraERSO0FtQmpoREU7RUFBTSxjQUFBO0FuQm9oRFI7QW1CbmhERTtFQUFNLGNBQUE7QW5Cc2hEUjtBbUJyaERFO0VBQU0sY0FBQTtBbkJ3aERSO0FtQnZoREU7RUFBTSxjQUFBO0FuQjBoRFI7QW1CemhERTtFQUFNLGNBQUE7QW5CNGhEUjtBbUIzaERFO0VBQU0sY0FBQTtBbkI4aERSO0FtQjdoREU7RUFBTSxjQUFBO0FuQmdpRFI7QW1CL2hERTtFQUFNLGNBQUE7QW5Ca2lEUjtBbUJqaURFO0VBQU0sY0FBQTtBbkJvaURSO0Ft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QmpGRjtJQVNJLG9CQUFBO0Vkb3VGTjtBQUNGO0E4QjdwRk07RWhCakZGO0lBY0ksb0JBQUE7RWRvdUZOO0FBQ0Y7QThCbHFGTTtFaEJnQ0Y7SUFJSSxjQUFBO0Vka29GTjtFY3Q1RUE7SUFpQkksY0FBQTtFZHc0RUo7RWNsdUVBO0lBb0JJLGtCQUFBO0lBQ0EscUJBQUE7RWRpdEVKO0FBQ0Y7QWNuNUVJO0VBWEY7SUFZSSx3QkFBQTtFZHM1RUo7QUFDRiIsImZpbGUiOiJtYWluLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG5odG1sIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cblxuaHRtbCB7XG4gIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwia2VyblwiLCBcImxpZ2FcIjtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cblxuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlLFxuLm1kLXR5cGVzZXQgcHJlLFxuLm1kLXR5cGVzZXQga2JkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgZm9udC1zaXplOiA4NSU7XG4gIGRpcmVjdGlvbjogbHRyO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXR5cGVzZXQgY29kZSxcbi5tZC10eXBlc2V0IHByZSxcbi5tZC10eXBlc2V0IGtiZCB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB9XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gcHJlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwcmUgPiBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IGtiZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMCAwLjU4ODIzNTI5NDFlbTtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm94LXNoYWRvdzogMCAwLjFyZW0gMCAwLjA1cmVtIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCAwIDAuMXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpLCBpbnNldCAwIC0wLjFyZW0gMC4ycmVtIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG4ubWQtdHlwZXNldCBtYXJrIHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KSwgLTAuMjVlbSAwIDAgcmdiYSgyNTUsIDIzNSwgNTksIDAuNSk7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGFiYnIge1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBoZWxwO1xufVxuLm1kLXR5cGVzZXQgc21hbGwge1xuICBvcGFjaXR5OiAwLjc1O1xufVxuLm1kLXR5cGVzZXQgc3VwLFxuLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLWxlZnQ6IDAuMDc4MTI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VwLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1YiB7XG4gIG1hcmdpbi1yaWdodDogMC4wNzgxMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1sZWZ0OiAwLjJyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgYmxvY2txdW90ZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm9yZGVyLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbn1cbi5tZC10eXBlc2V0IHVsLFxuLm1kLXR5cGVzZXQgb2wge1xuICBtYXJnaW4tbGVmdDogMC42MjVlbTtcbiAgcGFkZGluZzogMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBvbCxcbi5tZC10eXBlc2V0IG9sIG9sIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcbn1cbi5tZC10eXBlc2V0IHVsIG9sIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLXJvbWFuO1xufVxuLm1kLXR5cGVzZXQgdWwgbGksXG4ubWQtdHlwZXNldCBvbCBsaSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBtYXJnaW4tbGVmdDogMS4yNWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsIGxpLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgcCxcbi5tZC10eXBlc2V0IHVsIGxpIGJsb2NrcXVvdGUsXG4ubWQtdHlwZXNldCBvbCBsaSBwLFxuLm1kLXR5cGVzZXQgb2wgbGkgYmxvY2txdW90ZSB7XG4gIG1hcmdpbjogMC41ZW0gMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpOmxhc3QtY2hpbGQsXG4ubWQtdHlwZXNldCBvbCBsaTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IHVsIGxpIHVsLFxuLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG4ubWQtdHlwZXNldCBvbCBsaSB1bCxcbi5tZC10eXBlc2V0IG9sIGxpIG9sIHtcbiAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGkgb2wsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgdWwsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW4tcmlnaHQ6IDAuNjI1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW46IDFlbSAwIDFlbSAxLjg3NWVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRkIHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjg3NWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGlmcmFtZSxcbi5tZC10eXBlc2V0IGltZyxcbi5tZC10eXBlc2V0IHN2ZyB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGJveC1zaGFkb3c6IDAgMC4ycmVtIDAuNXJlbSByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDAgMC4wNXJlbSByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgKyAqIHtcbiAgbWFyZ2luLXRvcDogMS41ZW07XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkOm5vdChbYWxpZ25dKSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRoOm5vdChbYWxpZ25dKSxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGgge1xuICBtaW4td2lkdGg6IDVyZW07XG4gIHBhZGRpbmc6IDAuNnJlbSAwLjhyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRkIHtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHIge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyNW1zO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAzNSk7XG4gIGJveC1zaGFkb3c6IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpIGluc2V0O1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSBhIHtcbiAgd29yZC1icmVhazogbm9ybWFsO1xufVxuLm1kLXR5cGVzZXRfX3Njcm9sbHdyYXAge1xuICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAubWQtdHlwZXNldF9fdGFibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB0YWJsZSB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5odG1sIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxMjUlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDBlbSkge1xuICBodG1sIHtcbiAgICBmb250LXNpemU6IDEzNy41JTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI1ZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxNTAlO1xuICB9XG59XG5cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IDAuNXJlbTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBib2R5W2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgfVxufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5tZC1za2lwIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXJnaW46IDAuNXJlbTtcbiAgcGFkZGluZzogMC4zcmVtIDAuNXJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNHJlbSk7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBvcGFjaXR5OiAwO1xufVxuLm1kLXNraXA6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDE3NW1zIDc1bXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDEwO1xufVxuXG5AcGFnZSB7XG4gIG1hcmdpbjogMjVtbTtcbn1cbi5tZC1hbm5vdW5jZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLWFubm91bmNlX19pbm5lciB7XG4gIG1pbi1oZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG5cbi5tZC1jbGlwYm9hcmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC40cmVtO1xuICByaWdodDogMC40cmVtO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtY2xpcGJvYXJkIHN2ZyB7XG4gIHdpZHRoOiAwLjlyZW07XG4gIGhlaWdodDogMC45cmVtO1xufVxucHJlOmhvdmVyIC5tZC1jbGlwYm9hcmQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxucHJlIC5tZC1jbGlwYm9hcmQ6Zm9jdXMsIHByZSAubWQtY2xpcGJvYXJkOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudCB7XG4gICAgbWFyZ2luLWxlZnQ6IDEyLjFyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEyLjFyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lciB7XG4gIG1hcmdpbjogMCAwLjhyZW0gMS4ycmVtO1xuICBwYWRkaW5nLXRvcDogMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbn1cbi5tZC1jb250ZW50X19pbm5lcjo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbjogMC40cmVtIDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjRyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGZsb2F0OiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjRyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC10eXBlc2V0IC5tZC1jb250ZW50X19idXR0b24ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtY29udGVudF9fYnV0dG9uIHN2ZyB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWRpYWxvZyB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDAuOHJlbTtcbiAgYm90dG9tOiAwLjhyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogMTEuMXJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDQwMG1zO1xuICBib3JkZXI6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLWRpYWxvZyB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjhyZW07XG59XG4ubWQtZGlhbG9nW2RhdGEtbWQtc3RhdGU9b3Blbl0ge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4wNzUsIDAuODUsIDAuMTc1LCAxKSwgb3BhY2l0eSA0MDBtcztcbiAgb3BhY2l0eTogMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1kaWFsb2cge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLWhlYWRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX2RyYXdlcl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IC0xO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbltkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHBvc2l0aW9uOiBpbml0aWFsO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUge1xuICBmbGV4LWdyb3c6IDE7XG4gIGZvbnQtc2l6ZTogMC45cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMS4yNXJlbSk7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGVbZGF0YS1tZC1zdGF0ZT1hY3RpdmVdIC5tZC1oZWFkZXItbmF2X190b3BpYyArIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMTtcbiAgei1pbmRleDogMDtcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtaGVhZGVyLW5hdl9fdGl0bGUgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjRyZW07XG4gIH1cbn1cblxuLm1kLWhlcm8ge1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBmb250LXNpemU6IDFyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtaGVyb19faW5uZXIge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBwYWRkaW5nOiAwLjhyZW0gMC44cmVtIDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgdHJhbnNpdGlvbi1kZWxheTogMTAwbXM7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLWhlcm9fX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiAyLjRyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xuICB9XG59XG5bZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC1oZXJvX19pbm5lciB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC42MjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zIDBtcztcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1oZXJvLS1leHBhbmQgLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4ycmVtO1xufVxuXG4ubWQtZm9vdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLWZvb3Rlci1uYXZfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDEuNHJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5tZC1mb290ZXItbmF2X19saW5rOmZvY3VzLCAubWQtZm9vdGVyLW5hdl9fbGluazpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgd2lkdGg6IDI1JTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYge1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLXByZXYgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQge1xuICB3aWR0aDogNzUlO1xuICBmbG9hdDogcmlnaHQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWZvb3Rlci1uYXZfX2xpbmstLW5leHQgc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWZvb3Rlci1uYXZfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWdyb3c6IDE7XG4gIG1heC13aWR0aDogY2FsYygxMDAlIC0gMi40cmVtKTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19idXR0b24ge1xuICBtYXJnaW46IDAuMnJlbTtcbiAgcGFkZGluZzogMC40cmVtO1xufVxuLm1kLWZvb3Rlci1uYXZfX2RpcmVjdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbi10b3A6IC0xcmVtO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cblxuLm1kLWZvb3Rlci1tZXRhIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG59XG4ubWQtZm9vdGVyLW1ldGFfX2lubmVyIHtcbiAgcGFkZGluZzogMC4ycmVtO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6Zm9jdXMsIGh0bWwgLm1kLWZvb3Rlci1tZXRhLm1kLXR5cGVzZXQgYTpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbn1cblxuLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICBtYXJnaW46IDAgMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSB7XG4gIC5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIGZsb2F0OiByaWdodDtcbiAgfVxufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkge1xuICAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgcGFkZGluZzogMC42cmVtIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLXNvY2lhbCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5tZC1mb290ZXItc29jaWFsX19saW5rOjpiZWZvcmUge1xuICBsaW5lLWhlaWdodDogMS45O1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsgc3ZnIHtcbiAgd2lkdGg6IDAuOHJlbTtcbiAgdmVydGljYWwtYWxpZ246IC0yNSU7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuLm1kLW5hdl9fdGl0bGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2J1dHRvbiBpbWcge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uLm1kLWxvZ28gc3ZnIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm1kLW5hdl9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjZyZW07XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW0ge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuW2Rpcj1ydGxdIC5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC1uYXZfX2xpbmsge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMC42MjVlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtbmF2X19saW5rW2RhdGEtbWQtc3RhdGU9Ymx1cl0ge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLW5hdl9faXRlbSAubWQtbmF2X19saW5rLS1hY3RpdmUge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG4ubWQtbmF2X19saW5rOmZvY3VzLCAubWQtbmF2X19saW5rOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG4ubWQtbmF2X19zb3VyY2Uge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1uYXYge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnksIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgei1pbmRleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlLFxuLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDUuNnJlbTtcbiAgICBwYWRkaW5nOiAzcmVtIDAuOHJlbSAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC40cmVtO1xuICAgIGxlZnQ6IDAuNHJlbTtcbiAgICB3aWR0aDogMS4ycmVtO1xuICAgIGhlaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbjogMC4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiAwLjRyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX2RyYXdlcl0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IDAuMnJlbTtcbiAgICBtYXJnaW46IDAuMnJlbTtcbiAgICBwYWRkaW5nOiAwLjRyZW07XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgcmlnaHQ6IDAuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGlzdCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDAuNnJlbTtcbiAgICBtYXJnaW4tdG9wOiAtMC42cmVtO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC42cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2ljb24gc3ZnIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjRyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMi42cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctbGVmdDogMy4ycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDMuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksIG9wYWNpdHkgMTI1bXMgNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCBvcGFjaXR5IDEyNW1zIDEyNW1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy1yaWdodDogMi40cmVtO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdICsgLm1kLW5hdl9fbGluayB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICBodG1sIC5tZC1uYXZfX2xpbmtbZm9yPV9fdG9jXSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjJyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvci0tZGFyayk7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2X190aXRsZVtmb3I9X190b2NdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIC5tZC1uYXZfX2ljb24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLW5hdiB7XG4gICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAyNTBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiB7XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcbiAgfVxuICAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAwLjlyZW07XG4gICAgaGVpZ2h0OiAwLjlyZW07XG4gICAgdmVydGljYWwtYWxpZ246IC0wLjFyZW07XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAubWQtbmF2X19pY29uIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZVooOTBkZWcpO1xuICB9XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2gge1xuICAgIHBhZGRpbmc6IDAuMnJlbSAwO1xuICB9XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjJyZW07XG4gICAgbGVmdDogLTIuMnJlbTtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyAxMDBtcywgb3BhY2l0eSAyMDBtcyAyMDBtcztcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHJpZ2h0OiAtMi4ycmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDI5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDQ1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzBlbSkgYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDYwKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNDVlbSkgYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDc1KTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9faW5uZXIge1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUlKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMzAwbXMsIGxlZnQgMG1zIDMwMG1zLCB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDI7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIGxlZnQ6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIHRyYW5zaXRpb246IHJpZ2h0IDBtcyAwbXMsIGxlZnQgMG1zIDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcyAxNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkgYW5kIChtYXgtd2lkdGg6IDc2LjE4NzVlbSkge1xuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDIzLjRyZW07XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG4ubWQtc2VhcmNoX19mb3JtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEuOHJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQgKyAubWQtc2VhcmNoX19pY29uIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdCk7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbSAwLjFyZW0gMCAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHtcbiAgICByaWdodDogMC44cmVtO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZzpmaXJzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmxhc3QtY2hpbGQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OS45Mzc1ZW0pIHtcbiAgLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgcmlnaHQ6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAyLjRyZW07XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgdG9wOiAxLjlyZW07XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcztcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX291dHB1dCB7XG4gICAgYm94LXNoYWRvdzogMCA2cHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuQG1lZGlhIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAyMy40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIHdpZHRoOiAzNC40cmVtO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDA7XG4gIH1cbiAgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogNzV2aDtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDAuMnJlbTtcbiAgICBoZWlnaHQ6IDAuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gIH1cbn1cblxuLm1kLXNlYXJjaC1yZXN1bHQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faXRlbSB7XG4gIGJveC1zaGFkb3c6IDAgLTAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBvdXRsaW5lOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpmb2N1cywgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUsIC5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmhvdmVyIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlOjpiZWZvcmUge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fbGluazpsYXN0LWNoaWxkIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjBlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIH1cbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlLS1kb2N1bWVudCAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNTVyZW0gMDtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19pY29uIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5LjkzNzVlbSkge1xuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIG1heC1oZWlnaHQ6IDEuNjVyZW07XG4gIG1hcmdpbjogMC41ZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICAgIG1heC1oZWlnaHQ6IDIuNXJlbTtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIGFuZCAobWF4LXdpZHRoOiA3Ni4xODc1ZW0pIHtcbiAgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgbWF4LWhlaWdodDogMi41cmVtO1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgfVxufVxuLm1kLXNlYXJjaC1yZXN1bHQgZW0ge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEyLjFyZW07XG4gIHBhZGRpbmc6IDEuMnJlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuQG1lZGlhIHByaW50IHtcbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5tZC1zaWRlYmFyW2RhdGEtbWQtc3RhdGU9bG9ja10ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMi40cmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7XG4gIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDEwMCUgLSAxMi4xcmVtKTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2LjI1ZW0pIHtcbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBzY3JvbGwtc25hcC10eXBlOiBub25lO1xuICB9XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIHtcbiAgMCUge1xuICAgIGhlaWdodDogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBoZWlnaHQ6IDAuNjVyZW07XG4gIH1cbn1cbkBrZXlmcmFtZXMgbWQtc291cmNlX19mYWN0LS1kb25lIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbi5tZC1zb3VyY2Uge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjY1cmVtO1xuICBsaW5lLWhlaWdodDogMS4yNTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2Uge1xuICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC1zb3VyY2U6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc291cmNlX19pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXRvcDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zb3VyY2VfX2ljb24gc3ZnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tbGVmdDogLTJyZW07XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uICsgLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIG1hcmdpbi1yaWdodDogLTJyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDEuMnJlbSk7XG4gIG1hcmdpbi1sZWZ0OiAwLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLm1kLXNvdXJjZV9fZmFjdHMge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMC41NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvcGFjaXR5OiAwLjc1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdHMge1xuICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xufVxuLm1kLXNvdXJjZV9fZmFjdDo6YmVmb3JlIHtcbiAgbWFyZ2luOiAwIDAuMXJlbTtcbiAgY29udGVudDogXCLCt1wiO1xufVxuLm1kLXNvdXJjZV9fZmFjdDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1kLXRhYnMge1xuICB3aWR0aDogMTAwJTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubm8tanMgLm1kLXRhYnMge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIC5tZC10YWJzIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgcHJpbnQge1xuICAubWQtdGFicyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5bZGlyPXJ0bF0gLm1kLXRhYnNfX2xpc3Qge1xuICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdGFic19faXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtdGFic19fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjhyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubm8tanMgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uOiBub25lO1xufVxuLm1kLXRhYnNfX2xpbmstLWFjdGl2ZSwgLm1kLXRhYnNfX2xpbms6aG92ZXIge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDQpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDgwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg3KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDgpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxMykgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyNjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNSkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAyODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgxNikgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAzMDBtcztcbn1cbi5tZC10YWJzW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zLCB0cmFuc2Zvcm0gMG1zIDQwMG1zLCBvcGFjaXR5IDEwMG1zO1xuICBvcGFjaXR5OiAwO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzYuMjVlbSkge1xuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xuICBib3JkZXItbGVmdDogMC4ycmVtIHNvbGlkICM0NDhhZmY7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBib3gtc2hhZG93OiAwIDAuMnJlbSAwLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAwIDAuMDVyZW0gcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbiwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMge1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItbGVmdDogbm9uZTtcbn1cbmh0bWwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gPiA6bGFzdC1jaGlsZCwgaHRtbCAubWQtdHlwZXNldCBkZXRhaWxzID4gOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbiAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgZGV0YWlscyAuYWRtb25pdGlvbiwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gZGV0YWlscywgLm1kLXR5cGVzZXQgZGV0YWlscyBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxZW0gMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjMDBiMGZmO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAxNzYsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnkgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3QgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGIwZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHRleHQtc3ViamVjdCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaW5mb3JtYXRpb24gfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYmZhNTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmltcG9ydGFudCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaGludCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTkxLCAxNjUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24udGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiZmE1O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmaXJlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgaGVscC1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBhbGVydCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmNTI1Mjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODIsIDgyLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLm1pc3NpbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjUyNTI7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNsb3NlLWNpcmNsZSB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZjE3NDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5lcnJvciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMywgNjgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5lcnJvciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmRhbmdlciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMTc0NDtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgZmxhc2gtY2lyY2xlIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZjUwMDU3O1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQ1LCAwLCA4NywgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmJ1ZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1MDA1NztcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgYnVnIH19XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtbGlzdC1udW1iZXJlZCB9fVwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzllOWU5ZTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVvdGUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1OCwgMTU4LCAxNTgsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuY2l0ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOWU5ZTllO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBmb3JtYXQtcXVvdGUtY2xvc2UgfX1cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgLm1kLXR5cGVzZXQgc3VtbWFyeSB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMC42cmVtIDAuNHJlbSAycmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDY4LCAxMzgsIDI1NSwgMC4xKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZSwgW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBwYWRkaW5nOiAwLjRyZW0gMnJlbSAwLjRyZW0gMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGU6bGFzdC1jaGlsZCwgLm1kLXR5cGVzZXQgc3VtbWFyeTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOjpiZWZvcmUsIC5tZC10eXBlc2V0IHN1bW1hcnk6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgbWFyZ2luLWxlZnQ6IC0xLjRyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDhhZmY7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IHBlbmNpbCB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbn1cblxuLmNvZGVoaWxpdGV0YWJsZSwgLmhpZ2hsaWdodHRhYmxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRib2R5LCAuaGlnaGxpZ2h0dGFibGUgdGJvZHksXG4uY29kZWhpbGl0ZXRhYmxlIHRkLFxuLmhpZ2hsaWdodHRhYmxlIHRkIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHRyLCAuaGlnaGxpZ2h0dGFibGUgdHIge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmNvZGVoaWxpdGV0YWJsZSBwcmUsIC5oaWdobGlnaHR0YWJsZSBwcmUsXG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsXG4uaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2RpdiwgLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG59XG4uY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9zLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3Mge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMDVyZW0gdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vcyBwcmUsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyBwcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLmNvZGVoaWxpdGV0YWJsZSAuY29kZSwgLmhpZ2hsaWdodHRhYmxlIC5jb2RlIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRlIGNvZGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodCBjb2RlIHtcbiAgICBwYWRkaW5nOiAwLjUyNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlLCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAubWQtdHlwZXNldCA+IC5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC44cmVtO1xuICB9XG59XG5cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm5yZWY6XCJdOnRhcmdldCB7XG4gIG1hcmdpbi10b3A6IC0zLjhyZW07XG4gIHBhZGRpbmctdG9wOiAzLjhyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgaGVpZ2h0OiAwO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgW2lkXj1cImZuOlwiXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMy41cmVtO1xuICBwYWRkaW5nLXRvcDogMy41cmVtO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIHtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6dGFyZ2V0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWYsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIG9wYWNpdHk6IDE7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGk6aG92ZXIgLmZvb3Rub3RlLWJhY2tyZWY6aG92ZXIsIC5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1yZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBtYXJnaW46IDAgMC4yZW07XG4gIGJvcmRlci1sZWZ0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDEuMjVlbTtcbiAgY29udGVudDogXCJcIjtcbiAgdmVydGljYWwtYWxpZ246IC0wLjI1cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcztcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBmb250LXNpemU6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4yNXJlbSk7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMC44cmVtO1xuICBoZWlnaHQ6IDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmZvb3Rub3RlLWJhY2tyZWY6OmJlZm9yZSBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG5cbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXMgNTAwbXM7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbmh0bWwgYm9keSAubWQtdHlwZXNldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWQtdHlwZXNldCA6aG92ZXIgLmhlYWRlcmxpbmssXG4ubWQtdHlwZXNldCA6dGFyZ2V0IC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIDI1MG1zLCBjb2xvciAyNTBtcywgb3BhY2l0eSAxMjVtcyAyNTBtcywgdmlzaWJpbGl0eSAwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpmb2N1cyxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmhvdmVyLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGgyW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40cmVtO1xuICBwYWRkaW5nLXRvcDogMC40cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDNbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGgxW2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjRyZW07XG4gIHBhZGRpbmctdG9wOiAzLjRyZW07XG59XG4ubWQtdHlwZXNldCBoNFtpZF06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAtMC40NXJlbTtcbiAgcGFkZGluZy10b3A6IDAuNDVyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNFtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40NXJlbTtcbiAgcGFkZGluZy10b3A6IDMuNDVyZW07XG59XG4ubWQtdHlwZXNldCBoNltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgcGFkZGluZy10b3A6IDAuNnJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGg2W2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDVbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNnJlbTtcbiAgcGFkZGluZy10b3A6IDMuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5NSlhjLWRpc3BsYXkge1xuICBtYXJnaW46IDAuNzVlbSAwO1xuICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHAgPiAuTUpYYy1kaXNwbGF5IHtcbiAgICBtYXJnaW46IDAuNzVlbSAtMC44cmVtO1xuICAgIHBhZGRpbmc6IDAuMjVlbSAwLjhyZW07XG4gIH1cbn1cbi5tZC10eXBlc2V0IC5NYXRoSmF4X0NIVE1MIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1kLXR5cGVzZXQgZGVsLmNyaXRpYyxcbi5tZC10eXBlc2V0IGlucy5jcml0aWMsXG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbn1cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwICNGRkREREQsIC0wLjI1ZW0gMCAwICNGRkREREQ7XG59XG4ubWQtdHlwZXNldCBpbnMuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0RERkZERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRERGRkRELCAtMC4yNWVtIDAgMCAjRERGRkREO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiLyogXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmNvbW1lbnQ6OmFmdGVyIHtcbiAgY29udGVudDogXCIgKi9cIjtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAxZW0gMDtcbiAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuYmxvY2sgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMC41ZW07XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG59XG5cbi5tZC10eXBlc2V0IGRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6IDA7XG59XG4ubWQtdHlwZXNldCBkZXRhaWxzW29wZW5dID4gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsczpub3QoW29wZW5dKSA+IHN1bW1hcnkge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlscyBzdW1tYXJ5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3V0bGluZTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDAuNnJlbTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIG1hc2staW1hZ2U6IHVybChcInt7IGNoZXZyb24tZG93biB9fVwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5OjphZnRlciB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjZyZW07XG59XG5cbi5tZC10eXBlc2V0IC5lbW9qaW9uZSxcbi5tZC10eXBlc2V0IC50d2Vtb2ppLFxuLm1kLXR5cGVzZXQgLmdlbW9qaSB7XG4gIHdpZHRoOiAxcmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG59XG5cbi5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbGVmdDogLTAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLXJpZ2h0OiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0NC45Mzc1ZW0pIHtcbiAgLm1kLXR5cGVzZXQgPiAudGFiYmVkLXNldCB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLXRvcDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjJyZW07XG4gIH1cbn1cblxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNDVlbTtcbiAgbGVmdDogLTJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAudGFzay1saXN0LWl0ZW0gW3R5cGU9Y2hlY2tib3hdIHtcbiAgcmlnaHQ6IC0yZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjE1ZW07XG4gIGxlZnQ6IC0xLjVlbTtcbiAgd2lkdGg6IDEuMjVlbTtcbiAgaGVpZ2h0OiAxLjI1ZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2tib3gtYmxhbmstY2lyY2xlIH19XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCAudGFzay1saXN0LWluZGljYXRvcjo6YmVmb3JlIHtcbiAgcmlnaHQ6IC0xLjVlbTtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBlNjc2O1xuICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVjay1jaXJjbGUgfX1cIik7XG59XG4ubWQtdHlwZXNldCAudGFzay1saXN0LWNvbnRyb2wgW3R5cGU9Y2hlY2tib3hdIHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRW5mb3JjZSBjb3JyZWN0IGJveCBtb2RlbFxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8vIEFsbCBlbGVtZW50cyBzaGFsbCBpbmhlcml0IHRoZSBkb2N1bWVudCBkZWZhdWx0XG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBpbmhlcml0O1xufVxuXG4vLyBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIElFIGFuZCBpT1Ncbmh0bWwge1xuICB0ZXh0LXNpemUtYWRqdXN0OiBub25lO1xufVxuXG4vLyBSZW1vdmUgbWFyZ2luIGluIGFsbCBicm93c2Vyc1xuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLy8gUmVzZXQgaG9yaXpvbnRhbCBydWxlcyBpbiBGRlxuaHIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbi8vIFJlbW92ZSBnYXBzIGluIHVuZGVybGluZWQgbGlua3MgaW4gaU9TID49IDggYW5kIFNhZmFyaSA+PSA4XG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0czsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZVxufVxuXG4vLyBSZXNldCB0YXAgb3V0bGluZXMgb24gaU9TIGFuZCBBbmRyb2lkXG5hLFxuYnV0dG9uLFxubGFiZWwsXG5pbnB1dCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8vIFJlc2V0IGxpbmsgc3R5bGVzXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLy8gTm9ybWFsaXplIGZvbnQtc2l6ZSBpbiBhbGwgYnJvd3NlcnNcbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8vIFByZXZlbnQgc3Vic2NyaXB0IGFuZCBzdXBlcnNjcmlwdCBmcm9tIGFmZmVjdGluZyBsaW5lLWhlaWdodFxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLy8gQ29ycmVjdCBzdWJzY3JpcHQgb2Zmc2V0XG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbi8vIENvcnJlY3Qgc3VwZXJzY3JpcHQgb2Zmc2V0XG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLy8gUmVtb3ZlIGJvcmRlcnMgb24gaW1hZ2VzXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8vIFJlc2V0IHRhYmxlIHN0eWxlc1xudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxuLy8gUmVzZXQgdGFibGUgY2VsbCBzdHlsZXNcbnRkLFxudGgge1xuICBmb250LXdlaWdodDogbm9ybWFsOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi8vIFJlc2V0IChuYXRpdmUpIGJ1dHRvbiBzdHlsZXNcbmJ1dHRvbiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG4vLyBSZXNldCAobmF0aXZlKSBpbnB1dCBzdHlsZXNcbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosXG4qOjpiZWZvcmUsXG4qOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG5cbmh0bWwge1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG4gICAgIC1tb3otdGV4dC1zaXplLWFkanVzdDogbm9uZTtcbiAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiBub25lO1xuICAgICAgICAgIHRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbmhyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG5hIHtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogb2JqZWN0cztcbn1cblxuYSxcbmJ1dHRvbixcbmxhYmVsLFxuaW5wdXQge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDgwJTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbmlucHV0IHtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuXG46cm9vdCB7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogaHNsYSgwLCAwJSwgMCUsIDAuODcpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0OiBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMCUsIDAuMjYpO1xuICAtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0OiBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogaHNsYSgwLCAwJSwgMTAwJSwgMSk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQ6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4zKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVzdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG4gIC0tbWQtcHJpbWFyeS1mZy1jb2xvcjogaHNsYSgyMzFkZWcsIDQ4JSwgNDglLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogaHNsYSgyMzBkZWcsIDQ0JSwgNjQlLCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiBoc2xhKDIzMmRlZywgNTQlLCA0MSUsIDEpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yOiBoc2xhKDIzMWRlZywgOTklLCA2NiUsIDEpO1xuICAtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQ6IGhzbGEoMjMxZGVnLCA5OSUsIDY2JSwgMC4xKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLWFjY2VudC1iZy1jb2xvci0tbGlnaHQ6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcbiAgLS1tZC1jb2RlLWJnLWNvbG9yOiBoc2xhKDAsIDAlLCA5Mi41JSwgMC41KTtcbiAgLS1tZC1jb2RlLWZnLWNvbG9yOiBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuXG4ubWQtaWNvbiBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG5cbmJvZHkge1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYm9keSxcbmlucHV0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICAgICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCIsIFwibGlnYVwiO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG5jb2RlLFxucHJlLFxua2JkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJrZXJuXCI7XG4gICAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4ubWQtdHlwZXNldCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7XG59XG4ubWQtdHlwZXNldCBwLFxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCxcbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBtYXJnaW46IDFlbSAwO1xufVxuLm1kLXR5cGVzZXQgaDEge1xuICBtYXJnaW46IDAgMCAycmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDEuNTYyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtdHlwZXNldCBoMiB7XG4gIG1hcmdpbjogMnJlbSAwIDAuOHJlbTtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC10eXBlc2V0IGgzIHtcbiAgbWFyZ2luOiAxLjZyZW0gMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubWQtdHlwZXNldCBoMiArIGgzIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgaDQge1xuICBtYXJnaW46IDAuOHJlbSAwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG59XG4ubWQtdHlwZXNldCBoNSxcbi5tZC10eXBlc2V0IGg2IHtcbiAgbWFyZ2luOiAwLjhyZW0gMDtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cbi5tZC10eXBlc2V0IGg1IHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5tZC10eXBlc2V0IGhyIHtcbiAgbWFyZ2luOiAxLjVlbSAwO1xuICBib3JkZXItYm90dG9tOiAwLjA1cmVtIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbn1cbi5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ubWQtdHlwZXNldCBhLCAubWQtdHlwZXNldCBhOjpiZWZvcmUge1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbn1cbi5tZC10eXBlc2V0IGE6Zm9jdXMsIC5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLWNvZGUtZmctY29sb3IpO1xuICBmb250LXNpemU6IDg1JTtcbiAgZGlyZWN0aW9uOiBsdHI7XG59XG4ubWQtdHlwZXNldCBjb2RlIHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJveC1zaGFkb3c6IDAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKSwgLTAuMjk0MTE3NjQ3MWVtIDAgMCB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgaDEgY29kZSxcbi5tZC10eXBlc2V0IGgyIGNvZGUsXG4ubWQtdHlwZXNldCBoMyBjb2RlLFxuLm1kLXR5cGVzZXQgaDQgY29kZSxcbi5tZC10eXBlc2V0IGg1IGNvZGUsXG4ubWQtdHlwZXNldCBoNiBjb2RlIHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGEgPiBjb2RlIHtcbiAgbWFyZ2luOiBpbmhlcml0O1xuICBwYWRkaW5nOiBpbmhlcml0O1xuICBib3JkZXItcmFkaXVzOiBpbml0aWFsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC10eXBlc2V0IHByZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAxZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwLjUyNXJlbSAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIC13ZWJraXQtYm94LWRlY29yYXRpb24tYnJlYWs6IHNsaWNlO1xuICAgICAgICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBzbGljZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIHdvcmQtYnJlYWs6IG5vcm1hbDtcbn1cbi5tZC10eXBlc2V0IHByZSA+IGNvZGU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDAuMnJlbTtcbiAgaGVpZ2h0OiAwLjJyZW07XG59XG4ubWQtdHlwZXNldCBwcmUgPiBjb2RlOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQga2JkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNTg4MjM1Mjk0MWVtO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC43NWVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3gtc2hhZG93OiAwIDAuMXJlbSAwIDAuMDVyZW0gdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIDAgMC4xcmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksIGluc2V0IDAgLTAuMXJlbSAwLjJyZW0gdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cbi5tZC10eXBlc2V0IG1hcmsge1xuICBtYXJnaW46IDAgMC4yNWVtO1xuICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xuICBib3gtc2hhZG93OiAwLjI1ZW0gMCAwIHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpLCAtMC4yNWVtIDAgMCByZ2JhKDI1NSwgMjM1LCA1OSwgMC41KTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgICAgICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xufVxuLm1kLXR5cGVzZXQgYWJiciB7XG4gIGJvcmRlci1ib3R0b206IDAuMDVyZW0gZG90dGVkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IGhlbHA7XG59XG4ubWQtdHlwZXNldCBzbWFsbCB7XG4gIG9wYWNpdHk6IDAuNzU7XG59XG4ubWQtdHlwZXNldCBzdXAsXG4ubWQtdHlwZXNldCBzdWIge1xuICBtYXJnaW4tbGVmdDogMC4wNzgxMjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBzdXAsXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3ViIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjA3ODEyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IGJsb2NrcXVvdGUge1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBibG9ja3F1b3RlIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIGJvcmRlci1yaWdodDogMC4ycmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICBib3JkZXItbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIHtcbiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xufVxuLm1kLXR5cGVzZXQgdWwsXG4ubWQtdHlwZXNldCBvbCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICBwYWRkaW5nOiAwO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHVsLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IG9sIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjYyNWVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10eXBlc2V0IHVsIG9sLFxuLm1kLXR5cGVzZXQgb2wgb2wge1xuICBsaXN0LXN0eWxlLXR5cGU6IGxvd2VyLWFscGhhO1xufVxuLm1kLXR5cGVzZXQgdWwgb2wgb2wsXG4ubWQtdHlwZXNldCBvbCBvbCBvbCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbG93ZXItcm9tYW47XG59XG4ubWQtdHlwZXNldCB1bCBsaSxcbi5tZC10eXBlc2V0IG9sIGxpIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIG1hcmdpbi1sZWZ0OiAxLjI1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgdWwgbGksXG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgb2wgbGkge1xuICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCB1bCBsaSBwLFxuLm1kLXR5cGVzZXQgdWwgbGkgYmxvY2txdW90ZSxcbi5tZC10eXBlc2V0IG9sIGxpIHAsXG4ubWQtdHlwZXNldCBvbCBsaSBibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwLjVlbSAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGk6bGFzdC1jaGlsZCxcbi5tZC10eXBlc2V0IG9sIGxpOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLm1kLXR5cGVzZXQgdWwgbGkgdWwsXG4ubWQtdHlwZXNldCB1bCBsaSBvbCxcbi5tZC10eXBlc2V0IG9sIGxpIHVsLFxuLm1kLXR5cGVzZXQgb2wgbGkgb2wge1xuICBtYXJnaW46IDAuNWVtIDAgMC41ZW0gMC42MjVlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCB1bCBsaSBvbCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSB1bCxcbltkaXI9cnRsXSAubWQtdHlwZXNldCBvbCBsaSBvbCB7XG4gIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCBkZCB7XG4gIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgZGQge1xuICBtYXJnaW4tcmlnaHQ6IDEuODc1ZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgaWZyYW1lLFxuLm1kLXR5cGVzZXQgaW1nLFxuLm1kLXR5cGVzZXQgc3ZnIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSArICoge1xuICBtYXJnaW4tdG9wOiAxLjVlbTtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aDpub3QoW2FsaWduXSksXG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQ6bm90KFthbGlnbl0pIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGg6bm90KFthbGlnbl0pLFxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ZDpub3QoW2FsaWduXSkge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0aCB7XG4gIG1pbi13aWR0aDogNXJlbTtcbiAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdGQge1xuICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5tZC10eXBlc2V0IHRhYmxlOm5vdChbY2xhc3NdKSB0ciB7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTI1bXM7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgYm94LXNoYWRvdzogMCAwLjA1cmVtIDAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcikgaW5zZXQ7XG59XG4ubWQtdHlwZXNldCB0YWJsZTpub3QoW2NsYXNzXSkgdHI6Zmlyc3QtY2hpbGQgdGQge1xuICBib3JkZXItdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgdGFibGU6bm90KFtjbGFzc10pIGEge1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG59XG4ubWQtdHlwZXNldF9fc2Nyb2xsd3JhcCB7XG4gIG1hcmdpbjogMWVtIC0wLjhyZW07XG4gIG92ZXJmbG93LXg6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbn1cbi5tZC10eXBlc2V0IC5tZC10eXBlc2V0X190YWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xufVxuLm1kLXR5cGVzZXQgLm1kLXR5cGVzZXRfX3RhYmxlIHRhYmxlIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmh0bWwge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICBmb250LXNpemU6IDEyNSU7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cblxuYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMC41cmVtO1xufVxuXG5ociB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuMDVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLm1kLWdyaWQge1xuICBtYXgtd2lkdGg6IDYxcmVtO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4ubWQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4ubWQtbWFpbiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5tZC1tYWluX19pbm5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuMDVyZW07XG59XG5cbi5tZC1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAzO1xufVxuXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiAwLjVyZW07XG4gIHBhZGRpbmc6IDAuM3JlbSAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwLjRyZW0pO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgb3BhY2l0eTogMDtcbn1cbi5tZC1za2lwOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxNzVtcyA3NW1zO1xuICBvcGFjaXR5OiAxO1xuICB6LWluZGV4OiAxMDtcbn1cblxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4ubWQtYW5ub3VuY2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbn1cbi5tZC1hbm5vdW5jZV9faW5uZXIge1xuICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gIHBhZGRpbmc6IDAgMC44cmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBsaW5lLWhlaWdodDogMi40cmVtO1xufVxuXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNHJlbTtcbiAgcmlnaHQ6IDAuNHJlbTtcbiAgd2lkdGg6IDEuMnJlbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWNsaXBib2FyZCBzdmcge1xuICB3aWR0aDogMC45cmVtO1xuICBoZWlnaHQ6IDAuOXJlbTtcbn1cbnByZTpob3ZlciAubWQtY2xpcGJvYXJkIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbnByZSAubWQtY2xpcGJvYXJkOmZvY3VzLCBwcmUgLm1kLWNsaXBib2FyZDpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLWNvbnRlbnRfX2lubmVyIHtcbiAgbWFyZ2luOiAwIDAuOHJlbSAxLjJyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG59XG4ubWQtY29udGVudF9faW5uZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC1jb250ZW50X19pbm5lciA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5tZC1jb250ZW50X19idXR0b24ge1xuICBtYXJnaW46IDAuNHJlbSAwO1xuICBtYXJnaW4tbGVmdDogMC40cmVtO1xuICBwYWRkaW5nOiAwO1xuICBmbG9hdDogcmlnaHQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogMC40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5bZGlyPXJ0bF0gLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtdHlwZXNldCAubWQtY29udGVudF9fYnV0dG9uIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWNvbnRlbnRfX2J1dHRvbiBzdmcge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5tZC1kaWFsb2cge1xuICBib3gtc2hhZG93OiAwIDJweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHJpZ2h0OiAwLjhyZW07XG4gIGJvdHRvbTogMC44cmVtO1xuICBsZWZ0OiBpbml0aWFsO1xuICBtaW4td2lkdGg6IDExLjFyZW07XG4gIHBhZGRpbmc6IDAuNHJlbSAwLjZyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogMC43cmVtO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAyO1xufVxuW2Rpcj1ydGxdIC5tZC1kaWFsb2cge1xuICByaWdodDogaW5pdGlhbDtcbiAgbGVmdDogMC44cmVtO1xufVxuLm1kLWRpYWxvZ1tkYXRhLW1kLXN0YXRlPW9wZW5dIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksIG9wYWNpdHkgNDAwbXM7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5tZC1oZWFkZXIge1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMi40cmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLCBjb2xvciAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCAwIDAuMnJlbSByZ2JhKDAsIDAsIDAsIDApLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcbn1cbi5uby1qcyAubWQtaGVhZGVyIHtcbiAgdHJhbnNpdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cbi5tZC1oZWFkZXJbZGF0YS1tZC1zdGF0ZT1zaGFkb3ddIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcywgY29sb3IgMjUwbXMsIGJveC1zaGFkb3cgMjUwbXM7XG4gIGJveC1zaGFkb3c6IDAgMCAwLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAuMnJlbSAwLjRyZW0gcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgMC4ycmVtO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19idXR0b24gc3ZnIHtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xufVxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpmb2N1cywgLm1kLWhlYWRlci1uYXZfX2J1dHRvbjpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gIG1hcmdpbjogMC4ycmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG59XG4ubWQtaGVhZGVyLW5hdl9fYnV0dG9uLm1kLWxvZ28gaW1nLFxuLm1kLWhlYWRlci1uYXZfX2J1dHRvbi5tZC1sb2dvIHN2ZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuLm5vLWpzIC5tZC1oZWFkZXItbmF2X19idXR0b25bZm9yPV9fc2VhcmNoXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLCBvcGFjaXR5IDE1MG1zO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLCBvcGFjaXR5IDE1MG1zO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLWhlYWRlci1uYXZfX3RvcGljICsgLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBwb3NpdGlvbjogaW5pdGlhbDtcbn1cbi5uby1qcyAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlIHtcbiAgZmxleC1ncm93OiAxO1xuICBmb250LXNpemU6IDAuOXJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNHJlbTtcbn1cbi5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xLjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigxLCAwLjcsIDAuMSwgMC4xKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogLTE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X190aXRsZVtkYXRhLW1kLXN0YXRlPWFjdGl2ZV0gLm1kLWhlYWRlci1uYXZfX3RvcGljIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEuMjVyZW0pO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlW2RhdGEtbWQtc3RhdGU9YWN0aXZlXSAubWQtaGVhZGVyLW5hdl9fdG9waWMgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXM7XG4gIG9wYWNpdHk6IDE7XG4gIHotaW5kZXg6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xufVxuLm1kLWhlYWRlci1uYXZfX3RpdGxlID4gLm1kLWhlYWRlci1uYXZfX2VsbGlwc2lzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1kLWhlcm9fX2lubmVyIHtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcGFkZGluZzogMC44cmVtIDAuOHJlbSAwLjRyZW07XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMjUwbXM7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuW2RhdGEtbWQtc3RhdGU9aGlkZGVuXSAubWQtaGVyb19faW5uZXIge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNjI1cmVtKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDBtcyA0MDBtcywgb3BhY2l0eSAxMDBtcyAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG4ubWQtaGVyby0tZXhwYW5kIC5tZC1oZXJvX19pbm5lciB7XG4gIG1hcmdpbi1ib3R0b206IDEuMnJlbTtcbn1cblxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItbmF2X19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxLjRyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjRyZW07XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluazpmb2N1cywgLm1kLWZvb3Rlci1uYXZfX2xpbms6aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtZm9vdGVyLW5hdl9fbGluay0tcHJldiB7XG4gIHdpZHRoOiAyNSU7XG4gIGZsb2F0OiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHtcbiAgd2lkdGg6IDc1JTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbltkaXI9cnRsXSAubWQtZm9vdGVyLW5hdl9fbGluay0tbmV4dCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuW2Rpcj1ydGxdIC5tZC1mb290ZXItbmF2X19saW5rLS1uZXh0IHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC1ncm93OiAxO1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIuNHJlbSk7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbiAgZm9udC1zaXplOiAwLjlyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtZm9vdGVyLW5hdl9fYnV0dG9uIHtcbiAgbWFyZ2luOiAwLjJyZW07XG4gIHBhZGRpbmc6IDAuNHJlbTtcbn1cbi5tZC1mb290ZXItbmF2X19kaXJlY3Rpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtMXJlbTtcbiAgcGFkZGluZzogMCAxcmVtO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG59XG5cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLWZvb3Rlci1tZXRhX19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMnJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5odG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGEge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xufVxuaHRtbCAubWQtZm9vdGVyLW1ldGEubWQtdHlwZXNldCBhOmZvY3VzLCBodG1sIC5tZC1mb290ZXItbWV0YS5tZC10eXBlc2V0IGE6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG59XG5cbi5tZC1mb290ZXItY29weXJpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLWZvb3Rlci1jb3B5cmlnaHRfX2hpZ2hsaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodCk7XG59XG5cbi5tZC1mb290ZXItc29jaWFsIHtcbiAgbWFyZ2luOiAwIDAuNHJlbTtcbiAgcGFkZGluZzogMC4ycmVtIDAgMC42cmVtO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLm1kLWZvb3Rlci1zb2NpYWxfX2xpbms6OmJlZm9yZSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjk7XG59XG4ubWQtZm9vdGVyLXNvY2lhbF9fbGluayBzdmcge1xuICB3aWR0aDogMC44cmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4ubWQtbmF2IHtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4ubWQtbmF2X190aXRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9fYnV0dG9uIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBpbWcsXG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG59XG4ubWQtbmF2X190aXRsZSAubWQtbmF2X19idXR0b24ubWQtbG9nbyBzdmcge1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG59XG4ubWQtbmF2X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLW5hdl9faXRlbTpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1uYXZfX2l0ZW0gLm1kLW5hdl9faXRlbSB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5bZGlyPXJ0bF0gLm1kLW5hdl9faXRlbSAubWQtbmF2X19pdGVtIHtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm1kLW5hdl9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAwLjYyNWVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10ge1xuICBkaXNwbGF5OiBub25lO1xufVxuaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gfiAubWQtbmF2IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC1uYXZfX2xpbmtbZGF0YS1tZC1zdGF0ZT1ibHVyXSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG4ubWQtbmF2X19pdGVtIC5tZC1uYXZfX2xpbmstLWFjdGl2ZSB7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX2l0ZW0tLW5lc3RlZCA+IC5tZC1uYXZfX2xpbmsge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5tZC1uYXZfX2xpbms6Zm9jdXMsIC5tZC1uYXZfX2xpbms6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC1uYXZfX3NvdXJjZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubm8tanMgLm1kLXNlYXJjaCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgb3BhY2l0eTogMDtcbiAgei1pbmRleDogMTtcbn1cbi5tZC1zZWFyY2hfX2lubmVyIHtcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLm1kLXNlYXJjaF9fZm9ybSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDIuMnJlbSAwIDMuNnJlbTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHotaW5kZXg6IDI7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICBwYWRkaW5nOiAwIDMuNnJlbSAwIDIuMnJlbTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIC1tb3otdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIC1tcy10cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG59XG4ubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC1zZWFyY2hfX2lucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbn1cbi5tZC1zZWFyY2hfX2lucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQgfiAubWQtc2VhcmNoX19pY29uLCAubWQtc2VhcmNoX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xufVxuLm1kLXNlYXJjaF9faW5wdXQ6Oi1tcy1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWQtc2VhcmNoX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4ycmVtO1xuICBoZWlnaHQ6IDEuMnJlbTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIG9wYWNpdHkgMjUwbXM7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMjtcbn1cbi5tZC1zZWFyY2hfX2ljb246aG92ZXIge1xuICBvcGFjaXR5OiAwLjc7XG59XG4ubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgbGVmdDogMC41cmVtO1xufVxuW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gIHJpZ2h0OiAwLjVyZW07XG4gIGxlZnQ6IGluaXRpYWw7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvbltmb3I9X19zZWFyY2hdIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cbi5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0b3A6IDAuM3JlbTtcbiAgcmlnaHQ6IDAuNXJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAxNTBtcztcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XSB7XG4gIHJpZ2h0OiBpbml0aWFsO1xuICBsZWZ0OiAwLjVyZW07XG59XG5bZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDp2YWxpZCB+IC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogaW5pdGlhbDtcbn1cbltkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gLm1kLXNlYXJjaF9faWNvblt0eXBlPXJlc2V0XTpob3ZlciB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2hfX291dHB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAwLjFyZW0gMC4xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgLW1zLXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX21ldGEge1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjhyZW07XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saXN0IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19pdGVtIHtcbiAgYm94LXNoYWRvdzogMCAtMC4wNXJlbSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIG91dGxpbmU6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmZvY3VzLCAubWQtc2VhcmNoLXJlc3VsdF9fbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvci0tdHJhbnNwYXJlbnQpO1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6Zm9jdXMgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSwgLm1kLXNlYXJjaC1yZXN1bHRfX2xpbms6aG92ZXIgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19saW5rOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAuOHJlbTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fYXJ0aWNsZS0tZG9jdW1lbnQgLm1kLXNlYXJjaC1yZXN1bHRfX3RpdGxlIHtcbiAgbWFyZ2luOiAwLjU1cmVtIDA7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMC4xcmVtO1xuICBwYWRkaW5nOiAwLjRyZW07XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG59XG5bZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2ljb24ge1xuICByaWdodDogMDtcbiAgbGVmdDogaW5pdGlhbDtcbn1cbltkaXI9cnRsXSAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiBzdmcge1xuICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG59XG4ubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICBtYXJnaW46IDAuNWVtIDA7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi5tZC1zZWFyY2gtcmVzdWx0X190ZWFzZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgbWF4LWhlaWdodDogMS42NXJlbTtcbiAgbWFyZ2luOiAwLjVlbSAwO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICBmb250LXNpemU6IDAuNjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG59XG4ubWQtc2VhcmNoLXJlc3VsdCBlbSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5tZC1zaWRlYmFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTIuMXJlbTtcbiAgcGFkZGluZzogMS4ycmVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWQtc2lkZWJhcltkYXRhLW1kLXN0YXRlPWxvY2tdIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDIuNHJlbTtcbn1cbi5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXAge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgMC4ycmVtO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG59XG4ubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogMC4ycmVtO1xuICBoZWlnaHQ6IDAuMnJlbTtcbn1cbi5tZC1zaWRlYmFyX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXNpZGViYXJfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIGhlaWdodDogMC42NXJlbTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdC0tZG9uZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4ubWQtc291cmNlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXM7XG4gIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlIHtcbiAgcGFkZGluZy1yaWdodDogaW5pdGlhbDtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG59XG4ubWQtc291cmNlOmhvdmVyIHtcbiAgb3BhY2l0eTogMC43O1xufVxuLm1kLXNvdXJjZV9faWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDIuNHJlbTtcbiAgaGVpZ2h0OiAyLjRyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4ubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi10b3A6IDAuNnJlbTtcbiAgbWFyZ2luLWxlZnQ6IDAuNnJlbTtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19pY29uIHN2ZyB7XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC1zb3VyY2VfX2ljb24gKyAubWQtc291cmNlX19yZXBvc2l0b3J5IHtcbiAgbWFyZ2luLWxlZnQ6IC0ycmVtO1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG5bZGlyPXJ0bF0gLm1kLXNvdXJjZV9faWNvbiArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICBtYXJnaW4tcmlnaHQ6IC0ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xufVxuLm1kLXNvdXJjZV9fcmVwb3NpdG9yeSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxLjJyZW0pO1xuICBtYXJnaW4tbGVmdDogMC42cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDAuNTVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3BhY2l0eTogMC43NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbltkYXRhLW1kLXN0YXRlPWRvbmVdIC5tZC1zb3VyY2VfX2ZhY3RzIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbiAgICAgICAgICBhbmltYXRpb246IG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUgMjUwbXMgZWFzZS1pbjtcbn1cbi5tZC1zb3VyY2VfX2ZhY3Qge1xuICBmbG9hdDogbGVmdDtcbn1cbltkaXI9cnRsXSAubWQtc291cmNlX19mYWN0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuW2RhdGEtbWQtc3RhdGU9ZG9uZV0gLm1kLXNvdXJjZV9fZmFjdCB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG4gICAgICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUgNDAwbXMgZWFzZS1vdXQ7XG59XG4ubWQtc291cmNlX19mYWN0OjpiZWZvcmUge1xuICBtYXJnaW46IDAgMC4xcmVtO1xuICBjb250ZW50OiBcIsK3XCI7XG59XG4ubWQtc291cmNlX19mYWN0OmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubWQtdGFicyB7XG4gIHdpZHRoOiAxMDAlO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5uby1qcyAubWQtdGFicyB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbltkaXI9cnRsXSAubWQtdGFic19fbGlzdCB7XG4gIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cbi5tZC10YWJzX19pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbn1cbi5tZC10YWJzX19saW5rIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDAuOHJlbTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSwgb3BhY2l0eSAyNTBtcztcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIG9wYWNpdHk6IDAuNztcbn1cbi5uby1qcyAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG4ubWQtdGFic19fbGluay0tYWN0aXZlLCAubWQtdGFic19fbGluazpob3ZlciB7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBvcGFjaXR5OiAxO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMjBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCgzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDQwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoNCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiA2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDUpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogODBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDEwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDcpIC5tZC10YWJzX19saW5rIHtcbiAgdHJhbnNpdGlvbi1kZWxheTogMTIwbXM7XG59XG4ubWQtdGFic19faXRlbTpudGgtY2hpbGQoOCkgLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2l0aW9uLWRlbGF5OiAxNDBtcztcbn1cbi5tZC10YWJzX19pdGVtOm50aC1jaGlsZCg5KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEwKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDE4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDExKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIwMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEyKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDIyMG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDEzKSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI0MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE0KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI2MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE1KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDI4MG1zO1xufVxuLm1kLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDE2KSAubWQtdGFic19fbGluayB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IDMwMG1zO1xufVxuLm1kLXRhYnNbZGF0YS1tZC1zdGF0ZT1oaWRkZW5dIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdGFic1tkYXRhLW1kLXN0YXRlPWhpZGRlbl0gLm1kLXRhYnNfX2xpbmsge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTAlKTtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMsIHRyYW5zZm9ybSAwbXMgNDAwbXMsIG9wYWNpdHkgMTAwbXM7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgbWFyZ2luOiAxLjU2MjVlbSAwO1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMnJlbSBzb2xpZCAjNDQ4YWZmO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC41cmVtIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMCAwLjA1cmVtIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24sIFtkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgYm9yZGVyLXJpZ2h0OiAwLjJyZW0gc29saWQgIzQ0OGFmZjtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG5odG1sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uID4gOmxhc3QtY2hpbGQsIGh0bWwgLm1kLXR5cGVzZXQgZGV0YWlscyA+IDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24gLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMgLmFkbW9uaXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uIGRldGFpbHMsIC5tZC10eXBlc2V0IGRldGFpbHMgZGV0YWlscyB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyLCAubWQtdHlwZXNldCBkZXRhaWxzLnRsZHIsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1bW1hcnksIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYWJzdHJhY3QsIC5tZC10eXBlc2V0IGRldGFpbHMuYWJzdHJhY3Qge1xuICBib3JkZXItbGVmdC1jb2xvcjogIzAwYjBmZjtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRsZHIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VtbWFyeSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTc2LCAyNTUsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50bGRyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudGxkciA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdW1tYXJ5ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuc3VtbWFyeSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hYnN0cmFjdCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmFic3RyYWN0ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBiMGZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk00LDVIMjBWN0g0VjVNNCw5SDIwVjExSDRWOU00LDEzSDIwVjE1SDRWMTNNNCwxN0gxNFYxOUg0VjE3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTQsNUgyMFY3SDRWNU00LDlIMjBWMTFINFY5TTQsMTNIMjBWMTVINFYxM000LDE3SDE0VjE5SDRWMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRvZG8sIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW5mbywgLm1kLXR5cGVzZXQgZGV0YWlscy5pbmZvIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGI4ZDQ7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnRvZG8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmluZm8gPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMTg0LCAyMTIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi50b2RvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMudG9kbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbmZvID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW5mbyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYjhkNDtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTMsOUgxMVY3SDEzTTEzLDE3SDExVjExSDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEzLDlIMTFWN0gxM00xMywxN0gxMVYxMUgxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJBMTAsMTAgMCAwLDAgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50LCAubWQtdHlwZXNldCBkZXRhaWxzLmltcG9ydGFudCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGludCwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50LCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi50aXAsIC5tZC10eXBlc2V0IGRldGFpbHMudGlwIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGJmYTU7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5pbXBvcnRhbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oaW50ID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhpbnQgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy50aXAgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDE5MSwgMTY1LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuaW1wb3J0YW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmhpbnQgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5oaW50ID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLnRpcCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYmZhNTtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTcuNTUsMTEuMkMxNy4zMiwxMC45IDE3LjA1LDEwLjY0IDE2Ljc5LDEwLjM4QzE2LjE0LDkuNzggMTUuMzksOS4zNSAxNC43Niw4LjcyQzEzLjMsNy4yNiAxMyw0Ljg1IDEzLjkxLDNDMTMsMy4yMyAxMi4xNiwzLjc1IDExLjQ2LDQuMzJDOC45Miw2LjQgNy45MiwxMC4wNyA5LjEyLDEzLjIyQzkuMTYsMTMuMzIgOS4yLDEzLjQyIDkuMiwxMy41NUM5LjIsMTMuNzcgOS4wNSwxMy45NyA4Ljg1LDE0LjA1QzguNjMsMTQuMTUgOC4zOSwxNC4wOSA4LjIxLDEzLjkzQzguMTUsMTMuODggOC4xMSwxMy44MyA4LjA2LDEzLjc2QzYuOTYsMTIuMzMgNi43OCwxMC4yOCA3LjUzLDguNjRDNS44OSwxMCA1LDEyLjMgNS4xNCwxNC40N0M1LjE4LDE0Ljk3IDUuMjQsMTUuNDcgNS40MSwxNS45N0M1LjU1LDE2LjU3IDUuODEsMTcuMTcgNi4xMywxNy43QzcuMTcsMTkuNDMgOSwyMC42NyAxMC45NywyMC45MkMxMy4wNywyMS4xOSAxNS4zMiwyMC44IDE2LjkzLDE5LjMyQzE4LjczLDE3LjY2IDE5LjM4LDE1IDE4LjQzLDEyLjcyTDE4LjMsMTIuNDZDMTguMSwxMiAxNy44MywxMS41OSAxNy41LDExLjIxTDE3LjU1LDExLjJNMTQuNDUsMTcuNUMxNC4xNywxNy43NCAxMy43MiwxOCAxMy4zNywxOC4xQzEyLjI3LDE4LjUgMTEuMTcsMTcuOTQgMTAuNSwxNy4yOEMxMS42OSwxNyAxMi4zOSwxNi4xMiAxMi41OSwxNS4yM0MxMi43NiwxNC40MyAxMi40NSwxMy43NyAxMi4zMiwxM0MxMi4yLDEyLjI2IDEyLjIyLDExLjYzIDEyLjUsMTAuOTRDMTIuNjcsMTEuMzIgMTIuODcsMTEuNyAxMy4xLDEyQzEzLjg2LDEzIDE1LjA1LDEzLjQ0IDE1LjMsMTQuOEMxNS4zNCwxNC45NCAxNS4zNiwxNS4wOCAxNS4zNiwxNS4yM0MxNS4zOSwxNi4wNSAxNS4wNCwxNi45NSAxNC40NCwxNy41SDE0LjQ1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE3LjU1LDExLjJDMTcuMzIsMTAuOSAxNy4wNSwxMC42NCAxNi43OSwxMC4zOEMxNi4xNCw5Ljc4IDE1LjM5LDkuMzUgMTQuNzYsOC43MkMxMy4zLDcuMjYgMTMsNC44NSAxMy45MSwzQzEzLDMuMjMgMTIuMTYsMy43NSAxMS40Niw0LjMyQzguOTIsNi40IDcuOTIsMTAuMDcgOS4xMiwxMy4yMkM5LjE2LDEzLjMyIDkuMiwxMy40MiA5LjIsMTMuNTVDOS4yLDEzLjc3IDkuMDUsMTMuOTcgOC44NSwxNC4wNUM4LjYzLDE0LjE1IDguMzksMTQuMDkgOC4yMSwxMy45M0M4LjE1LDEzLjg4IDguMTEsMTMuODMgOC4wNiwxMy43NkM2Ljk2LDEyLjMzIDYuNzgsMTAuMjggNy41Myw4LjY0QzUuODksMTAgNSwxMi4zIDUuMTQsMTQuNDdDNS4xOCwxNC45NyA1LjI0LDE1LjQ3IDUuNDEsMTUuOTdDNS41NSwxNi41NyA1LjgxLDE3LjE3IDYuMTMsMTcuN0M3LjE3LDE5LjQzIDksMjAuNjcgMTAuOTcsMjAuOTJDMTMuMDcsMjEuMTkgMTUuMzIsMjAuOCAxNi45MywxOS4zMkMxOC43MywxNy42NiAxOS4zOCwxNSAxOC40MywxMi43MkwxOC4zLDEyLjQ2QzE4LjEsMTIgMTcuODMsMTEuNTkgMTcuNSwxMS4yMUwxNy41NSwxMS4yTTE0LjQ1LDE3LjVDMTQuMTcsMTcuNzQgMTMuNzIsMTggMTMuMzcsMTguMUMxMi4yNywxOC41IDExLjE3LDE3Ljk0IDEwLjUsMTcuMjhDMTEuNjksMTcgMTIuMzksMTYuMTIgMTIuNTksMTUuMjNDMTIuNzYsMTQuNDMgMTIuNDUsMTMuNzcgMTIuMzIsMTNDMTIuMiwxMi4yNiAxMi4yMiwxMS42MyAxMi41LDEwLjk0QzEyLjY3LDExLjMyIDEyLjg3LDExLjcgMTMuMSwxMkMxMy44NiwxMyAxNS4wNSwxMy40NCAxNS4zLDE0LjhDMTUuMzQsMTQuOTQgMTUuMzYsMTUuMDggMTUuMzYsMTUuMjNDMTUuMzksMTYuMDUgMTUuMDQsMTYuOTUgMTQuNDQsMTcuNUgxNC40NVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZG9uZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5kb25lLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjaywgLm1kLXR5cGVzZXQgZGV0YWlscy5jaGVjaywgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uc3VjY2VzcywgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMGM4NTM7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmRvbmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5zdWNjZXNzID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDIwMCwgODMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kb25lID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZG9uZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jaGVjayA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmNoZWNrID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnN1Y2Nlc3MgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5zdWNjZXNzID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBjODUzO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkExMCwxMCAwIDAsMSAyMiwxMkExMCwxMCAwIDAsMSAxMiwyMkExMCwxMCAwIDAsMSAyLDEyQTEwLDEwIDAgMCwxIDEyLDJNMTEsMTYuNUwxOCw5LjVMMTYuNTksOC4wOUwxMSwxMy42N0w3LjkxLDEwLjU5TDYuNSwxMkwxMSwxNi41WlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NGRkMTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFxID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5oZWxwID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLnF1ZXN0aW9uID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMDAsIDIyMSwgMjMsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5mYXEgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uaGVscCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCBkZXRhaWxzLmhlbHAgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ucXVlc3Rpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdWVzdGlvbiA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0ZGQxNztcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTUuMDcsMTEuMjVMMTQuMTcsMTIuMTdDMTMuNDUsMTIuODkgMTMsMTMuNSAxMywxNUgxMVYxNC41QzExLDEzLjM5IDExLjQ1LDEyLjM5IDEyLjE3LDExLjY3TDEzLjQxLDEwLjQxQzEzLjc4LDEwLjA1IDE0LDkuNTUgMTQsOUMxNCw3Ljg5IDEzLjEsNyAxMiw3QTIsMiAwIDAsMCAxMCw5SDhBNCw0IDAgMCwxIDEyLDVBNCw0IDAgMCwxIDE2LDlDMTYsOS44OCAxNS42NCwxMC42NyAxNS4wNywxMS4yNU0xMywxOUgxMVYxN0gxM00xMiwyQTEwLDEwIDAgMCwwIDIsMTJBMTAsMTAgMCAwLDAgMTIsMjJBMTAsMTAgMCAwLDAgMjIsMTJDMjIsNi40NyAxNy41LDIgMTIsMlpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNS4wNywxMS4yNUwxNC4xNywxMi4xN0MxMy40NSwxMi44OSAxMywxMy41IDEzLDE1SDExVjE0LjVDMTEsMTMuMzkgMTEuNDUsMTIuMzkgMTIuMTcsMTEuNjdMMTMuNDEsMTAuNDFDMTMuNzgsMTAuMDUgMTQsOS41NSAxNCw5QzE0LDcuODkgMTMuMSw3IDEyLDdBMiwyIDAgMCwwIDEwLDlIOEE0LDQgMCAwLDEgMTIsNUE0LDQgMCAwLDEgMTYsOUMxNiw5Ljg4IDE1LjY0LDEwLjY3IDE1LjA3LDExLjI1TTEzLDE5SDExVjE3SDEzTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkMyMiw2LjQ3IDE3LjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5hdHRlbnRpb24sIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5jYXV0aW9uLCAubWQtdHlwZXNldCBkZXRhaWxzLmNhdXRpb24sIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcsIC5tZC10eXBlc2V0IGRldGFpbHMud2FybmluZyB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY5MTAwO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmF0dGVudGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2F1dGlvbiA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi53YXJuaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMTQ1LCAwLCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYXR0ZW50aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNhdXRpb24gPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jYXV0aW9uID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLndhcm5pbmcgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy53YXJuaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY5MTAwO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMywxNEgxMVYxMEgxM00xMywxOEgxMVYxNkgxM00xLDIxSDIzTDEyLDJMMSwyMVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZywgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmY1MjUyO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24ubWlzc2luZyA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5taXNzaW5nID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmZhaWwgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmZhaWx1cmUgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA4MiwgODIsIDAuMSk7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5taXNzaW5nID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMubWlzc2luZyA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbCA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5mYWlsdXJlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZmFpbHVyZSA+IDpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTI1MjtcbiAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTIsMkMxNy41MywyIDIyLDYuNDcgMjIsMTJDMjIsMTcuNTMgMTcuNTMsMjIgMTIsMjJDNi40NywyMiAyLDE3LjUzIDIsMTJDMiw2LjQ3IDYuNDcsMiAxMiwyTTE1LjU5LDdMMTIsMTAuNTlMOC40MSw3TDcsOC40MUwxMC41OSwxMkw3LDE1LjU5TDguNDEsMTdMMTIsMTMuNDFMMTUuNTksMTdMMTcsMTUuNTlMMTMuNDEsMTJMMTcsOC40MUwxNS41OSw3WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJDMTcuNTMsMiAyMiw2LjQ3IDIyLDEyQzIyLDE3LjUzIDE3LjUzLDIyIDEyLDIyQzYuNDcsMjIgMiwxNy41MyAyLDEyQzIsNi40NyA2LjQ3LDIgMTIsMk0xNS41OSw3TDEyLDEwLjU5TDguNDEsN0w3LDguNDFMMTAuNTksMTJMNywxNS41OUw4LjQxLDE3TDEyLDEzLjQxTDE1LjU5LDE3TDE3LDE1LjU5TDEzLjQxLDEyTDE3LDguNDFMMTUuNTksN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXJyb3IsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmRhbmdlciwgLm1kLXR5cGVzZXQgZGV0YWlscy5kYW5nZXIge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZmMTc0NDtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmVycm9yID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5kYW5nZXIgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDIzLCA2OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmVycm9yID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZXJyb3IgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuZGFuZ2VyID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmYxNzQ0O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMS41LDIwTDE2LjM2LDEwLjI3SDEzVjRMOCwxMy43M0gxMS41VjIwTTEyLDJDMTQuNzUsMiAxNy4xLDMgMTkuMDUsNC45NUMyMSw2LjkgMjIsOS4yNSAyMiwxMkMyMiwxNC43NSAyMSwxNy4xIDE5LjA1LDE5LjA1QzE3LjEsMjEgMTQuNzUsMjIgMTIsMjJDOS4yNSwyMiA2LjksMjEgNC45NSwxOS4wNUMzLDE3LjEgMiwxNC43NSAyLDEyQzIsOS4yNSAzLDYuOSA0Ljk1LDQuOTVDNi45LDMgOS4yNSwyIDEyLDJaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTEuNSwyMEwxNi4zNiwxMC4yN0gxM1Y0TDgsMTMuNzNIMTEuNVYyME0xMiwyQzE0Ljc1LDIgMTcuMSwzIDE5LjA1LDQuOTVDMjEsNi45IDIyLDkuMjUgMjIsMTJDMjIsMTQuNzUgMjEsMTcuMSAxOS4wNSwxOS4wNUMxNy4xLDIxIDE0Ljc1LDIyIDEyLDIyQzkuMjUsMjIgNi45LDIxIDQuOTUsMTkuMDVDMywxNy4xIDIsMTQuNzUgMiwxMkMyLDkuMjUgMyw2LjkgNC45NSw0Ljk1QzYuOSwzIDkuMjUsMiAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmNTAwNTc7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5idWcgPiA6Zmlyc3QtY2hpbGQsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNDUsIDAsIDg3LCAwLjEpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMuYnVnID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjUwMDU3O1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xNCwxMkgxMFYxMEgxNE0xNCwxNkgxMFYxNEgxNE0yMCw4SDE3LjE5QzE2Ljc0LDcuMjIgMTYuMTIsNi41NSAxNS4zNyw2LjA0TDE3LDQuNDFMMTUuNTksM0wxMy40Miw1LjE3QzEyLjk2LDUuMDYgMTIuNSw1IDEyLDVDMTEuNSw1IDExLjA0LDUuMDYgMTAuNTksNS4xN0w4LjQxLDNMNyw0LjQxTDguNjIsNi4wNEM3Ljg4LDYuNTUgNy4yNiw3LjIyIDYuODEsOEg0VjEwSDYuMDlDNi4wNCwxMC4zMyA2LDEwLjY2IDYsMTFWMTJINFYxNEg2VjE1QzYsMTUuMzQgNi4wNCwxNS42NyA2LjA5LDE2SDRWMThINi44MUM3Ljg1LDE5Ljc5IDkuNzgsMjEgMTIsMjFDMTQuMjIsMjEgMTYuMTUsMTkuNzkgMTcuMTksMThIMjBWMTZIMTcuOTFDMTcuOTYsMTUuNjcgMTgsMTUuMzQgMTgsMTVWMTRIMjBWMTJIMThWMTFDMTgsMTAuNjYgMTcuOTYsMTAuMzMgMTcuOTEsMTBIMjBWOFpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uZXhhbXBsZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICM2NTFmZmY7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi5leGFtcGxlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCBkZXRhaWxzLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMSwgMzEsIDI1NSwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmV4YW1wbGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5leGFtcGxlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjUxZmZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LDEzVjExSDIxVjEzSDdNNywxOVYxN0gyMVYxOUg3TTcsN1Y1SDIxVjdIN00zLDhWNUgyVjRINFY4SDNNMiwxN1YxNkg1VjIwSDJWMTlINFYxOC41SDNWMTcuNUg0VjE3SDJNNC4yNSwxMEEwLjc1LDAuNzUgMCAwLDEgNSwxMC43NUM1LDEwLjk1IDQuOTIsMTEuMTQgNC43OSwxMS4yN0wzLjEyLDEzSDVWMTRIMlYxMy4wOEw0LDExSDJWMTBINC4yNVpcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOWU5ZTllO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24uY2l0ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkLCAubWQtdHlwZXNldCAuYWRtb25pdGlvbi5xdW90ZSA+IDpmaXJzdC1jaGlsZCwgLm1kLXR5cGVzZXQgZGV0YWlscy5xdW90ZSA+IDpmaXJzdC1jaGlsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTU4LCAxNTgsIDE1OCwgMC4xKTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLmNpdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgZGV0YWlscy5jaXRlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IC5hZG1vbml0aW9uLnF1b3RlID4gOmZpcnN0LWNoaWxkOjpiZWZvcmUsIC5tZC10eXBlc2V0IGRldGFpbHMucXVvdGUgPiA6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5ZTllOWU7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE0LDE3SDE3TDE5LDEzVjdIMTNWMTNIMTZNNiwxN0g5TDExLDEzVjdINVYxM0g4TDYsMTdaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIj48cGF0aCBkPVxcXCJNMTQsMTdIMTdMMTksMTNWN0gxM1YxM0gxNk02LDE3SDlMMTEsMTNWN0g1VjEzSDhMNiwxN1pcXFwiIC8+PC9zdmc+XCIpO1xufVxuLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIC5tZC10eXBlc2V0IHN1bW1hcnkge1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMC40cmVtIDAuNnJlbSAwLjRyZW0gMnJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg2OCwgMTM4LCAyNTUsIDAuMSk7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLmFkbW9uaXRpb24tdGl0bGUsIFtkaXI9cnRsXSAubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgcGFkZGluZzogMC40cmVtIDJyZW0gMC40cmVtIDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC5hZG1vbml0aW9uLXRpdGxlOmxhc3QtY2hpbGQsIC5tZC10eXBlc2V0IHN1bW1hcnk6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCAubWQtdHlwZXNldCBzdW1tYXJ5OjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMS40cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4YWZmO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0yMC43MSw3LjA0QzIxLjEsNi42NSAyMS4xLDYgMjAuNzEsNS42M0wxOC4zNywzLjI5QzE4LDIuOSAxNy4zNSwyLjkgMTYuOTYsMy4yOUwxNS4xMiw1LjEyTDE4Ljg3LDguODdNMywxNy4yNVYyMUg2Ljc1TDE3LjgxLDkuOTNMMTQuMDYsNi4xOEwzLDE3LjI1WlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTIwLjcxLDcuMDRDMjEuMSw2LjY1IDIxLjEsNiAyMC43MSw1LjYzTDE4LjM3LDMuMjlDMTgsMi45IDE3LjM1LDIuOSAxNi45NiwzLjI5TDE1LjEyLDUuMTJMMTguODcsOC44N00zLDE3LjI1VjIxSDYuNzVMMTcuODEsOS45M0wxNC4wNiw2LjE4TDMsMTcuMjVaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuYWRtb25pdGlvbi10aXRsZTo6YmVmb3JlLCBbZGlyPXJ0bF0gLm1kLXR5cGVzZXQgc3VtbWFyeTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMS40cmVtO1xuICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbn1cblxuLmNvZGVoaWxpdGUgLm8sIC5oaWdobGlnaHQgLm8ge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5vdywgLmhpZ2hsaWdodCAub3cge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5nZSwgLmhpZ2hsaWdodCAuZ2Uge1xuICBjb2xvcjogIzAwMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nciwgLmhpZ2hsaWdodCAuZ3Ige1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5naCwgLmhpZ2hsaWdodCAuZ2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5nbywgLmhpZ2hsaWdodCAuZ28ge1xuICBjb2xvcjogIzg4ODg4ODtcbn1cbi5jb2RlaGlsaXRlIC5ncCwgLmhpZ2hsaWdodCAuZ3Age1xuICBjb2xvcjogIzU1NTU1NTtcbn1cbi5jb2RlaGlsaXRlIC5ncywgLmhpZ2hsaWdodCAuZ3Mge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cbi5jb2RlaGlsaXRlIC5ndSwgLmhpZ2hsaWdodCAuZ3Uge1xuICBjb2xvcjogI0FBQUFBQTtcbn1cbi5jb2RlaGlsaXRlIC5ndCwgLmhpZ2hsaWdodCAuZ3Qge1xuICBjb2xvcjogI0FBMDAwMDtcbn1cbi5jb2RlaGlsaXRlIC5nZCwgLmhpZ2hsaWdodCAuZ2Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREREO1xufVxuLmNvZGVoaWxpdGUgLmdpLCAuaGlnaGxpZ2h0IC5naSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG59XG4uY29kZWhpbGl0ZSAuaywgLmhpZ2hsaWdodCAuayB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtjLCAuaGlnaGxpZ2h0IC5rYyB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtkLCAuaGlnaGxpZ2h0IC5rZCB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtuLCAuaGlnaGxpZ2h0IC5rbiB7XG4gIGNvbG9yOiAjM0I3OEU3O1xufVxuLmNvZGVoaWxpdGUgLmtwLCAuaGlnaGxpZ2h0IC5rcCB7XG4gIGNvbG9yOiAjQTcxRDVEO1xufVxuLmNvZGVoaWxpdGUgLmtyLCAuaGlnaGxpZ2h0IC5rciB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmt0LCAuaGlnaGxpZ2h0IC5rdCB7XG4gIGNvbG9yOiAjM0U2MUEyO1xufVxuLmNvZGVoaWxpdGUgLmMsIC5oaWdobGlnaHQgLmMge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jbSwgLmhpZ2hsaWdodCAuY20ge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcCwgLmhpZ2hsaWdodCAuY3Age1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5jMSwgLmhpZ2hsaWdodCAuYzEge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jaCwgLmhpZ2hsaWdodCAuY2gge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5jcywgLmhpZ2hsaWdodCAuY3Mge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cbi5jb2RlaGlsaXRlIC5uYSwgLmhpZ2hsaWdodCAubmEge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uYiwgLmhpZ2hsaWdodCAubmIge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5icCwgLmhpZ2hsaWdodCAuYnAge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uYywgLmhpZ2hsaWdodCAubmMge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubywgLmhpZ2hsaWdodCAubm8ge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5uZCwgLmhpZ2hsaWdodCAubmQge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uaSwgLmhpZ2hsaWdodCAubmkge1xuICBjb2xvcjogIzY2NjY2Njtcbn1cbi5jb2RlaGlsaXRlIC5uZSwgLmhpZ2hsaWdodCAubmUge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5uZiwgLmhpZ2hsaWdodCAubmYge1xuICBjb2xvcjogI0MyMTg1Qjtcbn1cbi5jb2RlaGlsaXRlIC5ubCwgLmhpZ2hsaWdodCAubmwge1xuICBjb2xvcjogIzNCNTE3OTtcbn1cbi5jb2RlaGlsaXRlIC5ubiwgLmhpZ2hsaWdodCAubm4ge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5udCwgLmhpZ2hsaWdodCAubnQge1xuICBjb2xvcjogIzNCNzhFNztcbn1cbi5jb2RlaGlsaXRlIC5udiwgLmhpZ2hsaWdodCAubnYge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52YywgLmhpZ2hsaWdodCAudmMge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52ZywgLmhpZ2hsaWdodCAudmcge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC52aSwgLmhpZ2hsaWdodCAudmkge1xuICBjb2xvcjogIzNFNjFBMjtcbn1cbi5jb2RlaGlsaXRlIC5ueCwgLmhpZ2hsaWdodCAubngge1xuICBjb2xvcjogI0VDNDA3QTtcbn1cbi5jb2RlaGlsaXRlIC5tLCAuaGlnaGxpZ2h0IC5tIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWYsIC5oaWdobGlnaHQgLm1mIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWgsIC5oaWdobGlnaHQgLm1oIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubWksIC5oaWdobGlnaHQgLm1pIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAuaWwsIC5oaWdobGlnaHQgLmlsIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAubW8sIC5oaWdobGlnaHQgLm1vIHtcbiAgY29sb3I6ICNFNzRDM0M7XG59XG4uY29kZWhpbGl0ZSAucywgLmhpZ2hsaWdodCAucyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNiLCAuaGlnaGxpZ2h0IC5zYiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNjLCAuaGlnaGxpZ2h0IC5zYyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNkLCAuaGlnaGxpZ2h0IC5zZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLmNvZGVoaWxpdGUgLnMyLCAuaGlnaGxpZ2h0IC5zMiB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNlLCAuaGlnaGxpZ2h0IC5zZSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNoLCAuaGlnaGxpZ2h0IC5zaCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNpLCAuaGlnaGxpZ2h0IC5zaSB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnN4LCAuaGlnaGxpZ2h0IC5zeCB7XG4gIGNvbG9yOiAjMTgzNjkxO1xufVxuLmNvZGVoaWxpdGUgLnNyLCAuaGlnaGxpZ2h0IC5zciB7XG4gIGNvbG9yOiAjMDA5OTI2O1xufVxuLmNvZGVoaWxpdGUgLnMxLCAuaGlnaGxpZ2h0IC5zMSB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLnNzLCAuaGlnaGxpZ2h0IC5zcyB7XG4gIGNvbG9yOiAjMEQ5MDRGO1xufVxuLmNvZGVoaWxpdGUgLmVyciwgLmhpZ2hsaWdodCAuZXJyIHtcbiAgY29sb3I6ICNBNjE3MTc7XG59XG4uY29kZWhpbGl0ZSAudywgLmhpZ2hsaWdodCAudyB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgLTAuNnJlbTtcbiAgcGFkZGluZzogMCAwLjZyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMzUsIDU5LCAwLjUpO1xufVxuXG4uY29kZWhpbGl0ZXRhYmxlLCAuaGlnaGxpZ2h0dGFibGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jb2RlaGlsaXRldGFibGUgdGJvZHksIC5oaWdobGlnaHR0YWJsZSB0Ym9keSxcbi5jb2RlaGlsaXRldGFibGUgdGQsXG4uaGlnaGxpZ2h0dGFibGUgdGQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi5jb2RlaGlsaXRldGFibGUgdHIsIC5oaWdobGlnaHR0YWJsZSB0ciB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uY29kZWhpbGl0ZXRhYmxlIHByZSwgLmhpZ2hsaWdodHRhYmxlIHByZSxcbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub2Rpdixcbi5oaWdobGlnaHR0YWJsZSAubGluZW5vZGl2IHtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuLmNvZGVoaWxpdGV0YWJsZSAubGluZW5vZGl2LCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub2RpdiB7XG4gIHBhZGRpbmc6IDAuNTI1cmVtIDAuNnJlbTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MsIC5oaWdobGlnaHR0YWJsZSAubGluZW5vcyB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4wNXJlbSB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmxpbmVub3MgcHJlLCAuaGlnaGxpZ2h0dGFibGUgLmxpbmVub3MgcHJlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5jb2RlaGlsaXRldGFibGUgLmNvZGUsIC5oaWdobGlnaHR0YWJsZSAuY29kZSB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGV0YWJsZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0dGFibGUge1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXItcmFkaXVzOiAwLjJlbTtcbn1cblxuLm1kLXR5cGVzZXQgW2lkXj1cImZucmVmOlwiXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5tZC10eXBlc2V0IFtpZF49XCJmbnJlZjpcIl06dGFyZ2V0IHtcbiAgbWFyZ2luLXRvcDogLTMuOHJlbTtcbiAgcGFkZGluZy10b3A6IDMuOHJlbTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBbaWRePVwiZm46XCJdOnRhcmdldDo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0zLjVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjVyZW07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgZm9udC1zaXplOiAwLjY0cmVtO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlIG9sIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkge1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTp0YXJnZXQge1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUgbGkgOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZiwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgb3BhY2l0eTogMTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZSBsaTpob3ZlciAuZm9vdG5vdGUtYmFja3JlZjpob3ZlciwgLm1kLXR5cGVzZXQgLmZvb3Rub3RlIGxpOnRhcmdldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xufVxuLm1kLXR5cGVzZXQgLmZvb3Rub3RlLXJlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbjogMCAwLjJlbTtcbiAgYm9yZGVyLWxlZnQ6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMS4yNWVtO1xuICBjb250ZW50OiBcIlwiO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVyZW07XG59XG4ubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gIGZvbnQtc2l6ZTogMDtcbiAgb3BhY2l0eTogMDtcbiAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0wLjI1cmVtKTtcbn1cbi5tZC10eXBlc2V0IC5mb290bm90ZS1iYWNrcmVmOjpiZWZvcmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTE5LDdWMTFINS44M0w5LjQxLDcuNDFMOCw2TDIsMTJMOCwxOEw5LjQxLDE2LjU4TDUuODMsMTNIMjFWN0gxOVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xOSw3VjExSDUuODNMOS40MSw3LjQxTDgsNkwyLDEyTDgsMThMOS40MSwxNi41OEw1LjgzLDEzSDIxVjdIMTlaXFxcIiAvPjwvc3ZnPlwiKTtcbiAgY29udGVudDogXCJcIjtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCAuZm9vdG5vdGUtYmFja3JlZjo6YmVmb3JlIHN2ZyB7XG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbn1cblxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDAuMjVyZW0pO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgMjUwbXMsIGNvbG9yIDI1MG1zLCBvcGFjaXR5IDEyNW1zIDI1MG1zLCB2aXNpYmlsaXR5IDBtcyA1MDBtcztcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xufVxuaHRtbCBib2R5IC5tZC10eXBlc2V0IC5oZWFkZXJsaW5rIHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xufVxuLm1kLXR5cGVzZXQgOmhvdmVyIC5oZWFkZXJsaW5rLFxuLm1kLXR5cGVzZXQgOnRhcmdldCAuaGVhZGVybGluayxcbi5tZC10eXBlc2V0IC5oZWFkZXJsaW5rOmZvY3VzIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyAyNTBtcywgY29sb3IgMjUwbXMsIG9wYWNpdHkgMTI1bXMgMjUwbXMsIHZpc2liaWxpdHkgMG1zO1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuLm1kLXR5cGVzZXQgLmhlYWRlcmxpbms6Zm9jdXMsXG4ubWQtdHlwZXNldCAuaGVhZGVybGluazpob3Zlcixcbi5tZC10eXBlc2V0IDp0YXJnZXQgLmhlYWRlcmxpbmsge1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTo6YmVmb3JlLCAubWQtdHlwZXNldCBoMltpZF06OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDFbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNHJlbTtcbiAgcGFkZGluZy10b3A6IDAuNHJlbTtcbiAgY29udGVudDogXCJcIjtcbn1cbi5tZC10eXBlc2V0IGgzW2lkXTp0YXJnZXQ6OmJlZm9yZSwgLm1kLXR5cGVzZXQgaDJbaWRdOnRhcmdldDo6YmVmb3JlLCAubWQtdHlwZXNldCBoMVtpZF06dGFyZ2V0OjpiZWZvcmUge1xuICBtYXJnaW4tdG9wOiAtMy40cmVtO1xuICBwYWRkaW5nLXRvcDogMy40cmVtO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOjpiZWZvcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogLTAuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAwLjQ1cmVtO1xuICBjb250ZW50OiBcIlwiO1xufVxuLm1kLXR5cGVzZXQgaDRbaWRdOnRhcmdldDo6YmVmb3JlIHtcbiAgbWFyZ2luLXRvcDogLTMuNDVyZW07XG4gIHBhZGRpbmctdG9wOiAzLjQ1cmVtO1xufVxuLm1kLXR5cGVzZXQgaDZbaWRdOjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0wLjZyZW07XG4gIHBhZGRpbmctdG9wOiAwLjZyZW07XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG4ubWQtdHlwZXNldCBoNltpZF06dGFyZ2V0OjpiZWZvcmUsIC5tZC10eXBlc2V0IGg1W2lkXTp0YXJnZXQ6OmJlZm9yZSB7XG4gIG1hcmdpbi10b3A6IC0zLjZyZW07XG4gIHBhZGRpbmctdG9wOiAzLjZyZW07XG59XG4ubWQtdHlwZXNldCAuTUpYYy1kaXNwbGF5IHtcbiAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgcGFkZGluZzogMC43NWVtIDA7XG4gIG92ZXJmbG93OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4ubWQtdHlwZXNldCAuTWF0aEpheF9DSFRNTCB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tZC10eXBlc2V0IGRlbC5jcml0aWMsXG4ubWQtdHlwZXNldCBpbnMuY3JpdGljLFxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50IHtcbiAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgcGFkZGluZzogMC4wNjI1ZW0gMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xcmVtO1xuICAtd2Via2l0LWJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgICAgICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG59XG4ubWQtdHlwZXNldCBkZWwuY3JpdGljIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRERERDtcbiAgYm94LXNoYWRvdzogMC4yNWVtIDAgMCAjRkZERERELCAtMC4yNWVtIDAgMCAjRkZEREREO1xufVxuLm1kLXR5cGVzZXQgaW5zLmNyaXRpYyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNEREZGREQ7XG4gIGJveC1zaGFkb3c6IDAuMjVlbSAwIDAgI0RERkZERCwgLTAuMjVlbSAwIDAgI0RERkZERDtcbn1cbi5tZC10eXBlc2V0IC5jcml0aWMuY29tbWVudCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjpiZWZvcmUge1xuICBjb250ZW50OiBcIi8qIFwiO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5jb21tZW50OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiICovXCI7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbjogMWVtIDA7XG4gIHBhZGRpbmctcmlnaHQ6IDAuOHJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjhyZW07XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG4ubWQtdHlwZXNldCAuY3JpdGljLmJsb2NrIDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDAuNWVtO1xufVxuLm1kLXR5cGVzZXQgLmNyaXRpYy5ibG9jayA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubWQtdHlwZXNldCBkZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLm1kLXR5cGVzZXQgZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnk6OmFmdGVyIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHM6bm90KFtvcGVuXSkgPiBzdW1tYXJ5IHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IGRldGFpbHMgc3VtbWFyeSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbn1cbltkaXI9cnRsXSAubWQtdHlwZXNldCBkZXRhaWxzIHN1bW1hcnkge1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG4ubWQtdHlwZXNldCBzdW1tYXJ5IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5tZC10eXBlc2V0IHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm1kLXR5cGVzZXQgc3VtbWFyeTo6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwLjZyZW07XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk03LjQxLDguNThMMTIsMTMuMTdMMTYuNTksOC41OEwxOCwxMEwxMiwxNkw2LDEwTDcuNDEsOC41OFpcXFwiIC8+PC9zdmc+XCIpO1xuICBjb250ZW50OiBcIlwiO1xufVxuW2Rpcj1ydGxdIC5tZC10eXBlc2V0IHN1bW1hcnk6OmFmdGVyIHtcbiAgcmlnaHQ6IGluaXRpYWw7XG4gIGxlZnQ6IDAuNnJlbTtcbn1cblxuLm1kLXR5cGVzZXQgLmVtb2ppb25lLFxuLm1kLXR5cGVzZXQgLnR3ZW1vamksXG4ubWQtdHlwZXNldCAuZ2Vtb2ppIHtcbiAgd2lkdGg6IDFyZW07XG4gIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbn1cblxuLmhpZ2hsaWdodCBbZGF0YS1saW5lbm9zXTo6YmVmb3JlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGxlZnQ6IC0wLjZyZW07XG4gIG1hcmdpbi1yaWdodDogMC42cmVtO1xuICBtYXJnaW4tbGVmdDogLTAuNnJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIGJvcmRlci1yaWdodDogMC4wNXJlbSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgY29udGVudDogYXR0cihkYXRhLWxpbmVub3MpO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ubWQtdHlwZXNldCBjb2RlLmNvZGVoaWxpdGUsIC5tZC10eXBlc2V0IGNvZGUuaGlnaGxpZ2h0IHtcbiAgbWFyZ2luOiAwIDAuMjk0MTE3NjQ3MWVtO1xuICBwYWRkaW5nOiAwLjA3MzUyOTQxMThlbSAwO1xufVxuXG4ubWQtdHlwZXNldCAudGFiYmVkLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBvcmRlcjogOTk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1jb2RlLWJnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtY29udGVudCBwcmUge1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDFlbSAwO1xuICBib3JkZXI6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG59XG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gcHJlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmhpZ2hsaWdodHRhYmxlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRlOm9ubHktY2hpbGQsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCB7XG4gIG1hcmdpbjogMCAtMC42cmVtO1xufVxuLm1kLXR5cGVzZXQgLnRhYmJlZC1zZXQgPiBpbnB1dDpjaGVja2VkICsgbGFiZWwgKyAudGFiYmVkLWNvbnRlbnQgPiBwcmU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHQ6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5oaWdobGlnaHR0YWJsZTpvbmx5LWNoaWxkIHByZSxcbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsICsgLnRhYmJlZC1jb250ZW50ID4gLmNvZGVoaWxpdGU6b25seS1jaGlsZCBwcmUsXG4ubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIC50YWJiZWQtY29udGVudCA+IC5jb2RlaGlsaXRldGFibGU6b25seS1jaGlsZCBwcmUge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbi5tZC10eXBlc2V0IC50YWJiZWQtc2V0ID4gbGFiZWwge1xuICB3aWR0aDogYXV0bztcbiAgcGFkZGluZzogMC42cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcywgYm9yZGVyIDI1MG1zO1xuICBib3JkZXItYm90dG9tOiAwLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuaHRtbCAubWQtdHlwZXNldCAudGFiYmVkLXNldCA+IGxhYmVsOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG59XG5cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjQ1ZW07XG4gIGxlZnQ6IC0yZW07XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1pdGVtIFt0eXBlPWNoZWNrYm94XSB7XG4gIHJpZ2h0OiAtMmVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMC4xNWVtO1xuICBsZWZ0OiAtMS41ZW07XG4gIHdpZHRoOiAxLjI1ZW07XG4gIGhlaWdodDogMS4yNWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDAgMiwxMkExMCwxMCAwIDAsMCAxMiwyMkExMCwxMCAwIDAsMCAyMiwxMkExMCwxMCAwIDAsMCAxMiwyWlxcXCIgLz48L3N2Zz5cIik7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5bZGlyPXJ0bF0gLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICByaWdodDogLTEuNWVtO1xuICBsZWZ0OiBpbml0aWFsO1xufVxuLm1kLXR5cGVzZXQgLnRhc2stbGlzdC1jb250cm9sIFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMGU2NzY7XG4gIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCI+PHBhdGggZD1cXFwiTTEyLDJBMTAsMTAgMCAwLDEgMjIsMTJBMTAsMTAgMCAwLDEgMTIsMjJBMTAsMTAgMCAwLDEgMiwxMkExMCwxMCAwIDAsMSAxMiwyTTExLDE2LjVMMTgsOS41TDE2LjU5LDguMDlMMTEsMTMuNjdMNy45MSwxMC41OUw2LjUsMTJMMTEsMTYuNVpcXFwiIC8+PC9zdmc+XCIpO1xuICAgICAgICAgIG1hc2staW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiPjxwYXRoIGQ9XFxcIk0xMiwyQTEwLDEwIDAgMCwxIDIyLDEyQTEwLDEwIDAgMCwxIDEyLDIyQTEwLDEwIDAgMCwxIDIsMTJBMTAsMTAgMCAwLDEgMTIsMk0xMSwxNi41TDE4LDkuNUwxNi41OSw4LjA5TDExLDEzLjY3TDcuOTEsMTAuNTlMNi41LDEyTDExLDE2LjVaXFxcIiAvPjwvc3ZnPlwiKTtcbn1cbi5tZC10eXBlc2V0IC50YXNrLWxpc3QtY29udHJvbCBbdHlwZT1jaGVja2JveF0ge1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAtMTtcbn1cbkBtZWRpYSBwcmludCB7XG4gIC5tZC10eXBlc2V0IGE6OmFmdGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGNvbnRlbnQ6IFwiIFtcIiBhdHRyKGhyZWYpIFwiXVwiO1xuICB9XG4gIC5tZC10eXBlc2V0IGNvZGUsXG4ubWQtdHlwZXNldCBwcmUsXG4ubWQtdHlwZXNldCBrYmQge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgfVxuICAubWQtY2xpcGJvYXJkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1jb250ZW50X19idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWRpYWxvZyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLXR5cGVzZXQgLmhlYWRlcmxpbmsge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ0LjkzNzVlbSkge1xuICAubWQtdHlwZXNldCA+IHByZSB7XG4gICAgbWFyZ2luOiAxZW0gLTAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gcHJlID4gY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC1mb290ZXItbmF2X19saW5rLS1wcmV2IC5tZC1mb290ZXItbmF2X190aXRsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG4gIC5jb2RlaGlsaXRlIC5obGwsIC5oaWdobGlnaHQgLmhsbCB7XG4gICAgbWFyZ2luOiAwIC0wLjhyZW07XG4gICAgcGFkZGluZzogMCAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLmNvZGVoaWxpdGUgY29kZSwgLm1kLXR5cGVzZXQgPiAuaGlnaGxpZ2h0IGNvZGUge1xuICAgIHBhZGRpbmc6IDAuNTI1cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC5jb2RlaGlsaXRldGFibGUsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiAuY29kZWhpbGl0ZXRhYmxlIC5saW5lbm9kaXYsIC5tZC10eXBlc2V0ID4gLmhpZ2hsaWdodHRhYmxlIC5saW5lbm9kaXYge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjhyZW07XG4gIH1cbiAgLm1kLXR5cGVzZXQgPiBwID4gLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gLTAuOHJlbTtcbiAgICBwYWRkaW5nOiAwLjI1ZW0gMC44cmVtO1xuICB9XG4gIC5oaWdobGlnaHQgW2RhdGEtbGluZW5vc106OmJlZm9yZSB7XG4gICAgbGVmdDogLTEuNnJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTEuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgfVxuICAubWQtdHlwZXNldCA+IC50YWJiZWQtc2V0IHtcbiAgICBtYXJnaW46IDFlbSAtMC44cmVtO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItdG9wOiAwLjA1cmVtIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgY29kZSB7XG4gICAgcGFkZGluZzogMC41MjVyZW0gMC44cmVtO1xuICB9XG4gIC5tZC10eXBlc2V0ID4gLnRhYmJlZC1zZXQgaW5wdXQ6Zmlyc3QtY2hpbGQgKyBsYWJlbCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAwZW0pIHtcbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAxMzcuNSU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyNWVtKSB7XG4gIGh0bWwge1xuICAgIGZvbnQtc2l6ZTogMTUwJTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIGJvZHlbZGF0YS1tZC1zdGF0ZT1sb2NrXSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgaHRtbCAubWQtbmF2X19saW5rW2Zvcj1fX3RvY10gKyAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIGh0bWwgLm1kLW5hdl9fbGlua1tmb3I9X190b2NdIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuICBodG1sIFtkaXI9cnRsXSAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjhyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAyLjRyZW07XG4gIH1cbiAgLm1kLW5hdl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLXNlYXJjaF9fb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMC4ycmVtO1xuICAgIGxlZnQ6IC0yLjJyZW07XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMzAwbXMgMTAwbXMsIG9wYWNpdHkgMjAwbXMgMjAwbXM7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogLTIuMnJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA0MDBtcywgb3BhY2l0eSAxMDBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1JSk7XG4gICAgdHJhbnNpdGlvbjogcmlnaHQgMG1zIDMwMG1zLCBsZWZ0IDBtcyAzMDBtcywgdHJhbnNmb3JtIDE1MG1zIDE1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICB6LWluZGV4OiAyO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBsZWZ0OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiByaWdodCAwbXMgMG1zLCBsZWZ0IDBtcyAwbXMsIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksIG9wYWNpdHkgMTUwbXMgMTUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICBbZGlyPXJ0bF0gW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgaHRtbCBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5uZXIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01JSk7XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMi40cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSB7XG4gICAgdG9wOiAwLjZyZW07XG4gICAgbGVmdDogMC44cmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtc2VhcmNoX19pY29uW2Zvcj1fX3NlYXJjaF0gc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHRvcDogMC42cmVtO1xuICAgIHJpZ2h0OiAwLjhyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2ljb25bdHlwZT1yZXNldF0ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMi40cmVtO1xuICAgIGJvdHRvbTogMDtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtb3ZlcmxheSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcywgaGVpZ2h0IDBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19idXR0b24ubWQtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtaGVyb19faW5uZXIge1xuICAgIG1hcmdpbi10b3A6IDIuNHJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjJyZW07XG4gIH1cbiAgLm1kLW5hdiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSwgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogMDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUsXG4ubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogNS42cmVtO1xuICAgIHBhZGRpbmc6IDNyZW0gMC44cmVtIDAuMnJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjRyZW07XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZSAubWQtbmF2X19pY29uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwLjRyZW07XG4gICAgbGVmdDogMC40cmVtO1xuICAgIHdpZHRoOiAxLjJyZW07XG4gICAgaGVpZ2h0OiAxLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgcmlnaHQ6IDAuNHJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgfiAubWQtbmF2X19saXN0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAuMDVyZW0gMCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG4gICAgICAgICAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIH4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X190aXRsZVtmb3I9X19kcmF3ZXJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDAuMnJlbTtcbiAgICBsZWZ0OiAwLjJyZW07XG4gICAgbWFyZ2luOiAwLjJyZW07XG4gICAgcGFkZGluZzogMC40cmVtO1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG4gIGh0bWwgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSAubWQtbmF2X19idXR0b24ge1xuICAgIHJpZ2h0OiAwLjJyZW07XG4gICAgbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpc3Qge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IDAuMDVyZW0gc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMC44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi40cmVtO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9faXRlbS0tYWN0aXZlID4gLm1kLW5hdl9fbGluayB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZzogMC42cmVtIDAuOHJlbTtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAwLjZyZW07XG4gICAgbWFyZ2luLXRvcDogLTAuNnJlbTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19saW5rIC5tZC1uYXZfX2ljb24ge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IDAuNnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2X19pY29uIHN2ZyB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgtMSk7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fbGluayB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMS40cmVtO1xuICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXYtLXNlY29uZGFyeSAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjZyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuNnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDMuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdi0tcHJpbWFyeSAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdiAubWQtbmF2X19saW5rIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZSB+IC5tZC1uYXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC44LCAwLCAwLjYsIDEpLCBvcGFjaXR5IDEyNW1zIDUwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLW5hdl9fdG9nZ2xlIH4gLm1kLW5hdiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgfVxuICAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXYge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgb3BhY2l0eSAxMjVtcyAxMjVtcztcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IC0xMi4xcmVtO1xuICAgIHdpZHRoOiAxMi4xcmVtO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJveC1zaGFkb3cgMjUwbXM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgei1pbmRleDogMztcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNpZGViYXItLXByaW1hcnkge1xuICAgIHJpZ2h0OiAtMTIuMXJlbTtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1kcmF3ZXJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyIC5tZC1zaWRlYmFyLS1wcmltYXJ5IHtcbiAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLCAwIDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuNCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEyLjFyZW0pO1xuICB9XG4gIFtkaXI9cnRsXSBbZGF0YS1tZC10b2dnbGU9ZHJhd2VyXTpjaGVja2VkIH4gLm1kLWNvbnRhaW5lciAubWQtc2lkZWJhci0tcHJpbWFyeSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMi4xcmVtKTtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuICAubWQtc2lkZWJhci0tcHJpbWFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBub25lO1xuICAgICAgICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogbm9uZTtcbiAgICAgICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gIH1cbiAgLm1kLXRhYnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwZW0pIHtcbiAgLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogaW5pdGlhbDtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICAubWQtaGVhZGVyLW5hdl9fYnV0dG9uW2Zvcj1fX3NlYXJjaF0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX3NvdXJjZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDExLjdyZW07XG4gICAgbWF4LXdpZHRoOiAxMS43cmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtaGVhZGVyLW5hdl9fc291cmNlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLW5hdi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlW2Zvcj1fX3RvY10ge1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgfVxuICAubWQtbmF2LS1zZWNvbmRhcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoIHtcbiAgICBwYWRkaW5nOiAwLjJyZW0gMDtcbiAgfVxuICAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDBtcyAyNTBtcywgaGVpZ2h0IDBtcyAyNTBtcywgb3BhY2l0eSAyNTBtcztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkaXI9cnRsXSAubWQtc2VhcmNoX19vdmVybGF5IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBpbml0aWFsO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwbXMsIGhlaWdodCAwbXMsIG9wYWNpdHkgMjUwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMS43cmVtO1xuICAgIHBhZGRpbmc6IDAuMXJlbSAwO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAyNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxuICAubWQtc2VhcmNoX19mb3JtIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMS44cmVtO1xuICAgIHBhZGRpbmctbGVmdDogMi4ycmVtO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMsIGNvbG9yIDI1MG1zO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMXJlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaF9faW5wdXQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dCArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICAubWQtc2VhcmNoX19pbnB1dDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0IHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjFyZW0gMC4xcmVtIDAgMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lucHV0ICsgLm1kLXNlYXJjaF9faWNvbiwgW2RhdGEtbWQtdG9nZ2xlPXNlYXJjaF06Y2hlY2tlZCB+IC5tZC1oZWFkZXIgLm1kLXNlYXJjaF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG4gIC5tZC1zZWFyY2hfX2ljb25bZm9yPV9fc2VhcmNoXSBzdmc6bGFzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIHRvcDogMS45cmVtO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNDAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19vdXRwdXQge1xuICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwgMCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgbWF4LWhlaWdodDogMDtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMC4ycmVtO1xuICAgIGhlaWdodDogMC4ycmVtO1xuICB9XG4gIC5tZC1zZWFyY2hfX3Njcm9sbHdyYXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fbWV0YSB7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zZWFyY2gtcmVzdWx0X19tZXRhIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjJyZW07XG4gICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICB9XG4gIC5tZC1zZWFyY2gtcmVzdWx0X19hcnRpY2xlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuMnJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGUge1xuICAgIHBhZGRpbmctcmlnaHQ6IDIuMnJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbiAgfVxuICAubWQtc2lkZWJhci0tc2Vjb25kYXJ5IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gMTIuMXJlbSk7XG4gICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSAubWQtc2lkZWJhcl9fc2Nyb2xsd3JhcCB7XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3Ni4yNWVtKSB7XG4gIC5tZC1jb250ZW50IHtcbiAgICBtYXJnaW4tbGVmdDogMTIuMXJlbTtcbiAgfVxuICBbZGlyPXJ0bF0gLm1kLWNvbnRlbnQge1xuICAgIG1hcmdpbi1yaWdodDogMTIuMXJlbTtcbiAgfVxuICAubWQtY29udGVudF9faW5uZXIge1xuICAgIG1hcmdpbi1yaWdodDogMS4ycmVtO1xuICAgIG1hcmdpbi1sZWZ0OiAxLjJyZW07XG4gIH1cbiAgLm1kLWhlYWRlci1uYXZfX2J1dHRvbltmb3I9X19kcmF3ZXJdIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjRyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1oZWFkZXItbmF2X19zb3VyY2Uge1xuICAgIG1hcmdpbi1yaWdodDogMS40cmVtO1xuICB9XG4gIC5tZC1uYXYge1xuICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMjUwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpO1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICB9XG4gIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGUgLm1kLW5hdl9faWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtbmF2X190b2dnbGUgfiAubWQtbmF2IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLm1kLW5hdl9faXRlbS0tbmVzdGVkID4gLm1kLW5hdiA+IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC1uYXZfX2ljb24ge1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXM7XG4gIH1cbiAgLm1kLW5hdl9faWNvbiBzdmcge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMC45cmVtO1xuICAgIGhlaWdodDogMC45cmVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xcmVtO1xuICB9XG4gIC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCAubWQtbmF2X190b2dnbGU6Y2hlY2tlZCB+IC5tZC1uYXZfX2xpbmsgLm1kLW5hdl9faWNvbiB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgfVxuICBbZGF0YS1tZC10b2dnbGU9c2VhcmNoXTpjaGVja2VkIH4gLm1kLWhlYWRlciAubWQtc2VhcmNoX19pbm5lciB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgd2lkdGg6IDM0LjRyZW07XG4gIH1cbiAgLm1kLXNpZGViYXItLXNlY29uZGFyeSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQ4LjlyZW07XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1zaWRlYmFyLS1zZWNvbmRhcnkge1xuICAgIG1hcmdpbi1yaWdodDogNDguOXJlbTtcbiAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgfVxuICAubWQtdGFicyB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbS0tbmVzdGVkIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gIH1cbiAgLm1kLXRhYnMtLWFjdGl2ZSB+IC5tZC1tYWluIC5tZC1uYXYtLXByaW1hcnkgLm1kLW5hdl9fdGl0bGVbZm9yPV9fZHJhd2VyXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAubWQtdGFicy0tYWN0aXZlIH4gLm1kLW1haW4gLm1kLW5hdi0tcHJpbWFyeSA+IC5tZC1uYXZfX2xpc3QgPiAubWQtbmF2X19pdGVtLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgMC42cmVtO1xuICB9XG4gIC5tZC10YWJzLS1hY3RpdmUgfiAubWQtbWFpbiAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIC5tZC1uYXYgLm1kLW5hdl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ1ZW0pIHtcbiAgLm1kLWZvb3Rlci1uYXZfX2xpbmsge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbiAgLm1kLWZvb3Rlci1jb3B5cmlnaHQge1xuICAgIG1heC13aWR0aDogNzUlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIFtkaXI9cnRsXSAubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG4gIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBwYWRkaW5nOiAwLjZyZW0gMDtcbiAgICBmbG9hdDogcmlnaHQ7XG4gIH1cbiAgW2Rpcj1ydGxdIC5tZC1mb290ZXItc29jaWFsIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMjkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNDUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMGVtKSBhbmQgKG1heC13aWR0aDogNDQuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0NWVtKSBhbmQgKG1heC13aWR0aDogNTkuOTM3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX292ZXJsYXkge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoNzUpO1xuICB9XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSBhbmQgKG1heC13aWR0aDogNzYuMTg3NWVtKSB7XG4gIFtkYXRhLW1kLXRvZ2dsZT1zZWFyY2hdOmNoZWNrZWQgfiAubWQtaGVhZGVyIC5tZC1zZWFyY2hfX2lubmVyIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoX19zY3JvbGx3cmFwIHtcbiAgICB3aWR0aDogMjMuNHJlbTtcbiAgfVxuICAubWQtc2VhcmNoLXJlc3VsdF9fdGVhc2VyIHtcbiAgICBtYXgtaGVpZ2h0OiAyLjVyZW07XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICB9XG59XG5AbWVkaWEgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSksIChtYXgtcmVzb2x1dGlvbjogMWRwcHgpIHtcbiAgLm1kLXNlYXJjaF9fc2Nyb2xsd3JhcCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB9XG59IiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuOnJvb3Qge1xuXG4gIC8vIERlZmF1bHQgY29sb3Igc2hhZGVzXG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC44Nyk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQ6ICAgICAgICBoc2xhKDAsIDAlLCAwJSwgMC41NCk7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAwJSwgMC4yNik7XG4gIC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3Q6ICAgICBoc2xhKDAsIDAlLCAwJSwgMC4wNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvcjogICAgICAgICAgICAgICBoc2xhKDAsIDAlLCAxMDAlLCAxKTtcbiAgLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoMCwgMCUsIDEwMCUsIDAuNyk7XG4gIC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlcjogICAgICBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpO1xuICAtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0ZXN0OiAgICAgaHNsYSgwLCAwJSwgMTAwJSwgMC4xMik7XG5cbiAgLy8gUHJpbWFyeSBjb2xvciBzaGFkZXNcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yOiAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTUwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1saWdodDogICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTMwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWZnLWNvbG9yLS1kYXJrOiAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLTcwMCl9LCAxKTtcbiAgLS1tZC1wcmltYXJ5LWJnLWNvbG9yOiAgICAgICAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAtLW1kLXByaW1hcnktYmctY29sb3ItLWxpZ2h0OiAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gIC8vIEFjY2VudCBjb2xvciBzaGFkZXNcbiAgLS1tZC1hY2NlbnQtZmctY29sb3I6ICAgICAgICAgICAgICAgIGhzbGEoI3toZXgyaHNsKCRjbHItaW5kaWdvLWEyMDApfSwgMSk7XG4gIC0tbWQtYWNjZW50LWZnLWNvbG9yLS10cmFuc3BhcmVudDogICBoc2xhKCN7aGV4MmhzbCgkY2xyLWluZGlnby1hMjAwKX0sIDAuMSk7XG4gIC0tbWQtYWNjZW50LWJnLWNvbG9yOiAgICAgICAgICAgICAgICB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgLS1tZC1hY2NlbnQtYmctY29sb3ItLWxpZ2h0OiAgICAgICAgIHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3ItLWxpZ2h0KTtcblxuICAvLyBDb2RlIGJsb2NrIGNvbG9yIHNoYWRlc1xuICAtLW1kLWNvZGUtYmctY29sb3I6ICAgICAgICAgICAgICAgICAgaHNsYSgwLCAwJSwgOTIuNSUsIDAuNSk7XG4gIC0tbWQtY29kZS1mZy1jb2xvcjogICAgICAgICAgICAgICAgICBoc2xhKDIwMCwgMTglLCAyNiUsIDEpO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEljb25cbi5tZC1pY29uIHtcblxuICAvLyBTVkcgZGVmYXVsdHNcbiAgc3ZnIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogcHgycmVtKDI0cHgpO1xuICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBmb250IGRlZmluaXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEVuYWJsZSBmb250LXNtb290aGluZyBpbiBXZWJraXQgYW5kIEZGXG5ib2R5IHtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIERlZmF1bHQgZm9udHNcbmJvZHksXG5pbnB1dCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIiwgXCJsaWdhXCI7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG5cbi8vIFByb3BvcnRpb25hbGx5IHNwYWNlZCBmb250c1xuY29kZSxcbnByZSxcbmtiZCB7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImtlcm5cIjtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ291cmllciwgbW9ub3NwYWNlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogdHlwZXNldHRlZCBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgdGhhdCBpcyB0eXBlc2V0IC0gaWYgcG9zc2libGUsIGFsbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgZm9udCBzaXplc1xuLy8gc2hvdWxkIGJlIHNldCBpbiBlbXMsIHNvIG5lc3RlZCBibG9ja3MgKGUuZy4gQWRtb25pdGlvbikgcmVuZGVyIGNvcnJlY3RseSxcbi8vIGV4Y2VwdCBoZWFkbGluZXMgdGhhdCBzaG91bGQgb25seSBhcHBlYXIgb24gdGhlIHRvcCBsZXZlbCBhbmQgbmVlZCB0byBoYXZlXG4vLyBjb25zaXN0ZW50IHNwYWNpbmcgZHVlIHRvIGxheW91dCBjb25zdHJhaW50cy5cbi5tZC10eXBlc2V0IHtcbiAgZm9udC1zaXplOiBtcygwKTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcblxuICAvLyBDb2xvcnMgc2hvdWxkIGJlIGtlcHQgd2hlbiBwcmludGluZ1xuICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyBEZWZhdWx0IHNwYWNpbmdcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICB9XG5cbiAgLy8gMXN0IGxldmVsIGhlYWRsaW5lXG4gIGgxIHtcbiAgICBtYXJnaW46IDAgMCBweDJyZW0oNDBweCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKDMpO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgfVxuXG4gIC8vIDJuZCBsZXZlbCBoZWFkbGluZVxuICBoMiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNDBweCkgMCBweDJyZW0oMTZweCk7XG4gICAgZm9udC1zaXplOiBtcygyKTtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIH1cblxuICAvLyAzcmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDMge1xuICAgIG1hcmdpbjogcHgycmVtKDMycHgpIDAgcHgycmVtKDE2cHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoMSk7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICB9XG5cbiAgLy8gM3JkIGxldmVsIGhlYWRsaW5lIGZvbGxvd2luZyBhbiAybmQgbGV2ZWwgaGVhZGxpbmVcbiAgaDIgKyBoMyB7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICB9XG5cbiAgLy8gNHRoIGxldmVsIGhlYWRsaW5lXG4gIGg0IHtcbiAgICBtYXJnaW46IHB4MnJlbSgxNnB4KSAwO1xuICAgIGZvbnQtc2l6ZTogbXMoMCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgfVxuXG4gIC8vIDV0aCBhbmQgNnRoIGxldmVsIGhlYWRsaW5lXG4gIGg1LFxuICBoNiB7XG4gICAgbWFyZ2luOiBweDJyZW0oMTZweCkgMDtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gIH1cblxuICAvLyBPdmVycmlkZXMgZm9yIDV0aCBsZXZlbCBoZWFkbGluZVxuICBoNSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgfVxuXG4gIC8vIEhvcml6b250YWwgc2VwYXJhdG9yc1xuICBociB7XG4gICAgbWFyZ2luOiAxLjVlbSAwO1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgfVxuXG4gIC8vIExpbmtzXG4gIGEge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWZnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gICAgLy8gQWxzbyBlbmFibGUgY29sb3IgdHJhbnNpdGlvbiBvbiBwc2V1ZG8gZWxlbWVudHNcbiAgICAmLFxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxMjVtcztcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyIGxpbmtzXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cblxuICAgIC8vIEFkZCBVUkxzIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG5cbiAgICAgIC8vIFNob3cgbGluayBVUkxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgY29udGVudDogXCIgW1wiIGF0dHIoaHJlZikgXCJdXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29kZSBibG9ja3NcbiAgY29kZSxcbiAgcHJlLFxuICBrYmQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1jb2RlLWZnLWNvbG9yKTtcbiAgICBmb250LXNpemU6IDg1JTtcbiAgICBkaXJlY3Rpb246IGx0cjtcblxuICAgIC8vIFdyYXAgdGV4dCBhbmQgaGlkZSBzY29sbGJhcnNcbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZSBjb2RlIGJsb2NrcywgY29ycmVjdCByZWxhdGl2ZSBlbXMgZm9yIHNtYWxsZXIgZm9udCBzaXplXG4gIGNvZGUge1xuICAgICRmOiAxIC8gMC44NTtcblxuICAgIG1hcmdpbjogMCAwLjI1ZW0gKiAkZjtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAqICRmIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICswLjI1ZW0gKiAkZiAwIDAgdmFyKC0tbWQtY29kZS1iZy1jb2xvciksXG4gICAgICAtMC4yNWVtICogJGYgMCAwIHZhcigtLW1kLWNvZGUtYmctY29sb3IpO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lO1xuICB9XG5cbiAgLy8gRGlzYWJsZSBjb250YWluaW5nIGJsb2NrIGluc2lkZSBoZWFkbGluZXNcbiAgaDEgY29kZSxcbiAgaDIgY29kZSxcbiAgaDMgY29kZSxcbiAgaDQgY29kZSxcbiAgaDUgY29kZSxcbiAgaDYgY29kZSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBSZXNldCBjb2RlIGlmIGl0J3MgaW5zaWRlIGEgbGlua1xuICBhID4gY29kZSB7XG4gICAgbWFyZ2luOiBpbmhlcml0O1xuICAgIHBhZGRpbmc6IGluaGVyaXQ7XG4gICAgYm9yZGVyLXJhZGl1czogaW5pdGlhbDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBVbmZvcm1hdHRlZCBjb2RlIGJsb2Nrc1xuICBwcmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICA+IGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICBib3gtZGVjb3JhdGlvbi1icmVhazogc2xpY2U7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcblxuICAgICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg0cHgpO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTY3JvbGxiYXIgdGh1bWJcbiAgICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG5cbiAgICAgICAgLy8gSG92ZXJlZCBzY3JvbGxiYXIgdGh1bWJcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuXG4gICAgLy8gU3RyZXRjaCB0b3AtbGV2ZWwgY29udGFpbmVyc1xuICAgID4gcHJlIHtcbiAgICAgIG1hcmdpbjogMWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuXG4gICAgICAvLyBBY3R1YWwgY29udGFpbmVyIHdpdGggY29kZSwgb3ZlcmZsb3dpbmdcbiAgICAgID4gY29kZSB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMC41cHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBLZXlzdHJva2VzXG4gIGtiZCB7XG4gICAgJGY6IDEgLyAwLjg1O1xuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC41ZW0gKiAkZjtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICBmb250LXNpemU6IDAuNzVlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSgycHgpIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICAwIHB4MnJlbSgycHgpIDAgICAgICAgICAgICAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlciksXG4gICAgICBpbnNldCAwIHB4MnJlbSgtMnB4KSBweDJyZW0oNHB4KSB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcbiAgfVxuXG4gIC8vIFRleHQgaGlnaGxpZ2h0aW5nIG1hcmtlclxuICBtYXJrIHtcbiAgICBtYXJnaW46IDAgMC4yNWVtO1xuICAgIHBhZGRpbmc6IDAuMDYyNWVtIDA7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci15ZWxsb3ctNTAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICArMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSksXG4gICAgICAtMC4yNWVtIDAgMCB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICBib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gIH1cblxuICAvLyBBYmJyZXZpYXRpb25zXG4gIGFiYnIge1xuICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgxcHgpIGRvdHRlZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogaGVscDtcbiAgfVxuXG4gIC8vIFNtYWxsIHRleHRcbiAgc21hbGwge1xuICAgIG9wYWNpdHk6IDAuNzU7XG4gIH1cblxuICAvLyBTdXBlcnNjcmlwdCBhbmQgc3Vic2NyaXB0XG4gIHN1cCxcbiAgc3ViIHtcbiAgICBtYXJnaW4tbGVmdDogMC4wNjI1ZW0gKiAxIC8gMC44O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDAuMDYyNWVtICogMSAvIDAuODtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJsb2NrcXVvdGVzLCBwb3NzaWJseSBuZXN0ZWRcbiAgYmxvY2txdW90ZSB7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIGJvcmRlci1yaWdodDogcHgycmVtKDRweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBib3JkZXItbGVmdDogaW5pdGlhbDtcbiAgICB9XG4gIH1cblxuICAvLyBVbm9yZGVyZWQgbGlzdHNcbiAgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgfVxuXG4gIC8vIFVub3JkZXJlZCBhbmQgb3JkZXJlZCBsaXN0c1xuICB1bCxcbiAgb2wge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjYyNWVtO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIE5lc3RlZCBvcmRlcmVkIGxpc3RzXG4gICAgb2wge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTtcblxuICAgICAgLy8gVHJpcGx5IG5lc3RlZCBvcmRlcmVkIGxpc3RcbiAgICAgIG9sIHtcbiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1yb21hbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXN0IGVsZW1lbnRzXG4gICAgbGkge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICBtYXJnaW4tbGVmdDogMS4yNWVtO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEuMjVlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlY3JlYXNlIHZlcnRpY2FsIHNwYWNpbmdcbiAgICAgIHAsXG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgbWFyZ2luIG9uIGxhc3QgZWxlbWVudFxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cblxuICAgICAgLy8gTmVzdGVkIGxpc3RzXG4gICAgICB1bCxcbiAgICAgIG9sIHtcbiAgICAgICAgbWFyZ2luOiAwLjVlbSAwIDAuNWVtIDAuNjI1ZW07XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMC42MjVlbTtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluaXRpb24gbGlzdHNcbiAgZGQge1xuICAgIG1hcmdpbjogMWVtIDAgMWVtIDEuODc1ZW07XG5cbiAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMS44NzVlbTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIExpbWl0IHdpZHRoIHRvIGNvbnRhaW5lclxuICBpZnJhbWUsXG4gIGltZyxcbiAgc3ZnIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBEYXRhIHRhYmxlc1xuICB0YWJsZTpub3QoW2NsYXNzXSkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDEwcHgpIGhzbGEoMCwgMCUsIDAlLCAwLjA1KSxcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDFweCkgIGhzbGEoMCwgMCUsIDAlLCAwLjEpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAgIC8vIER1ZSB0byBtYXJnaW4gY29sbGFwc2UgYmVjYXVzZSBvZiB0aGUgbmVjZXNzYXJ5IGlubGluZS1ibG9jayBoYWNrLCB3ZVxuICAgIC8vIGNhbm5vdCBpbmNyZWFzZSB0aGUgYm90dG9tIG1hcmdpbiBvbiB0aGUgdGFibGUsIHNvIHdlIGp1c3QgaW5jcmVhc2UgdGhlXG4gICAgLy8gdG9wIG1hcmdpbiBvbiB0aGUgZm9sbG93aW5nIGVsZW1lbnRcbiAgICAmICsgKiB7XG4gICAgICBtYXJnaW4tdG9wOiAxLjVlbTtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSBoZWFkaW5ncyBhbmQgY2VsbHNcbiAgICB0aDpub3QoW2FsaWduXSksXG4gICAgdGQ6bm90KFthbGlnbl0pIHtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYmxlIGhlYWRpbmdzXG4gICAgdGgge1xuICAgICAgbWluLXdpZHRoOiBweDJyZW0oMTAwcHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgfVxuXG4gICAgLy8gVGFibGUgY2VsbHNcbiAgICB0ZCB7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCkgcHgycmVtKDE2cHgpO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBUYWJsZSByb3dzXG4gICAgdHIge1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjVtcztcblxuICAgICAgLy8gQWRkIGJhY2tncm91bmQgb24gaG92ZXJcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDM1KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCBweDJyZW0oMXB4KSAgMCB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKSBpbnNldDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRvcCBib3JkZXIgb24gZmlyc3Qgcm93XG4gICAgICAmOmZpcnN0LWNoaWxkIHRkIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIERvIG5vdCB3cmFwIGxpbmtzIGluIHRhYmxlc1xuICAgIGEge1xuICAgICAgd29yZC1icmVhazogbm9ybWFsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIHNjcm9sbGluZyBvbiBvdmVyZmxvd1xuICAmX19zY3JvbGx3cmFwIHtcbiAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG5cbiAgLy8gRGF0YSB0YWJsZSB3cmFwcGVyLCBpbiBjYXNlIEphdmFTY3JpcHQgaXMgYXZhaWxhYmxlXG4gIC5tZC10eXBlc2V0X190YWJsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuXG4gICAgLy8gRGF0YSB0YWJsZXNcbiAgICB0YWJsZSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgflwiO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogYmFzZSBncmlkIGFuZCBjb250YWluZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFN0cmV0Y2ggY29udGFpbmVyIHRvIHZpZXdwb3J0IGFuZCBzZXQgYmFzZSBmb250LXNpemVmb3Igc2ltcGxlIGNhbGN1bGF0aW9uc1xuLy8gYmFzZWQgb24gcmVsYXRpdmUgZW1zIChyZW1zKVxuaHRtbCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IG5vcm1hbGx5LCB3ZSB3b3VsZCBzZXQgdGhlIGJhc2UgZm9udC1zaXplIHRvIDYyLjUlLCBzbyB3ZSBjYW4gYmFzZVxuICAvLyBhbGwgY2FsY3VsYXRpb25zIG9uIDEwcHgsIGJ1dCBDaHJvbWl1bSBhbmQgQ2hyb21lIGRlZmluZSBhIG1pbmltYWwgZm9udFxuICAvLyBzaXplIG9mIDEyIGlmIHRoZSBzeXN0ZW0gbGFuZ3VhZ2UgaXMgc2V0IHRvIENoaW5lc2UuIEZvciB0aGlzIHJlYXNvbiB3ZVxuICAvLyBqdXN0IGRvdWJsZSB0aGUgZm9udC1zaXplLCBzZXQgaXQgdG8gMjBweCB3aGljaCBzZWVtcyB0byBkbyB0aGUgdHJpY2suXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3F1aWRmdW5rL21rZG9jcy1tYXRlcmlhbC9pc3N1ZXMvOTExXG4gIGZvbnQtc2l6ZTogMTI1JTtcbiAgLy8gSGFjazogc29tZSBicm93c2VycyBvbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIGRvbid0IGFjY291bnQgZm9yIHNjcm9sbFxuICAvLyBiYXJzIHdoZW4gZmlyaW5nIG1lZGlhIHF1ZXJpZXMsIHNvIHdlIG5lZWQgdG8gZG8gdGhpcyBmb3Igc2FmZXR5LiBUaGlzXG4gIC8vIGN1cnJlbnRseSBpbXBhY3RzIHRoZSB0YWJsZSBvZiBjb250ZW50cyBjb21wb25lbnQgYmV0d2VlbiAxMjIwIGFuZCAxMjM0cHhcbiAgLy8gYW5kIGlzIHRvIGN1cnJlbnQga25vd2xlZGdlIG5vdCBmaXhhYmxlLlxuICBvdmVyZmxvdy14OiBoaWRkZW47XG5cbiAgLy8gW3NjcmVlbiBtZWRpdW0gK106IFNldCBiYXNlIGZvbnQtc2l6ZSB0byAxMXB4XG4gIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbiBtZWRpdW0pIHtcbiAgICBmb250LXNpemU6IDEzNy41MCU7XG4gIH1cblxuICAvLyBbc2NyZWVuIGxhcmdlICtdOiBTZXQgYmFzZSBmb250LXNpemUgdG8gMTJweFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4gbGFyZ2UpIHtcbiAgICBmb250LXNpemU6IDE1MCU7XG4gIH1cbn1cblxuLy8gU3RyZXRjaCBib2R5IHRvIGNvbnRhaW5lciBhbmQgbGVhdmUgcm9vbSBmb3IgZm9vdGVyXG5ib2R5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgLy8gSGFjazogcmVzZXQgZm9udC1zaXplIHRvIDEwcHgsIHNvIHRoZSBzcGFjaW5nIGZvciBhbGwgaW5saW5lIGVsZW1lbnRzIGlzXG4gIC8vIGNvcnJlY3QgYWdhaW4uIE90aGVyd2lzZSB0aGUgc3BhY2luZyB3b3VsZCBiZSBiYXNlZCBvbiAyMHB4LlxuICBmb250LXNpemU6IDAuNXJlbTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSB1bml0LXdoaXRlbGlzdFxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IExvY2sgYm9keSB0byBkaXNhYmxlIHNjcm9sbCBidWJibGluZ1xuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG5cbiAgICAvLyBMb2NrIGJvZHkgdG8gdmlld3BvcnQgaGVpZ2h0IChlLmcuIGluIHNlYXJjaCBtb2RlKVxuICAgICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBIb3Jpem9udGFsIHNlcGFyYXRvcnNcbmhyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGhlaWdodDogcHgycmVtKDFweCk7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gVGVtcGxhdGUtd2lkZSBncmlkXG4ubWQtZ3JpZCB7XG4gIG1heC13aWR0aDogcHgycmVtKDEyMjBweCk7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi8vIENvbnRlbnQgd3JhcHBlclxuLm1kLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuLy8gVGhlIG1haW4gY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBtYXhpbXVtIGhlaWdodCBpbiB0aGUgdGFibGVcbi5tZC1tYWluIHtcbiAgZmxleC1ncm93OiAxO1xuXG4gIC8vIEluY3JlYXNlIHRvcCBzcGFjaW5nIG9mIGNvbnRlbnQgYXJlYSB0byBnaXZlIHR5cG9ncmFwaHkgbW9yZSByb29tXG4gICZfX2lubmVyIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy10b3A6IHB4MnJlbSgyNHB4ICsgNnB4KTtcbiAgICAvLyBIYWNrOiBpbmR1Y2UgbWFyZ2luLWNvbGxhcHNlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2lkZWJhciBoZWlnaHQgaXNcbiAgICAvLyBub3QgY2FsY3VsYXRlZCBjb3JyZWN0bHkgYW5kIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSBvbiB0aGlzIGVsZW1lbnQgbXVzdFxuICAgIC8vIGJlIGxlZnQgaW4gaW5pdGlhbCBzdGF0ZSBmb3IgdGFyZ2V0dGVkIGxpbmsgb2Zmc2V0cyB0byB3b3JrIHByb3Blcmx5XG4gICAgcGFkZGluZy1ib3R0b206IHB4MnJlbSgxcHgpO1xuICB9XG59XG5cbi8vIEFwcGx5IGVsbGlwc2lzIGluIGNhc2Ugb2Ygb3ZlcmZsb3dpbmcgdGV4dFxuLm1kLWVsbGlwc2lzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlczogbmF2aWdhdGlvbmFsIGVsZW1lbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFRvZ2dsZSBjaGVja2JveFxuLm1kLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIE92ZXJsYXkgYmVsb3cgZXhwYW5kZWQgZHJhd2VyXG4ubWQtb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICB0cmFuc2l0aW9uOlxuICAgIHdpZHRoICAgICAwbXMgMjUwbXMsXG4gICAgaGVpZ2h0ICAgIDBtcyAyNTBtcyxcbiAgICBvcGFjaXR5IDI1MG1zO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDM7XG5cbiAgLy8gW3RhYmxldCAtXTogVHJpZ2dlciBvdmVybGF5XG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcblxuICAgIC8vIEV4cGFuZGVkIGRyYXdlclxuICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgd2lkdGggICAgIDBtcyxcbiAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgb3BhY2l0eSAyNTBtcztcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBza2lwIGxpbmtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2tpcCBsaW5rXG4ubWQtc2tpcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWFyZ2luOiBweDJyZW0oMTBweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg2cHgpIHB4MnJlbSgxMHB4KTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSg4cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gIGZvbnQtc2l6ZTogbXMoLTEpO1xuICBvcGFjaXR5OiAwO1xuXG4gIC8vIFNob3cgc2tpcCBsaW5rIG9uIGZvY3VzXG4gICY6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgICBvcGFjaXR5ICAgMTc1bXMgNzVtcztcbiAgICBvcGFjaXR5OiAxO1xuICAgIHotaW5kZXg6IDEwO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBwcmludCBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWRkIG1hcmdpbnMgdG8gcGFnZVxuQHBhZ2Uge1xuICBtYXJnaW46IDI1bW07XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQW5ub3VuY2VtZW50IGJhclxuLm1kLWFubm91bmNlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG5cbiAgLy8gQWN0dWFsIGNvbnRlbnRcbiAgJl9faW5uZXIge1xuICAgIG1pbi1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvcHkgdG8gY2xpcGJvYXJkXG4ubWQtY2xpcGJvYXJkIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IHB4MnJlbSg4cHgpO1xuICByaWdodDogcHgycmVtKDhweCk7XG4gIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogMTtcbiAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gU2xpZ2h0bHkgc21hbGxlciBpY29uXG4gIHN2ZyB7XG4gICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb24gY29udGFpbmVyIGhvdmVyXG4gIHByZTpob3ZlciAmIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICB9XG5cbiAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGljb25cbiAgcHJlICY6Zm9jdXMsXG4gIHByZSAmOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvbnRlbnQgY29udGFpbmVyXG4ubWQtY29udGVudCB7XG5cbiAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEFkZCBzcGFjZSBmb3IgdGFibGUgb2YgY29udGVudHNcbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgIG1hcmdpbi1yaWdodDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBpbml0aWFsO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyNDJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gW3NjcmVlbiArXTogQWRkIHNwYWNlIGZvciB0YWJsZSBvZiBjb250ZW50c1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcHgycmVtKDI0MnB4KTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjQycHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmluZSBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW46IDAgcHgycmVtKDE2cHgpIHB4MnJlbSgyNHB4KTtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDEycHgpO1xuXG4gICAgLy8gW3NjcmVlbiArXTogSW5jcmVhc2UgaG9yaXpvbnRhbCBzcGFjaW5nXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oMjRweCk7XG4gICAgfVxuXG4gICAgLy8gSGFjazogYWRkIHBzZXVkbyBlbGVtZW50IGZvciBzcGFjaW5nLCBhcyB0aGUgb3ZlcmZsb3cgb2YgdGhlIGNvbnRlbnRcbiAgICAvLyBjb250YWluZXIgbWF5IG5vdCBiZSBoaWRkZW4gZHVlIHRvIGFuIGltbWluZW50IG9mZnNldCBlcnJvciBvbiB0YXJnZXRzXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oOHB4KTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgLy8gSGFjazogcmVtb3ZlIGJvdHRvbSBzcGFjaW5nIG9mIGxhc3QgZWxlbWVudCwgZHVlIHRvIG1hcmdpbiBjb2xsYXBzZVxuICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBCdXR0b24gbmV4dCB0byB0aGUgdGl0bGVcbiAgJl9fYnV0dG9uIHtcbiAgICBtYXJnaW46IHB4MnJlbSg4cHgpIDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg4cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg4cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICBmbG9hdDogbGVmdDtcblxuICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgIHN2ZyB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBkZWZhdWx0IGxpbmsgY29sb3IgZm9yIGljb25zXG4gICAgLm1kLXR5cGVzZXQgJiB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgfVxuXG4gICAgLy8gQWxpZ24gdGV4dCB3aXRoIGljb25cbiAgICBzdmcge1xuICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERpYWxvZyByZW5kZXJlZCBhcyBzbmFja2JhclxuLm1kLWRpYWxvZyB7XG4gIEBpbmNsdWRlIHotZGVwdGgoMik7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgYm90dG9tOiBweDJyZW0oMTZweCk7XG4gIGxlZnQ6IGluaXRpYWw7XG4gIG1pbi13aWR0aDogcHgycmVtKDIyMnB4KTtcbiAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDEycHgpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDBtcyAgIDQwMG1zLFxuICAgIG9wYWNpdHkgICA0MDBtcztcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBweDJyZW0oMTRweCk7XG4gIG9wYWNpdHk6IDA7XG4gIHotaW5kZXg6IDI7XG5cbiAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICBbZGlyPVwicnRsXCJdICYge1xuICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgIGxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgfVxuXG4gIC8vIFNob3cgb3BlbiBkaWFsb2dcbiAgJltkYXRhLW1kLXN0YXRlPVwib3BlblwiXSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMDc1LCAwLjg1LCAwLjE3NSwgMSksXG4gICAgICBvcGFjaXR5ICAgNDAwbXM7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLy9cbi8vIE5hbWU6ICAgICAgICAgICBNYXRlcmlhbCBTaGFkb3dzXG4vLyBEZXNjcmlwdGlvbjogICAgTWl4aW5zIGZvciBNYXRlcmlhbCBEZXNpZ24gU2hhZG93cy5cbi8vIFZlcnNpb246ICAgICAgICAzLjAuMVxuLy9cbi8vIEF1dGhvcjogICAgICAgICBEZW5pcyBNYWxpbm9jaGtpblxuLy8gR2l0OiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tcm1sbmMvbWF0ZXJpYWwtc2hhZG93c1xuLy9cbi8vIHR3aXR0ZXI6ICAgICAgICBAbXJtbG5jXG4vL1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTWl4aW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQG1peGluIHotZGVwdGgtdHJhbnNpdGlvbigpIHtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuMjhzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpO1xufVxuXG5AbWl4aW4gei1kZXB0aC1mb2N1cygpIHtcbiAgYm94LXNoYWRvdzogMCAwIDhweCByZ2JhKDAsIDAsIDAsIC4xOCksIDAgOHB4IDE2cHggcmdiYSgwLCAwLCAwLCAuMzYpO1xufVxuXG5AbWl4aW4gei1kZXB0aC0yZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgLjE0KSxcbiAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIC4yKTtcbn1cblxuQG1peGluIHotZGVwdGgtM2RwKCkge1xuICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTRkcCgpIHtcbiAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtNmRwKCkge1xuICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLFxuICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgtOGRwKCkge1xuICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTE2ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIC4xNCksXG4gICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIC4xMiksXG4gICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAuNCk7XG59XG5cbkBtaXhpbiB6LWRlcHRoLTI0ZHAoKSB7XG4gIGJveC1zaGFkb3c6IDAgIDlweCA0NnB4ICA4cHggcmdiYSgwLCAwLCAwLCAuMTQpLFxuICAgICAgICAgICAgICAwIDI0cHggMzhweCAgM3B4IHJnYmEoMCwgMCwgMCwgLjEyKSxcbiAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIC40KTtcbn1cblxuQG1peGluIHotZGVwdGgoJGRwOiAyKSB7XG4gIEBpZiAkZHAgPT0gMiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMyB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0zZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC00ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gNiB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC02ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gOCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC04ZHAoKTtcbiAgfSBAZWxzZSBpZiAkZHAgPT0gMTYge1xuICAgIEBpbmNsdWRlIHotZGVwdGgtMTZkcCgpO1xuICB9IEBlbHNlIGlmICRkcCA9PSAyNCB7XG4gICAgQGluY2x1ZGUgei1kZXB0aC0yNGRwKCk7XG4gIH1cbn1cblxuXG4vLyBDbGFzcyBnZW5lcmF0b3Jcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AbWl4aW4gei1kZXB0aC1jbGFzc2VzKCR0cmFuc2l0aW9uOiBmYWxzZSwgJGZvY3VzOiBmYWxzZSkge1xuICBAaWYgJHRyYW5zaXRpb24gPT0gdHJ1ZSB7XG4gICAgJi10cmFuc2l0aW9uIHtcbiAgICAgIEBpbmNsdWRlIHotZGVwdGgtdHJhbnNpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkZm9jdXMgPT0gdHJ1ZSB7XG4gICAgJi1mb2N1cyB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoLWZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGF2YWlsYWJsZSB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cgZGVwdGhcbiAgQGVhY2ggJGRlcHRoIGluIDIsIDMsIDQsIDYsIDgsIDE2LCAyNCB7XG4gICAgJi0jeyRkZXB0aH1kcCB7XG4gICAgICBAaW5jbHVkZSB6LWRlcHRoKCRkZXB0aCk7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQXBwbGljYXRpb24gaGVhZGVyIChzdGF5cyBhbHdheXMgb24gdG9wKVxuLm1kLWhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICB0cmFuc2l0aW9uOlxuICAgIGJhY2tncm91bmQtY29sb3IgMjUwbXMsXG4gICAgY29sb3IgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXIgYnkgYWRkaW5nIGEgdHJhbnNwYXJlbnQgYm94IHNoYWRvdyBvZiB0aGUgc2FtZSBzaXplXG4gIC8vIHNvIHRoZSBzaXplIG9mIHRoZSBsYXllciBkb2Vzbid0IGNoYW5nZSBkdXJpbmcgYW5pbWF0aW9uXG4gIGJveC1zaGFkb3c6XG4gICAgMCAwICAgICAgICAgICBweDJyZW0oNHB4KSByZ2JhKDAsIDAsIDAsIDApLFxuICAgIDAgcHgycmVtKDRweCkgcHgycmVtKDhweCkgcmdiYSgwLCAwLCAwLCAwKTtcbiAgei1pbmRleDogMjtcblxuICAvLyBBbHdheXMgaGlkZSBzaGFkb3csIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cblxuICAvLyBTaG93IGFuZCBhbmltYXRlIHNoYWRvd1xuICAmW2RhdGEtbWQtc3RhdGU9XCJzaGFkb3dcIl0ge1xuICAgIHRyYW5zaXRpb246XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAgICAgICAyNTBtcyxcbiAgICAgIGJveC1zaGFkb3cgICAgICAgMjUwbXM7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIDAgMCAgICAgICAgICAgcHgycmVtKDRweCkgcmdiYSgwLCAwLCAwLCAwLjEpLFxuICAgICAgMCBweDJyZW0oNHB4KSBweDJyZW0oOHB4KSByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIH1cblxuICAvLyBIaWRlIGZvciBwcmludFxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLy8gTmF2aWdhdGlvbiB3aXRoaW4gaGVhZGVyXG4ubWQtaGVhZGVyLW5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDAgcHgycmVtKDRweCk7XG5cbiAgLy8gSWNvbiBidXR0b25zXG4gICZfX2J1dHRvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDhweCk7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgc3ZnIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBpY29uXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG5cbiAgICAvLyBMb2dvXG4gICAgJi5tZC1sb2dvIHtcbiAgICAgIG1hcmdpbjogcHgycmVtKDRweCk7XG4gICAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcblxuICAgICAgLy8gSW1hZ2Ugb3IgaWNvblxuICAgICAgaW1nLFxuICAgICAgc3ZnIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDI0cHgpO1xuICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBzZWFyY2ggaWNvbiwgaWYgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlLlxuICAgIC5uby1qcyAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhpZGUgdGhlIHNlYXJjaCBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgIC8vIFNlYXJjaCBidXR0b25cbiAgICAgICZbZm9yPVwiX19zZWFyY2hcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgLV06IEhpZGUgdGhlIGxvZ29cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0KSB7XG5cbiAgICAgIC8vIExvZ29cbiAgICAgICYubWQtbG9nbyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogSGlkZSB0aGUgbWVudSBidXR0b25cbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgICAgLy8gTWVudSBidXR0b25cbiAgICAgICZbZm9yPVwiX19kcmF3ZXJcIl0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhlYWRlciB0b3BpY3NcbiAgJl9fdG9waWMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcblxuICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAmICsgJiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI1cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMSwgMC43LCAwLjEsIDAuMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5kdWNlIGVsbGlwc2lzLCBpZiBubyBKYXZhU2NyaXB0IGlzIGF2YWlsYWJsZVxuICAgIC5uby1qcyAmIHtcbiAgICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICAgIH1cblxuICAgIC8vIEhpZGUgcGFnZSB0aXRsZSBhcyBpdCBpcyBpbnZpc2libGUgYW55d2F5IGFuZCB3aWxsIG92ZXJmbG93IHRoZSBoZWFkZXJcbiAgICAubm8tanMgJiArICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWFkZXIgdGl0bGUgLSBzZXQgbGluZSBoZWlnaHQgdG8gbWF0Y2ggaWNvbiBmb3IgY29ycmVjdCBhbGlnbm1lbnRcbiAgJl9fdGl0bGUge1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBmb250LXNpemU6IHB4MnJlbSgxOHB4KTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDQ4cHgpO1xuXG4gICAgLy8gU2hvdyBwYWdlIHRpdGxlXG4gICAgJltkYXRhLW1kLXN0YXRlPVwiYWN0aXZlXCJdIC5tZC1oZWFkZXItbmF2X190b3BpYyB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKC0yNXB4KSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDEsIDAuNywgMC4xLCAwLjEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogLTE7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgyNXB4KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhZ2UgdGl0bGVcbiAgICAgICYgKyAubWQtaGVhZGVyLW5hdl9fdG9waWMge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgICAgICBvcGFjaXR5ICAgMTUwbXM7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhdGNoIGVsbGlwc2lzXG4gICAgPiAubWQtaGVhZGVyLW5hdl9fZWxsaXBzaXMge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBjb250YWluaW5nIHNvdXJjZVxuICAmX19zb3VyY2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogU2hvdyB0aGUgcmVwb3Npc3RvcnkgZnJvbSB0YWJsZXRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWF4LXdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyMHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IEluY3JlYXNlIHNwYWNpbmcgb2Ygc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHNjcmVlbikge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMjhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSGVybyB0ZWFzZXJcbi5tZC1oZXJvIHtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcztcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yKTtcbiAgZm9udC1zaXplOiBtcygxKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAvLyBJbm5lciB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICBtYXJnaW4tdG9wOiBweDJyZW0oMjBweCk7XG4gICAgcGFkZGluZzogcHgycmVtKDE2cHgpIHB4MnJlbSgxNnB4KSBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKSxcbiAgICAgIG9wYWNpdHkgICAyNTBtcztcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAxMDBtcztcblxuICAgIC8vIFt0YWJsZXQgLV06IENvbXBlbnNhdGUgZm9yIG1pc3NpbmcgdGFic1xuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSg0OHB4KTtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgyNHB4KTtcbiAgICB9XG5cbiAgICAvLyBGYWRlLW91dCB0YWJzIGJhY2tncm91bmQgdXBvbiBzY3JvbGxpbmdcbiAgICBbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHB4MnJlbSgxMi41cHgpKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zICAgMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgYm90dG9tIHNwYWNpbmcgaWYgdGhlcmUgYXJlIG5vIHRhYnNcbiAgICAubWQtaGVyby0tZXhwYW5kICYge1xuICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDI0cHgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFwcGxpY2F0aW9uIGZvb3RlclxuLm1kLWZvb3RlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8vIE5hdmlnYXRpb24gd2l0aGluIGZvb3RlclxuLm1kLWZvb3Rlci1uYXYge1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIExpbmtzIHRvIHByZXZpb3VzIGFuZCBuZXh0IHBhZ2VcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nLXRvcDogcHgycmVtKDI4cHgpO1xuICAgIHBhZGRpbmctYm90dG9tOiBweDJyZW0oOHB4KTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuXG4gICAgLy8gW3RhYmxldCArXTogU2V0IHByb3BvcnRpb25hbCB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCkge1xuICAgICAgd2lkdGg6IDUwJTtcbiAgICB9XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua3NcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cblxuICAgIC8vIExpbmsgdG8gcHJldmlvdXMgcGFnZVxuICAgICYtLXByZXYge1xuICAgICAgd2lkdGg6IDI1JTtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGl0bGVcbiAgICAgIC5tZC1mb290ZXItbmF2X190aXRsZSB7XG5cbiAgICAgICAgLy8gW21vYmlsZSAtXTogSGlkZSB0aXRsZSBmb3IgcHJldmlvdXMgcGFnZVxuICAgICAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExpbmsgdG8gbmV4dCBwYWdlXG4gICAgJi0tbmV4dCB7XG4gICAgICB3aWR0aDogNzUlO1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGluayB0aXRsZSAtIHNldCBsaW5lIGhlaWdodCB0byBtYXRjaCBpY29uIGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAmX190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDQ4cHgpfSk7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMjBweCk7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgYnV0dG9uXG4gICZfX2J1dHRvbiB7XG4gICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgfVxuXG4gIC8vIExpbmsgZGlyZWN0aW9uXG4gICZfX2RpcmVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKC0yMHB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgyMHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICB9XG59XG5cbi8vIE5vbi1uYXZpZ2F0aW9uYWwgaW5mb3JtYXRpb25cbi5tZC1mb290ZXItbWV0YSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gIC8vIFNldCBzcGFjaW5nXG4gICZfX2lubmVyIHtcbiAgICBwYWRkaW5nOiBweDJyZW0oNHB4KTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gIC8vIFVzZSBhIGRlY2VudCBjb2xvciBmb3Igbm9uLWhvdmVyZWQgbGlua3MgYW5kIGVuc3VyZSBzcGVjaWZpY2l0eVxuICBodG1sICYubWQtdHlwZXNldCBhIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gRm9jdXNlZCBvciBob3ZlcmVkIGxpbmtcbiAgICAmOmZvY3VzLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBDb3B5cmlnaHQgYW5kIHRoZW1lIGluZm9ybWF0aW9uXG4ubWQtZm9vdGVyLWNvcHlyaWdodCB7XG4gIG1hcmdpbjogMCBweDJyZW0oMTJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg4cHgpIDA7XG4gIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yLS1saWdodGVyKTtcbiAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgLy8gW3RhYmxldCBwb3J0cmFpdCArXTogU2hvdyBuZXh0IHRvIHNvY2lhbCBtZWRpYSBsaW5rc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhpZ2hsaWdodCBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgJl9faGlnaGxpZ2h0IHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHQpO1xuICB9XG59XG5cbi8vIFNvY2lhbCBtZWRpYSBsaW5rc1xuLm1kLWZvb3Rlci1zb2NpYWwge1xuICBtYXJnaW46IDAgcHgycmVtKDhweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSg0cHgpIDAgcHgycmVtKDEycHgpO1xuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgK106IFNob3cgbmV4dCB0byBjb3B5cmlnaHQgaW5mb3JtYXRpb25cbiAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgcGFkZGluZzogcHgycmVtKDEycHgpIDA7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIHdpdGggaWNvblxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSgzMnB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSgzMnB4KTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAvLyBBZGp1c3QgbGluZS1oZWlnaHQgdG8gbWF0Y2ggaGVpZ2h0IGZvciBjb3JyZWN0IGFsaWdubWVudFxuICAgICY6OmJlZm9yZSB7XG4gICAgICBsaW5lLWhlaWdodDogMS45O1xuICAgIH1cblxuICAgIC8vIFNvY2lhbCBpY29uXG4gICAgc3ZnIHtcbiAgICAgIHdpZHRoOiBweDJyZW0oMTZweCk7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JTtcbiAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOYXZpZ2F0aW9uIGNvbnRhaW5lclxuLm1kLW5hdiB7XG4gIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICBsaW5lLWhlaWdodDogMS4zO1xuXG4gIC8vIExpc3QgdGl0bGVcbiAgJl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8vIEhpZGUgYnV0dG9ucyBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgIC8vIFN0cmV0Y2ggaW1hZ2VzXG4gICAgICBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2dvXG4gICAgICAmLm1kLWxvZ28ge1xuXG4gICAgICAgIC8vIEltYWdlIG9yIGljb25cbiAgICAgICAgaW1nLFxuICAgICAgICBzdmcge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgaGVpZ2h0OiBweDJyZW0oNDhweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDEycHgpO1xuXG4gICAgLy8gQWRkIGJvdHRvbSBzcGFjaW5nIHRvIGxhc3QgaXRlbVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgIH1cblxuICAgIC8vIDJuZCsgbGV2ZWwgaXRlbXNcbiAgICAmICYge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZyBmb3IgbmVzdGVkIGl0ZW1zXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtXG4gICZfX2xpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDAuNjI1ZW07XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMTI1bXM7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgLy8gSGlkZSBsaW5rIHRvIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHQgLSB0aGlzIHdpbGwgb25seSBtYXRjaCB0aGVcbiAgICAvLyB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlciBiZWxvdyBhbmQgaW5jbHVkaW5nIHRhYmxldCBwb3J0cmFpdFxuICAgIGh0bWwgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAvLyBIaWRlIHRhYmxlIG9mIGNvbnRlbnRzIGJ5IGRlZmF1bHRcbiAgICAgICYgfiAubWQtbmF2IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCbHVycmVkIGxpbmtcbiAgICAmW2RhdGEtbWQtc3RhdGU9XCJibHVyXCJdIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIGxpbmtcbiAgICAubWQtbmF2X19pdGVtICYtLWFjdGl2ZSB7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgYWN0aXZlIGNvbG9yIGZvciBuZXN0ZWQgbGlzdCB0aXRsZXNcbiAgICAubWQtbmF2X19pdGVtLS1uZXN0ZWQgPiAmIHtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIH1cblxuICAgIC8vIEZvY3VzZWQgb3IgaG92ZXJlZCBsaW5rXG4gICAgJjpmb2N1cyxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgY29udGFpbmluZyBzb3VyY2VcbiAgJl9fc291cmNlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogTGF5ZXJlZCBuYXZpZ2F0aW9uXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcblxuICAgIC8vIFN0cmV0Y2ggcHJpbWFyeSBuYXZpZ2F0aW9uIHRvIGRyYXdlclxuICAgICYtLXByaW1hcnksXG4gICAgJi0tcHJpbWFyeSAubWQtbmF2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3Qgc3R5bGVzIGZvciBwcmltYXJ5IG5hdmlnYXRpb25cbiAgICAmLS1wcmltYXJ5IHtcblxuICAgICAgLy8gTGlzdCB0aXRsZSBhbmQgaXRlbVxuICAgICAgLm1kLW5hdl9fdGl0bGUsXG4gICAgICAubWQtbmF2X19pdGVtIHtcbiAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMTZweCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgdGl0bGVcbiAgICAgIC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IHB4MnJlbSgxMTJweCk7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSg2MHB4KSBweDJyZW0oMTZweCkgcHgycmVtKDRweCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgIC8vIEljb25cbiAgICAgICAgLm1kLW5hdl9faWNvbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogcHgycmVtKDhweCk7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDhweCk7XG4gICAgICAgICAgd2lkdGg6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBoZWlnaHQ6IHB4MnJlbSgyNHB4KTtcbiAgICAgICAgICBtYXJnaW46IHB4MnJlbSg0cHgpO1xuXG4gICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICByaWdodDogcHgycmVtKDhweCk7XG4gICAgICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1haW4gbGlzdHNcbiAgICAgICAgfiAubWQtbmF2X19saXN0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCBweDJyZW0oMXB4KSAwIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeSBtYW5kYXRvcnk7XG5cbiAgICAgICAgICAvLyBSZW1vdmUgYm9yZGVyIGZvciBmaXJzdCBsaXN0IGl0ZW1cbiAgICAgICAgICA+IC5tZC1uYXZfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuXG4gICAgICAgICAgLy8gU2l0ZSBsb2dvXG4gICAgICAgICAgLm1kLW5hdl9fYnV0dG9uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIGxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgICAgbWFyZ2luOiBweDJyZW0oNHB4KTtcbiAgICAgICAgICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oNDhweCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIGh0bWwgW2Rpcj1cInJ0bFwiXSAmIC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgICAvLyBTaXRlIHRpdGxlIGluIG1haW4gbmF2aWdhdGlvblxuICAgICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIC5tZC1uYXZfX2J1dHRvbiB7XG4gICAgICAgICAgcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdCBvZiBpdGVtc1xuICAgICAgLm1kLW5hdl9fbGlzdCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG5cbiAgICAgIC8vIExpc3QgaXRlbVxuICAgICAgLm1kLW5hdl9faXRlbSB7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlYXNlIHNwYWNpbmcgdG8gYWNjb3VudCBmb3IgaWNvblxuICAgICAgICAmLS1uZXN0ZWQgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDhweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ4cHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjdGl2ZSBwYXJlbnQgaXRlbVxuICAgICAgICAmLS1hY3RpdmUgPiAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1mZy1jb2xvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEycHgpIHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBJY29uXG4gICAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIG1hcmdpbi10b3A6IHB4MnJlbSgtMTJweCk7XG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgICAgZm9udC1zaXplOiBweDJyZW0oMjRweCk7XG5cbiAgICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgIHJpZ2h0OiBpbml0aWFsO1xuICAgICAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG5cbiAgICAgICAgICAvLyBGbGlwIGljb24gdmVydGljYWxseVxuICAgICAgICAgIHN2ZyB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGFibGUgb2YgY29udGVudHMgaW5zaWRlIG5hdmlnYXRpb25cbiAgICAgIC5tZC1uYXYtLXNlY29uZGFyeSB7XG5cbiAgICAgICAgLy8gU2V0IGxpbmtzIHRvIHN0YXRpYyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsYXllcmluZ1xuICAgICAgICAubWQtbmF2X19saW5rIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IG5lc3RlZCBuYXZpZ2F0aW9uIGZvciB0YWJsZSBvZiBjb250ZW50cyB0byBzdGF0aWNcbiAgICAgICAgLm1kLW5hdiB7XG4gICAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgICAgICAgIC8vIDNyZCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgyOHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDI4cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNHRoIGxldmVsIGxpbmtcbiAgICAgICAgICAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDV0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXZfX2xpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNTJweCk7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg1MnB4KTtcbiAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBpbml0aWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDZ0aCBsZXZlbCBsaW5rXG4gICAgICAgICAgLm1kLW5hdiAubWQtbmF2IC5tZC1uYXYgLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg2NHB4KTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDY0cHgpO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGlkZSBuZXN0ZWQgbmF2aWdhdGlvbiBieSBkZWZhdWx0XG4gICAgLm1kLW5hdl9fdG9nZ2xlIH4gJiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjgsIDAsIDAuNiwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxMjVtcyA1MG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeHBhbmQgbmVzdGVkIG5hdmlnYXRpb24sIGlmIHRvZ2dsZSBpcyBjaGVja2VkXG4gICAgLm1kLW5hdl9fdG9nZ2xlOmNoZWNrZWQgfiAmIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTI1bXMgMTI1bXM7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IFNob3cgdGFibGUgb2YgY29udGVudHMgaW4gZHJhd2VyXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcblxuICAgIC8vIFNob3cgbGluayB0byB0YWJsZSBvZiBjb250ZW50cyAtIGhpZ2hlciBzcGVjaWZpY2l0eSBpcyBuZWNlc3NhcnkgdG9cbiAgICAvLyBkaXNwbGF5IHRoZSB0YWJsZSBvZiBjb250ZW50cyBpbnNpZGUgdGhlIGRyYXdlclxuICAgIGh0bWwgJl9fbGlua1tmb3I9XCJfX3RvY1wiXSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0OHB4KTtcblxuICAgICAgLy8gSGlkZSBsaW5rIHRvIGN1cnJlbnQgaXRlbVxuICAgICAgKyAubWQtbmF2X19saW5rIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyB0YWJsZSBvZiBjb250ZW50c1xuICAgICAgJiB+IC5tZC1uYXYge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBodG1sIFtkaXI9XCJydGxcIl0gJl9fbGluayB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0OHB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXBvc2l0b3J5IGNvbnRhaW5pbmcgc291cmNlXG4gICAgJl9fc291cmNlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogMCBweDJyZW0oNHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3ItLWRhcmspO1xuICAgICAgY29sb3I6IHZhcigtLW1kLXByaW1hcnktYmctY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAvLyBMaXN0IHRpdGxlXG4gICAgJi0tc2Vjb25kYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byB0YWJsZSBvZiBjb250ZW50cyB0aXRsZVxuICAgICAgJltmb3I9XCJfX3RvY1wiXSB7XG4gICAgICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBpY29uXG4gICAgICAubWQtbmF2X19pY29uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBUcmVlLWxpa2UgbmF2aWdhdGlvblxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDI1MG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKTtcblxuICAgIC8vIExpc3QgdGl0bGVcbiAgICAmLS1wcmltYXJ5IC5tZC1uYXZfX3RpdGxlIHtcblxuICAgICAgLy8gU25hcCB0byBzaXRlIHRpdGxlXG4gICAgICAmW2Zvcj1cIl9fZHJhd2VyXCJdIHtcbiAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGljb25cbiAgICAgIC5tZC1uYXZfX2ljb24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhpZGUgbmVzdGVkIG5hdmlnYXRpb24gYnkgZGVmYXVsdFxuICAgIC5tZC1uYXZfX3RvZ2dsZSB+ICYge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBTaG93IG5lc3RlZCBuYXZpZ2F0aW9uLCBpZiB0b2dnbGUgaXMgY2hlY2tlZFxuICAgIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gJiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRpdGxlcyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAmX19pdGVtLS1uZXN0ZWQgPiAubWQtbmF2ID4gJl9fdGl0bGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBJY29uXG4gICAgJl9faWNvbiB7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSgxOHB4KTtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcztcblxuICAgICAgLy8gSW5saW5lIGljb24gYW5kIGFkanVzdCB0byBtYXRjaCBmb250IHNpemVcbiAgICAgIHN2ZyB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgd2lkdGg6IHB4MnJlbSgxOHB4KTtcbiAgICAgICAgaGVpZ2h0OiBweDJyZW0oMThweCk7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBweDJyZW0oLTJweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJvdGF0ZSBpY29uIGZvciBleHBhbmRlZCBsaXN0c1xuICAgICAgLm1kLW5hdl9faXRlbS0tbmVzdGVkIC5tZC1uYXZfX3RvZ2dsZTpjaGVja2VkIH4gLm1kLW5hdl9fbGluayAmIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVaKDkwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBzZWFyY2hcbiRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcInNlYXJjaFxcXCJdOmNoZWNrZWQgfiAubWQtaGVhZGVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlYXJjaCBjb250YWluZXJcbi5tZC1zZWFyY2gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLy8gSGlkZSBzZWFyY2gsIGlmIEphdmFTY3JpcHQgaXMgbm90IGF2YWlsYWJsZS5cbiAgLm5vLWpzICYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgcGFkZGluZzogcHgycmVtKDRweCkgMDtcbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCBvdmVybGF5XG4gICZfX292ZXJsYXkge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogMTtcblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IHB4MnJlbSg0cHgpO1xuICAgICAgbGVmdDogcHgycmVtKC00NHB4KTtcbiAgICAgIHdpZHRoOiBweDJyZW0oNDBweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0MHB4KTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAzMDBtcyAxMDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDIwMG1zIDIwMG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oLTQ0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBvdmVybGF5XG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDQwMG1zLFxuICAgICAgICAgIG9wYWNpdHkgICAxMDBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgc2NhbGUgZmFjdG9yc1xuICAgICN7JG1kLXRvZ2dsZV9fc2VhcmNoLS1jaGVja2VkfSAmIHtcblxuICAgICAgLy8gW21vYmlsZSBwb3J0cmFpdCAtXTogU2NhbGUgdXAgNDUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg0NSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFttb2JpbGUgbGFuZHNjYXBlXTogU2NhbGUgdXAgNjAgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZShtb2JpbGUgbGFuZHNjYXBlKSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoNjApO1xuICAgICAgfVxuXG4gICAgICAvLyBbdGFibGV0IHBvcnRyYWl0XTogU2NhbGUgdXAgNzUgdGltZXNcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSg3NSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IE92ZXJsYXkgZm9yIGJldHRlciBmb2N1cyBvbiBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICB3aWR0aCAgICAgMG1zIDI1MG1zLFxuICAgICAgICBoZWlnaHQgICAgMG1zIDI1MG1zLFxuICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cblxuICAgICAgLy8gRXhwYW5kZWQgb3ZlcmxheVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHdpZHRoICAgICAwbXMsXG4gICAgICAgICAgaGVpZ2h0ICAgIDBtcyxcbiAgICAgICAgICBvcGFjaXR5IDI1MG1zO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlYXJjaCBtb2RhbCB3cmFwcGVyXG4gICZfX2lubmVyIHtcbiAgICAvLyBIYWNrOiByZWR1Y2Ugaml0dGVyXG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogUHV0IHNlYXJjaCBtb2RhbCBvZmYtY2FudmFzIGJ5IGRlZmF1bHRcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDA7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNSUpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgcmlnaHQgICAgICAgMG1zIDMwMG1zLFxuICAgICAgICBsZWZ0ICAgICAgICAwbXMgMzAwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgICAgICBvcGFjaXR5ICAgMTUwbXMgMTUwbXM7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgei1pbmRleDogMjtcblxuICAgICAgLy8gQWN0aXZlIHNlYXJjaCBtb2RhbFxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgcmlnaHQgICAgICAgMG1zICAgMG1zLFxuICAgICAgICAgIGxlZnQgICAgICAgIDBtcyAgIDBtcyxcbiAgICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgMTUwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgICAgIG9wYWNpdHkgICAxNTBtcyAxNTBtcztcbiAgICAgICAgb3BhY2l0eTogMTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgbGVmdDogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBodG1sIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAxMDAlO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogSGVhZGVyLWVtYmVkZGVkIHNlYXJjaFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiBweDJyZW0oMjM0cHgpO1xuICAgICAgcGFkZGluZzogcHgycmVtKDJweCkgMDtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDI1MG1zIGN1YmljLWJlemllcigwLjEsIDAuNywgMC4xLCAxKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IG1heGltdW0gd2lkdGhcbiAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlXTogRG8gbm90IG92ZXJsYXkgdGl0bGVcbiAgICAgIEBpbmNsdWRlIGJyZWFrLWF0LWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICAgIHdpZHRoOiBweDJyZW0oNDY4cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBbc2NyZWVuICtdOiBNYXRjaCBjb250ZW50IHdpZHRoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgICAgd2lkdGg6IHB4MnJlbSg2ODhweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU2VhcmNoIGZvcm1cbiAgJl9fZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggaW5wdXRcbiAgJl9faW5wdXQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSg0NHB4KSAwIHB4MnJlbSg3MnB4KTtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSg3MnB4KSAwIHB4MnJlbSg0NHB4KTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2l0aW9uIG9uIHBsYWNlaG9sZGVyXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG4gICAgfVxuXG4gICAgLy8gUGxhY2Vob2xkZXIgYW5kIGljb24gY29sb3IgaW4gYWN0aXZlIHN0YXRlXG4gICAgfiAubWQtc2VhcmNoX19pY29uLFxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHRoZSBcInhcIiByZW5kZXJlZCBieSBJbnRlcm5ldCBFeHBsb3JlclxuICAgICY6Oi1tcy1jbGVhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgcG9ydHJhaXQgLV06IEZ1bGwtc2NyZWVuIHNlYXJjaCBiYXJcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDQ4cHgpO1xuICAgICAgZm9udC1zaXplOiBweDJyZW0oMThweCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEhlYWRlci1lbWJlZGRlZCBzZWFyY2hcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zLFxuICAgICAgICBjb2xvciAgICAgICAgICAgIDI1MG1zO1xuICAgICAgYm9yZGVyLXJhZGl1czogcHgycmVtKDJweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiBtcygwKTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQ0cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJY29uIGNvbG9yXG4gICAgICArIC5tZC1zZWFyY2hfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFBsYWNlaG9sZGVyIGNvbG9yXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1wcmltYXJ5LWJnLWNvbG9yLS1saWdodCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhvdmVyZWQgc2VhcmNoIGZpZWxkXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgbGlnaHQgYmFja2dyb3VuZCBvbiBhY3RpdmUgc2VhcmNoIGZpZWxkXG4gICAgICAjeyRtZC10b2dnbGVfX3NlYXJjaC0tY2hlY2tlZH0gJiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpIHB4MnJlbSgycHgpIDAgMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1iZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yKTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogY2xpcDtcblxuICAgICAgICAvLyBJY29uIGFuZCBwbGFjZWhvbGRlciBjb2xvciBpbiBhY3RpdmUgc3RhdGVcbiAgICAgICAgKyAubWQtc2VhcmNoX19pY29uLFxuICAgICAgICAmOjpwbGFjZWhvbGRlciB7XG4gICAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiBweDJyZW0oMjRweCk7XG4gICAgaGVpZ2h0OiBweDJyZW0oMjRweCk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGNvbG9yICAgMjUwbXMsXG4gICAgICBvcGFjaXR5IDI1MG1zO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgLy8gSG92ZXJlZCBpY29uXG4gICAgJjpob3ZlciB7XG4gICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGljb25cbiAgICAmW2Zvcj1cIl9fc2VhcmNoXCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICBsZWZ0OiBweDJyZW0oMTBweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgICAgLy8gRmxpcCBpY29uIHZlcnRpY2FsbHlcbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuXG4gICAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgICByaWdodDogcHgycmVtKDE2cHgpO1xuICAgICAgICAgIGxlZnQ6IGluaXRpYWw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRoZSBtYWduaWZ5aW5nIGdsYXNzICgxc3QgaWNvbilcbiAgICAgICAgc3ZnOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZSh0YWJsZXQgbGFuZHNjYXBlKSB7XG5cbiAgICAgICAgLy8gSGlkZSB0aGUgYXJyb3cgKDJuZCBpY29uKVxuICAgICAgICBzdmc6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlc2V0IGJ1dHRvblxuICAgICZbdHlwZT1cInJlc2V0XCJdIHtcbiAgICAgIHRvcDogcHgycmVtKDZweCk7XG4gICAgICByaWdodDogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAxNTBtcyBjdWJpYy1iZXppZXIoMC4xLCAwLjcsIDAuMSwgMSksXG4gICAgICAgIG9wYWNpdHkgICAxNTBtcztcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgIGxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICAgIH1cblxuICAgICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCBwb3J0cmFpdCkge1xuICAgICAgICB0b3A6IHB4MnJlbSgxMnB4KTtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgxNnB4KTtcblxuICAgICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgICAgcmlnaHQ6IGluaXRpYWw7XG4gICAgICAgICAgbGVmdDogcHgycmVtKDE2cHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgcmVzZXQgYnV0dG9uIGlmIHNlYXJjaCBpcyBhY3RpdmUgYW5kIGlucHV0IG5vbi1lbXB0eVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9IC5tZC1zZWFyY2hfX2lucHV0OnZhbGlkIH4gJiB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgICAgIC8vIEhvdmVyZWQgaWNvblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWFyY2ggb3V0cHV0IGNvbnRhaW5lclxuICAmX19vdXRwdXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAwIDAgcHgycmVtKDJweCkgcHgycmVtKDJweCk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogRnVsbC1zY3JlZW4gc2VhcmNoIGJhclxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQgcG9ydHJhaXQpIHtcbiAgICAgIHRvcDogcHgycmVtKDQ4cHgpO1xuICAgICAgYm90dG9tOiAwO1xuICAgIH1cblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBIZWFkZXItZW1iZWRkZWQgc2VhcmNoXG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgdG9wOiBweDJyZW0oMzhweCk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcblxuICAgICAgLy8gU2hvdyBzZWFyY2ggb3V0cHV0IGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBAaW5jbHVkZSB6LWRlcHRoKDYpO1xuXG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWJnLWNvbG9yKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIHB4MnJlbSgxcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG5cbiAgICAvLyBNaXRpZ2lhdGUgZXhjZXNzaXZlIHJlcGFpbnRzIG9uIG5vbi1yZXRpbmEgZGV2aWNlc1xuICAgIEBtZWRpYSAobWF4LXJlc29sdXRpb246IDFkcHB4KSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBTZXQgYWJzb2x1dGUgd2lkdGggdG8gb21pdCB1bm5lY2Vzc2FyeSByZWZsb3dcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgd2lkdGg6IHB4MnJlbSg0NjhweCk7XG4gICAgfVxuXG4gICAgLy8gW3NjcmVlbiArXTogU2V0IGFic29sdXRlIHdpZHRoIHRvIG9taXQgdW5uZWNlc3NhcnkgcmVmbG93XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2Uoc2NyZWVuKSB7XG4gICAgICB3aWR0aDogcHgycmVtKDY4OHB4KTtcbiAgICB9XG5cbiAgICAvLyBbdGFibGV0IGxhbmRzY2FwZSArXTogTGltaXQgaGVpZ2h0IHRvIHZpZXdwb3J0XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMDtcblxuICAgICAgLy8gRXhwYW5kIGluIGFjdGl2ZSBzdGF0ZVxuICAgICAgI3skbWQtdG9nZ2xlX19zZWFyY2gtLWNoZWNrZWR9ICYge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICAgICAgfVxuXG4gICAgICAvLyBPdmVycmlkZSBuYXRpdmUgc2Nyb2xsYmFyIHN0eWxlc1xuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICAgIGhlaWdodDogcHgycmVtKDRweCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcblxuICAgICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNlYXJjaCByZXN1bHRcbi5tZC1zZWFyY2gtcmVzdWx0IHtcbiAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuXG4gIC8vIFNlYXJjaCBtZXRhZGF0YVxuICAmX19tZXRhIHtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogcHgycmVtKDM2cHgpO1xuICAgIHNjcm9sbC1zbmFwLWFsaWduOiBzdGFydDtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBJbmNyZWFzZSBsZWZ0IGluZGVudFxuICAgIEBpbmNsdWRlIGJyZWFrLWZyb20tZGV2aWNlKHRhYmxldCBsYW5kc2NhcGUpIHtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDQ0cHgpO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oNDRweCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBMaXN0IG9mIGl0ZW1zXG4gICZfX2xpc3Qge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlci10b3A6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGJveC1zaGFkb3c6IDAgcHgycmVtKC0xcHgpIDAgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICB9XG5cbiAgLy8gTGluayBpbnNpZGUgaXRlbVxuICAmX19saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zO1xuICAgIG91dGxpbmU6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG5cbiAgICAvLyBGb2N1c2VkIG9yIGhvdmVyZWQgbGlua1xuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3ItLXRyYW5zcGFyZW50KTtcblxuICAgICAgLy8gU2xpZ2h0bHkgdHJhbnNwYXJlbnQgaWNvblxuICAgICAgLm1kLXNlYXJjaC1yZXN1bHRfX2FydGljbGU6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYSBsaXR0bGUgc3BhY2luZyBvbiB0aGUgdGVhc2VyIG9mIHRoZSBsYXN0IGxpbmtcbiAgICAmOmxhc3QtY2hpbGQgLm1kLXNlYXJjaC1yZXN1bHRfX3RlYXNlciB7XG4gICAgICBtYXJnaW4tYm90dG9tOiBweDJyZW0oMTJweCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXJ0aWNsZSAtIGRvY3VtZW50IG9yIHNlY3Rpb25cbiAgJl9fYXJ0aWNsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDAgcHgycmVtKDE2cHgpO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGUgK106IEluY3JlYXNlIGxlZnQgaW5kZW50XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDRweCk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0NHB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRcbiAgICAmLS1kb2N1bWVudCB7XG5cbiAgICAgIC8vIFRpdGxlXG4gICAgICAubWQtc2VhcmNoLXJlc3VsdF9fdGl0bGUge1xuICAgICAgICBtYXJnaW46IHB4MnJlbSgxMXB4KSAwO1xuICAgICAgICBmb250LXNpemU6IG1zKDApO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEljb25cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgbWFyZ2luOiBweDJyZW0oMnB4KTtcbiAgICBwYWRkaW5nOiBweDJyZW0oOHB4KTtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHQpO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGxlZnQ6IGluaXRpYWw7XG5cbiAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICBzdmcge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBwb3J0cmFpdCAtXTogSGlkZSBwYWdlIGljb25cbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UodGFibGV0IHBvcnRyYWl0KSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRpdGxlXG4gICZfX3RpdGxlIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICB9XG5cbiAgLy8gc3R5bGVsaW50LWRpc2FibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFRlYXNlclxuICAmX190ZWFzZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG1heC1oZWlnaHQ6IHB4MnJlbSgzM3B4KTtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG4gICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICBmb250LXNpemU6IG1zKC0xKTtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXgtaGVpZ2h0OiBweDJyZW0oNTBweCk7XG4gICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gICAgfVxuXG4gICAgLy8gW3RhYmxldCBsYW5kc2NhcGVdOiBJbmNyZWFzZSBudW1iZXIgb2YgbGluZXNcbiAgICBAaW5jbHVkZSBicmVhay1hdC1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogcHgycmVtKDUwcHgpO1xuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1lbmFibGUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeCwgcHJvcGVydHktbm8tdmVuZG9yLXByZWZpeFxuXG4gIC8vIFNlYXJjaCB0ZXJtIGhpZ2hsaWdodGluZ1xuICBlbSB7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gQWN0aXZlICh0b2dnbGVkKSBkcmF3ZXJcbiRtZC10b2dnbGVfX2RyYXdlci0tY2hlY2tlZDpcbiAgXCJbZGF0YS1tZC10b2dnbGU9XFxcImRyYXdlclxcXCJdOmNoZWNrZWQgfiAubWQtY29udGFpbmVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNpZGViYXIgY29udGFpbmVyXG4ubWQtc2lkZWJhciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IHB4MnJlbSgyNDJweCk7XG4gIHBhZGRpbmc6IHB4MnJlbSgyNHB4KSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIEhpZGUgZm9yIHByaW50XG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8vIExvY2sgc2lkZWJhciB0byBjb250YWluZXIgaGVpZ2h0IChhY2NvdW50IGZvciBmaXhlZCBoZWFkZXIpXG4gICZbZGF0YS1tZC1zdGF0ZT1cImxvY2tcIl0ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IHB4MnJlbSg0OHB4KTtcbiAgfVxuXG4gIC8vIFt0YWJsZXQgLV06IENvbnZlcnQgbmF2aWdhdGlvbiB0byBkcmF3ZXJcbiAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgLy8gUmVuZGVyIHByaW1hcnkgc2lkZWJhciBhcyBhIHNsaWRlb3V0IGNvbnRhaW5lclxuICAgICYtLXByaW1hcnkge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogcHgycmVtKC0yNDJweCk7XG4gICAgICB3aWR0aDogcHgycmVtKDI0MnB4KTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSAgMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxcbiAgICAgICAgYm94LXNoYWRvdyAyNTBtcztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtYmctY29sb3IpO1xuICAgICAgei1pbmRleDogMztcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcmlnaHQ6IHB4MnJlbSgtMjQycHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBhbmRlZCBkcmF3ZXJcbiAgICAgICN7JG1kLXRvZ2dsZV9fZHJhd2VyLS1jaGVja2VkfSAmIHtcbiAgICAgICAgQGluY2x1ZGUgei1kZXB0aCg4KTtcblxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgocHgycmVtKDI0MnB4KSk7XG5cbiAgICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWChweDJyZW0oLTI0MnB4KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBvdmVyZmxvdyBmb3IgbmVzdGVkIG5hdmlnYXRpb25cbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWNvbmRhcnkgc2lkZWJhciB3aXRoIHRhYmxlIG9mIGNvbnRlbnRzXG4gICYtLXNlY29uZGFyeSB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgIC8vIFt0YWJsZXQgbGFuZHNjYXBlICtdOiBTaG93IHRhYmxlIG9mIGNvbnRlbnRzIG5leHQgdG8gYm9keSBjb3B5XG4gICAgQGluY2x1ZGUgYnJlYWstZnJvbS1kZXZpY2UodGFibGV0IGxhbmRzY2FwZSkge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogY2FsYygxMDAlIC0gI3tweDJyZW0oMjQycHgpfSk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgc21vb3RoIHNjcm9sbGluZyBvbiBpT1NcbiAgICAgIC5tZC1zaWRlYmFyX19zY3JvbGx3cmFwIHtcbiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFtzY3JlZW4gK106IExpbWl0IHRvIGdyaWRcbiAgICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oKDEyMjAgLSAyNDIpICogMXB4KTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBmb3Igc2Nyb2xsaW5nIG9uIG92ZXJmbG93XG4gICZfX3Njcm9sbHdyYXAge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAwIHB4MnJlbSg0cHgpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgLy8gSGFjazogcmVkdWNlIGppdHRlclxuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcblxuICAgIC8vIFt0YWJsZXQgLV06IEFkanVzdCBtYXJnaW5zXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKHRhYmxldCkge1xuXG4gICAgICAvLyBTdHJldGNoIHNjcm9sbHdyYXAgZm9yIHByaW1hcnkgc2lkZWJhclxuICAgICAgLm1kLXNpZGViYXItLXByaW1hcnkgJiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3ZlcnJpZGUgbmF0aXZlIHNjcm9sbGJhciBzdHlsZXNcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICB3aWR0aDogcHgycmVtKDRweCk7XG4gICAgICBoZWlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgIH1cblxuICAgIC8vIFNjcm9sbGJhciB0aHVtYlxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXIpO1xuXG4gICAgICAvLyBIb3ZlcmVkIHNjcm9sbGJhciB0aHVtYlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gS2V5ZnJhbWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNob3cgc291cmNlIGZhY3RzXG5Aa2V5ZnJhbWVzIG1kLXNvdXJjZV9fZmFjdHMtLWRvbmUge1xuICAwJSB7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgaGVpZ2h0OiBweDJyZW0oMTNweCk7XG4gIH1cbn1cblxuLy8gU2hvdyBzb3VyY2UgZmFjdFxuQGtleWZyYW1lcyBtZC1zb3VyY2VfX2ZhY3QtLWRvbmUge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU291cmNlIGNvbnRhaW5lclxuLm1kLXNvdXJjZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zO1xuICBmb250LXNpemU6IHB4MnJlbSgxM3B4KTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIC8vIEhhY2s6IHJlZHVjZSBqaXR0ZXJcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiBpbml0aWFsO1xuICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICB9XG5cbiAgLy8gSG92ZXJlZCBzb3VyY2UgY29udGFpbmVyXG4gICY6aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuXG4gIC8vIFJlcG9zaXRvcnkgcGxhdGZvcm0gaWNvblxuICAmX19pY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IHB4MnJlbSg0OHB4KTtcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG4gICAgLy8gQWxpZ24gd2l0aCBtYXJnaW4gb25seSAoYXMgb3Bwb3NlZCB0byBub3JtYWwgYnV0dG9uIGFsaWdubWVudClcbiAgICBzdmcge1xuICAgICAgbWFyZ2luLXRvcDogcHgycmVtKDEycHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvcnJlY3QgYWxpZ25tZW50LCBpZiBpY29uIGlzIHByZXNlbnRcbiAgICArIC5tZC1zb3VyY2VfX3JlcG9zaXRvcnkge1xuICAgICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgtNDBweCk7XG4gICAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTQwcHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogcHgycmVtKDQwcHgpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGluaXRpYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwb3NpdG9yeSBuYW1lXG4gICZfX3JlcG9zaXRvcnkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtICN7cHgycmVtKDI0cHgpfSk7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMnB4KTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuXG4gIC8vIFNvdXJjZSBmYWN0cyAoc3RhdGlzdGljcyBldGMuKVxuICAmX19mYWN0cyB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBweDJyZW0oMTFweCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgb3BhY2l0eTogMC43NTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLy8gU2hvdyBhZnRlciB0aGUgZGF0YSB3YXMgbG9hZGVkXG4gICAgW2RhdGEtbWQtc3RhdGU9XCJkb25lXCJdICYge1xuICAgICAgYW5pbWF0aW9uOiBtZC1zb3VyY2VfX2ZhY3RzLS1kb25lIDI1MG1zIGVhc2UtaW47XG4gICAgfVxuICB9XG5cbiAgLy8gRmFjdFxuICAmX19mYWN0IHtcbiAgICBmbG9hdDogbGVmdDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cblxuICAgIC8vIFNob3cgYWZ0ZXIgdGhlIGRhdGEgd2FzIGxvYWRlZFxuICAgIFtkYXRhLW1kLXN0YXRlPVwiZG9uZVwiXSAmIHtcbiAgICAgIGFuaW1hdGlvbjogbWQtc291cmNlX19mYWN0LS1kb25lIDQwMG1zIGVhc2Utb3V0O1xuICAgIH1cblxuICAgIC8vIE1pZGRsZSBkb3QgYmVmb3JlIGZhY3RcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgycHgpO1xuICAgICAgY29udGVudDogXCJcXDAwQjdcIjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbWlkZGxlIGRvdCBvbiBmaXJzdCBmYWN0XG4gICAgJjpmaXJzdC1jaGlsZDo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVGFicyB3aXRoIG91dGxpbmVcbi5tZC10YWJzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXM7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLW1kLXByaW1hcnktZmctY29sb3IpO1xuICBjb2xvcjogdmFyKC0tbWQtcHJpbWFyeS1iZy1jb2xvcik7XG4gIG92ZXJmbG93OiBhdXRvO1xuXG4gIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gIC5uby1qcyAmIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgLy8gW3RhYmxldCAtXTogSGlkZSB0YWJzIGZvciB0YWJsZXQgYW5kIGJlbG93LCBhcyB0aGV5IGRvbid0IG1ha2UgYW55IHNlbnNlXG4gIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZSh0YWJsZXQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gSGlkZSBmb3IgcHJpbnRcbiAgQG1lZGlhIHByaW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gTGlzdCBvZiBpdGVtc1xuICAmX19saXN0IHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSg0cHgpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IHB4MnJlbSg0cHgpO1xuICAgICAgbWFyZ2luLWxlZnQ6IGluaXRpYWw7XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdCBpdGVtXG4gICZfX2l0ZW0ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IHB4MnJlbSg0OHB4KTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBMaW5rIGluc2lkZSBpdGVtIC0gY291bGQgYmUgZGVmaW5lZCBhcyBibG9jayBlbGVtZW50cyBhbmQgYWxpZ25lZCB2aWFcbiAgLy8gbGluZSBoZWlnaHQsIGJ1dCB0aGlzIHdvdWxkIGltcGx5IG1vcmUgcmVwYWludHMgd2hlbiBzY3JvbGxpbmdcbiAgJl9fbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogcHgycmVtKDE2cHgpO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMSwgMC43LCAwLjEsIDEpLFxuICAgICAgb3BhY2l0eSAgIDI1MG1zO1xuICAgIGZvbnQtc2l6ZTogcHgycmVtKDE0cHgpO1xuICAgIG9wYWNpdHk6IDAuNztcblxuICAgIC8vIE9taXQgdHJhbnNpdGlvbnMsIGluIGNhc2UgSmF2YVNjcmlwdCBpcyBub3QgYXZhaWxhYmxlXG4gICAgLm5vLWpzICYge1xuICAgICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmUgb3IgaG92ZXJlZCBsaW5rXG4gICAgJi0tYWN0aXZlLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC8vIERlbGF5IHRyYW5zaXRpb25zIGJ5IGEgc21hbGwgYW1vdW50XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAxNiB7XG4gICAgICAubWQtdGFic19faXRlbTpudGgtY2hpbGQoI3skaX0pICYge1xuICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAyMG1zICogKCRpIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmFkZS1vdXQgdGFicyBiYWNrZ3JvdW5kIHVwb24gc2Nyb2xsaW5nXG4gICZbZGF0YS1tZC1zdGF0ZT1cImhpZGRlblwiXSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAvLyBIaWRlIHRhYnMgdXBvbiBzY3JvbGxpbmcgLSBkaXNhYmxlIHRyYW5zaXRpb24gdG8gbWluaW1pemVzIHJlcGFpbnRzXG4gICAgLy8gd2hpbGUgc2Nyb2xsaW5nIGRvd24sIHdoaWxlIHNjcm9sbGluZyB1cCBzZWVtcyB0byBiZSBva2F5XG4gICAgLm1kLXRhYnNfX2xpbmsge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDUwJSk7XG4gICAgICB0cmFuc2l0aW9uOlxuICAgICAgICBjb2xvciAgICAgMjUwbXMsXG4gICAgICAgIHRyYW5zZm9ybSAgIDBtcyA0MDBtcyxcbiAgICAgICAgb3BhY2l0eSAgIDEwMG1zO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBbc2NyZWVuICtdOiBBZGp1c3QgbWFpbiBuYXZpZ2F0aW9uIHN0eWxlc1xuICBAaW5jbHVkZSBicmVhay1mcm9tLWRldmljZShzY3JlZW4pIHtcblxuICAgIC8vIEhpZGUgMXN0IGxldmVsIG5lc3RlZCBpdGVtcywgYXMgdGhleSBhcmUgbGlzdGVkIGluIHRoZSB0YWJzXG4gICAgfiAubWQtbWFpbiAubWQtbmF2LS1wcmltYXJ5ID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0tLW5lc3RlZCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFjdGl2ZSB0YWJcbiAgICAmLS1hY3RpdmUgfiAubWQtbWFpbiB7XG5cbiAgICAgIC8vIEFkanVzdCAxc3QgbGV2ZWwgc3R5bGVzXG4gICAgICAubWQtbmF2LS1wcmltYXJ5IHtcblxuICAgICAgICAvLyBTaG93IHRpdGxlIGFuZCByZW1vdmUgc3BhY2luZ1xuICAgICAgICAubWQtbmF2X190aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgc2Nyb2xsLXNuYXAtYWxpZ246IHN0YXJ0O1xuXG4gICAgICAgICAgLy8gSGlkZSBzaXRlIHRpdGxlXG4gICAgICAgICAgJltmb3I9XCJfX2RyYXdlclwiXSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhpZGUgMXN0IGxldmVsIGl0ZW1zXG4gICAgICAgID4gLm1kLW5hdl9fbGlzdCA+IC5tZC1uYXZfX2l0ZW0ge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAvLyBTaG93IDFzdCBsZXZlbCBhY3RpdmUgbmVzdGVkIGl0ZW1zXG4gICAgICAgICAgJi0tYWN0aXZlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICAgICAgLy8gSGlkZSBuZXN0ZWQgbGlua3NcbiAgICAgICAgICAgID4gLm1kLW5hdl9fbGluayB7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFsd2F5cyBleHBhbmQgbmVzdGVkIG5hdmlnYXRpb24gb24gMm5kIGxldmVsXG4gICAgICAubWQtbmF2W2RhdGEtbWQtbGV2ZWw9XCIxXCJdIHtcblxuICAgICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiAybmQgbGV2ZWwgaXRlbXNcbiAgICAgICAgPiAubWQtbmF2X19saXN0ID4gLm1kLW5hdl9faXRlbSB7XG4gICAgICAgICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIaWRlIHRpdGxlcyBmcm9tIDJuZCBsZXZlbCBvblxuICAgICAgICAubWQtbmF2IC5tZC1uYXZfX3RpdGxlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBZG1vbml0aW9uXG4gIC5hZG1vbml0aW9uIHtcbiAgICBtYXJnaW46IDEuNTYyNWVtIDA7XG4gICAgcGFkZGluZzogMCBweDJyZW0oMTJweCk7XG4gICAgYm9yZGVyLWxlZnQ6IHB4MnJlbSg0cHgpIHNvbGlkICRjbHItYmx1ZS1hMjAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAwIHB4MnJlbSg0cHgpIHB4MnJlbSgxMHB4KSBoc2xhKDAsIDAlLCAwJSwgMC4wNSksXG4gICAgICAwIDAgICAgICAgICAgIHB4MnJlbSgxcHgpICBoc2xhKDAsIDAlLCAwJSwgMC4xKTtcbiAgICBvdmVyZmxvdzogYXV0bztcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oNHB4KSBzb2xpZCAkY2xyLWJsdWUtYTIwMDtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIH1cblxuICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgIGh0bWwgJiA+IDpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBBZGp1c3QgbWFyZ2luIGZvciBuZXN0ZWQgYWRtb25pdGlvbiBibG9ja3NcbiAgICAuYWRtb25pdGlvbiB7XG4gICAgICBtYXJnaW46IDFlbSAwO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJlcHJlc2VudGF0aW9uYWwgY2xhc3Nlc1xuICAgIEBlYWNoICRuYW1lcywgJGFwcGVhcmFuY2UgaW4gKFxuICAgICAgYWJzdHJhY3Qgc3VtbWFyeSB0bGRyOiAkY2xyLWxpZ2h0LWJsdWUtYTQwMCBcInRleHQtc3ViamVjdFwiLFxuICAgICAgaW5mbyB0b2RvOiAkY2xyLWN5YW4tYTcwMCBcImluZm9ybWF0aW9uXCIsXG4gICAgICB0aXAgaGludCBpbXBvcnRhbnQ6ICRjbHItdGVhbC1hNzAwIFwiZmlyZVwiLFxuICAgICAgc3VjY2VzcyBjaGVjayBkb25lOiAkY2xyLWdyZWVuLWE3MDAgXCJjaGVjay1jaXJjbGVcIixcbiAgICAgIHF1ZXN0aW9uIGhlbHAgZmFxOiAkY2xyLWxpZ2h0LWdyZWVuLWE3MDAgXCJoZWxwLWNpcmNsZVwiLFxuICAgICAgd2FybmluZyBjYXV0aW9uIGF0dGVudGlvbjogJGNsci1vcmFuZ2UtYTQwMCBcImFsZXJ0XCIsXG4gICAgICBmYWlsdXJlIGZhaWwgbWlzc2luZzogJGNsci1yZWQtYTIwMCBcImNsb3NlLWNpcmNsZVwiLFxuICAgICAgZGFuZ2VyIGVycm9yOiAkY2xyLXJlZC1hNDAwIFwiZmxhc2gtY2lyY2xlXCIsXG4gICAgICBidWc6ICRjbHItcGluay1hNDAwIFwiYnVnXCIsXG4gICAgICBleGFtcGxlOiAkY2xyLWRlZXAtcHVycGxlLWE0MDAgXCJmb3JtYXQtbGlzdC1udW1iZXJlZFwiLFxuICAgICAgcXVvdGUgY2l0ZTogJGNsci1ncmV5IFwiZm9ybWF0LXF1b3RlLWNsb3NlXCJcbiAgICApIHtcbiAgICAgICR0aW50OiBudGgoJGFwcGVhcmFuY2UsIDEpO1xuICAgICAgJGljb246IG50aCgkYXBwZWFyYW5jZSwgMik7XG5cbiAgICAgIC8vIERlZmluZSBiYXNlIGNsYXNzXG4gICAgICAmJSN7bnRoKCRuYW1lcywgMSl9LFxuICAgICAgJi4je250aCgkbmFtZXMsIDEpfSB7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdGludDtcblxuICAgICAgICAvLyBUaXRsZVxuICAgICAgICA+IDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJHRpbnQsIDAuOSk7XG5cbiAgICAgICAgICAvLyBJY29uXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0aW50O1xuICAgICAgICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgI3skaWNvbn0gfX1cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIERlZmluZSBzeW5vbnltcyBmb3IgYmFzZSBjbGFzc1xuICAgICAgQGlmIGxlbmd0aCgkbmFtZXMpID4gMSB7XG4gICAgICAgIEBmb3IgJG4gZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRuYW1lcykge1xuICAgICAgICAgICYuI3tudGgoJG5hbWVzLCAkbil9IHtcbiAgICAgICAgICAgIEBleHRlbmQgJSN7bnRoKCRuYW1lcywgMSl9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkbW9uaXRpb24gdGl0bGVcbiAgLmFkbW9uaXRpb24tdGl0bGUge1xuICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuICAgIHBhZGRpbmc6IHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KSBweDJyZW0oOHB4KSBweDJyZW0oNDBweCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRpemUoJGNsci1ibHVlLWEyMDAsIDAuOSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgcGFkZGluZzogcHgycmVtKDhweCkgcHgycmVtKDQwcHgpIHB4MnJlbSg4cHgpIHB4MnJlbSgxMnB4KTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nLCBpZiB0aXRsZSBpcyB0aGUgb25seSBlbGVtZW50XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgLy8gSWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogcHgycmVtKDIwcHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMjBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0yOHB4KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjbHItYmx1ZS1hMjAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgcGVuY2lsIH19XCIpO1xuICAgICAgY29udGVudDogXCJcIjtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oLTI4cHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gT3BlcmF0b3JzXG4kY29kZWhpbGl0ZS1vcGVyYXRvcjogaW5oZXJpdDtcbiRjb2RlaGlsaXRlLW9wZXJhdG9yLXdvcmQ6IGluaGVyaXQ7XG5cbi8vIEdlbmVyaWNzXG4kY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg6ICMwMDAwMDA7XG4kY29kZWhpbGl0ZS1nZW5lcmljLWVycm9yOiAjQUEwMDAwO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1oZWFkaW5nOiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ6ICM4ODg4ODg7XG4kY29kZWhpbGl0ZS1nZW5lcmljLXByb21wdDogIzU1NTU1NTtcbiRjb2RlaGlsaXRlLWdlbmVyaWMtc3Ryb25nOiBpbmhlcml0O1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOiAjQUFBQUFBO1xuJGNvZGVoaWxpdGUtZ2VuZXJpYy10cmFjZWJhY2s6ICNBQTAwMDA7XG5cbi8vIERpZmZzXG4kY29kZWhpbGl0ZS1kaWZmLWRlbGV0ZWQ6ICNGRkREREQ7XG4kY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOiAjRERGRkREO1xuXG4vLyBLZXl3b3Jkc1xuJGNvZGVoaWxpdGUta2V5d29yZDogIzNCNzhFNztcbiRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ6ICNBNzFENUQ7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLWRlY2xhcmF0aW9uOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUta2V5d29yZC1uYW1lc3BhY2U6ICMzQjc4RTc7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzogI0E3MUQ1RDtcbiRjb2RlaGlsaXRlLWtleXdvcmQtcmVzZXJ2ZWQ6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1rZXl3b3JkLXR5cGU6ICMzRTYxQTI7XG5cbi8vIENvbW1lbnRzXG4kY29kZWhpbGl0ZS1jb21tZW50OiAjOTk5OTk5O1xuJGNvZGVoaWxpdGUtY29tbWVudC1tdWx0aWxpbmU6ICM5OTk5OTk7XG4kY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1jb21tZW50LXNpbmdsZTogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc2hlYmFuZzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDogIzk5OTk5OTtcblxuLy8gTmFtZXNcbiRjb2RlaGlsaXRlLW5hbWUtYXR0cmlidXRlOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluLXBzZXVkbzogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtY2xhc3M6ICNDMjE4NUI7XG4kY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS1kZWNvcmF0b3I6ICM2NjY2NjY7XG4kY29kZWhpbGl0ZS1uYW1lLWVudGl0eTogIzY2NjY2NjtcbiRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOiAjQzIxODVCO1xuJGNvZGVoaWxpdGUtbmFtZS1mdW5jdGlvbjogI0MyMTg1QjtcbiRjb2RlaGlsaXRlLW5hbWUtbGFiZWw6ICMzQjUxNzk7XG4kY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTogI0VDNDA3QTtcbiRjb2RlaGlsaXRlLW5hbWUtdGFnOiAjM0I3OEU3O1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZTogIzNFNjFBMjtcbiRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOiAjM0U2MUEyO1xuJGNvZGVoaWxpdGUtbmFtZS12YXJpYWJsZS1nbG9iYWw6ICMzRTYxQTI7XG4kY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjogI0VDNDA3QTtcblxuLy8gTnVtYmVyc1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWhleDogI0U3NEMzQztcbiRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLWludGVnZXI6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc6ICNFNzRDM0M7XG4kY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1vY3Q6ICNFNzRDM0M7XG5cbi8vIFN0cmluZ3NcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctYmFja3RpY2tzOiAjMEQ5MDRGO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctY2hhcjogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzogIzk5OTk5OTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvdWJsZTogIzBEOTA0RjtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWVzY2FwZTogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M6ICMxODM2OTE7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1pbnRlcnBvbDogIzE4MzY5MTtcbiRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLW90aGVyOiAjMTgzNjkxO1xuJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg6ICMwMDk5MjY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zaW5nbGU6ICMwRDkwNEY7XG4kY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1zeW1ib2w6ICMwRDkwNEY7XG5cbi8vIE1pc2NlbGxhbmVvdXNcbiRjb2RlaGlsaXRlLWVycm9yOiAjQTYxNzE3O1xuJGNvZGVoaWxpdGUtd2hpdGVzcGFjZTogdHJhbnNwYXJlbnQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzOiBzeW50YXggaGlnaGxpZ2h0aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIENvZGVoaWxpdGUgZXh0ZW5zaW9uXG4uY29kZWhpbGl0ZSB7XG5cbiAgLy8gT3BlcmF0b3JzXG4gIC5vICB7IGNvbG9yOiAkY29kZWhpbGl0ZS1vcGVyYXRvcjsgfVxuICAub3cgeyBjb2xvcjogJGNvZGVoaWxpdGUtb3BlcmF0b3Itd29yZDsgfVxuXG4gIC8vIEdlbmVyaWNzXG4gIC5nZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLWVtcGg7IH1cbiAgLmdyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtZXJyb3I7IH1cbiAgLmdoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtaGVhZGluZzsgfVxuICAuZ28geyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1vdXRwdXQ7IH1cbiAgLmdwIHsgY29sb3I6ICRjb2RlaGlsaXRlLWdlbmVyaWMtcHJvbXB0OyB9XG4gIC5ncyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXN0cm9uZzsgfVxuICAuZ3UgeyBjb2xvcjogJGNvZGVoaWxpdGUtZ2VuZXJpYy1zdWJoZWFkaW5nOyB9XG4gIC5ndCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1nZW5lcmljLXRyYWNlYmFjazsgfVxuXG4gIC8vIERpZmZzXG4gIC5nZCB7IGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDsgfVxuICAuZ2kgeyBiYWNrZ3JvdW5kLWNvbG9yOiAkY29kZWhpbGl0ZS1kaWZmLWluc2VydGVkOyB9XG5cbiAgLy8gS2V5d29yZHNcbiAgLmsgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQ7IH1cbiAgLmtjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtY29uc3RhbnQ7IH1cbiAgLmtkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtZGVjbGFyYXRpb247IH1cbiAgLmtuIHsgY29sb3I6ICRjb2RlaGlsaXRlLWtleXdvcmQtbmFtZXNwYWNlOyB9XG4gIC5rcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1rZXl3b3JkLXBzZXVkbzsgfVxuICAua3IgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC1yZXNlcnZlZDsgfVxuICAua3QgeyBjb2xvcjogJGNvZGVoaWxpdGUta2V5d29yZC10eXBlOyB9XG5cbiAgLy8gQ29tbWVudHNcbiAgLmMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7IH1cbiAgLmNtIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtbXVsdGlsaW5lOyB9XG4gIC5jcCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXByZXByb2M7IH1cbiAgLmMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc2luZ2xlOyB9XG4gIC5jaCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1jb21tZW50LXNoZWJhbmc7IH1cbiAgLmNzIHsgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQtc3BlY2lhbDsgfVxuXG4gIC8vIE5hbWVzXG4gIC5uYSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWF0dHJpYnV0ZTsgfVxuICAubmIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1idWlsdGluOyB9XG4gIC5icCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWJ1aWx0aW4tcHNldWRvOyB9XG4gIC5uYyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNsYXNzOyB9XG4gIC5ubyB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWNvbnN0YW50OyB9XG4gIC5uZCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWVudGl0eTsgfVxuICAubmkgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS1lbnRpdHk7IH1cbiAgLm5lIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtZXhjZXB0aW9uOyB9XG4gIC5uZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWZ1bmN0aW9uOyB9XG4gIC5ubCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWxhYmVsOyB9XG4gIC5ubiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLW5hbWVzcGFjZTsgfVxuICAubnQgeyBjb2xvcjogJGNvZGVoaWxpdGUtbmFtZS10YWc7IH1cbiAgLm52IHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGU7IH1cbiAgLnZjIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtY2xhc3M7IH1cbiAgLnZnIHsgY29sb3I6ICRjb2RlaGlsaXRlLW5hbWUtdmFyaWFibGUtZ2xvYmFsOyB9XG4gIC52aSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLXZhcmlhYmxlLWluc3RhbmNlOyB9XG4gIC5ueCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1uYW1lLWV4dGVuc2lvbjsgfVxuXG4gIC8vIE51bWJlcnNcbiAgLm0gIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyOyB9XG4gIC5tZiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1mbG9hdDsgfVxuICAubWggeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1udW1iZXItaGV4OyB9XG4gIC5taSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyOyB9XG4gIC5pbCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLW51bWJlci1pbnRlZ2VyLWxvbmc7IH1cbiAgLm1vIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtbnVtYmVyLW9jdDsgfVxuXG4gIC8vIFN0cmluZ3NcbiAgLnMgIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nOyB9XG4gIC5zYiB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1iYWNrdGlja3M7IH1cbiAgLnNjIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWNoYXI7IH1cbiAgLnNkIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWRvYzsgfVxuICAuczIgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctZG91YmxlOyB9XG4gIC5zZSB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1lc2NhcGU7IH1cbiAgLnNoIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWhlcmVkb2M7IH1cbiAgLnNpIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLWludGVycG9sOyB9XG4gIC5zeCB7IGNvbG9yOiAkY29kZWhpbGl0ZS1saXRlcmFsLXN0cmluZy1vdGhlcjsgfVxuICAuc3IgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctcmVnZXg7IH1cbiAgLnMxIHsgY29sb3I6ICRjb2RlaGlsaXRlLWxpdGVyYWwtc3RyaW5nLXNpbmdsZTsgfVxuICAuc3MgeyBjb2xvcjogJGNvZGVoaWxpdGUtbGl0ZXJhbC1zdHJpbmctc3ltYm9sOyB9XG5cbiAgLy8gTWlzY2VsbGFuZW91c1xuICAuZXJyIHsgY29sb3I6ICRjb2RlaGlsaXRlLWVycm9yOyB9XG4gIC53IHsgY29sb3I6ICRjb2RlaGlsaXRlLXdoaXRlc3BhY2U7IH1cblxuICAvLyBIaWdobGlnaHRlZCBsaW5lc1xuICAuaGxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDAgcHgycmVtKC0xMnB4KTtcbiAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGl6ZSgkY2xyLXllbGxvdy01MDAsIDAuNSk7XG5cbiAgICAvLyBbbW9iaWxlIC1dOiBTdHJldGNoIHRvIHdob2xlIHdpZHRoXG4gICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgbWFyZ2luOiAwIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxNnB4KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXM6IGxheW91dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBCbG9jayB3aXRoIGxpbmUgbnVtYmVyc1xuLmNvZGVoaWxpdGV0YWJsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIFNldCB0YWJsZSBlbGVtZW50cyB0byBibG9jayBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB3aG9sZSBmbGV4Ym94XG4gIC8vIGhhY2tpbmcgd29uJ3Qgd29yayBjb3JyZWN0bHlcbiAgdGJvZHksXG4gIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gV2UgbmVlZCB0byB1c2UgZmxleGJveCBsYXlvdXQsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0J3Mgbm90IHBvc3NpYmxlIHRvXG4gIC8vIG1ha2UgdGhlIGNvZGUgY29udGFpbmVyIHNjcm9sbCB3aGlsZSBrZWVwaW5nIHRoZSBsaW5lIG51bWJlcnMgc3RhdGljXG4gIHRyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLy8gVGhlIHByZSB0YWdzIGFyZSBuZXN0ZWQgaW5zaWRlIGEgdGFibGUsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZVxuICAvLyBtYXJnaW4gYmVjYXVzZSBpdCBjb2xsYXBzZXMgYmVsb3cgYWxsIHRoZSBvdmVyZmxvd3NcbiAgcHJlLFxuICAubGluZW5vZGl2IHtcbiAgICBtYXJnaW46IDA7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuXG4gIC8vIEFkZCBzcGFjaW5nIHRvIGxpbmUgbnVtYmVyIGNvbnRhaW5lclxuICAubGluZW5vZGl2IHtcbiAgICBwYWRkaW5nOiBweDJyZW0oMTAuNXB4KSBweDJyZW0oMTJweCk7XG4gIH1cblxuICAvLyBEaXNhYmxlIHVzZXIgc2VsZWN0aW9uLCBzbyBjb2RlIGNhbiBiZSBlYXNpbHkgY29waWVkIHdpdGhvdXRcbiAgLy8gYWNjaWRlbnRhbGx5IGFsc28gY29weWluZyB0aGUgbGluZSBudW1iZXJzXG4gIC5saW5lbm9zIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgcHgycmVtKDFweCkgdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICAvLyBSZXNldCBzcGFjaW5nc1xuICAgIHByZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHRhYmxlIGNlbGwgY29udGFpbmluZyB0aGUgY29kZSBjb250YWluZXIgd3JhcHBlciBhbmQgY29kZSBzaG91bGRcbiAgLy8gc3RyZXRjaCBob3Jpem9udGFsbHkgdG8gdGhlIHJlbWFpbmluZyBzcGFjZVxuICAuY29kZSB7XG4gICAgZmxleDogMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQmxvY2sgd2l0aCBsaW5lIG51bWJlcnNcbiAgPiAuY29kZWhpbGl0ZXRhYmxlIHtcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMmVtO1xuICB9XG5cbiAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG5cbiAgICAvLyBGdWxsLXdpZHRoIGNvbnRhaW5lclxuICAgID4gLmNvZGVoaWxpdGUge1xuICAgICAgbWFyZ2luOiAxZW0gcHgycmVtKC0xNnB4KTtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICAgID4gLmNvZGVoaWxpdGV0YWJsZSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gSW5jcmVhc2Ugc3BhY2luZ1xuICAgICAgLmxpbmVub2RpdiB7XG4gICAgICAgIHBhZGRpbmc6IHB4MnJlbSgxMHB4KSBweDJyZW0oMTZweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBBbGwgZm9vdG5vdGUgcmVmZXJlbmNlc1xuICBbaWRePVwiZm5yZWY6XCJdIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAvLyBUYXJnZXRlZCBhbmNob3JcbiAgICAmOnRhcmdldCB7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDE2cHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gQWxsIGZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlc1xuICBbaWRePVwiZm46XCJdIHtcblxuICAgIC8vIEFkZCBzcGFjaW5nIHRvIGFuY2hvciBmb3Igb2Zmc2V0XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxuICAgIC8vIFRhcmdldGVkIGFuY2hvclxuICAgICY6dGFyZ2V0OjpiZWZvcmUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArIDEwcHgpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9vdG5vdGVzIGV4dGVuc2lvblxuICAuZm9vdG5vdGUge1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodCk7XG4gICAgZm9udC1zaXplOiBtcygtMSk7XG5cbiAgICAvLyBSZW1vdmUgYWRkaXRpb25hbCBzcGFjaW5nIG9uIGZvb3Rub3Rlc1xuICAgIG9sIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cblxuICAgIC8vIEZvb3Rub3RlXG4gICAgbGkge1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXM7XG5cbiAgICAgIC8vIERhcmtlbiBjb2xvciBmb3IgdGFyZ2V0ZWQgZm9vdG5vdGVcbiAgICAgICY6dGFyZ2V0IHtcbiAgICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgICA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGJhY2sgcmVmZXJlbmNlcyB2aXNpYmxlIG9uIGhvdmVyXG4gICAgICAmOmhvdmVyICAuZm9vdG5vdGUtYmFja3JlZixcbiAgICAgICY6dGFyZ2V0IC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBBY3RpdmUgb3IgdGFyZ2V0ZWQgYmFjayByZWZlcmVuY2VcbiAgICAgICY6aG92ZXIgIC5mb290bm90ZS1iYWNrcmVmOmhvdmVyLFxuICAgICAgJjp0YXJnZXQgLmZvb3Rub3RlLWJhY2tyZWYge1xuICAgICAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGb290bm90ZSByZWZlcmVuY2VcbiAgLmZvb3Rub3RlLXJlZiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBpbml0aWFsO1xuXG4gICAgLy8gUmVuZGVyIGEgdGhpbiBsaW5lIGJlZm9yZSBmb290bm90ZVxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICBtYXJnaW46IDAgMC4yZW07XG4gICAgICBib3JkZXItbGVmdDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBmb250LXNpemU6IDEuMjVlbTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogcHgycmVtKC01cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvb3Rub3RlIGJhY2sgcmVmZXJlbmNlXG4gIC5mb290bm90ZS1iYWNrcmVmIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSg1cHgpKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgdHJhbnNmb3JtIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgIDEyNW1zIDI1MG1zO1xuICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICAvLyBIYWNrOiByZW1vdmUgVW5pY29kZSBhcnJvdyBmb3IgaWNvblxuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcblxuICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHB4MnJlbSgtNXB4KSk7XG4gICAgfVxuXG4gICAgLy8gQmFjayByZWZlcmVuY2UgaWNvblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogcHgycmVtKDE2cHgpO1xuICAgICAgaGVpZ2h0OiBweDJyZW0oMTZweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBrZXlib2FyZC1yZXR1cm4gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuXG4gICAgICAgIC8vIEZsaXAgaWNvbiB2ZXJ0aWNhbGx5XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBTY29wZWQgaW4gdHlwZXNldHRlZCBjb250ZW50IHRvIG1hdGNoIHNwZWNpZmljaXR5IG9mIHJlZ3VsYXIgY29udGVudFxuLm1kLXR5cGVzZXQge1xuXG4gIC8vIFBlcm1hbGlua3MgZXh0ZW5zaW9uXG4gIC5oZWFkZXJsaW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IHB4MnJlbSgxMHB4KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCBweDJyZW0oNXB4KSk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIHRyYW5zZm9ybSAgMjUwbXMgMjUwbXMsXG4gICAgICBjb2xvciAgICAgIDI1MG1zLFxuICAgICAgb3BhY2l0eSAgICAxMjVtcyAyNTBtcyxcbiAgICAgIHZpc2liaWxpdHkgICAwbXMgNTAwbXM7XG4gICAgb3BhY2l0eTogMDtcbiAgICAvLyBIYWNrOiBJZiB3ZSBkb24ndCBzZXQgdmlzaWJpbGl0eSBoaWRkZW4sIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGVcbiAgICAvLyB3aWxsIGluY2x1ZGUgdGhlIGhlYWRlcmxpbmsgY2hhcmFjdGVyLCB3aGljaCBpcyB3aHkgR29vZ2xlIGluZGV4ZXMgdGhlbS5cbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG5cbiAgICAvLyBBZGp1c3QgZm9yIFJUTCBsYW5ndWFnZXNcbiAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTBweCk7XG4gICAgICBtYXJnaW4tbGVmdDogaW5pdGlhbDtcbiAgICB9XG5cbiAgICAvLyBIaWdoZXIgc3BlY2lmaWNpdHkgZm9yIGNvbG9yIGR1ZSB0byBwYWxldHRlcyBpbnRlZ3JhdGlvblxuICAgIGh0bWwgYm9keSAmIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVyKTtcbiAgICB9XG5cbiAgICAvLyBIaWRlIGZvciBwcmludFxuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ha2UgcGVybWFsaW5rIHZpc2libGUgb24gaG92ZXJcbiAgOmhvdmVyICAuaGVhZGVybGluayxcbiAgOnRhcmdldCAuaGVhZGVybGluayxcbiAgLmhlYWRlcmxpbms6Zm9jdXMge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAgIHRyYW5zaXRpb246XG4gICAgICB0cmFuc2Zvcm0gIDI1MG1zIDI1MG1zLFxuICAgICAgY29sb3IgICAgICAyNTBtcyxcbiAgICAgIG9wYWNpdHkgICAgMTI1bXMgMjUwbXMsXG4gICAgICB2aXNpYmlsaXR5ICAgMG1zO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxuXG4gIC8vIEFjdGl2ZSBvciB0YXJnZXRlZCBwZXJtYWxpbmtcbiAgLmhlYWRlcmxpbms6Zm9jdXMsXG4gIC5oZWFkZXJsaW5rOmhvdmVyLFxuICA6dGFyZ2V0IC5oZWFkZXJsaW5rIHtcbiAgICBjb2xvcjogdmFyKC0tbWQtYWNjZW50LWZnLWNvbG9yKTtcbiAgfVxuXG4gIC8vIENvcnJlY3QgYW5jaG9yIG9mZnNldCBmb3IgbGluayBibHVycmluZ1xuICBAZWFjaCAkbGV2ZWwsICRkZWx0YSBpbiAoXG4gICAgaDEgaDIgaDM6IDhweCxcbiAgICBoNDogOXB4LFxuICAgIGg1IGg2OiAxMnB4LFxuICApIHtcbiAgICAlI3tudGgoJGxldmVsLCAxKX0ge1xuXG4gICAgICAvLyBVbi10YXJnZXRlZCBhbmNob3JcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMSAqIHB4MnJlbSgkZGVsdGEpO1xuICAgICAgICBwYWRkaW5nLXRvcDogcHgycmVtKCRkZWx0YSk7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhcmdldGVkIGFuY2hvciAoNDhweCBmcm9tIGhlYWRlciwgMTJweCBmcm9tIHNpZGViYXIgb2Zmc2V0KVxuICAgICAgJjp0YXJnZXQ6OmJlZm9yZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xICogcHgycmVtKDQ4cHggKyAxMnB4ICsgJGRlbHRhKTtcbiAgICAgICAgcGFkZGluZy10b3A6IHB4MnJlbSg0OHB4ICsgMTJweCArICRkZWx0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIGxldmVsc1xuICAgIEBmb3IgJG4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRsZXZlbCkge1xuICAgICAgI3tudGgoJGxldmVsLCAkbil9W2lkXSB7XG4gICAgICAgIEBleHRlbmQgJSN7bnRoKCRsZXZlbCwgMSl9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLWNsYXNzLXBhdHRlcm5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBNYXRoSmF4IGludGVncmF0aW9uIC0gYWRkIHBhZGRpbmcgdG8gb21pdCB2ZXJ0aWNhbCBzY3JvbGxiYXJcbiAgLk1KWGMtZGlzcGxheSB7XG4gICAgbWFyZ2luOiAwLjc1ZW0gMDtcbiAgICBwYWRkaW5nOiAwLjc1ZW0gMDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIH1cblxuICAvLyBTdHJldGNoIHRvcC1sZXZlbCBjb250YWluZXJzXG4gID4gcCA+IC5NSlhjLWRpc3BsYXkge1xuXG4gICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgIEBpbmNsdWRlIGJyZWFrLXRvLWRldmljZShtb2JpbGUpIHtcbiAgICAgIG1hcmdpbjogMC43NWVtIHB4MnJlbSgtMTZweCk7XG4gICAgICBwYWRkaW5nOiAwLjI1ZW0gcHgycmVtKDE2cHgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBvdXRsaW5lIG9uIHRhYiBpbmRleFxuICAuTWF0aEpheF9DSFRNTCB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gRGVsZXRpb25zLCBhZGRpdGlvbnMgYW5kIGNvbW1lbnRzXG4gIGRlbC5jcml0aWMsXG4gIGlucy5jcml0aWMsXG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgbWFyZ2luOiAwIDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjA2MjVlbSAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHB4MnJlbSgycHgpO1xuICAgIGJveC1kZWNvcmF0aW9uLWJyZWFrOiBjbG9uZTtcbiAgfVxuXG4gIC8vIERlbGV0aW9uXG4gIGRlbC5jcml0aWMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2RlaGlsaXRlLWRpZmYtZGVsZXRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkLFxuICAgICAgLTAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1kZWxldGVkO1xuICB9XG5cbiAgLy8gQWRkaXRpb25cbiAgaW5zLmNyaXRpYyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZDtcbiAgICBib3gtc2hhZG93OlxuICAgICAgKzAuMjVlbSAwIDAgJGNvZGVoaWxpdGUtZGlmZi1pbnNlcnRlZCxcbiAgICAgIC0wLjI1ZW0gMCAwICRjb2RlaGlsaXRlLWRpZmYtaW5zZXJ0ZWQ7XG4gIH1cblxuICAvLyBDb21tZW50XG4gIC5jcml0aWMuY29tbWVudCB7XG4gICAgY29sb3I6ICRjb2RlaGlsaXRlLWNvbW1lbnQ7XG5cbiAgICAvLyBDb21tZW50IG9wZW5pbmcgbWFya1xuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIi8qIFwiO1xuICAgIH1cblxuICAgIC8vIENvbW1lbnQgY2xvc2luZyBtYXJrXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgKi9cIjtcbiAgICB9XG4gIH1cblxuICAvLyBCbG9ja1xuICAuY3JpdGljLmJsb2NrIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDFlbSAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSgxNnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IHB4MnJlbSgxNnB4KTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuXG4gICAgLy8gRGVjcmVhc2Ugc3BhY2luZyBvbiBmaXJzdCBlbGVtZW50XG4gICAgOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1xuICAgIH1cblxuICAgIC8vIERlY3JlYXNlIHNwYWNpbmcgb24gbGFzdCBlbGVtZW50XG4gICAgOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBEZXRhaWxzIGV4dGVuc2lvblxuICBkZXRhaWxzIHtcbiAgICBAZXh0ZW5kIC5hZG1vbml0aW9uO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy10b3A6IDA7XG5cbiAgICAvLyBSb3RhdGUgdGl0bGUgaWNvblxuICAgICZbb3Blbl0gPiBzdW1tYXJ5OjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBib3R0b20gc3BhY2luZ1xuICAgICY6bm90KFtvcGVuXSkge1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7XG5cbiAgICAgIC8vIFJlbW92ZSBib3R0b20gYm9yZGVyIGlmIGJsb2NrIGlzIGNsb3NlZFxuICAgICAgPiBzdW1tYXJ5IHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBzcGFjaW5nIHRvIHRoZSByaWdodCAtIHNjb3BlZCBoZXJlIGZvciBoaWdoZXIgc3BlY2lmaWNpdHlcbiAgICBzdW1tYXJ5IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IHB4MnJlbSg0MHB4KTtcblxuICAgICAgLy8gQWRqdXN0IGZvciByaWdodC10by1sZWZ0IGxhbmd1YWdlc1xuICAgICAgW2Rpcj1cInJ0bFwiXSAmIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oNDBweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGl0bGVcbiAgc3VtbWFyeSB7XG4gICAgQGV4dGVuZCAuYWRtb25pdGlvbi10aXRsZTtcblxuICAgIC8vIEhhY2s6IHNldCB0byBibG9jaywgc28gRmlyZWZveCBkb2Vzbid0IHJlbmRlciBtYXJrZXJcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgIC8vIFJlbW92ZSBkZWZhdWx0IGRldGFpbHMgbWFya2VyXG4gICAgJjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC8vIEljb25cbiAgICAmOjphZnRlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogcHgycmVtKDEycHgpO1xuICAgICAgd2lkdGg6IHB4MnJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgycmVtKDIwcHgpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGV2cm9uLWRvd24gfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogaW5pdGlhbDtcbiAgICAgICAgbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gQ29ycmVjdCBhbGlnbm1lbnQgb2YgZW1vamlzXG4gIC5lbW9qaW9uZSxcbiAgLnR3ZW1vamksXG4gIC5nZW1vamkge1xuICAgIHdpZHRoOiBweDJyZW0oMjBweCk7XG4gICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2hlbiBweW1kb3dueC5zdXBlcmZlbmNlcyBpcyBlbmFibGVkIGJ1dCBjb2RlaGlsaXRlIGlzIGRpc2FibGVkLFxuLy8gcHltZG93bnguaGlnaGxpZ2h0IHdpbGwgYmUgdXNlZC4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBvdXRlciBjb250YWluZXJcbi8vIGFuZCB0YWJsZXMgZ2V0IHRoaXMgY2xhc3MgbmFtZXMgYnkgZGVmYXVsdFxuLmhpZ2hsaWdodCB7XG4gIEBleHRlbmQgLmNvZGVoaWxpdGU7XG5cbiAgLy8gSW5saW5lIGxpbmUgbnVtYmVyc1xuICBbZGF0YS1saW5lbm9zXSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICBsZWZ0OiBweDJyZW0oLTEycHgpO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBweDJyZW0oMTJweCk7XG4gICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0xMnB4KTtcbiAgICAgIHBhZGRpbmctbGVmdDogcHgycmVtKDEycHgpO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBweDJyZW0oMXB4KSBzb2xpZCB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBjb2xvcjogdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlcik7XG4gICAgICBjb250ZW50OiBhdHRyKGRhdGEtbGluZW5vcyk7XG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICAgLy8gW21vYmlsZSAtXTogU3RyZXRjaCB0byB3aG9sZSB3aWR0aFxuICAgICAgQGluY2x1ZGUgYnJlYWstdG8tZGV2aWNlKG1vYmlsZSkge1xuICAgICAgICBsZWZ0OiBweDJyZW0oLTMycHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKC0zMnB4KTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBweDJyZW0oMzJweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBmb3IgY29kZSBibG9ja3Mgd2l0aCBsaW5lIG51bWJlcnMgZW5hYmxlZFxuLmhpZ2hsaWdodHRhYmxlIHtcbiAgQGV4dGVuZCAuY29kZWhpbGl0ZXRhYmxlO1xufVxuIiwiLy8vL1xuLy8vIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE1hcnRpbiBEb25hdGggPG1hcnRpbi5kb25hdGhAc3F1aWRmdW5rLmNvbT5cbi8vL1xuLy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxuLy8vIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSxcbi8vLyBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGVcbi8vLyBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy8vXG4vLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vL1xuLy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTExcbi8vLyBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4vLy8gRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUlxuLy8vIERFQUxJTkdTXG4vLy8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNjb3BlZCBpbiB0eXBlc2V0dGVkIGNvbnRlbnQgdG8gbWF0Y2ggc3BlY2lmaWNpdHkgb2YgcmVndWxhciBjb250ZW50XG4ubWQtdHlwZXNldCB7XG5cbiAgLy8gUXVhbGlmaWVkIGNsYXNzIHNlbGVjdG9yIHRvIGRpc3Rpbmd1aXNoIGlubGluZSBjb2RlIGZyb20gY29kZSBibG9ja3NcbiAgY29kZS5jb2RlaGlsaXRlIHtcbiAgICAkY29ycmVjdDogMSAvIDAuODU7XG5cbiAgICBtYXJnaW46IDAgMC4yNWVtICogJGNvcnJlY3Q7XG4gICAgcGFkZGluZzogMC4wNjI1ZW0gKiAkY29ycmVjdCAwO1xuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBUYWJiZWQgY29kZSBibG9jayBjb250ZW50XG4gIC50YWJiZWQtY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBvcmRlcjogOTk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWQtY29kZS1iZy1jb2xvcik7XG5cbiAgICAvLyBBY3R1YWwgY29udGVudFxuICAgIHByZSB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgfVxuICB9XG5cbiAgLy8gVGFiYmVkIGNvZGUgYmxvY2sgY29udGFpbmVyXG4gIC50YWJiZWQtc2V0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luOiAxZW0gMDtcbiAgICBib3JkZXI6IHB4MnJlbSgxcHgpIHNvbGlkIHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0ZXN0KTtcbiAgICBib3JkZXItcmFkaXVzOiBweDJyZW0oMnB4KTtcblxuICAgIC8vIEhpZGUgcmFkaW8gYnV0dG9uc1xuICAgID4gaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgLy8gQWN0aXZlIHRhYiBsYWJlbFxuICAgICAgJjpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLW1kLWFjY2VudC1mZy1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuXG4gICAgICAgIC8vIFNob3cgY29kZSB0YWIgY29udGVudFxuICAgICAgICAmICsgLnRhYmJlZC1jb250ZW50IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiAwIHB4MnJlbSgxMnB4KTtcblxuICAgICAgICAgIC8vIEFkanVzdCBzcGFjaW5nIG9uIGxhc3QgZWxlbWVudFxuICAgICAgICAgID4gOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogcHgycmVtKDEycHgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVtdWxhdGUgb3JpZ2luYWwgcHltZG93bnguc3VwZXJmZW5jZXMgYmVoYXZpb3IgYW5kIHN0cmV0Y2ggdG8gZnVsbFxuICAgICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgd2hlbiBhIGNvZGUgYmxvY2sgaXMgdGhlIG9ubHkgY2hpbGQgb2YgYSB0YWJcbiAgICAgICAgICA+IHtcbiAgICAgICAgICAgIHByZSxcbiAgICAgICAgICAgIC5oaWdobGlnaHQsXG4gICAgICAgICAgICAuaGlnaGxpZ2h0dGFibGUsXG4gICAgICAgICAgICAuY29kZWhpbGl0ZSxcbiAgICAgICAgICAgIC5jb2RlaGlsaXRldGFibGUge1xuICAgICAgICAgICAgICAmOm9ubHktY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCBweDJyZW0oLTEycHgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGRvdWJsZSBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgcHJlIHtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhYiBsYWJlbFxuICAgID4gbGFiZWwge1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBweDJyZW0oMTJweCk7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogcHgycmVtKDEwcHgpO1xuICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgY29sb3IgMTI1bXMsXG4gICAgICAgIGJvcmRlciAyNTBtcztcbiAgICAgIGJvcmRlci1ib3R0b206IHB4MnJlbSgycHgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IHZhcigtLW1kLWRlZmF1bHQtZmctY29sb3ItLWxpZ2h0KTtcbiAgICAgIGZvbnQtc2l6ZTogbXMoLTEpO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgLy8gSG92ZXJlZCB0YWIgbGFiZWxcbiAgICAgIGh0bWwgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1tZC1hY2NlbnQtZmctY29sb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bGwtd2lkdGggY29udGFpbmVyIG9uIHRvcC1sZXZlbFxuICA+IC50YWJiZWQtc2V0IHtcblxuICAgIC8vIFttb2JpbGUgLV06IFN0cmV0Y2ggdG8gd2hvbGUgd2lkdGhcbiAgICBAaW5jbHVkZSBicmVhay10by1kZXZpY2UobW9iaWxlKSB7XG4gICAgICBtYXJnaW46IDFlbSBweDJyZW0oLTE2cHgpO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLXRvcDogcHgycmVtKDFweCkgc29saWQgdmFyKC0tbWQtZGVmYXVsdC1mZy1jb2xvci0tbGlnaHRlc3QpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcblxuICAgICAgLy8gQWN0dWFsIGNvbnRhaW5lciB3aXRoIGNvZGUsIG92ZXJmbG93aW5nXG4gICAgICBjb2RlIHtcbiAgICAgICAgcGFkZGluZzogcHgycmVtKDEwLjVweCkgcHgycmVtKDE2cHgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaXJzdCB0YWIgbGFiZWxcbiAgICAgIGlucHV0OmZpcnN0LWNoaWxkICsgbGFiZWwge1xuICAgICAgICBtYXJnaW4tbGVmdDogcHgycmVtKDRweCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLy8vXG4vLy8gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjAgTWFydGluIERvbmF0aCA8bWFydGluLmRvbmF0aEBzcXVpZGZ1bmsuY29tPlxuLy8vXG4vLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXG4vLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLFxuLy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZVxuLy8vIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLy9cbi8vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8vXG4vLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8vIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vLyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSXG4vLy8gREVBTElOR1Ncbi8vLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU2NvcGVkIGluIHR5cGVzZXR0ZWQgY29udGVudCB0byBtYXRjaCBzcGVjaWZpY2l0eSBvZiByZWd1bGFyIGNvbnRlbnRcbi5tZC10eXBlc2V0IHtcblxuICAvLyBSZW1vdmUgbGlzdCBpY29uIG9uIHRhc2sgaXRlbXNcbiAgLnRhc2stbGlzdC1pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG4gICAgLy8gTWFrZSBjaGVja2JveCBpdGVtcyBhbGlnbiB3aXRoIG5vcm1hbCBsaXN0IGl0ZW1zLCBidXQgcG9zaXRpb25cbiAgICAvLyBldmVyeXRoaW5nIGluIGVtcyBmb3IgY29ycmVjdCBsYXlvdXQgYXQgc21hbGxlciBmb250IHNpemVzXG4gICAgW3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuNDVlbTtcbiAgICAgIGxlZnQ6IC0yZW07XG5cbiAgICAgIC8vIEFkanVzdCBmb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXNcbiAgICAgIFtkaXI9XCJydGxcIl0gJiB7XG4gICAgICAgIHJpZ2h0OiAtMmVtO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgZm9yIGxpc3QgY29udHJvbHMsIGluIGNhc2UgY3VzdG9tIGNoZWNrYm94ZXMgYXJlIGVuYWJsZWRcbiAgLnRhc2stbGlzdC1jb250cm9sIHtcblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gdW5jaGVja2VkIHN0YXRlXG4gICAgLnRhc2stbGlzdC1pbmRpY2F0b3I6OmJlZm9yZSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDAuMTVlbTtcbiAgICAgIGxlZnQ6IHB4MmVtKC0yNHB4KTtcbiAgICAgIHdpZHRoOiBweDJlbSgyMHB4KTtcbiAgICAgIGhlaWdodDogcHgyZW0oMjBweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tZC1kZWZhdWx0LWZnLWNvbG9yLS1saWdodGVzdCk7XG4gICAgICBtYXNrLWltYWdlOiB1cmwoXCJ7eyBjaGVja2JveC1ibGFuay1jaXJjbGUgfX1cIik7XG4gICAgICBjb250ZW50OiBcIlwiO1xuXG4gICAgICAvLyBBZGp1c3QgZm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzXG4gICAgICBbZGlyPVwicnRsXCJdICYge1xuICAgICAgICByaWdodDogcHgyZW0oLTI0cHgpO1xuICAgICAgICBsZWZ0OiBpbml0aWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrYm94IGljb24gaW4gY2hlY2tlZCBzdGF0ZVxuICAgIFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCArIC50YXNrLWxpc3QtaW5kaWNhdG9yOjpiZWZvcmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNsci1ncmVlbi1hNDAwO1xuICAgICAgbWFzay1pbWFnZTogdXJsKFwie3sgY2hlY2stY2lyY2xlIH19XCIpO1xuICAgIH1cblxuICAgIC8vIEhpZGUgb3JpZ2luYWwgY2hlY2tib3ggYmVoaW5kIGljb25cbiAgICBbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB6LWluZGV4OiAtMTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vLy9cbi8vLyBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBNYXJ0aW4gRG9uYXRoIDxtYXJ0aW4uZG9uYXRoQHNxdWlkZnVuay5jb20+XG4vLy9cbi8vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcbi8vLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLy8gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG4vLy8gYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlXG4vLy8gU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vL1xuLy8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLy9cbi8vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMXG4vLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuLy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVJcbi8vLyBERUFMSU5HU1xuLy8vL1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8vXG4vLy8gRGV2aWNlLXNwZWNpZmljIGJyZWFrcG9pbnRzXG4vLy9cbi8vLyBAZXhhbXBsZVxuLy8vICAgJGJyZWFrLWRldmljZXM6IChcbi8vLyAgICAgbW9iaWxlOiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICAyMjBweCAgNDc5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA0ODBweCAgNzE5cHhcbi8vLyAgICAgKSxcbi8vLyAgICAgdGFibGV0OiAoXG4vLy8gICAgICAgcG9ydHJhaXQ6ICA3MjBweCAgOTU5cHgsXG4vLy8gICAgICAgbGFuZHNjYXBlOiA5NjBweCAgMTIxOXB4XG4vLy8gICAgICksXG4vLy8gICAgIHNjcmVlbjogKFxuLy8vICAgICAgIHNtYWxsOiAgICAgMTIyMHB4IDE1OTlweCxcbi8vLyAgICAgICBtZWRpdW06ICAgIDE2MDBweCAxOTk5cHgsXG4vLy8gICAgICAgbGFyZ2U6ICAgICAyMDAwcHhcbi8vLyAgICAgKVxuLy8vICAgKTtcbi8vL1xuJGJyZWFrLWRldmljZXM6ICgpICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vL1xuLy8vIENob29zZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGRldmljZSB3aWR0aHNcbi8vL1xuQGZ1bmN0aW9uIGJyZWFrLXNlbGVjdC1taW4tbWF4KCRkZXZpY2VzKSB7XG4gICRtaW46IDEwMDAwMDA7XG4gICRtYXg6IDA7XG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkZGV2aWNlcyB7XG4gICAgQHdoaWxlIHR5cGUtb2YoJHZhbHVlKSA9PSBtYXAge1xuICAgICAgJHZhbHVlOiBicmVhay1zZWxlY3QtbWluLW1heCgkdmFsdWUpO1xuICAgIH1cbiAgICBAaWYgdHlwZS1vZigkdmFsdWUpID09IGxpc3Qge1xuICAgICAgQGVhY2ggJG51bWJlciBpbiAkdmFsdWUge1xuICAgICAgICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSBudW1iZXIge1xuICAgICAgICAgICRtaW46IG1pbigkbnVtYmVyLCAkbWluKTtcbiAgICAgICAgICBAaWYgJG1heCAhPSBudWxsIHtcbiAgICAgICAgICAgICRtYXg6IG1heCgkbnVtYmVyLCAkbWF4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBlcnJvciBcIkludmFsaWQgbnVtYmVyOiAjeyRudW1iZXJ9XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJHZhbHVlKSA9PSBudW1iZXIge1xuICAgICAgJG1pbjogbWluKCR2YWx1ZSwgJG1pbik7XG4gICAgICAkbWF4OiBudWxsO1xuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCB2YWx1ZTogI3skdmFsdWV9XCI7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJG1pbiwgJG1heDtcbn1cblxuLy8vXG4vLy8gU2VsZWN0IG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzIGZvciBhIGRldmljZSBicmVha3BvaW50XG4vLy9cbkBmdW5jdGlvbiBicmVhay1zZWxlY3QtZGV2aWNlKCRkZXZpY2UpIHtcbiAgJGN1cnJlbnQ6ICRicmVhay1kZXZpY2VzO1xuICBAZm9yICRuIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkZGV2aWNlKSB7XG4gICAgQGlmIHR5cGUtb2YoJGN1cnJlbnQpID09IG1hcCB7XG4gICAgICAkY3VycmVudDogbWFwLWdldCgkY3VycmVudCwgbnRoKCRkZXZpY2UsICRuKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZSBtYXA6ICN7JGRldmljZXN9XCI7XG4gICAgfVxuICB9XG4gIEBpZiB0eXBlLW9mKCRjdXJyZW50KSA9PSBsaXN0IG9yIHR5cGUtb2YoJGN1cnJlbnQpID09IG51bWJlciB7XG4gICAgJGN1cnJlbnQ6IChkZWZhdWx0OiAkY3VycmVudCk7XG4gIH1cbiAgQHJldHVybiBicmVhay1zZWxlY3QtbWluLW1heCgkY3VycmVudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1peGluc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBicmVha3BvaW50XG4vLy9cbkBtaXhpbiBicmVhay1hdCgkYnJlYWtwb2ludCkge1xuICBAaWYgdHlwZS1vZigkYnJlYWtwb2ludCkgPT0gbnVtYmVyIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkYnJlYWtwb2ludCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IGxpc3Qge1xuICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAaWYgdHlwZS1vZigkbWluKSA9PSBudW1iZXIgYW5kIHR5cGUtb2YoJG1heCkgPT0gbnVtYmVyIHtcbiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEFuIG9yaWVudGF0aW9uIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWF0LW9yaWVudGF0aW9uKCRicmVha3BvaW50KSB7XG4gIEBpZiB0eXBlLW9mKCRicmVha3BvaW50KSA9PSBzdHJpbmcge1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChvcmllbnRhdGlvbjogJGJyZWFrcG9pbnQpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBicmVha3BvaW50OiAjeyRicmVha3BvaW50fVwiO1xuICB9XG59XG5cbi8vL1xuLy8vIEEgbWF4aW11bS1hc3BlY3QtcmF0aW8gbWVkaWEgcXVlcnkgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtcmF0aW8oJGJyZWFrcG9pbnQpIHtcbiAgQGlmIHR5cGUtb2YoJGJyZWFrcG9pbnQpID09IG51bWJlciB7XG4gICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC1hc3BlY3QtcmF0aW86ICRicmVha3BvaW50KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgYnJlYWtwb2ludDogI3skYnJlYWtwb2ludH1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0tbWF4aW11bSBtZWRpYSBxdWVyeSBkZXZpY2UgYnJlYWtwb2ludFxuLy8vXG5AbWl4aW4gYnJlYWstYXQtZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICBAaWYgbnRoKCRicmVha3BvaW50LCAyKSAhPSBudWxsIHtcbiAgICAgICRtaW46IG50aCgkYnJlYWtwb2ludCwgMSk7XG4gICAgICAkbWF4OiBudGgoJGJyZWFrcG9pbnQsIDIpO1xuICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZXJyb3IgXCJJbnZhbGlkIGRldmljZTogI3skZGV2aWNlfVwiO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1pbmltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLWZyb20tZGV2aWNlKCRkZXZpY2UpIHtcbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gc3RyaW5nIHtcbiAgICAkZGV2aWNlOiAkZGV2aWNlLDtcbiAgfVxuICBAaWYgdHlwZS1vZigkZGV2aWNlKSA9PSBsaXN0IHtcbiAgICAkYnJlYWtwb2ludDogYnJlYWstc2VsZWN0LWRldmljZSgkZGV2aWNlKTtcbiAgICAkbWluOiBudGgoJGJyZWFrcG9pbnQsIDEpO1xuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4pIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGVycm9yIFwiSW52YWxpZCBkZXZpY2U6ICN7JGRldmljZX1cIjtcbiAgfVxufVxuXG4vLy9cbi8vLyBBIG1heGltdW0gbWVkaWEgcXVlcnkgZGV2aWNlIGJyZWFrcG9pbnRcbi8vL1xuQG1peGluIGJyZWFrLXRvLWRldmljZSgkZGV2aWNlKSB7XG4gIEBpZiB0eXBlLW9mKCRkZXZpY2UpID09IHN0cmluZyB7XG4gICAgJGRldmljZTogJGRldmljZSw7XG4gIH1cbiAgQGlmIHR5cGUtb2YoJGRldmljZSkgPT0gbGlzdCB7XG4gICAgJGJyZWFrcG9pbnQ6IGJyZWFrLXNlbGVjdC1kZXZpY2UoJGRldmljZSk7XG4gICAgJG1heDogbnRoKCRicmVha3BvaW50LCAyKTtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgIEBlcnJvciBcIkludmFsaWQgZGV2aWNlOiAjeyRkZXZpY2V9XCI7XG4gIH1cbn1cbiJdfQ== */ \ No newline at end of file diff --git a/material/base.html b/material/base.html index 366e28342..34340f8cd 100644 --- a/material/base.html +++ b/material/base.html @@ -179,7 +179,7 @@ {% endblock %} {% block scripts %} - + {%- set translations = {} -%} {%- for key in [ "clipboard.copy",