@mideind/netskrafl-react 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.eslintignore +8 -0
  2. package/.eslintrc.json +13 -0
  3. package/README.md +63 -0
  4. package/dist/cjs/index.css +6837 -0
  5. package/dist/cjs/index.js +3046 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/esm/index.css +6837 -0
  8. package/dist/esm/index.js +3046 -0
  9. package/dist/esm/index.js.map +1 -0
  10. package/dist/types.d.ts +41 -0
  11. package/package.json +63 -0
  12. package/rollup.config.js +60 -0
  13. package/src/components/index.ts +2 -0
  14. package/src/components/netskrafl/Netskrafl.stories.tsx +66 -0
  15. package/src/components/netskrafl/Netskrafl.tsx +135 -0
  16. package/src/components/netskrafl/Netskrafl.types.ts +7 -0
  17. package/src/components/netskrafl/index.ts +2 -0
  18. package/src/css/fonts.css +4 -0
  19. package/src/css/glyphs.css +224 -0
  20. package/src/css/skrafl-explo.css +6616 -0
  21. package/src/fonts/glyphicons-regular.eot +0 -0
  22. package/src/fonts/glyphicons-regular.ttf +0 -0
  23. package/src/fonts/glyphicons-regular.woff +0 -0
  24. package/src/index.ts +2 -0
  25. package/src/messages/messages.json +1576 -0
  26. package/src/mithril/actions.ts +319 -0
  27. package/src/mithril/bag.ts +65 -0
  28. package/src/mithril/bestdisplay.ts +74 -0
  29. package/src/mithril/blankdialog.ts +94 -0
  30. package/src/mithril/board.ts +336 -0
  31. package/src/mithril/buttons.ts +303 -0
  32. package/src/mithril/challengedialog.ts +186 -0
  33. package/src/mithril/channel.ts +162 -0
  34. package/src/mithril/chat.ts +228 -0
  35. package/src/mithril/components.ts +496 -0
  36. package/src/mithril/dragdrop.ts +219 -0
  37. package/src/mithril/elopage.ts +180 -0
  38. package/src/mithril/friend.ts +227 -0
  39. package/src/mithril/game.ts +1378 -0
  40. package/src/mithril/gameview.ts +111 -0
  41. package/src/mithril/globalstate.ts +33 -0
  42. package/src/mithril/i18n.ts +186 -0
  43. package/src/mithril/localstorage.ts +133 -0
  44. package/src/mithril/login.ts +122 -0
  45. package/src/mithril/logo.ts +270 -0
  46. package/src/mithril/main.ts +737 -0
  47. package/src/mithril/mithril.ts +29 -0
  48. package/src/mithril/model.ts +817 -0
  49. package/src/mithril/movelistitem.ts +226 -0
  50. package/src/mithril/page.ts +852 -0
  51. package/src/mithril/playername.ts +91 -0
  52. package/src/mithril/promodialog.ts +82 -0
  53. package/src/mithril/recentlist.ts +148 -0
  54. package/src/mithril/request.ts +52 -0
  55. package/src/mithril/review.ts +634 -0
  56. package/src/mithril/rightcolumn.ts +398 -0
  57. package/src/mithril/searchbutton.ts +118 -0
  58. package/src/mithril/statsdisplay.ts +109 -0
  59. package/src/mithril/tabs.ts +169 -0
  60. package/src/mithril/tile.ts +145 -0
  61. package/src/mithril/twoletter.ts +76 -0
  62. package/src/mithril/types.ts +379 -0
  63. package/src/mithril/userinfodialog.ts +171 -0
  64. package/src/mithril/util.ts +304 -0
  65. package/src/mithril/wait.ts +246 -0
  66. package/src/mithril/wordcheck.ts +102 -0
  67. package/tsconfig.json +28 -0
  68. package/vite.config.ts +12 -0
@@ -0,0 +1,3046 @@
1
+ "use strict";var e,t,n,i,o,r,s,a,l,c,d,h,u,p,g,f,m,v,b,w,x,y,_,k,C,I,T,S,E,P,L,R,N,D,A,O,M,F,z,U,j,q,B,V,H,$,W=require("react/jsx-runtime"),G=require("react");function K(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Y(){if(t)return e;function n(e,t,n,i,o,r){return{tag:e,key:t,attrs:n,children:i,text:o,dom:r,domSize:void 0,state:void 0,events:void 0,instance:void 0}}return t=1,n.normalize=function(e){return Array.isArray(e)?n("[",void 0,void 0,n.normalizeChildren(e),void 0,void 0):null==e||"boolean"==typeof e?null:"object"==typeof e?e:n("#",void 0,void 0,String(e),void 0,void 0)},n.normalizeChildren=function(e){var t=[];if(e.length){for(var i=null!=e[0]&&null!=e[0].key,o=1;o<e.length;o++)if((null!=e[o]&&null!=e[o].key)!==i)throw new TypeError(!i||null==e[o]&&"boolean"!=typeof e[o]?"In fragments, vnodes must either all have keys or none have keys.":"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.");for(o=0;o<e.length;o++)t[o]=n.normalize(e[o])}return t},e=n}function J(){if(i)return n;i=1;var e=Y();return n=function(){var t,n=arguments[this],i=this+1;if(null==n?n={}:("object"!=typeof n||null!=n.tag||Array.isArray(n))&&(n={},i=this),arguments.length===i+1)t=arguments[i],Array.isArray(t)||(t=[t]);else for(t=[];i<arguments.length;)t.push(arguments[i++]);return e("",n.key,n,t)},n}function Q(){return r?o:(r=1,o={}.hasOwnProperty)}function X(){if(a)return s;a=1;var e=Y(),t=J(),n=Q(),i=/(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g,o=Object.create(null);function r(e){for(var t,r="div",s=[],a={};t=i.exec(e);){var l=t[1],c=t[2];if(""===l&&""!==c)r=c;else if("#"===l)a.id=c;else if("."===l)s.push(c);else if("["===t[3][0]){var d=t[6];d&&(d=d.replace(/\\(["'])/g,"$1").replace(/\\\\/g,"\\")),"class"===t[4]?s.push(d):a[t[4]]=""===d?d:d||!0}}return s.length>0&&(a.className=s.join(" ")),function(e){for(var t in e)if(n.call(e,t))return!1;return!0}(a)&&(a=null),o[e]={tag:r,attrs:a}}return s=function(i){if(null==i||"string"!=typeof i&&"function"!=typeof i&&"function"!=typeof i.view)throw Error("The selector must be either a string or a component.");var s=t.apply(1,arguments);return"string"==typeof i&&(s.children=e.normalizeChildren(s.children),"["!==i)?function(e,t){var i=t.attrs,o=n.call(i,"class"),r=o?i.class:i.className;return t.tag=e.tag,null!=e.attrs?(i=Object.assign({},e.attrs,i),null==r&&null==e.attrs.className||(i.className=null!=r?null!=e.attrs.className?String(e.attrs.className)+" "+String(r):r:null!=e.attrs.className?e.attrs.className:null)):null!=r&&(i.className=r),o&&(i.class=null),"input"===e.tag&&n.call(i,"type")&&(i=Object.assign({type:i.type},i)),t.attrs=i,t}(o[i]||r(i),s):(s.tag=i,s)},s}function Z(){if(p)return u;p=1;var e=X();return e.trust=function(){if(c)return l;c=1;var e=Y();return l=function(t){return null==t&&(t=""),e("<",void 0,void 0,t,void 0,void 0)}}(),e.fragment=function(){if(h)return d;h=1;var e=Y(),t=J();return d=function(){var n=t.apply(0,arguments);return n.tag="[",n.children=e.normalizeChildren(n.children),n},d}(),u=e}function ee(){if(f)return g;f=1;var e=new WeakMap;return g={delayedRemoval:e,domFor:function*(t,n={}){var i=t.dom,o=t.domSize,r=n.generation;if(null!=i)do{var s=i.nextSibling;e.get(i)===r&&(yield i,o--),i=s}while(o)}},g}function te(){if(v)return m;v=1;var e=Y(),t=ee(),n=t.delayedRemoval,i=t.domFor;return m=function(){var t,o,r={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"};function s(e){return e.ownerDocument}function a(e){return e.attrs&&e.attrs.xmlns||r[e.tag]}function l(e,t){if(e.state!==t)throw new Error("'vnode.state' must not be modified.")}function c(e){var t=e.state;try{return this.apply(t,arguments)}finally{l(e,t)}}function d(e){try{return s(e).activeElement}catch(e){return null}}function h(e,t,n,i,o,r,s){for(var a=n;a<i;a++){var l=t[a];null!=l&&u(e,l,o,s,r)}}function u(t,n,i,o,r){var l=n.tag;if("string"==typeof l)switch(n.state={},null!=n.attrs&&O(n.attrs,n,i),l){case"#":!function(e,t,n){t.dom=s(e).createTextNode(t.children),_(e,t.dom,n)}(t,n,r);break;case"<":g(t,n,o,r);break;case"[":!function(e,t,n,i,o){var r=s(e).createDocumentFragment();if(null!=t.children){var a=t.children;h(r,a,0,a.length,n,null,i)}t.dom=r.firstChild,t.domSize=r.childNodes.length,_(e,r,o)}(t,n,i,o,r);break;default:!function(e,t,n,i,o){var r=t.tag,l=t.attrs,c=l&&l.is;i=a(t)||i;var d=i?c?s(e).createElementNS(i,r,{is:c}):s(e).createElementNS(i,r):c?s(e).createElement(r,{is:c}):s(e).createElement(r);t.dom=d,null!=l&&function(e,t,n){for(var i in t)E(e,i,null,t[i],n)}(t,l,i);if(_(e,d,o),!k(t)&&null!=t.children){var u=t.children;h(d,u,0,u.length,n,null,i),"select"===t.tag&&null!=l&&function(e,t){if("value"in t)if(null===t.value)-1!==e.dom.selectedIndex&&(e.dom.value=null);else{var n=""+t.value;e.dom.value===n&&-1!==e.dom.selectedIndex||(e.dom.value=n)}"selectedIndex"in t&&E(e,"selectedIndex",null,t.selectedIndex,void 0)}(t,l)}}(t,n,i,o,r)}else!function(t,n,i,o,r){(function(t,n){var i;if("function"==typeof t.tag.view){if(t.state=Object.create(t.tag),null!=(i=t.state.view).$$reentrantLock$$)return;i.$$reentrantLock$$=!0}else{if(t.state=void 0,null!=(i=t.tag).$$reentrantLock$$)return;i.$$reentrantLock$$=!0,t.state=null!=t.tag.prototype&&"function"==typeof t.tag.prototype.view?new t.tag(t):t.tag(t)}O(t.state,t,n),null!=t.attrs&&O(t.attrs,t,n);if(t.instance=e.normalize(c.call(t.state.view,t)),t.instance===t)throw Error("A view cannot return the vnode it received as argument");i.$$reentrantLock$$=null})(n,i),null!=n.instance?(u(t,n.instance,i,o,r),n.dom=n.instance.dom,n.domSize=null!=n.dom?n.instance.domSize:0):n.domSize=0}(t,n,i,o,r)}var p={caption:"table",thead:"table",tbody:"table",tfoot:"table",tr:"tbody",th:"tr",td:"tr",colgroup:"table",col:"colgroup"};function g(e,t,n,i){var o=t.children.match(/^\s*?<(\w+)/im)||[],r=s(e).createElement(p[o[1]]||"div");"http://www.w3.org/2000/svg"===n?(r.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+t.children+"</svg>",r=r.firstChild):r.innerHTML=t.children,t.dom=r.firstChild,t.domSize=r.childNodes.length;for(var a,l=s(e).createDocumentFragment();a=r.firstChild;)l.appendChild(a);_(e,l,i)}function f(e,t,n,i,o,r){if(t!==n&&(null!=t||null!=n))if(null==t||0===t.length)h(e,n,0,n.length,i,o,r);else if(null==n||0===n.length)C(e,t,0,t.length);else{var s=null!=t[0]&&null!=t[0].key,a=null!=n[0]&&null!=n[0].key,l=0,c=0;if(!s)for(;c<t.length&&null==t[c];)c++;if(!a)for(;l<n.length&&null==n[l];)l++;if(s!==a)C(e,t,c,t.length),h(e,n,l,n.length,i,o,r);else if(a){for(var d,p,g,f,b,_=t.length-1,k=n.length-1;_>=c&&k>=l&&(g=t[_],f=n[k],g.key===f.key);)g!==f&&m(e,g,f,i,o,r),null!=f.dom&&(o=f.dom),_--,k--;for(;_>=c&&k>=l&&(d=t[c],p=n[l],d.key===p.key);)c++,l++,d!==p&&m(e,d,p,i,x(t,c,o),r);for(;_>=c&&k>=l&&l!==k&&d.key===f.key&&g.key===p.key;)y(e,g,b=x(t,c,o)),g!==p&&m(e,g,p,i,b,r),++l<=--k&&y(e,d,o),d!==f&&m(e,d,f,i,o,r),null!=f.dom&&(o=f.dom),c++,g=t[--_],f=n[k],d=t[c],p=n[l];for(;_>=c&&k>=l&&g.key===f.key;)g!==f&&m(e,g,f,i,o,r),null!=f.dom&&(o=f.dom),k--,g=t[--_],f=n[k];if(l>k)C(e,t,c,_+1);else if(c>_)h(e,n,l,k+1,i,o,r);else{var T,S,E=o,P=k-l+1,L=new Array(P),R=0,N=0,D=2147483647,A=0;for(N=0;N<P;N++)L[N]=-1;for(N=k;N>=l;N--){null==T&&(T=v(t,c,_+1));var O=T[(f=n[N]).key];null!=O&&(D=O<D?O:-1,L[N-l]=O,g=t[O],t[O]=null,g!==f&&m(e,g,f,i,o,r),null!=f.dom&&(o=f.dom),A++)}if(o=E,A!==_-c+1&&C(e,t,c,_+1),0===A)h(e,n,l,k+1,i,o,r);else if(-1===D)for(S=function(e){var t=[0],n=0,i=0,o=0,r=w.length=e.length;for(o=0;o<r;o++)w[o]=e[o];for(o=0;o<r;++o)if(-1!==e[o]){var s=t[t.length-1];if(e[s]<e[o])w[o]=s,t.push(o);else{for(n=0,i=t.length-1;n<i;){var a=(n>>>1)+(i>>>1)+(n&i&1);e[t[a]]<e[o]?n=a+1:i=a}e[o]<e[t[n]]&&(n>0&&(w[o]=t[n-1]),t[n]=o)}}n=t.length,i=t[n-1];for(;n-- >0;)t[n]=i,i=w[i];return w.length=0,t}(L),R=S.length-1,N=k;N>=l;N--)p=n[N],-1===L[N-l]?u(e,p,i,r,o):S[R]===N-l?R--:y(e,p,o),null!=p.dom&&(o=n[N].dom);else for(N=k;N>=l;N--)p=n[N],-1===L[N-l]&&u(e,p,i,r,o),null!=p.dom&&(o=n[N].dom)}}else{var M=t.length<n.length?t.length:n.length;for(l=l<c?l:c;l<M;l++)(d=t[l])===(p=n[l])||null==d&&null==p||(null==d?u(e,p,i,r,x(t,l+1,o)):null==p?I(e,d):m(e,d,p,i,x(t,l+1,o),r));t.length>M&&C(e,t,l,t.length),n.length>M&&h(e,n,l,n.length,i,o,r)}}}function m(t,n,i,o,r,s){var l=n.tag;if(l===i.tag){if(i.state=n.state,i.events=n.events,function(e,t){do{var n;if(null!=e.attrs&&"function"==typeof e.attrs.onbeforeupdate)if(void 0!==(n=c.call(e.attrs.onbeforeupdate,e,t))&&!n)break;if("string"!=typeof e.tag&&"function"==typeof e.state.onbeforeupdate)if(void 0!==(n=c.call(e.state.onbeforeupdate,e,t))&&!n)break;return!1}while(0);return e.dom=t.dom,e.domSize=t.domSize,e.instance=t.instance,e.attrs=t.attrs,e.children=t.children,e.text=t.text,!0}(i,n))return;if("string"==typeof l)switch(null!=i.attrs&&M(i.attrs,i,o),l){case"#":!function(e,t){e.children.toString()!==t.children.toString()&&(e.dom.nodeValue=t.children);t.dom=e.dom}(n,i);break;case"<":!function(e,t,n,i,o){t.children!==n.children?(T(e,t,void 0),g(e,n,i,o)):(n.dom=t.dom,n.domSize=t.domSize)}(t,n,i,s,r);break;case"[":!function(e,t,n,i,o,r){f(e,t.children,n.children,i,o,r);var s=0,a=n.children;if(n.dom=null,null!=a){for(var l=0;l<a.length;l++){var c=a[l];null!=c&&null!=c.dom&&(null==n.dom&&(n.dom=c.dom),s+=c.domSize||1)}1!==s&&(n.domSize=s)}}(t,n,i,o,r,s);break;default:!function(e,t,n,i){var o=t.dom=e.dom;i=a(t)||i,function(e,t,n,i){t&&t===n&&console.warn("Don't reuse attrs object, use new object for every redraw, this will throw in next major");if(null!=n)for(var o in n)E(e,o,t&&t[o],n[o],i);var r;if(null!=t)for(var o in t)null==(r=t[o])||null!=n&&null!=n[o]||P(e,o,r,i)}(t,e.attrs,t.attrs,i),k(t)||f(o,e.children,t.children,n,null,i)}(n,i,o,s)}else!function(t,n,i,o,r,s){if(i.instance=e.normalize(c.call(i.state.view,i)),i.instance===i)throw Error("A view cannot return the vnode it received as argument");M(i.state,i,o),null!=i.attrs&&M(i.attrs,i,o);null!=i.instance?(null==n.instance?u(t,i.instance,o,s,r):m(t,n.instance,i.instance,o,r,s),i.dom=i.instance.dom,i.domSize=i.instance.domSize):null!=n.instance?(I(t,n.instance),i.dom=void 0,i.domSize=0):(i.dom=n.dom,i.domSize=n.domSize)}(t,n,i,o,r,s)}else I(t,n),u(t,i,o,s,r)}function v(e,t,n){for(var i=Object.create(null);t<n;t++){var o=e[t];if(null!=o){var r=o.key;null!=r&&(i[r]=t)}}return i}var b,w=[];function x(e,t,n){for(;t<e.length;t++)if(null!=e[t]&&null!=e[t].dom)return e[t].dom;return n}function y(e,t,n){if(null!=t.dom){var o;if(null==t.domSize)o=t.dom;else for(var r of(o=s(e).createDocumentFragment(),i(t)))o.appendChild(r);_(e,o,n)}}function _(e,t,n){null!=n?e.insertBefore(t,n):e.appendChild(t)}function k(e){if(null==e.attrs||null==e.attrs.contenteditable&&null==e.attrs.contentEditable)return!1;var t=e.children;if(null!=t&&1===t.length&&"<"===t[0].tag){var n=t[0].children;e.dom.innerHTML!==n&&(e.dom.innerHTML=n)}else if(null!=t&&0!==t.length)throw new Error("Child node of a contenteditable must be trusted.");return!0}function C(e,t,n,i){for(var o=n;o<i;o++){var r=t[o];null!=r&&I(e,r)}}function I(e,t){var r,s,a,d,h=0,u=t.state;"string"!=typeof t.tag&&"function"==typeof t.state.onbeforeremove&&(null!=(a=c.call(t.state.onbeforeremove,t))&&"function"==typeof a.then&&(h=1,r=a));t.attrs&&"function"==typeof t.attrs.onbeforeremove&&(null!=(a=c.call(t.attrs.onbeforeremove,t))&&"function"==typeof a.then&&(h|=2,s=a));if(l(t,u),h){for(var p of(d=o,i(t)))n.set(p,d);null!=r&&r.finally((function(){1&h&&((h&=2)||(l(t,u),S(t),T(e,t,d)))})),null!=s&&s.finally((function(){2&h&&((h&=1)||(l(t,u),S(t),T(e,t,d)))}))}else S(t),T(e,t,d)}function T(e,t,o){if(null!=t.dom)if(null==t.domSize)n.get(t.dom)===o&&e.removeChild(t.dom);else for(var r of i(t,{generation:o}))e.removeChild(r)}function S(e){if("string"!=typeof e.tag&&"function"==typeof e.state.onremove&&c.call(e.state.onremove,e),e.attrs&&"function"==typeof e.attrs.onremove&&c.call(e.attrs.onremove,e),"string"!=typeof e.tag)null!=e.instance&&S(e.instance);else{var t=e.children;if(Array.isArray(t))for(var n=0;n<t.length;n++){var i=t[n];null!=i&&S(i)}}}function E(e,t,n,i,o){if("key"!==t&&"is"!==t&&null!=i&&!L(t)&&(n!==i||function(e,t){return"value"===t||"checked"===t||"selectedIndex"===t||"selected"===t&&e.dom===d(e.dom)||"option"===e.tag&&e.dom.parentNode===d(e.dom)}(e,t)||"object"==typeof i)){if("o"===t[0]&&"n"===t[1])return A(e,t,i);if("xlink:"===t.slice(0,6))e.dom.setAttributeNS("http://www.w3.org/1999/xlink",t.slice(6),i);else if("style"===t)N(e.dom,n,i);else if(R(e,t,o)){if("value"===t){var r="input"===e.tag&&"file"===e.attrs.type;if(("input"===e.tag||"textarea"===e.tag)&&e.dom.value===""+i&&(r||e.dom===d(e.dom)))return;if("select"===e.tag&&null!==n&&e.dom.value===""+i)return;if("option"===e.tag&&null!==n&&e.dom.value===""+i)return;if(r&&""+i!="")return void console.error("`value` is read-only on file inputs!")}"input"===e.tag&&"type"===t?e.dom.setAttribute(t,i):e.dom[t]=i}else"boolean"==typeof i?i?e.dom.setAttribute(t,""):e.dom.removeAttribute(t):e.dom.setAttribute("className"===t?"class":t,i)}}function P(e,t,n,i){if("key"!==t&&"is"!==t&&null!=n&&!L(t))if("o"===t[0]&&"n"===t[1])A(e,t,void 0);else if("style"===t)N(e.dom,n,null);else if(!R(e,t,i)||"className"===t||"title"===t||"value"===t&&("option"===e.tag||"select"===e.tag&&-1===e.dom.selectedIndex&&e.dom===d(e.dom))||"input"===e.tag&&"type"===t){var o=t.indexOf(":");-1!==o&&(t=t.slice(o+1)),!1!==n&&e.dom.removeAttribute("className"===t?"class":t)}else e.dom[t]=null}function L(e){return"oninit"===e||"oncreate"===e||"onupdate"===e||"onremove"===e||"onbeforeremove"===e||"onbeforeupdate"===e}function R(e,t,n){return void 0===n&&(e.tag.indexOf("-")>-1||null!=e.attrs&&e.attrs.is||"href"!==t&&"list"!==t&&"form"!==t&&"width"!==t&&"height"!==t)&&t in e.dom}function N(e,t,n){if(t===n);else if(null==n)e.style="";else if("object"!=typeof n)e.style=n;else if(null==t||"object"!=typeof t)for(var i in e.style.cssText="",n){null!=(o=n[i])&&("-"===i[0]&&"-"===i[1]?e.style.setProperty(i,String(o)):e.style[i]=String(o))}else{for(var i in n){var o;null!=(o=n[i])&&(o=String(o))!==String(t[i])&&("-"===i[0]&&"-"===i[1]?e.style.setProperty(i,o):e.style[i]=o)}for(var i in t)null!=t[i]&&null==n[i]&&("-"===i[0]&&"-"===i[1]?e.style.removeProperty(i):e.style[i]="")}}function D(){this._=t}function A(e,n,i){if(null!=e.events){if(e.events._=t,e.events[n]===i)return;null==i||"function"!=typeof i&&"object"!=typeof i?(null!=e.events[n]&&e.dom.removeEventListener(n.slice(2),e.events,!1),e.events[n]=void 0):(null==e.events[n]&&e.dom.addEventListener(n.slice(2),e.events,!1),e.events[n]=i)}else null==i||"function"!=typeof i&&"object"!=typeof i||(e.events=new D,e.dom.addEventListener(n.slice(2),e.events,!1),e.events[n]=i)}function O(e,t,n){"function"==typeof e.oninit&&c.call(e.oninit,t),"function"==typeof e.oncreate&&n.push(c.bind(e.oncreate,t))}function M(e,t,n){"function"==typeof e.onupdate&&n.push(c.bind(e.onupdate,t))}return D.prototype=Object.create(null),D.prototype.handleEvent=function(e){var t,n=this["on"+e.type];"function"==typeof n?t=n.call(e.currentTarget,e):"function"==typeof n.handleEvent&&n.handleEvent(e),this._&&!1!==e.redraw&&(0,this._)(),!1===t&&(e.preventDefault(),e.stopPropagation())},function(n,i,r){if(!n)throw new TypeError("DOM element being rendered to does not exist.");if(null!=b&&n.contains(b))throw new TypeError("Node is currently being rendered to and thus is locked.");var s=t,a=b,l=[],c=d(n),h=n.namespaceURI;b=n,t="function"==typeof r?r:void 0,o={};try{null==n.vnodes&&(n.textContent=""),i=e.normalizeChildren(Array.isArray(i)?i:[i]),f(n,n.vnodes,i,l,null,"http://www.w3.org/1999/xhtml"===h?void 0:h),n.vnodes=i,null!=c&&d(n)!==c&&"function"==typeof c.focus&&c.focus();for(var u=0;u<l.length;u++)l[u]()}finally{t=s,b=a}}},m}function ne(){return w?b:(w=1,b=te()("undefined"!=typeof window?window:null))}function ie(){if(k)return _;k=1;var e=ne();return _=function(){if(y)return x;y=1;var e=Y();return x=function(t,n,i){var o=[],r=!1,s=-1;function a(){for(s=0;s<o.length;s+=2)try{t(o[s],e(o[s+1]),l)}catch(e){i.error(e)}s=-1}function l(){r||(r=!0,n((function(){r=!1,a()})))}return l.sync=a,{mount:function(n,i){if(null!=i&&null==i.view&&"function"!=typeof i)throw new TypeError("m.mount expects a component, not a vnode.");var r=o.indexOf(n);r>=0&&(o.splice(r,2),r<=s&&(s-=2),t(n,[])),null!=i&&(o.push(n,i),t(n,e(i),l))},redraw:l}},x}()(e,"undefined"!=typeof requestAnimationFrame?requestAnimationFrame:null,"undefined"!=typeof console?console:null),_}function oe(){return I?C:(I=1,C=function(e){if("[object Object]"!==Object.prototype.toString.call(e))return"";var t=[];for(var n in e)i(n,e[n]);return t.join("&");function i(e,n){if(Array.isArray(n))for(var o=0;o<n.length;o++)i(e+"["+o+"]",n[o]);else if("[object Object]"===Object.prototype.toString.call(n))for(var o in n)i(e+"["+o+"]",n[o]);else t.push(encodeURIComponent(e)+(null!=n&&""!==n?"="+encodeURIComponent(n):""))}})}function re(){if(S)return T;S=1;var e=oe();return T=function(t,n){if(/:([^\/\.-]+)(\.{3})?:/.test(t))throw new SyntaxError("Template parameter names must be separated by either a '/', '-', or '.'.");if(null==n)return t;var i=t.indexOf("?"),o=t.indexOf("#"),r=o<0?t.length:o,s=i<0?r:i,a=t.slice(0,s),l={};Object.assign(l,n);var c=a.replace(/:([^\/\.-]+)(\.{3})?/g,(function(e,t,i){return delete l[t],null==n[t]?e:i?n[t]:encodeURIComponent(String(n[t]))})),d=c.indexOf("?"),h=c.indexOf("#"),u=h<0?c.length:h,p=d<0?u:d,g=c.slice(0,p);i>=0&&(g+=t.slice(i,r)),d>=0&&(g+=(i<0?"?":"&")+c.slice(d,u));var f=e(l);return f&&(g+=(i<0&&d<0?"?":"&")+f),o>=0&&(g+=t.slice(o)),h>=0&&(g+=(o<0?"":"&")+c.slice(h)),g},T}function se(){if(P)return E;P=1;var e=re(),t=Q();return E=function(n,i){function o(e){return new Promise(e)}function r(e,n){for(var i in e.headers)if(t.call(e.headers,i)&&i.toLowerCase()===n)return!0;return!1}return o.prototype=Promise.prototype,o.__proto__=Promise,{request:function(s,a){"string"!=typeof s?(a=s,s=s.url):null==a&&(a={});var l=function(i,o){return new Promise((function(s,a){i=e(i,o.params);var l,c=null!=o.method?o.method.toUpperCase():"GET",d=o.body,h=(null==o.serialize||o.serialize===JSON.serialize)&&!(d instanceof n.FormData||d instanceof n.URLSearchParams),u=o.responseType||("function"==typeof o.extract?"":"json"),p=new n.XMLHttpRequest,g=!1,f=!1,m=p,v=p.abort;for(var b in p.abort=function(){g=!0,v.call(this)},p.open(c,i,!1!==o.async,"string"==typeof o.user?o.user:void 0,"string"==typeof o.password?o.password:void 0),h&&null!=d&&!r(o,"content-type")&&p.setRequestHeader("Content-Type","application/json; charset=utf-8"),"function"==typeof o.deserialize||r(o,"accept")||p.setRequestHeader("Accept","application/json, text/*"),o.withCredentials&&(p.withCredentials=o.withCredentials),o.timeout&&(p.timeout=o.timeout),p.responseType=u,o.headers)t.call(o.headers,b)&&p.setRequestHeader(b,o.headers[b]);p.onreadystatechange=function(e){if(!g&&4===e.target.readyState)try{var t,n=e.target.status>=200&&e.target.status<300||304===e.target.status||/^file:\/\//i.test(i),r=e.target.response;if("json"===u){if(!e.target.responseType&&"function"!=typeof o.extract)try{r=JSON.parse(e.target.responseText)}catch(e){r=null}}else u&&"text"!==u||null==r&&(r=e.target.responseText);if("function"==typeof o.extract?(r=o.extract(e.target,o),n=!0):"function"==typeof o.deserialize&&(r=o.deserialize(r)),n){if("function"==typeof o.type)if(Array.isArray(r))for(var l=0;l<r.length;l++)r[l]=new o.type(r[l]);else r=new o.type(r);s(r)}else{var c=function(){try{t=e.target.responseText}catch(e){t=r}var n=new Error(t);n.code=e.target.status,n.response=r,a(n)};0===p.status?setTimeout((function(){f||c()})):c()}}catch(e){a(e)}},p.ontimeout=function(e){f=!0;var t=new Error("Request timed out");t.code=e.target.status,a(t)},"function"==typeof o.config&&(p=o.config(p,o,i)||p)!==m&&(l=p.abort,p.abort=function(){g=!0,l.call(this)}),null==d?p.send():"function"==typeof o.serialize?p.send(o.serialize(d)):d instanceof n.FormData||d instanceof n.URLSearchParams?p.send(d):p.send(JSON.stringify(d))}))}(s,a);if(!0===a.background)return l;var c=0;function d(){0==--c&&"function"==typeof i&&i()}return function e(t){var n=t.then;return t.constructor=o,t.then=function(){c++;var i=n.apply(t,arguments);return i.then(d,(function(e){if(d(),0===c)throw e})),e(i)},t}(l)}}},E}function ae(){if(D)return N;function e(e){try{return decodeURIComponent(e)}catch(t){return e}}return D=1,N=function(t){if(""===t||null==t)return{};"?"===t.charAt(0)&&(t=t.slice(1));for(var n=t.split("&"),i={},o={},r=0;r<n.length;r++){var s=n[r].split("="),a=e(s[0]),l=2===s.length?e(s[1]):"";"true"===l?l=!0:"false"===l&&(l=!1);var c=a.split(/\]\[?|\[/),d=o;a.indexOf("[")>-1&&c.pop();for(var h=0;h<c.length;h++){var u=c[h],p=c[h+1],g=""==p||!isNaN(parseInt(p,10));if(""===u)null==i[a=c.slice(0,h).join()]&&(i[a]=Array.isArray(d)?d.length:0),u=i[a]++;else if("__proto__"===u)break;if(h===c.length-1)d[u]=l;else{var f=Object.getOwnPropertyDescriptor(d,u);null!=f&&(f=f.value),null==f&&(d[u]=f=g?[]:{}),d=f}}}return o}}function le(){if(O)return A;O=1;var e=ae();return A=function(t){var n=t.indexOf("?"),i=t.indexOf("#"),o=i<0?t.length:i,r=n<0?o:n,s=t.slice(0,r).replace(/\/{2,}/g,"/");return s?"/"!==s[0]&&(s="/"+s):s="/",{path:s,params:n<0?{}:e(t.slice(n+1,o))}}}function ce(){if(F)return M;F=1;var e=le();return M=function(t){var n=e(t),i=Object.keys(n.params),o=[],r=new RegExp("^"+n.path.replace(/:([^\/.-]+)(\.{3}|\.(?!\.)|-)?|[\\^$*+.()|\[\]{}]/g,(function(e,t,n){return null==t?"\\"+e:(o.push({k:t,r:"..."===n}),"..."===n?"(.*)":"."===n?"([^/]+)\\.":"([^/]+)"+(n||""))}))+"$");return function(e){for(var t=0;t<i.length;t++)if(n.params[i[t]]!==e.params[i[t]])return!1;if(!o.length)return r.test(e.path);var s=r.exec(e.path);if(null==s)return!1;for(t=0;t<o.length;t++)e.params[o[t].k]=o[t].r?s[t+1]:decodeURIComponent(s[t+1]);return!0}},M}function de(){if(U)return z;U=1;var e=Q(),t=new RegExp("^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$");return z=function(n,i){var o={};if(null!=i)for(var r in n)e.call(n,r)&&!t.test(r)&&i.indexOf(r)<0&&(o[r]=n[r]);else for(var r in n)e.call(n,r)&&!t.test(r)&&(o[r]=n[r]);return o}}function he(){if(V)return B;V=1;var e=ie();return B=function(){if(q)return j;q=1;var e=Y(),t=X(),n=re(),i=le(),o=ce(),r=de(),s={};function a(e){try{return decodeURIComponent(e)}catch(t){return e}}return j=function(l,c){var d,h,u,p,g,f,m=null==l?null:"function"==typeof l.setImmediate?l.setImmediate:l.setTimeout,v=Promise.resolve(),b=!1,w=!1,x=0,y=s,_={onbeforeupdate:function(){return!(!(x=x?2:1)||s===y)},onremove:function(){l.removeEventListener("popstate",I,!1),l.removeEventListener("hashchange",C,!1)},view:function(){if(x&&s!==y){var t=[e(u,p.key,p)];return y&&(t=y.render(t[0])),t}}},k=S.SKIP={};function C(){b=!1;var e=l.location.hash;"#"!==S.prefix[0]&&(e=l.location.search+e,"?"!==S.prefix[0]&&"/"!==(e=l.location.pathname+e)[0]&&(e="/"+e));var t=e.concat().replace(/(?:%[a-f89][a-f0-9])+/gim,a).slice(S.prefix.length),n=i(t);function o(e){console.error(e),T(h,null,{replace:!0})}Object.assign(n.params,l.history.state),function e(i){for(;i<d.length;i++)if(d[i].check(n)){var r=d[i].component,s=d[i].route,a=r,l=f=function(o){if(l===f){if(o===k)return e(i+1);u=null==o||"function"!=typeof o.view&&"function"!=typeof o?"div":o,p=n.params,g=t,f=null,y=r.render?r:null,2===x?c.redraw():(x=2,c.redraw.sync())}};return void(r.view||"function"==typeof r?(r={},l(a)):r.onmatch?v.then((function(){return r.onmatch(n.params,t,s)})).then(l,t===h?null:o):l("div"))}if(t===h)throw new Error("Could not resolve default route "+h+".");T(h,null,{replace:!0})}(0)}function I(){b||(b=!0,m(C))}function T(e,t,i){if(e=n(e,t),w){I();var o=i?i.state:null,r=i?i.title:null;i&&i.replace?l.history.replaceState(o,r,S.prefix+e):l.history.pushState(o,r,S.prefix+e)}else l.location.href=S.prefix+e}function S(e,t,n){if(!e)throw new TypeError("DOM element being rendered to does not exist.");if(d=Object.keys(n).map((function(e){if("/"!==e[0])throw new SyntaxError("Routes must start with a '/'.");if(/:([^\/\.-]+)(\.{3})?:/.test(e))throw new SyntaxError("Route parameter names must be separated with either '/', '.', or '-'.");return{route:e,component:n[e],check:o(e)}})),h=t,null!=t){var r=i(t);if(!d.some((function(e){return e.check(r)})))throw new ReferenceError("Default route doesn't match any known routes.")}"function"==typeof l.history.pushState?l.addEventListener("popstate",I,!1):"#"===S.prefix[0]&&l.addEventListener("hashchange",C,!1),w=!0,c.mount(e,_),C()}return S.set=function(e,t,n){null!=f&&((n=n||{}).replace=!0),f=null,T(e,t,n)},S.get=function(){return g},S.prefix="#!",S.Link={view:function(e){var i,o,s,a=t(e.attrs.selector||"a",r(e.attrs,["options","params","selector","onclick"]),e.children);return(a.attrs.disabled=Boolean(a.attrs.disabled))?(a.attrs.href=null,a.attrs["aria-disabled"]="true"):(i=e.attrs.options,o=e.attrs.onclick,s=n(a.attrs.href,e.attrs.params),a.attrs.href=S.prefix+s,a.attrs.onclick=function(e){var t;"function"==typeof o?t=o.call(e.currentTarget,e):null==o||"object"!=typeof o||"function"==typeof o.handleEvent&&o.handleEvent(e),!1===t||e.defaultPrevented||0!==e.button&&0!==e.which&&1!==e.which||e.currentTarget.target&&"_self"!==e.currentTarget.target||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||(e.preventDefault(),e.redraw=!1,S.set(s,null,i))}),a}},S.param=function(e){return p&&null!=e?p[e]:p},S},j}()("undefined"!=typeof window?window:null,e),B}var ue=function(){if($)return H;$=1;var e=Z(),t=function(){if(R)return L;R=1;var e=ie();return L=se()("undefined"!=typeof window?window:null,e.redraw)}(),n=ie(),i=ee(),o=function(){return e.apply(this,arguments)};return o.m=e,o.trust=e.trust,o.fragment=e.fragment,o.Fragment="[",o.mount=n.mount,o.route=he(),o.render=ne(),o.redraw=n.redraw,o.request=t.request,o.parseQueryString=ae(),o.buildQueryString=oe(),o.parsePathname=le(),o.buildPathname=re(),o.vnode=Y(),o.censor=de(),o.domFor=i.domFor,H=o}(),pe=K(ue);let ge="http://127.0.0.1:3000",fe="https://moves-dot-explo-dev.appspot.com",me="None";const ve=e=>`${ge}${e}`,be=e=>pe.request({withCredentials:!0,...e,url:ve(e.url)}),we=e=>{const t={"Content-Type":"application/json; charset=UTF-8",Authorization:`Bearer ${me}`,...null==e?void 0:e.headers};return pe.request({withCredentials:!1,method:"POST",...e,url:`${fe}${e.url}`,headers:t})};let xe="is_IS",ye="is";const _e=/{\s*(\w+)\s*}/g;let ke={},Ce=!1;function Ie(e,t){for(let n in e)if(void 0!==e[n][t])return!0;return!1}function Te(e,t){xe=e,ye=e.split("_")[0],Ie(t,xe)||Ie(t,ye)||(xe="en_US",ye="en"),ke={};for(let e in t)for(let n in t[e]){let i=t[e][n];if(Array.isArray(i)&&(i=i.join("")),void 0===ke[e]&&(ke[e]={}),i.match(/<[a-z]+>/)){const e=[];let t=0,n=null;for(;t<i.length&&(n=i.slice(t).match(/<[a-z]+>/))&&void 0!==n.index;){const o=n[0];let r=t+n.index+o.length,s=i.indexOf("</"+o.slice(1),r);s<0?t=r:(n.index>0&&e.push(i.slice(t,t+n.index)),e.push(pe(o.slice(1,-1),i.slice(r,s))),t=s+o.length+1)}t<i.length&&e.push(i.slice(t)),i=e}ke[e][n]=i}Ce=!0}function Se(e,t={}){const n=ke[e];if(void 0===n)return Ce?e:"";const i=n[xe]||n[ye]||e;return Object.keys(t).length?Le(i,t):i}function Ee(e,t={}){const n=ke[e];if(void 0===n)return Ce?e:"";const i=n[xe]||n[ye]||e;return"string"!=typeof i?"":Object.keys(t).length?function(e,t){return e.replace(_e,((e,n)=>t[n]||e))}(i,t):i}function Pe(e,t){return"string"==typeof t?pe(e,Se(t)):Array.isArray(t)?pe(e,t.map((e=>"string"==typeof e?Se(e):e))):pe(e,t)}function Le(e,t){return"string"==typeof e?e.replace(_e,((e,n)=>t[n]||e)):Array.isArray(e)?e.map((e=>Le(e,t))):e}const Re="ABCDEFGHIJKLMNO",Ne={1:"Enginn stafur lagður niður",2:"Fyrsta orð verður að liggja um byrjunarreitinn",3:"Orð verður að vera samfellt á borðinu",4:"Orð verður að tengjast orði sem fyrir er",5:"Reitur þegar upptekinn",6:"Ekki má vera eyða í orði",7:"word_not_found",8:"word_not_found",9:"Of margir stafir lagðir niður",10:"Stafur er ekki í rekkanum",11:"Of fáir stafir eftir, skipting ekki leyfð",12:"Of mörgum stöfum skipt",13:"Leik vantar á borðið - notið F5/Refresh",14:"Notandi ekki innskráður - notið F5/Refresh",15:"Rangur eða óþekktur notandi",16:"Viðureign finnst ekki",17:"Viðureign er ekki utan tímamarka",18:"Netþjónn gat ekki tekið við leiknum - reyndu aftur",19:"Véfenging er ekki möguleg í þessari viðureign",20:"Síðasti leikur er ekki véfengjanlegur",21:"Aðeins véfenging eða pass leyfileg",server:"Netþjónn gat ekki tekið við leiknum - reyndu aftur"};var De=[],Ae=-1;var Oe=!1;const Me="/board?game=";function Fe(e,t,n){e.onpointerdown=ze,e.onpointermove=Ue.bind(null,t,n),e.onpointerup=je,e.onpointercancel=je,e.onpointerout=je,e.onpointerleave=je}function ze(e){De.push(e)}function Ue(e,t,n){for(let e=0;e<De.length;e++)if(n.pointerId===De[e].pointerId){De[e]=n;break}if(2==De.length){const n=Math.sqrt(Math.pow(De[0].clientX-De[1].clientX,2)+Math.pow(De[0].clientY-De[1].clientY,2));Ae>0?n-Ae>=10?(Oe||e(),Oe=!0):Ae-n>=10&&(Oe||t(),Oe=!0):Ae<0&&(Ae=n,Oe=!1)}}function je(e){!function(e){for(let t=0;t<De.length;t++)if(De[t].pointerId===e.pointerId){De.splice(t,1);break}}(e),De.length<2&&(Ae=-1)}function qe(e){const t=e.currentTarget.classList;void 0===t||t.contains("disabled")||t.add("over"),e.redraw=!1}function Be(e){const t=e.currentTarget.classList;void 0!==t&&t.remove("over"),e.redraw=!1}function Ve(e,t,n){return pe("span.glyphicon.glyphicon-"+e+(n?".grayed":""),t)}function He(e,t){return pe("span.glyphicon.glyphicon-"+e+".grayed",t)}function $e(e){return pe.trust("&nbsp;")}function We(e){const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,(e=>{var n;return null!==(n=t[e])&&void 0!==n?n:""}))}function Ge(e){return document.getElementById(e).value}function Ke(e){const t=document.getElementById(e);t&&t.play()}function Ye(e){e.slice(0,12)==Me&&(e=e.slice(12));const t=e.slice(0,36);let n=e.slice(36);return n.length>0&&"&"==n.charAt(0)&&(n="?"+n.slice(1)),"/game/"+t+n}function Je(){let e=document.querySelectorAll("div.movelist .move");if(!e||!e.length)return;let t=e[e.length-1],n=t.parentNode,i=n.getAttribute("data-len"),o=i?parseInt(i):0;e.length>o&&(n.scrollTop=t.offsetTop),n.setAttribute("data-len",e.length.toString())}function Qe(e,t){return e<0||e>=15||t<0||t>=15?null:Re[e]+(t+1)}function Xe(e){var t=0,n=0,i=0,o=Re.indexOf(e[0]);return o>=0?(i=parseInt(e.slice(1))-1,t=1):(o=Re.indexOf(e.slice(-1)),i=parseInt(e)-1,n=1),{col:i,row:o,dx:t,dy:n}}function Ze(){!function(e,t,n,i,o,r,s){e.SalesCloudObject=o,e[o]=e[o]||function(){(e[o].q=e[o].q||[]).push(arguments)},e[o].l=1*new Date,r=t.createElement(n),s=t.getElementsByTagName(n)[0],r.src=i,s.parentNode.insertBefore(r,s)}(window,document,"script","https://cdn.salescloud.is/js/salescloud.min.js","salescloud")}
2
+ /**
3
+ * @license
4
+ * Copyright 2017 Google LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */const et=!1,tt="${JSCORE_VERSION}",nt=function(e,t){if(!e)throw it(t)},it=function(e){return new Error("Firebase Database ("+tt+") INTERNAL ASSERT FAILED: "+e)},ot=function(e){const t=[];let n=0;for(let i=0;i<e.length;i++){let o=e.charCodeAt(i);o<128?t[n++]=o:o<2048?(t[n++]=o>>6|192,t[n++]=63&o|128):55296==(64512&o)&&i+1<e.length&&56320==(64512&e.charCodeAt(i+1))?(o=65536+((1023&o)<<10)+(1023&e.charCodeAt(++i)),t[n++]=o>>18|240,t[n++]=o>>12&63|128,t[n++]=o>>6&63|128,t[n++]=63&o|128):(t[n++]=o>>12|224,t[n++]=o>>6&63|128,t[n++]=63&o|128)}return t},rt={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();const n=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,i=[];for(let t=0;t<e.length;t+=3){const o=e[t],r=t+1<e.length,s=r?e[t+1]:0,a=t+2<e.length,l=a?e[t+2]:0,c=o>>2,d=(3&o)<<4|s>>4;let h=(15&s)<<2|l>>6,u=63&l;a||(u=64,r||(h=64)),i.push(n[c],n[d],n[h],n[u])}return i.join("")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(ot(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let n=0,i=0;for(;n<e.length;){const o=e[n++];if(o<128)t[i++]=String.fromCharCode(o);else if(o>191&&o<224){const r=e[n++];t[i++]=String.fromCharCode((31&o)<<6|63&r)}else if(o>239&&o<365){const r=((7&o)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536;t[i++]=String.fromCharCode(55296+(r>>10)),t[i++]=String.fromCharCode(56320+(1023&r))}else{const r=e[n++],s=e[n++];t[i++]=String.fromCharCode((15&o)<<12|(63&r)<<6|63&s)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();const n=t?this.charToByteMapWebSafe_:this.charToByteMap_,i=[];for(let t=0;t<e.length;){const o=n[e.charAt(t++)],r=t<e.length?n[e.charAt(t)]:0;++t;const s=t<e.length?n[e.charAt(t)]:64;++t;const a=t<e.length?n[e.charAt(t)]:64;if(++t,null==o||null==r||null==s||null==a)throw new st;const l=o<<2|r>>4;if(i.push(l),64!==s){const e=r<<4&240|s>>2;if(i.push(e),64!==a){const e=s<<6&192|a;i.push(e)}}}return i},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e<this.ENCODED_VALS.length;e++)this.byteToCharMap_[e]=this.ENCODED_VALS.charAt(e),this.charToByteMap_[this.byteToCharMap_[e]]=e,this.byteToCharMapWebSafe_[e]=this.ENCODED_VALS_WEBSAFE.charAt(e),this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[e]]=e,e>=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};
18
+ /**
19
+ * @license
20
+ * Copyright 2017 Google LLC
21
+ *
22
+ * Licensed under the Apache License, Version 2.0 (the "License");
23
+ * you may not use this file except in compliance with the License.
24
+ * You may obtain a copy of the License at
25
+ *
26
+ * http://www.apache.org/licenses/LICENSE-2.0
27
+ *
28
+ * Unless required by applicable law or agreed to in writing, software
29
+ * distributed under the License is distributed on an "AS IS" BASIS,
30
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31
+ * See the License for the specific language governing permissions and
32
+ * limitations under the License.
33
+ */class st extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}const at=function(e){const t=ot(e);return rt.encodeByteArray(t,!0)},lt=function(e){return at(e).replace(/\./g,"")},ct=function(e){try{return rt.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null};
34
+ /**
35
+ * @license
36
+ * Copyright 2017 Google LLC
37
+ *
38
+ * Licensed under the Apache License, Version 2.0 (the "License");
39
+ * you may not use this file except in compliance with the License.
40
+ * You may obtain a copy of the License at
41
+ *
42
+ * http://www.apache.org/licenses/LICENSE-2.0
43
+ *
44
+ * Unless required by applicable law or agreed to in writing, software
45
+ * distributed under the License is distributed on an "AS IS" BASIS,
46
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47
+ * See the License for the specific language governing permissions and
48
+ * limitations under the License.
49
+ */
50
+ function dt(e){return ht(void 0,e)}function ht(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:return new Date(t.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(const n in t)t.hasOwnProperty(n)&&"__proto__"!==n&&(e[n]=ht(e[n],t[n]));return e}
51
+ /**
52
+ * @license
53
+ * Copyright 2022 Google LLC
54
+ *
55
+ * Licensed under the Apache License, Version 2.0 (the "License");
56
+ * you may not use this file except in compliance with the License.
57
+ * You may obtain a copy of the License at
58
+ *
59
+ * http://www.apache.org/licenses/LICENSE-2.0
60
+ *
61
+ * Unless required by applicable law or agreed to in writing, software
62
+ * distributed under the License is distributed on an "AS IS" BASIS,
63
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
64
+ * See the License for the specific language governing permissions and
65
+ * limitations under the License.
66
+ */
67
+ const ut=()=>
68
+ /**
69
+ * @license
70
+ * Copyright 2022 Google LLC
71
+ *
72
+ * Licensed under the Apache License, Version 2.0 (the "License");
73
+ * you may not use this file except in compliance with the License.
74
+ * You may obtain a copy of the License at
75
+ *
76
+ * http://www.apache.org/licenses/LICENSE-2.0
77
+ *
78
+ * Unless required by applicable law or agreed to in writing, software
79
+ * distributed under the License is distributed on an "AS IS" BASIS,
80
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
81
+ * See the License for the specific language governing permissions and
82
+ * limitations under the License.
83
+ */
84
+ function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("Unable to locate global object.")}().__FIREBASE_DEFAULTS__,pt=()=>{try{return ut()||(()=>{if("undefined"==typeof process||void 0===process.env)return;const e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0})()||(()=>{if("undefined"==typeof document)return;let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}const t=e&&ct(e[1]);return t&&JSON.parse(t)})()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}},gt=e=>{var t,n;return null===(n=null===(t=pt())||void 0===t?void 0:t.emulatorHosts)||void 0===n?void 0:n[e]},ft=()=>{var e;return null===(e=pt())||void 0===e?void 0:e.config},mt=e=>{var t;return null===(t=pt())||void 0===t?void 0:t[`_${e}`]};
85
+ /**
86
+ * @license
87
+ * Copyright 2017 Google LLC
88
+ *
89
+ * Licensed under the Apache License, Version 2.0 (the "License");
90
+ * you may not use this file except in compliance with the License.
91
+ * You may obtain a copy of the License at
92
+ *
93
+ * http://www.apache.org/licenses/LICENSE-2.0
94
+ *
95
+ * Unless required by applicable law or agreed to in writing, software
96
+ * distributed under the License is distributed on an "AS IS" BASIS,
97
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
98
+ * See the License for the specific language governing permissions and
99
+ * limitations under the License.
100
+ */
101
+ class vt{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}wrapCallback(e){return(t,n)=>{t?this.reject(t):this.resolve(n),"function"==typeof e&&(this.promise.catch((()=>{})),1===e.length?e(t):e(t,n))}}}
102
+ /**
103
+ * @license
104
+ * Copyright 2021 Google LLC
105
+ *
106
+ * Licensed under the Apache License, Version 2.0 (the "License");
107
+ * you may not use this file except in compliance with the License.
108
+ * You may obtain a copy of the License at
109
+ *
110
+ * http://www.apache.org/licenses/LICENSE-2.0
111
+ *
112
+ * Unless required by applicable law or agreed to in writing, software
113
+ * distributed under the License is distributed on an "AS IS" BASIS,
114
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115
+ * See the License for the specific language governing permissions and
116
+ * limitations under the License.
117
+ */
118
+ /**
119
+ * @license
120
+ * Copyright 2017 Google LLC
121
+ *
122
+ * Licensed under the Apache License, Version 2.0 (the "License");
123
+ * you may not use this file except in compliance with the License.
124
+ * You may obtain a copy of the License at
125
+ *
126
+ * http://www.apache.org/licenses/LICENSE-2.0
127
+ *
128
+ * Unless required by applicable law or agreed to in writing, software
129
+ * distributed under the License is distributed on an "AS IS" BASIS,
130
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131
+ * See the License for the specific language governing permissions and
132
+ * limitations under the License.
133
+ */
134
+ function bt(){return"undefined"!=typeof navigator&&"string"==typeof navigator.userAgent?navigator.userAgent:""}function wt(){return"undefined"!=typeof window&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(bt())}function xt(){const e="object"==typeof chrome?chrome.runtime:"object"==typeof browser?browser.runtime:void 0;return"object"==typeof e&&void 0!==e.id}function yt(){return"object"==typeof navigator&&"ReactNative"===navigator.product}function _t(){return!0===et}function kt(){try{return"object"==typeof indexedDB}catch(e){return!1}}function Ct(){return new Promise(((e,t)=>{try{let n=!0;const i="validate-browser-context-for-indexeddb-analytics-module",o=self.indexedDB.open(i);o.onsuccess=()=>{o.result.close(),n||self.indexedDB.deleteDatabase(i),e(!0)},o.onupgradeneeded=()=>{n=!1},o.onerror=()=>{var e;t((null===(e=o.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}}))}class It extends Error{constructor(e,t,n){super(t),this.code=e,this.customData=n,this.name="FirebaseError",Object.setPrototypeOf(this,It.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,Tt.prototype.create)}}class Tt{constructor(e,t,n){this.service=e,this.serviceName=t,this.errors=n}create(e,...t){const n=t[0]||{},i=`${this.service}/${e}`,o=this.errors[e],r=o?function(e,t){return e.replace(St,((e,n)=>{const i=t[n];return null!=i?String(i):`<${n}?>`}))}(o,n):"Error",s=`${this.serviceName}: ${r} (${i}).`;return new It(i,s,n)}}const St=/\{\$([^}]+)}/g;
135
+ /**
136
+ * @license
137
+ * Copyright 2017 Google LLC
138
+ *
139
+ * Licensed under the Apache License, Version 2.0 (the "License");
140
+ * you may not use this file except in compliance with the License.
141
+ * You may obtain a copy of the License at
142
+ *
143
+ * http://www.apache.org/licenses/LICENSE-2.0
144
+ *
145
+ * Unless required by applicable law or agreed to in writing, software
146
+ * distributed under the License is distributed on an "AS IS" BASIS,
147
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148
+ * See the License for the specific language governing permissions and
149
+ * limitations under the License.
150
+ */function Et(e){return JSON.parse(e)}function Pt(e){return JSON.stringify(e)}
151
+ /**
152
+ * @license
153
+ * Copyright 2017 Google LLC
154
+ *
155
+ * Licensed under the Apache License, Version 2.0 (the "License");
156
+ * you may not use this file except in compliance with the License.
157
+ * You may obtain a copy of the License at
158
+ *
159
+ * http://www.apache.org/licenses/LICENSE-2.0
160
+ *
161
+ * Unless required by applicable law or agreed to in writing, software
162
+ * distributed under the License is distributed on an "AS IS" BASIS,
163
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
164
+ * See the License for the specific language governing permissions and
165
+ * limitations under the License.
166
+ */const Lt=function(e){let t={},n={},i={},o="";try{const r=e.split(".");t=Et(ct(r[0])||""),n=Et(ct(r[1])||""),o=r[2],i=n.d||{},delete n.d}catch(e){}return{header:t,claims:n,data:i,signature:o}};
167
+ /**
168
+ * @license
169
+ * Copyright 2017 Google LLC
170
+ *
171
+ * Licensed under the Apache License, Version 2.0 (the "License");
172
+ * you may not use this file except in compliance with the License.
173
+ * You may obtain a copy of the License at
174
+ *
175
+ * http://www.apache.org/licenses/LICENSE-2.0
176
+ *
177
+ * Unless required by applicable law or agreed to in writing, software
178
+ * distributed under the License is distributed on an "AS IS" BASIS,
179
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
180
+ * See the License for the specific language governing permissions and
181
+ * limitations under the License.
182
+ */
183
+ function Rt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Nt(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Dt(e){for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}function At(e,t,n){const i={};for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(i[o]=t.call(n,e[o],o,e));return i}function Ot(e,t){if(e===t)return!0;const n=Object.keys(e),i=Object.keys(t);for(const o of n){if(!i.includes(o))return!1;const n=e[o],r=t[o];if(Mt(n)&&Mt(r)){if(!Ot(n,r))return!1}else if(n!==r)return!1}for(const e of i)if(!n.includes(e))return!1;return!0}function Mt(e){return null!==e&&"object"==typeof e}
184
+ /**
185
+ * @license
186
+ * Copyright 2017 Google LLC
187
+ *
188
+ * Licensed under the Apache License, Version 2.0 (the "License");
189
+ * you may not use this file except in compliance with the License.
190
+ * You may obtain a copy of the License at
191
+ *
192
+ * http://www.apache.org/licenses/LICENSE-2.0
193
+ *
194
+ * Unless required by applicable law or agreed to in writing, software
195
+ * distributed under the License is distributed on an "AS IS" BASIS,
196
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
197
+ * See the License for the specific language governing permissions and
198
+ * limitations under the License.
199
+ */function Ft(e){const t=[];for(const[n,i]of Object.entries(e))Array.isArray(i)?i.forEach((e=>{t.push(encodeURIComponent(n)+"="+encodeURIComponent(e))})):t.push(encodeURIComponent(n)+"="+encodeURIComponent(i));return t.length?"&"+t.join("&"):""}
200
+ /**
201
+ * @license
202
+ * Copyright 2017 Google LLC
203
+ *
204
+ * Licensed under the Apache License, Version 2.0 (the "License");
205
+ * you may not use this file except in compliance with the License.
206
+ * You may obtain a copy of the License at
207
+ *
208
+ * http://www.apache.org/licenses/LICENSE-2.0
209
+ *
210
+ * Unless required by applicable law or agreed to in writing, software
211
+ * distributed under the License is distributed on an "AS IS" BASIS,
212
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
213
+ * See the License for the specific language governing permissions and
214
+ * limitations under the License.
215
+ */class zt{constructor(){this.chain_=[],this.buf_=[],this.W_=[],this.pad_=[],this.inbuf_=0,this.total_=0,this.blockSize=64,this.pad_[0]=128;for(let e=1;e<this.blockSize;++e)this.pad_[e]=0;this.reset()}reset(){this.chain_[0]=1732584193,this.chain_[1]=4023233417,this.chain_[2]=2562383102,this.chain_[3]=271733878,this.chain_[4]=3285377520,this.inbuf_=0,this.total_=0}compress_(e,t){t||(t=0);const n=this.W_;if("string"==typeof e)for(let i=0;i<16;i++)n[i]=e.charCodeAt(t)<<24|e.charCodeAt(t+1)<<16|e.charCodeAt(t+2)<<8|e.charCodeAt(t+3),t+=4;else for(let i=0;i<16;i++)n[i]=e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3],t+=4;for(let e=16;e<80;e++){const t=n[e-3]^n[e-8]^n[e-14]^n[e-16];n[e]=4294967295&(t<<1|t>>>31)}let i,o,r=this.chain_[0],s=this.chain_[1],a=this.chain_[2],l=this.chain_[3],c=this.chain_[4];for(let e=0;e<80;e++){e<40?e<20?(i=l^s&(a^l),o=1518500249):(i=s^a^l,o=1859775393):e<60?(i=s&a|l&(s|a),o=2400959708):(i=s^a^l,o=3395469782);const t=(r<<5|r>>>27)+i+c+o+n[e]&4294967295;c=l,l=a,a=4294967295&(s<<30|s>>>2),s=r,r=t}this.chain_[0]=this.chain_[0]+r&4294967295,this.chain_[1]=this.chain_[1]+s&4294967295,this.chain_[2]=this.chain_[2]+a&4294967295,this.chain_[3]=this.chain_[3]+l&4294967295,this.chain_[4]=this.chain_[4]+c&4294967295}update(e,t){if(null==e)return;void 0===t&&(t=e.length);const n=t-this.blockSize;let i=0;const o=this.buf_;let r=this.inbuf_;for(;i<t;){if(0===r)for(;i<=n;)this.compress_(e,i),i+=this.blockSize;if("string"==typeof e){for(;i<t;)if(o[r]=e.charCodeAt(i),++r,++i,r===this.blockSize){this.compress_(o),r=0;break}}else for(;i<t;)if(o[r]=e[i],++r,++i,r===this.blockSize){this.compress_(o),r=0;break}}this.inbuf_=r,this.total_+=t}digest(){const e=[];let t=8*this.total_;this.inbuf_<56?this.update(this.pad_,56-this.inbuf_):this.update(this.pad_,this.blockSize-(this.inbuf_-56));for(let e=this.blockSize-1;e>=56;e--)this.buf_[e]=255&t,t/=256;this.compress_(this.buf_);let n=0;for(let t=0;t<5;t++)for(let i=24;i>=0;i-=8)e[n]=this.chain_[t]>>i&255,++n;return e}}class Ut{constructor(e,t){this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=t,this.task.then((()=>{e(this)})).catch((e=>{this.error(e)}))}next(e){this.forEachObserver((t=>{t.next(e)}))}error(e){this.forEachObserver((t=>{t.error(e)})),this.close(e)}complete(){this.forEachObserver((e=>{e.complete()})),this.close()}subscribe(e,t,n){let i;if(void 0===e&&void 0===t&&void 0===n)throw new Error("Missing Observer.");i=function(e,t){if("object"!=typeof e||null===e)return!1;for(const n of t)if(n in e&&"function"==typeof e[n])return!0;return!1}(e,["next","error","complete"])?e:{next:e,error:t,complete:n},void 0===i.next&&(i.next=jt),void 0===i.error&&(i.error=jt),void 0===i.complete&&(i.complete=jt);const o=this.unsubscribeOne.bind(this,this.observers.length);return this.finalized&&this.task.then((()=>{try{this.finalError?i.error(this.finalError):i.complete()}catch(e){}})),this.observers.push(i),o}unsubscribeOne(e){void 0!==this.observers&&void 0!==this.observers[e]&&(delete this.observers[e],this.observerCount-=1,0===this.observerCount&&void 0!==this.onNoObservers&&this.onNoObservers(this))}forEachObserver(e){if(!this.finalized)for(let t=0;t<this.observers.length;t++)this.sendOne(t,e)}sendOne(e,t){this.task.then((()=>{if(void 0!==this.observers&&void 0!==this.observers[e])try{t(this.observers[e])}catch(e){"undefined"!=typeof console&&console.error&&console.error(e)}}))}close(e){this.finalized||(this.finalized=!0,void 0!==e&&(this.finalError=e),this.task.then((()=>{this.observers=void 0,this.onNoObservers=void 0})))}}function jt(){}function qt(e,t){return`${e} failed: ${t} argument `}
216
+ /**
217
+ * @license
218
+ * Copyright 2017 Google LLC
219
+ *
220
+ * Licensed under the Apache License, Version 2.0 (the "License");
221
+ * you may not use this file except in compliance with the License.
222
+ * You may obtain a copy of the License at
223
+ *
224
+ * http://www.apache.org/licenses/LICENSE-2.0
225
+ *
226
+ * Unless required by applicable law or agreed to in writing, software
227
+ * distributed under the License is distributed on an "AS IS" BASIS,
228
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
229
+ * See the License for the specific language governing permissions and
230
+ * limitations under the License.
231
+ */const Bt=function(e){let t=0;for(let n=0;n<e.length;n++){const i=e.charCodeAt(n);i<128?t++:i<2048?t+=2:i>=55296&&i<=56319?(t+=4,n++):t+=3}return t};function Vt(e,t=1e3,n=2){const i=t*Math.pow(n,e),o=Math.round(.5*i*(Math.random()-.5)*2);return Math.min(144e5,i+o)}
232
+ /**
233
+ * @license
234
+ * Copyright 2021 Google LLC
235
+ *
236
+ * Licensed under the Apache License, Version 2.0 (the "License");
237
+ * you may not use this file except in compliance with the License.
238
+ * You may obtain a copy of the License at
239
+ *
240
+ * http://www.apache.org/licenses/LICENSE-2.0
241
+ *
242
+ * Unless required by applicable law or agreed to in writing, software
243
+ * distributed under the License is distributed on an "AS IS" BASIS,
244
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
245
+ * See the License for the specific language governing permissions and
246
+ * limitations under the License.
247
+ */function Ht(e){return e&&e._delegate?e._delegate:e}class $t{constructor(e,t,n){this.name=e,this.instanceFactory=t,this.type=n,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}
248
+ /**
249
+ * @license
250
+ * Copyright 2019 Google LLC
251
+ *
252
+ * Licensed under the Apache License, Version 2.0 (the "License");
253
+ * you may not use this file except in compliance with the License.
254
+ * You may obtain a copy of the License at
255
+ *
256
+ * http://www.apache.org/licenses/LICENSE-2.0
257
+ *
258
+ * Unless required by applicable law or agreed to in writing, software
259
+ * distributed under the License is distributed on an "AS IS" BASIS,
260
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
261
+ * See the License for the specific language governing permissions and
262
+ * limitations under the License.
263
+ */const Wt="[DEFAULT]";
264
+ /**
265
+ * @license
266
+ * Copyright 2019 Google LLC
267
+ *
268
+ * Licensed under the Apache License, Version 2.0 (the "License");
269
+ * you may not use this file except in compliance with the License.
270
+ * You may obtain a copy of the License at
271
+ *
272
+ * http://www.apache.org/licenses/LICENSE-2.0
273
+ *
274
+ * Unless required by applicable law or agreed to in writing, software
275
+ * distributed under the License is distributed on an "AS IS" BASIS,
276
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
277
+ * See the License for the specific language governing permissions and
278
+ * limitations under the License.
279
+ */class Gt{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const e=new vt;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{const n=this.getOrInitializeService({instanceIdentifier:t});n&&e.resolve(n)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;const n=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),i=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(!this.isInitialized(n)&&!this.shouldAutoInitialize()){if(i)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:n})}catch(e){if(i)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if(function(e){return"EAGER"===e.instantiationMode}
280
+ /**
281
+ * @license
282
+ * Copyright 2019 Google LLC
283
+ *
284
+ * Licensed under the Apache License, Version 2.0 (the "License");
285
+ * you may not use this file except in compliance with the License.
286
+ * You may obtain a copy of the License at
287
+ *
288
+ * http://www.apache.org/licenses/LICENSE-2.0
289
+ *
290
+ * Unless required by applicable law or agreed to in writing, software
291
+ * distributed under the License is distributed on an "AS IS" BASIS,
292
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
293
+ * See the License for the specific language governing permissions and
294
+ * limitations under the License.
295
+ */(e))try{this.getOrInitializeService({instanceIdentifier:Wt})}catch(e){}for(const[e,t]of this.instancesDeferred.entries()){const n=this.normalizeInstanceIdentifier(e);try{const e=this.getOrInitializeService({instanceIdentifier:n});t.resolve(e)}catch(e){}}}}clearInstance(e=Wt){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter((e=>"INTERNAL"in e)).map((e=>e.INTERNAL.delete())),...e.filter((e=>"_delete"in e)).map((e=>e._delete()))])}isComponentSet(){return null!=this.component}isInitialized(e=Wt){return this.instances.has(e)}getOptions(e=Wt){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:t={}}=e,n=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(n))throw Error(`${this.name}(${n}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const i=this.getOrInitializeService({instanceIdentifier:n,options:t});for(const[e,t]of this.instancesDeferred.entries()){n===this.normalizeInstanceIdentifier(e)&&t.resolve(i)}return i}onInit(e,t){var n;const i=this.normalizeInstanceIdentifier(t),o=null!==(n=this.onInitCallbacks.get(i))&&void 0!==n?n:new Set;o.add(e),this.onInitCallbacks.set(i,o);const r=this.instances.get(i);return r&&e(r,i),()=>{o.delete(e)}}invokeOnInitCallbacks(e,t){const n=this.onInitCallbacks.get(t);if(n)for(const i of n)try{i(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let n=this.instances.get(e);if(!n&&this.component&&(n=this.component.instanceFactory(this.container,{instanceIdentifier:(i=e,i===Wt?void 0:i),options:t}),this.instances.set(e,n),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(n,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,n)}catch(e){}var i;return n||null}normalizeInstanceIdentifier(e=Wt){return this.component?this.component.multipleInstances?e:Wt:e}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class Kt{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const t=new Gt(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}
296
+ /**
297
+ * @license
298
+ * Copyright 2017 Google LLC
299
+ *
300
+ * Licensed under the Apache License, Version 2.0 (the "License");
301
+ * you may not use this file except in compliance with the License.
302
+ * You may obtain a copy of the License at
303
+ *
304
+ * http://www.apache.org/licenses/LICENSE-2.0
305
+ *
306
+ * Unless required by applicable law or agreed to in writing, software
307
+ * distributed under the License is distributed on an "AS IS" BASIS,
308
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
309
+ * See the License for the specific language governing permissions and
310
+ * limitations under the License.
311
+ */var Yt;!function(e){e[e.DEBUG=0]="DEBUG",e[e.VERBOSE=1]="VERBOSE",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.SILENT=5]="SILENT"}(Yt||(Yt={}));const Jt={debug:Yt.DEBUG,verbose:Yt.VERBOSE,info:Yt.INFO,warn:Yt.WARN,error:Yt.ERROR,silent:Yt.SILENT},Qt=Yt.INFO,Xt={[Yt.DEBUG]:"log",[Yt.VERBOSE]:"log",[Yt.INFO]:"info",[Yt.WARN]:"warn",[Yt.ERROR]:"error"},Zt=(e,t,...n)=>{if(t<e.logLevel)return;const i=(new Date).toISOString(),o=Xt[t];if(!o)throw new Error(`Attempted to log a message with an invalid logType (value: ${t})`);console[o](`[${i}] ${e.name}:`,...n)};class en{constructor(e){this.name=e,this._logLevel=Qt,this._logHandler=Zt,this._userLogHandler=null}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in Yt))throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel="string"==typeof e?Jt[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if("function"!=typeof e)throw new TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,Yt.DEBUG,...e),this._logHandler(this,Yt.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,Yt.VERBOSE,...e),this._logHandler(this,Yt.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,Yt.INFO,...e),this._logHandler(this,Yt.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,Yt.WARN,...e),this._logHandler(this,Yt.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,Yt.ERROR,...e),this._logHandler(this,Yt.ERROR,...e)}}let tn,nn;const on=new WeakMap,rn=new WeakMap,sn=new WeakMap,an=new WeakMap,ln=new WeakMap;let cn={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return rn.get(e);if("objectStoreNames"===t)return e.objectStoreNames||sn.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return un(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function dn(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(nn||(nn=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(pn(this),t),un(on.get(this))}:function(...t){return un(e.apply(pn(this),t))}:function(t,...n){const i=e.call(pn(this),t,...n);return sn.set(i,t.sort?t.sort():[t]),un(i)}}function hn(e){return"function"==typeof e?dn(e):(e instanceof IDBTransaction&&function(e){if(rn.has(e))return;const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",r),e.removeEventListener("abort",r)},o=()=>{t(),i()},r=()=>{n(e.error||new DOMException("AbortError","AbortError")),i()};e.addEventListener("complete",o),e.addEventListener("error",r),e.addEventListener("abort",r)}));rn.set(e,t)}(e),t=e,(tn||(tn=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some((e=>t instanceof e))?new Proxy(e,cn):e);var t}function un(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("success",o),e.removeEventListener("error",r)},o=()=>{t(un(e.result)),i()},r=()=>{n(e.error),i()};e.addEventListener("success",o),e.addEventListener("error",r)}));return t.then((t=>{t instanceof IDBCursor&&on.set(t,e)})).catch((()=>{})),ln.set(t,e),t}(e);if(an.has(e))return an.get(e);const t=hn(e);return t!==e&&(an.set(e,t),ln.set(t,e)),t}const pn=e=>ln.get(e);function gn(e,t,{blocked:n,upgrade:i,blocking:o,terminated:r}={}){const s=indexedDB.open(e,t),a=un(s);return i&&s.addEventListener("upgradeneeded",(e=>{i(un(s.result),e.oldVersion,e.newVersion,un(s.transaction),e)})),n&&s.addEventListener("blocked",(e=>n(e.oldVersion,e.newVersion,e))),a.then((e=>{r&&e.addEventListener("close",(()=>r())),o&&e.addEventListener("versionchange",(e=>o(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),a}const fn=["get","getKey","getAll","getAllKeys","count"],mn=["put","add","delete","clear"],vn=new Map;function bn(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(vn.get(t))return vn.get(t);const n=t.replace(/FromIndex$/,""),i=t!==n,o=mn.includes(n);if(!(n in(i?IDBIndex:IDBObjectStore).prototype)||!o&&!fn.includes(n))return;const r=async function(e,...t){const r=this.transaction(e,o?"readwrite":"readonly");let s=r.store;return i&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&r.done]))[0]};return vn.set(t,r),r}cn=(e=>({...e,get:(t,n,i)=>bn(t,n)||e.get(t,n,i),has:(t,n)=>!!bn(t,n)||e.has(t,n)}))(cn);
312
+ /**
313
+ * @license
314
+ * Copyright 2019 Google LLC
315
+ *
316
+ * Licensed under the Apache License, Version 2.0 (the "License");
317
+ * you may not use this file except in compliance with the License.
318
+ * You may obtain a copy of the License at
319
+ *
320
+ * http://www.apache.org/licenses/LICENSE-2.0
321
+ *
322
+ * Unless required by applicable law or agreed to in writing, software
323
+ * distributed under the License is distributed on an "AS IS" BASIS,
324
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
325
+ * See the License for the specific language governing permissions and
326
+ * limitations under the License.
327
+ */
328
+ class wn{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map((e=>{if(function(e){const t=e.getComponent();return"VERSION"===(null==t?void 0:t.type)}(e)){const t=e.getImmediate();return`${t.library}/${t.version}`}return null})).filter((e=>e)).join(" ")}}const xn="@firebase/app",yn="0.10.16",_n=new en("@firebase/app"),kn="@firebase/app-compat",Cn="@firebase/analytics-compat",In="@firebase/analytics",Tn="@firebase/app-check-compat",Sn="@firebase/app-check",En="@firebase/auth",Pn="@firebase/auth-compat",Ln="@firebase/database",Rn="@firebase/data-connect",Nn="@firebase/database-compat",Dn="@firebase/functions",An="@firebase/functions-compat",On="@firebase/installations",Mn="@firebase/installations-compat",Fn="@firebase/messaging",zn="@firebase/messaging-compat",Un="@firebase/performance",jn="@firebase/performance-compat",qn="@firebase/remote-config",Bn="@firebase/remote-config-compat",Vn="@firebase/storage",Hn="@firebase/storage-compat",$n="@firebase/firestore",Wn="@firebase/vertexai",Gn="@firebase/firestore-compat",Kn="firebase",Yn="[DEFAULT]",Jn={[xn]:"fire-core",[kn]:"fire-core-compat",[In]:"fire-analytics",[Cn]:"fire-analytics-compat",[Sn]:"fire-app-check",[Tn]:"fire-app-check-compat",[En]:"fire-auth",[Pn]:"fire-auth-compat",[Ln]:"fire-rtdb",[Rn]:"fire-data-connect",[Nn]:"fire-rtdb-compat",[Dn]:"fire-fn",[An]:"fire-fn-compat",[On]:"fire-iid",[Mn]:"fire-iid-compat",[Fn]:"fire-fcm",[zn]:"fire-fcm-compat",[Un]:"fire-perf",[jn]:"fire-perf-compat",[qn]:"fire-rc",[Bn]:"fire-rc-compat",[Vn]:"fire-gcs",[Hn]:"fire-gcs-compat",[$n]:"fire-fst",[Gn]:"fire-fst-compat",[Wn]:"fire-vertex","fire-js":"fire-js",[Kn]:"fire-js-all"},Qn=new Map,Xn=new Map,Zn=new Map;function ei(e,t){try{e.container.addComponent(t)}catch(n){_n.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,n)}}function ti(e){const t=e.name;if(Zn.has(t))return _n.debug(`There were multiple attempts to register component ${t}.`),!1;Zn.set(t,e);for(const t of Qn.values())ei(t,e);for(const t of Xn.values())ei(t,e);return!0}function ni(e,t){const n=e.container.getProvider("heartbeat").getImmediate({optional:!0});return n&&n.triggerHeartbeat(),e.container.getProvider(t)}function ii(e){return void 0!==e.settings}
329
+ /**
330
+ * @license
331
+ * Copyright 2019 Google LLC
332
+ *
333
+ * Licensed under the Apache License, Version 2.0 (the "License");
334
+ * you may not use this file except in compliance with the License.
335
+ * You may obtain a copy of the License at
336
+ *
337
+ * http://www.apache.org/licenses/LICENSE-2.0
338
+ *
339
+ * Unless required by applicable law or agreed to in writing, software
340
+ * distributed under the License is distributed on an "AS IS" BASIS,
341
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
342
+ * See the License for the specific language governing permissions and
343
+ * limitations under the License.
344
+ */const oi=new Tt("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."});
345
+ /**
346
+ * @license
347
+ * Copyright 2019 Google LLC
348
+ *
349
+ * Licensed under the Apache License, Version 2.0 (the "License");
350
+ * you may not use this file except in compliance with the License.
351
+ * You may obtain a copy of the License at
352
+ *
353
+ * http://www.apache.org/licenses/LICENSE-2.0
354
+ *
355
+ * Unless required by applicable law or agreed to in writing, software
356
+ * distributed under the License is distributed on an "AS IS" BASIS,
357
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
358
+ * See the License for the specific language governing permissions and
359
+ * limitations under the License.
360
+ */
361
+ class ri{constructor(e,t,n){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=n,this.container.addComponent(new $t("app",(()=>this),"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw oi.create("app-deleted",{appName:this._name})}}
362
+ /**
363
+ * @license
364
+ * Copyright 2019 Google LLC
365
+ *
366
+ * Licensed under the Apache License, Version 2.0 (the "License");
367
+ * you may not use this file except in compliance with the License.
368
+ * You may obtain a copy of the License at
369
+ *
370
+ * http://www.apache.org/licenses/LICENSE-2.0
371
+ *
372
+ * Unless required by applicable law or agreed to in writing, software
373
+ * distributed under the License is distributed on an "AS IS" BASIS,
374
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
375
+ * See the License for the specific language governing permissions and
376
+ * limitations under the License.
377
+ */const si="11.0.2";function ai(e,t={}){let n=e;if("object"!=typeof t){t={name:t}}const i=Object.assign({name:Yn,automaticDataCollectionEnabled:!1},t),o=i.name;if("string"!=typeof o||!o)throw oi.create("bad-app-name",{appName:String(o)});if(n||(n=ft()),!n)throw oi.create("no-options");const r=Qn.get(o);if(r){if(Ot(n,r.options)&&Ot(i,r.config))return r;throw oi.create("duplicate-app",{appName:o})}const s=new Kt(o);for(const e of Zn.values())s.addComponent(e);const a=new ri(n,i,s);return Qn.set(o,a),a}function li(e=Yn){const t=Qn.get(e);if(!t&&e===Yn&&ft())return ai();if(!t)throw oi.create("no-app",{appName:e});return t}function ci(e,t,n){var i;let o=null!==(i=Jn[e])&&void 0!==i?i:e;n&&(o+=`-${n}`);const r=o.match(/\s|\//),s=t.match(/\s|\//);if(r||s){const e=[`Unable to register library "${o}" with version "${t}":`];return r&&e.push(`library name "${o}" contains illegal characters (whitespace or "/")`),r&&s&&e.push("and"),s&&e.push(`version name "${t}" contains illegal characters (whitespace or "/")`),void _n.warn(e.join(" "))}ti(new $t(`${o}-version`,(()=>({library:o,version:t})),"VERSION"))}
378
+ /**
379
+ * @license
380
+ * Copyright 2021 Google LLC
381
+ *
382
+ * Licensed under the Apache License, Version 2.0 (the "License");
383
+ * you may not use this file except in compliance with the License.
384
+ * You may obtain a copy of the License at
385
+ *
386
+ * http://www.apache.org/licenses/LICENSE-2.0
387
+ *
388
+ * Unless required by applicable law or agreed to in writing, software
389
+ * distributed under the License is distributed on an "AS IS" BASIS,
390
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
391
+ * See the License for the specific language governing permissions and
392
+ * limitations under the License.
393
+ */const di="firebase-heartbeat-store";let hi=null;function ui(){return hi||(hi=gn("firebase-heartbeat-database",1,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(di)}catch(e){console.warn(e)}}}).catch((e=>{throw oi.create("idb-open",{originalErrorMessage:e.message})}))),hi}async function pi(e,t){try{const n=(await ui()).transaction(di,"readwrite"),i=n.objectStore(di);await i.put(t,gi(e)),await n.done}catch(e){if(e instanceof It)_n.warn(e.message);else{const t=oi.create("idb-set",{originalErrorMessage:null==e?void 0:e.message});_n.warn(t.message)}}}function gi(e){return`${e.name}!${e.options.appId}`}
394
+ /**
395
+ * @license
396
+ * Copyright 2021 Google LLC
397
+ *
398
+ * Licensed under the Apache License, Version 2.0 (the "License");
399
+ * you may not use this file except in compliance with the License.
400
+ * You may obtain a copy of the License at
401
+ *
402
+ * http://www.apache.org/licenses/LICENSE-2.0
403
+ *
404
+ * Unless required by applicable law or agreed to in writing, software
405
+ * distributed under the License is distributed on an "AS IS" BASIS,
406
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
407
+ * See the License for the specific language governing permissions and
408
+ * limitations under the License.
409
+ */class fi{constructor(e){this.container=e,this._heartbeatsCache=null;const t=this.container.getProvider("app").getImmediate();this._storage=new vi(t),this._heartbeatsCachePromise=this._storage.read().then((e=>(this._heartbeatsCache=e,e)))}async triggerHeartbeat(){var e,t;try{const n=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),i=mi();if(null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)&&(this._heartbeatsCache=await this._heartbeatsCachePromise,null==(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats)))return;if(this._heartbeatsCache.lastSentHeartbeatDate===i||this._heartbeatsCache.heartbeats.some((e=>e.date===i)))return;return this._heartbeatsCache.heartbeats.push({date:i,agent:n}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter((e=>{const t=new Date(e.date).valueOf();return Date.now()-t<=2592e6})),this._storage.overwrite(this._heartbeatsCache)}catch(e){_n.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)||0===this._heartbeatsCache.heartbeats.length)return"";const t=mi(),{heartbeatsToSend:n,unsentEntries:i}=function(e,t=1024){const n=[];let i=e.slice();for(const o of e){const e=n.find((e=>e.agent===o.agent));if(e){if(e.dates.push(o.date),bi(n)>t){e.dates.pop();break}}else if(n.push({agent:o.agent,dates:[o.date]}),bi(n)>t){n.pop();break}i=i.slice(1)}return{heartbeatsToSend:n,unsentEntries:i}}(this._heartbeatsCache.heartbeats),o=lt(JSON.stringify({version:2,heartbeats:n}));return this._heartbeatsCache.lastSentHeartbeatDate=t,i.length>0?(this._heartbeatsCache.heartbeats=i,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),o}catch(e){return _n.warn(e),""}}}function mi(){return(new Date).toISOString().substring(0,10)}class vi{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!kt()&&Ct().then((()=>!0)).catch((()=>!1))}async read(){if(await this._canUseIndexedDBPromise){const e=await async function(e){try{const t=(await ui()).transaction(di),n=await t.objectStore(di).get(gi(e));return await t.done,n}catch(e){if(e instanceof It)_n.warn(e.message);else{const t=oi.create("idb-get",{originalErrorMessage:null==e?void 0:e.message});_n.warn(t.message)}}}(this.app);return(null==e?void 0:e.heartbeats)?e:{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return pi(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return pi(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:[...n.heartbeats,...e.heartbeats]})}}}function bi(e){return lt(JSON.stringify({version:2,heartbeats:e})).length}
410
+ /**
411
+ * @license
412
+ * Copyright 2019 Google LLC
413
+ *
414
+ * Licensed under the Apache License, Version 2.0 (the "License");
415
+ * you may not use this file except in compliance with the License.
416
+ * You may obtain a copy of the License at
417
+ *
418
+ * http://www.apache.org/licenses/LICENSE-2.0
419
+ *
420
+ * Unless required by applicable law or agreed to in writing, software
421
+ * distributed under the License is distributed on an "AS IS" BASIS,
422
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
423
+ * See the License for the specific language governing permissions and
424
+ * limitations under the License.
425
+ */var wi;wi="",ti(new $t("platform-logger",(e=>new wn(e)),"PRIVATE")),ti(new $t("heartbeat",(e=>new fi(e)),"PRIVATE")),ci(xn,yn,wi),ci(xn,yn,"esm2017"),ci("fire-js","");
426
+ /**
427
+ * @license
428
+ * Copyright 2020 Google LLC
429
+ *
430
+ * Licensed under the Apache License, Version 2.0 (the "License");
431
+ * you may not use this file except in compliance with the License.
432
+ * You may obtain a copy of the License at
433
+ *
434
+ * http://www.apache.org/licenses/LICENSE-2.0
435
+ *
436
+ * Unless required by applicable law or agreed to in writing, software
437
+ * distributed under the License is distributed on an "AS IS" BASIS,
438
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
439
+ * See the License for the specific language governing permissions and
440
+ * limitations under the License.
441
+ */
442
+ ci("firebase","11.0.2","app");const xi="@firebase/installations",yi="0.6.11",_i=1e4,ki=`w:${yi}`,Ci="FIS_v2",Ii=36e5,Ti=new Tt("installations","Installations",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"not-registered":"Firebase Installation is not registered.","installation-not-found":"Firebase Installation not found.","request-failed":'{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',"app-offline":"Could not process request. Application offline.","delete-pending-registration":"Can't delete installation while there is a pending registration request."});function Si(e){return e instanceof It&&e.code.includes("request-failed")}
443
+ /**
444
+ * @license
445
+ * Copyright 2019 Google LLC
446
+ *
447
+ * Licensed under the Apache License, Version 2.0 (the "License");
448
+ * you may not use this file except in compliance with the License.
449
+ * You may obtain a copy of the License at
450
+ *
451
+ * http://www.apache.org/licenses/LICENSE-2.0
452
+ *
453
+ * Unless required by applicable law or agreed to in writing, software
454
+ * distributed under the License is distributed on an "AS IS" BASIS,
455
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
456
+ * See the License for the specific language governing permissions and
457
+ * limitations under the License.
458
+ */function Ei({projectId:e}){return`https://firebaseinstallations.googleapis.com/v1/projects/${e}/installations`}function Pi(e){return{token:e.token,requestStatus:2,expiresIn:(t=e.expiresIn,Number(t.replace("s","000"))),creationTime:Date.now()};var t}async function Li(e,t){const n=(await t.json()).error;return Ti.create("request-failed",{requestName:e,serverCode:n.code,serverMessage:n.message,serverStatus:n.status})}function Ri({apiKey:e}){return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e})}function Ni(e,{refreshToken:t}){const n=Ri(e);return n.append("Authorization",function(e){return`${Ci} ${e}`}
459
+ /**
460
+ * @license
461
+ * Copyright 2019 Google LLC
462
+ *
463
+ * Licensed under the Apache License, Version 2.0 (the "License");
464
+ * you may not use this file except in compliance with the License.
465
+ * You may obtain a copy of the License at
466
+ *
467
+ * http://www.apache.org/licenses/LICENSE-2.0
468
+ *
469
+ * Unless required by applicable law or agreed to in writing, software
470
+ * distributed under the License is distributed on an "AS IS" BASIS,
471
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
472
+ * See the License for the specific language governing permissions and
473
+ * limitations under the License.
474
+ */(t)),n}async function Di(e){const t=await e();return t.status>=500&&t.status<600?e():t}
475
+ /**
476
+ * @license
477
+ * Copyright 2019 Google LLC
478
+ *
479
+ * Licensed under the Apache License, Version 2.0 (the "License");
480
+ * you may not use this file except in compliance with the License.
481
+ * You may obtain a copy of the License at
482
+ *
483
+ * http://www.apache.org/licenses/LICENSE-2.0
484
+ *
485
+ * Unless required by applicable law or agreed to in writing, software
486
+ * distributed under the License is distributed on an "AS IS" BASIS,
487
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
488
+ * See the License for the specific language governing permissions and
489
+ * limitations under the License.
490
+ */
491
+ function Ai(e){return new Promise((t=>{setTimeout(t,e)}))}
492
+ /**
493
+ * @license
494
+ * Copyright 2019 Google LLC
495
+ *
496
+ * Licensed under the Apache License, Version 2.0 (the "License");
497
+ * you may not use this file except in compliance with the License.
498
+ * You may obtain a copy of the License at
499
+ *
500
+ * http://www.apache.org/licenses/LICENSE-2.0
501
+ *
502
+ * Unless required by applicable law or agreed to in writing, software
503
+ * distributed under the License is distributed on an "AS IS" BASIS,
504
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
505
+ * See the License for the specific language governing permissions and
506
+ * limitations under the License.
507
+ */
508
+ /**
509
+ * @license
510
+ * Copyright 2019 Google LLC
511
+ *
512
+ * Licensed under the Apache License, Version 2.0 (the "License");
513
+ * you may not use this file except in compliance with the License.
514
+ * You may obtain a copy of the License at
515
+ *
516
+ * http://www.apache.org/licenses/LICENSE-2.0
517
+ *
518
+ * Unless required by applicable law or agreed to in writing, software
519
+ * distributed under the License is distributed on an "AS IS" BASIS,
520
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
521
+ * See the License for the specific language governing permissions and
522
+ * limitations under the License.
523
+ */
524
+ const Oi=/^[cdef][\w-]{21}$/;function Mi(){try{const e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;const t=function(e){const t=(n=e,btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_"));var n;return t.substr(0,22)}
525
+ /**
526
+ * @license
527
+ * Copyright 2019 Google LLC
528
+ *
529
+ * Licensed under the Apache License, Version 2.0 (the "License");
530
+ * you may not use this file except in compliance with the License.
531
+ * You may obtain a copy of the License at
532
+ *
533
+ * http://www.apache.org/licenses/LICENSE-2.0
534
+ *
535
+ * Unless required by applicable law or agreed to in writing, software
536
+ * distributed under the License is distributed on an "AS IS" BASIS,
537
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
538
+ * See the License for the specific language governing permissions and
539
+ * limitations under the License.
540
+ */(e);return Oi.test(t)?t:""}catch(e){return""}}function Fi(e){return`${e.appName}!${e.appId}`}
541
+ /**
542
+ * @license
543
+ * Copyright 2019 Google LLC
544
+ *
545
+ * Licensed under the Apache License, Version 2.0 (the "License");
546
+ * you may not use this file except in compliance with the License.
547
+ * You may obtain a copy of the License at
548
+ *
549
+ * http://www.apache.org/licenses/LICENSE-2.0
550
+ *
551
+ * Unless required by applicable law or agreed to in writing, software
552
+ * distributed under the License is distributed on an "AS IS" BASIS,
553
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
554
+ * See the License for the specific language governing permissions and
555
+ * limitations under the License.
556
+ */const zi=new Map;function Ui(e,t){const n=Fi(e);ji(n,t),function(e,t){const n=function(){!qi&&"BroadcastChannel"in self&&(qi=new BroadcastChannel("[Firebase] FID Change"),qi.onmessage=e=>{ji(e.data.key,e.data.fid)});return qi}();n&&n.postMessage({key:e,fid:t});0===zi.size&&qi&&(qi.close(),qi=null)}(n,t)}function ji(e,t){const n=zi.get(e);if(n)for(const e of n)e(t)}let qi=null;
557
+ /**
558
+ * @license
559
+ * Copyright 2019 Google LLC
560
+ *
561
+ * Licensed under the Apache License, Version 2.0 (the "License");
562
+ * you may not use this file except in compliance with the License.
563
+ * You may obtain a copy of the License at
564
+ *
565
+ * http://www.apache.org/licenses/LICENSE-2.0
566
+ *
567
+ * Unless required by applicable law or agreed to in writing, software
568
+ * distributed under the License is distributed on an "AS IS" BASIS,
569
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
570
+ * See the License for the specific language governing permissions and
571
+ * limitations under the License.
572
+ */
573
+ const Bi="firebase-installations-store";let Vi=null;function Hi(){return Vi||(Vi=gn("firebase-installations-database",1,{upgrade:(e,t)=>{if(0===t)e.createObjectStore(Bi)}})),Vi}async function $i(e,t){const n=Fi(e),i=(await Hi()).transaction(Bi,"readwrite"),o=i.objectStore(Bi),r=await o.get(n);return await o.put(t,n),await i.done,r&&r.fid===t.fid||Ui(e,t.fid),t}async function Wi(e){const t=Fi(e),n=(await Hi()).transaction(Bi,"readwrite");await n.objectStore(Bi).delete(t),await n.done}async function Gi(e,t){const n=Fi(e),i=(await Hi()).transaction(Bi,"readwrite"),o=i.objectStore(Bi),r=await o.get(n),s=t(r);return void 0===s?await o.delete(n):await o.put(s,n),await i.done,!s||r&&r.fid===s.fid||Ui(e,s.fid),s}
574
+ /**
575
+ * @license
576
+ * Copyright 2019 Google LLC
577
+ *
578
+ * Licensed under the Apache License, Version 2.0 (the "License");
579
+ * you may not use this file except in compliance with the License.
580
+ * You may obtain a copy of the License at
581
+ *
582
+ * http://www.apache.org/licenses/LICENSE-2.0
583
+ *
584
+ * Unless required by applicable law or agreed to in writing, software
585
+ * distributed under the License is distributed on an "AS IS" BASIS,
586
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
587
+ * See the License for the specific language governing permissions and
588
+ * limitations under the License.
589
+ */async function Ki(e){let t;const n=await Gi(e.appConfig,(n=>{const i=function(e){const t=e||{fid:Mi(),registrationStatus:0};return Qi(t)}(n),o=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine){return{installationEntry:t,registrationPromise:Promise.reject(Ti.create("app-offline"))}}const n={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},i=async function(e,t){try{const n=await async function({appConfig:e,heartbeatServiceProvider:t},{fid:n}){const i=Ei(e),o=Ri(e),r=t.getImmediate({optional:!0});if(r){const e=await r.getHeartbeatsHeader();e&&o.append("x-firebase-client",e)}const s={fid:n,authVersion:Ci,appId:e.appId,sdkVersion:ki},a={method:"POST",headers:o,body:JSON.stringify(s)},l=await Di((()=>fetch(i,a)));if(l.ok){const e=await l.json();return{fid:e.fid||n,registrationStatus:2,refreshToken:e.refreshToken,authToken:Pi(e.authToken)}}throw await Li("Create Installation",l)}(e,t);return $i(e.appConfig,n)}catch(n){throw Si(n)&&409===n.customData.serverCode?await Wi(e.appConfig):await $i(e.appConfig,{fid:t.fid,registrationStatus:0}),n}}(e,n);return{installationEntry:n,registrationPromise:i}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:Yi(e)}:{installationEntry:t}}(e,i);return t=o.registrationPromise,o.installationEntry}));return""===n.fid?{installationEntry:await t}:{installationEntry:n,registrationPromise:t}}async function Yi(e){let t=await Ji(e.appConfig);for(;1===t.registrationStatus;)await Ai(100),t=await Ji(e.appConfig);if(0===t.registrationStatus){const{installationEntry:t,registrationPromise:n}=await Ki(e);return n||t}return t}function Ji(e){return Gi(e,(e=>{if(!e)throw Ti.create("installation-not-found");return Qi(e)}))}function Qi(e){return 1===(t=e).registrationStatus&&t.registrationTime+_i<Date.now()?{fid:e.fid,registrationStatus:0}:e;var t;
590
+ /**
591
+ * @license
592
+ * Copyright 2019 Google LLC
593
+ *
594
+ * Licensed under the Apache License, Version 2.0 (the "License");
595
+ * you may not use this file except in compliance with the License.
596
+ * You may obtain a copy of the License at
597
+ *
598
+ * http://www.apache.org/licenses/LICENSE-2.0
599
+ *
600
+ * Unless required by applicable law or agreed to in writing, software
601
+ * distributed under the License is distributed on an "AS IS" BASIS,
602
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
603
+ * See the License for the specific language governing permissions and
604
+ * limitations under the License.
605
+ */}async function Xi({appConfig:e,heartbeatServiceProvider:t},n){const i=function(e,{fid:t}){return`${Ei(e)}/${t}/authTokens:generate`}
606
+ /**
607
+ * @license
608
+ * Copyright 2019 Google LLC
609
+ *
610
+ * Licensed under the Apache License, Version 2.0 (the "License");
611
+ * you may not use this file except in compliance with the License.
612
+ * You may obtain a copy of the License at
613
+ *
614
+ * http://www.apache.org/licenses/LICENSE-2.0
615
+ *
616
+ * Unless required by applicable law or agreed to in writing, software
617
+ * distributed under the License is distributed on an "AS IS" BASIS,
618
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
619
+ * See the License for the specific language governing permissions and
620
+ * limitations under the License.
621
+ */(e,n),o=Ni(e,n),r=t.getImmediate({optional:!0});if(r){const e=await r.getHeartbeatsHeader();e&&o.append("x-firebase-client",e)}const s={installation:{sdkVersion:ki,appId:e.appId}},a={method:"POST",headers:o,body:JSON.stringify(s)},l=await Di((()=>fetch(i,a)));if(l.ok){return Pi(await l.json())}throw await Li("Generate Auth Token",l)}async function Zi(e,t=!1){let n;const i=await Gi(e.appConfig,(i=>{if(!to(i))throw Ti.create("not-registered");const o=i.authToken;if(!t&&function(e){return 2===e.requestStatus&&!function(e){const t=Date.now();return t<e.creationTime||e.creationTime+e.expiresIn<t+Ii}(e)}(o))return i;if(1===o.requestStatus)return n=async function(e,t){let n=await eo(e.appConfig);for(;1===n.authToken.requestStatus;)await Ai(100),n=await eo(e.appConfig);const i=n.authToken;return 0===i.requestStatus?Zi(e,t):i}(e,t),i;{if(!navigator.onLine)throw Ti.create("app-offline");const t=function(e){const t={requestStatus:1,requestTime:Date.now()};return Object.assign(Object.assign({},e),{authToken:t})}(i);return n=async function(e,t){try{const n=await Xi(e,t),i=Object.assign(Object.assign({},t),{authToken:n});return await $i(e.appConfig,i),n}catch(n){if(!Si(n)||401!==n.customData.serverCode&&404!==n.customData.serverCode){const n=Object.assign(Object.assign({},t),{authToken:{requestStatus:0}});await $i(e.appConfig,n)}else await Wi(e.appConfig);throw n}}(e,t),t}}));return n?await n:i.authToken}function eo(e){return Gi(e,(e=>{if(!to(e))throw Ti.create("not-registered");const t=e.authToken;return 1===(n=t).requestStatus&&n.requestTime+_i<Date.now()?Object.assign(Object.assign({},e),{authToken:{requestStatus:0}}):e;var n;
622
+ /**
623
+ * @license
624
+ * Copyright 2019 Google LLC
625
+ *
626
+ * Licensed under the Apache License, Version 2.0 (the "License");
627
+ * you may not use this file except in compliance with the License.
628
+ * You may obtain a copy of the License at
629
+ *
630
+ * http://www.apache.org/licenses/LICENSE-2.0
631
+ *
632
+ * Unless required by applicable law or agreed to in writing, software
633
+ * distributed under the License is distributed on an "AS IS" BASIS,
634
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
635
+ * See the License for the specific language governing permissions and
636
+ * limitations under the License.
637
+ */}))}function to(e){return void 0!==e&&2===e.registrationStatus}
638
+ /**
639
+ * @license
640
+ * Copyright 2019 Google LLC
641
+ *
642
+ * Licensed under the Apache License, Version 2.0 (the "License");
643
+ * you may not use this file except in compliance with the License.
644
+ * You may obtain a copy of the License at
645
+ *
646
+ * http://www.apache.org/licenses/LICENSE-2.0
647
+ *
648
+ * Unless required by applicable law or agreed to in writing, software
649
+ * distributed under the License is distributed on an "AS IS" BASIS,
650
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
651
+ * See the License for the specific language governing permissions and
652
+ * limitations under the License.
653
+ */
654
+ async function no(e,t=!1){const n=e;await async function(e){const{registrationPromise:t}=await Ki(e);t&&await t}
655
+ /**
656
+ * @license
657
+ * Copyright 2019 Google LLC
658
+ *
659
+ * Licensed under the Apache License, Version 2.0 (the "License");
660
+ * you may not use this file except in compliance with the License.
661
+ * You may obtain a copy of the License at
662
+ *
663
+ * http://www.apache.org/licenses/LICENSE-2.0
664
+ *
665
+ * Unless required by applicable law or agreed to in writing, software
666
+ * distributed under the License is distributed on an "AS IS" BASIS,
667
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
668
+ * See the License for the specific language governing permissions and
669
+ * limitations under the License.
670
+ */(n);return(await Zi(n,t)).token}function io(e){return Ti.create("missing-app-config-values",{valueName:e})}
671
+ /**
672
+ * @license
673
+ * Copyright 2020 Google LLC
674
+ *
675
+ * Licensed under the Apache License, Version 2.0 (the "License");
676
+ * you may not use this file except in compliance with the License.
677
+ * You may obtain a copy of the License at
678
+ *
679
+ * http://www.apache.org/licenses/LICENSE-2.0
680
+ *
681
+ * Unless required by applicable law or agreed to in writing, software
682
+ * distributed under the License is distributed on an "AS IS" BASIS,
683
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
684
+ * See the License for the specific language governing permissions and
685
+ * limitations under the License.
686
+ */const oo="installations",ro=e=>{const t=e.getProvider("app").getImmediate(),n=function(e){if(!e||!e.options)throw io("App Configuration");if(!e.name)throw io("App Name");const t=["projectId","apiKey","appId"];for(const n of t)if(!e.options[n])throw io(n);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t);return{app:t,appConfig:n,heartbeatServiceProvider:ni(t,"heartbeat"),_delete:()=>Promise.resolve()}},so=e=>{const t=ni(e.getProvider("app").getImmediate(),oo).getImmediate();return{getId:()=>async function(e){const t=e,{installationEntry:n,registrationPromise:i}=await Ki(t);return i?i.catch(console.error):Zi(t).catch(console.error),n.fid}(t),getToken:e=>no(t,e)}};ti(new $t(oo,ro,"PUBLIC")),ti(new $t("installations-internal",so,"PRIVATE")),ci(xi,yi),ci(xi,yi,"esm2017");
687
+ /**
688
+ * @license
689
+ * Copyright 2019 Google LLC
690
+ *
691
+ * Licensed under the Apache License, Version 2.0 (the "License");
692
+ * you may not use this file except in compliance with the License.
693
+ * You may obtain a copy of the License at
694
+ *
695
+ * http://www.apache.org/licenses/LICENSE-2.0
696
+ *
697
+ * Unless required by applicable law or agreed to in writing, software
698
+ * distributed under the License is distributed on an "AS IS" BASIS,
699
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
700
+ * See the License for the specific language governing permissions and
701
+ * limitations under the License.
702
+ */
703
+ const ao="analytics",lo="https://www.googletagmanager.com/gtag/js",co=new en("@firebase/analytics"),ho=new Tt("analytics","Analytics",{"already-exists":"A Firebase Analytics instance with the appId {$id} already exists. Only one Firebase Analytics instance can be created for each appId.","already-initialized":"initializeAnalytics() cannot be called again with different options than those it was initially called with. It can be called again with the same options to return the existing instance, or getAnalytics() can be used to get a reference to the already-initialized instance.","already-initialized-settings":"Firebase Analytics has already been initialized.settings() must be called before initializing any Analytics instanceor it will have no effect.","interop-component-reg-failed":"Firebase Analytics Interop Component failed to instantiate: {$reason}","invalid-analytics-context":"Firebase Analytics is not supported in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}","indexeddb-unavailable":"IndexedDB unavailable or restricted in this environment. Wrap initialization of analytics in analytics.isSupported() to prevent initialization in unsupported environments. Details: {$errorInfo}","fetch-throttle":"The config fetch request timed out while in an exponential backoff state. Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.","config-fetch-failed":"Dynamic config fetch failed: [{$httpStatus}] {$responseMessage}","no-api-key":'The "apiKey" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid API key.',"no-app-id":'The "appId" field is empty in the local Firebase config. Firebase Analytics requires this field tocontain a valid app ID.',"no-client-id":'The "client_id" field is empty.',"invalid-gtag-resource":"Trusted Types detected an invalid gtag resource: {$gtagURL}."});
704
+ /**
705
+ * @license
706
+ * Copyright 2019 Google LLC
707
+ *
708
+ * Licensed under the Apache License, Version 2.0 (the "License");
709
+ * you may not use this file except in compliance with the License.
710
+ * You may obtain a copy of the License at
711
+ *
712
+ * http://www.apache.org/licenses/LICENSE-2.0
713
+ *
714
+ * Unless required by applicable law or agreed to in writing, software
715
+ * distributed under the License is distributed on an "AS IS" BASIS,
716
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
717
+ * See the License for the specific language governing permissions and
718
+ * limitations under the License.
719
+ */
720
+ function uo(e){if(!e.startsWith(lo)){const t=ho.create("invalid-gtag-resource",{gtagURL:e});return co.warn(t.message),""}return e}function po(e){return Promise.all(e.map((e=>e.catch((e=>e)))))}function go(e,t){const n=function(e,t){let n;return window.trustedTypes&&(n=window.trustedTypes.createPolicy(e,t)),n}("firebase-js-sdk-policy",{createScriptURL:uo}),i=document.createElement("script"),o=`${lo}?l=${e}&id=${t}`;i.src=n?null==n?void 0:n.createScriptURL(o):o,i.async=!0,document.head.appendChild(i)}function fo(e,t,n,i){return async function(o,...r){try{if("event"===o){const[i,o]=r;await async function(e,t,n,i,o){try{let r=[];if(o&&o.send_to){let e=o.send_to;Array.isArray(e)||(e=[e]);const i=await po(n);for(const n of e){const e=i.find((e=>e.measurementId===n)),o=e&&t[e.appId];if(!o){r=[];break}r.push(o)}}0===r.length&&(r=Object.values(t)),await Promise.all(r),e("event",i,o||{})}catch(e){co.error(e)}}(e,t,n,i,o)}else if("config"===o){const[o,s]=r;await async function(e,t,n,i,o,r){const s=i[o];try{if(s)await t[s];else{const e=(await po(n)).find((e=>e.measurementId===o));e&&await t[e.appId]}}catch(e){co.error(e)}e("config",o,r)}(e,t,n,i,o,s)}else if("consent"===o){const[t,n]=r;e("consent",t,n)}else if("get"===o){const[t,n,i]=r;e("get",t,n,i)}else if("set"===o){const[t]=r;e("set",t)}else e(o,...r)}catch(e){co.error(e)}}}const mo=new class{constructor(e={},t=1e3){this.throttleMetadata=e,this.intervalMillis=t}getThrottleMetadata(e){return this.throttleMetadata[e]}setThrottleMetadata(e,t){this.throttleMetadata[e]=t}deleteThrottleMetadata(e){delete this.throttleMetadata[e]}};function vo(e){return new Headers({Accept:"application/json","x-goog-api-key":e})}async function bo(e,t=mo,n){const{appId:i,apiKey:o,measurementId:r}=e.options;if(!i)throw ho.create("no-app-id");if(!o){if(r)return{measurementId:r,appId:i};throw ho.create("no-api-key")}const s=t.getThrottleMetadata(i)||{backoffCount:0,throttleEndTimeMillis:Date.now()},a=new xo;return setTimeout((async()=>{a.abort()}),6e4),wo({appId:i,apiKey:o,measurementId:r},s,a,t)}async function wo(e,{throttleEndTimeMillis:t,backoffCount:n},i,o=mo){var r;const{appId:s,measurementId:a}=e;try{await function(e,t){return new Promise(((n,i)=>{const o=Math.max(t-Date.now(),0),r=setTimeout(n,o);e.addEventListener((()=>{clearTimeout(r),i(ho.create("fetch-throttle",{throttleEndTimeMillis:t}))}))}))}(i,t)}catch(e){if(a)return co.warn(`Timed out fetching this Firebase app's measurement ID from the server. Falling back to the measurement ID ${a} provided in the "measurementId" field in the local Firebase config. [${null==e?void 0:e.message}]`),{appId:s,measurementId:a};throw e}try{const t=await async function(e){var t;const{appId:n,apiKey:i}=e,o={method:"GET",headers:vo(i)},r="https://firebase.googleapis.com/v1alpha/projects/-/apps/{app-id}/webConfig".replace("{app-id}",n),s=await fetch(r,o);if(200!==s.status&&304!==s.status){let e="";try{const n=await s.json();(null===(t=n.error)||void 0===t?void 0:t.message)&&(e=n.error.message)}catch(e){}throw ho.create("config-fetch-failed",{httpStatus:s.status,responseMessage:e})}return s.json()}(e);return o.deleteThrottleMetadata(s),t}catch(t){const l=t;if(!function(e){if(!(e instanceof It&&e.customData))return!1;const t=Number(e.customData.httpStatus);return 429===t||500===t||503===t||504===t}(l)){if(o.deleteThrottleMetadata(s),a)return co.warn(`Failed to fetch this Firebase app's measurement ID from the server. Falling back to the measurement ID ${a} provided in the "measurementId" field in the local Firebase config. [${null==l?void 0:l.message}]`),{appId:s,measurementId:a};throw t}const c=503===Number(null===(r=null==l?void 0:l.customData)||void 0===r?void 0:r.httpStatus)?Vt(n,o.intervalMillis,30):Vt(n,o.intervalMillis),d={throttleEndTimeMillis:Date.now()+c,backoffCount:n+1};return o.setThrottleMetadata(s,d),co.debug(`Calling attemptFetch again in ${c} millis`),wo(e,d,i,o)}}class xo{constructor(){this.listeners=[]}addEventListener(e){this.listeners.push(e)}abort(){this.listeners.forEach((e=>e()))}}async function yo(e,t,n,i,o,r,s){var a;const l=bo(e);l.then((t=>{n[t.measurementId]=t.appId,e.options.measurementId&&t.measurementId!==e.options.measurementId&&co.warn(`The measurement ID in the local Firebase config (${e.options.measurementId}) does not match the measurement ID fetched from the server (${t.measurementId}). To ensure analytics events are always sent to the correct Analytics property, update the measurement ID field in the local config or remove it from the local config.`)})).catch((e=>co.error(e))),t.push(l);const c=
721
+ /**
722
+ * @license
723
+ * Copyright 2020 Google LLC
724
+ *
725
+ * Licensed under the Apache License, Version 2.0 (the "License");
726
+ * you may not use this file except in compliance with the License.
727
+ * You may obtain a copy of the License at
728
+ *
729
+ * http://www.apache.org/licenses/LICENSE-2.0
730
+ *
731
+ * Unless required by applicable law or agreed to in writing, software
732
+ * distributed under the License is distributed on an "AS IS" BASIS,
733
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
734
+ * See the License for the specific language governing permissions and
735
+ * limitations under the License.
736
+ */
737
+ async function(){if(!kt())return co.warn(ho.create("indexeddb-unavailable",{errorInfo:"IndexedDB is not available in this environment."}).message),!1;try{await Ct()}catch(e){return co.warn(ho.create("indexeddb-unavailable",{errorInfo:null==e?void 0:e.toString()}).message),!1}return!0}().then((e=>e?i.getId():void 0)),[d,h]=await Promise.all([l,c]);(function(e){const t=window.document.getElementsByTagName("script");for(const n of Object.values(t))if(n.src&&n.src.includes(lo)&&n.src.includes(e))return n;return null}
738
+ /**
739
+ * @license
740
+ * Copyright 2020 Google LLC
741
+ *
742
+ * Licensed under the Apache License, Version 2.0 (the "License");
743
+ * you may not use this file except in compliance with the License.
744
+ * You may obtain a copy of the License at
745
+ *
746
+ * http://www.apache.org/licenses/LICENSE-2.0
747
+ *
748
+ * Unless required by applicable law or agreed to in writing, software
749
+ * distributed under the License is distributed on an "AS IS" BASIS,
750
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
751
+ * See the License for the specific language governing permissions and
752
+ * limitations under the License.
753
+ */)(r)||go(r,d.measurementId),o("js",new Date);const u=null!==(a=null==s?void 0:s.config)&&void 0!==a?a:{};return u.origin="firebase",u.update=!0,null!=h&&(u.firebase_id=h),o("config",d.measurementId,u),d.measurementId}
754
+ /**
755
+ * @license
756
+ * Copyright 2019 Google LLC
757
+ *
758
+ * Licensed under the Apache License, Version 2.0 (the "License");
759
+ * you may not use this file except in compliance with the License.
760
+ * You may obtain a copy of the License at
761
+ *
762
+ * http://www.apache.org/licenses/LICENSE-2.0
763
+ *
764
+ * Unless required by applicable law or agreed to in writing, software
765
+ * distributed under the License is distributed on an "AS IS" BASIS,
766
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
767
+ * See the License for the specific language governing permissions and
768
+ * limitations under the License.
769
+ */class _o{constructor(e){this.app=e}_delete(){return delete ko[this.app.options.appId],Promise.resolve()}}let ko={},Co=[];const Io={};let To,So,Eo="dataLayer",Po=!1;function Lo(){const e=[];if(xt()&&e.push("This is a browser extension environment."),"undefined"!=typeof navigator&&navigator.cookieEnabled||e.push("Cookies are not available."),e.length>0){const t=e.map(((e,t)=>`(${t+1}) ${e}`)).join(" "),n=ho.create("invalid-analytics-context",{errorInfo:t});co.warn(n.message)}}function Ro(e,t,n){Lo();const i=e.options.appId;if(!i)throw ho.create("no-app-id");if(!e.options.apiKey){if(!e.options.measurementId)throw ho.create("no-api-key");co.warn(`The "apiKey" field is empty in the local Firebase config. This is needed to fetch the latest measurement ID for this Firebase app. Falling back to the measurement ID ${e.options.measurementId} provided in the "measurementId" field in the local Firebase config.`)}if(null!=ko[i])throw ho.create("already-exists",{id:i});if(!Po){!function(e){let t=[];Array.isArray(window[e])?t=window[e]:window[e]=t}(Eo);const{wrappedGtag:e,gtagCore:t}=function(e,t,n,i,o){let r=function(...e){window[i].push(arguments)};return window[o]&&"function"==typeof window[o]&&(r=window[o]),window[o]=fo(r,e,t,n),{gtagCore:r,wrappedGtag:window[o]}}(ko,Co,Io,Eo,"gtag");So=e,To=t,Po=!0}ko[i]=yo(e,Co,Io,t,To,Eo,n);return new _o(e)}function No(e=li()){const t=ni(e=Ht(e),ao);return t.isInitialized()?t.getImmediate():function(e,t={}){const n=ni(e,ao);if(n.isInitialized()){const e=n.getImmediate();if(Ot(t,n.getOptions()))return e;throw ho.create("already-initialized")}const i=n.initialize({options:t});return i}(e)}function Do(e,t,n,i){e=Ht(e),async function(e,t,n,i,o){if(o&&o.global)e("event",n,i);else{const o=await t;e("event",n,Object.assign(Object.assign({},i),{send_to:o}))}}(So,ko[e.app.options.appId],t,n,i).catch((e=>co.error(e)))}const Ao="@firebase/analytics",Oo="0.10.10";function Mo(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(i=Object.getOwnPropertySymbols(e);o<i.length;o++)t.indexOf(i[o])<0&&Object.prototype.propertyIsEnumerable.call(e,i[o])&&(n[i[o]]=e[i[o]])}return n}function Fo(){return{"dependent-sdk-initialized-before-auth":"Another Firebase SDK was initialized and is trying to use Auth before Auth is initialized. Please be sure to call `initializeAuth` or `getAuth` before starting any other Firebase SDK."}}ti(new $t(ao,((e,{options:t})=>Ro(e.getProvider("app").getImmediate(),e.getProvider("installations-internal").getImmediate(),t)),"PUBLIC")),ti(new $t("analytics-internal",(function(e){try{const t=e.getProvider(ao).getImmediate();return{logEvent:(e,n,i)=>Do(t,e,n,i)}}catch(e){throw ho.create("interop-component-reg-failed",{reason:e})}}),"PRIVATE")),ci(Ao,Oo),ci(Ao,Oo,"esm2017"),"function"==typeof SuppressedError&&SuppressedError;const zo=Fo,Uo=new Tt("auth","Firebase",{"dependent-sdk-initialized-before-auth":"Another Firebase SDK was initialized and is trying to use Auth before Auth is initialized. Please be sure to call `initializeAuth` or `getAuth` before starting any other Firebase SDK."}),jo=new en("@firebase/auth");function qo(e,...t){jo.logLevel<=Yt.ERROR&&jo.error(`Auth (${si}): ${e}`,...t)}
770
+ /**
771
+ * @license
772
+ * Copyright 2020 Google LLC
773
+ *
774
+ * Licensed under the Apache License, Version 2.0 (the "License");
775
+ * you may not use this file except in compliance with the License.
776
+ * You may obtain a copy of the License at
777
+ *
778
+ * http://www.apache.org/licenses/LICENSE-2.0
779
+ *
780
+ * Unless required by applicable law or agreed to in writing, software
781
+ * distributed under the License is distributed on an "AS IS" BASIS,
782
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
783
+ * See the License for the specific language governing permissions and
784
+ * limitations under the License.
785
+ */function Bo(e,...t){throw Wo(e,...t)}function Vo(e,...t){return Wo(e,...t)}function Ho(e,t,n){const i=Object.assign(Object.assign({},zo()),{[t]:n});return new Tt("auth","Firebase",i).create(t,{appName:e.name})}function $o(e){return Ho(e,"operation-not-supported-in-this-environment","Operations that alter the current user are not supported in conjunction with FirebaseServerApp")}function Wo(e,...t){if("string"!=typeof e){const n=t[0],i=[...t.slice(1)];return i[0]&&(i[0].appName=e.name),e._errorFactory.create(n,...i)}return Uo.create(e,...t)}function Go(e,t,...n){if(!e)throw Wo(t,...n)}function Ko(e){const t="INTERNAL ASSERTION FAILED: "+e;throw qo(t),new Error(t)}function Yo(e,t){e||Ko(t)}
786
+ /**
787
+ * @license
788
+ * Copyright 2020 Google LLC
789
+ *
790
+ * Licensed under the Apache License, Version 2.0 (the "License");
791
+ * you may not use this file except in compliance with the License.
792
+ * You may obtain a copy of the License at
793
+ *
794
+ * http://www.apache.org/licenses/LICENSE-2.0
795
+ *
796
+ * Unless required by applicable law or agreed to in writing, software
797
+ * distributed under the License is distributed on an "AS IS" BASIS,
798
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
799
+ * See the License for the specific language governing permissions and
800
+ * limitations under the License.
801
+ */function Jo(){var e;return"undefined"!=typeof self&&(null===(e=self.location)||void 0===e?void 0:e.href)||""}function Qo(){var e;return"undefined"!=typeof self&&(null===(e=self.location)||void 0===e?void 0:e.protocol)||null}
802
+ /**
803
+ * @license
804
+ * Copyright 2020 Google LLC
805
+ *
806
+ * Licensed under the Apache License, Version 2.0 (the "License");
807
+ * you may not use this file except in compliance with the License.
808
+ * You may obtain a copy of the License at
809
+ *
810
+ * http://www.apache.org/licenses/LICENSE-2.0
811
+ *
812
+ * Unless required by applicable law or agreed to in writing, software
813
+ * distributed under the License is distributed on an "AS IS" BASIS,
814
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
815
+ * See the License for the specific language governing permissions and
816
+ * limitations under the License.
817
+ */function Xo(){return"undefined"==typeof navigator||!navigator||!("onLine"in navigator)||"boolean"!=typeof navigator.onLine||"http:"!==Qo()&&"https:"!==Qo()&&!xt()&&!("connection"in navigator)||navigator.onLine}
818
+ /**
819
+ * @license
820
+ * Copyright 2020 Google LLC
821
+ *
822
+ * Licensed under the Apache License, Version 2.0 (the "License");
823
+ * you may not use this file except in compliance with the License.
824
+ * You may obtain a copy of the License at
825
+ *
826
+ * http://www.apache.org/licenses/LICENSE-2.0
827
+ *
828
+ * Unless required by applicable law or agreed to in writing, software
829
+ * distributed under the License is distributed on an "AS IS" BASIS,
830
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
831
+ * See the License for the specific language governing permissions and
832
+ * limitations under the License.
833
+ */
834
+ class Zo{constructor(e,t){this.shortDelay=e,this.longDelay=t,Yo(t>e,"Short delay should be less than long delay!"),this.isMobile=wt()||yt()}get(){return Xo()?this.isMobile?this.longDelay:this.shortDelay:Math.min(5e3,this.shortDelay)}}
835
+ /**
836
+ * @license
837
+ * Copyright 2020 Google LLC
838
+ *
839
+ * Licensed under the Apache License, Version 2.0 (the "License");
840
+ * you may not use this file except in compliance with the License.
841
+ * You may obtain a copy of the License at
842
+ *
843
+ * http://www.apache.org/licenses/LICENSE-2.0
844
+ *
845
+ * Unless required by applicable law or agreed to in writing, software
846
+ * distributed under the License is distributed on an "AS IS" BASIS,
847
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
848
+ * See the License for the specific language governing permissions and
849
+ * limitations under the License.
850
+ */function er(e,t){Yo(e.emulator,"Emulator should always be set here");const{url:n}=e.emulator;return t?`${n}${t.startsWith("/")?t.slice(1):t}`:n}
851
+ /**
852
+ * @license
853
+ * Copyright 2020 Google LLC
854
+ *
855
+ * Licensed under the Apache License, Version 2.0 (the "License");
856
+ * you may not use this file except in compliance with the License.
857
+ * You may obtain a copy of the License at
858
+ *
859
+ * http://www.apache.org/licenses/LICENSE-2.0
860
+ *
861
+ * Unless required by applicable law or agreed to in writing, software
862
+ * distributed under the License is distributed on an "AS IS" BASIS,
863
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
864
+ * See the License for the specific language governing permissions and
865
+ * limitations under the License.
866
+ */class tr{static initialize(e,t,n){this.fetchImpl=e,t&&(this.headersImpl=t),n&&(this.responseImpl=n)}static fetch(){return this.fetchImpl?this.fetchImpl:"undefined"!=typeof self&&"fetch"in self?self.fetch:"undefined"!=typeof globalThis&&globalThis.fetch?globalThis.fetch:"undefined"!=typeof fetch?fetch:void Ko("Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static headers(){return this.headersImpl?this.headersImpl:"undefined"!=typeof self&&"Headers"in self?self.Headers:"undefined"!=typeof globalThis&&globalThis.Headers?globalThis.Headers:"undefined"!=typeof Headers?Headers:void Ko("Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static response(){return this.responseImpl?this.responseImpl:"undefined"!=typeof self&&"Response"in self?self.Response:"undefined"!=typeof globalThis&&globalThis.Response?globalThis.Response:"undefined"!=typeof Response?Response:void Ko("Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}}
867
+ /**
868
+ * @license
869
+ * Copyright 2020 Google LLC
870
+ *
871
+ * Licensed under the Apache License, Version 2.0 (the "License");
872
+ * you may not use this file except in compliance with the License.
873
+ * You may obtain a copy of the License at
874
+ *
875
+ * http://www.apache.org/licenses/LICENSE-2.0
876
+ *
877
+ * Unless required by applicable law or agreed to in writing, software
878
+ * distributed under the License is distributed on an "AS IS" BASIS,
879
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
880
+ * See the License for the specific language governing permissions and
881
+ * limitations under the License.
882
+ */const nr={CREDENTIAL_MISMATCH:"custom-token-mismatch",MISSING_CUSTOM_TOKEN:"internal-error",INVALID_IDENTIFIER:"invalid-email",MISSING_CONTINUE_URI:"internal-error",INVALID_PASSWORD:"wrong-password",MISSING_PASSWORD:"missing-password",INVALID_LOGIN_CREDENTIALS:"invalid-credential",EMAIL_EXISTS:"email-already-in-use",PASSWORD_LOGIN_DISABLED:"operation-not-allowed",INVALID_IDP_RESPONSE:"invalid-credential",INVALID_PENDING_TOKEN:"invalid-credential",FEDERATED_USER_ID_ALREADY_LINKED:"credential-already-in-use",MISSING_REQ_TYPE:"internal-error",EMAIL_NOT_FOUND:"user-not-found",RESET_PASSWORD_EXCEED_LIMIT:"too-many-requests",EXPIRED_OOB_CODE:"expired-action-code",INVALID_OOB_CODE:"invalid-action-code",MISSING_OOB_CODE:"internal-error",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:"requires-recent-login",INVALID_ID_TOKEN:"invalid-user-token",TOKEN_EXPIRED:"user-token-expired",USER_NOT_FOUND:"user-token-expired",TOO_MANY_ATTEMPTS_TRY_LATER:"too-many-requests",PASSWORD_DOES_NOT_MEET_REQUIREMENTS:"password-does-not-meet-requirements",INVALID_CODE:"invalid-verification-code",INVALID_SESSION_INFO:"invalid-verification-id",INVALID_TEMPORARY_PROOF:"invalid-credential",MISSING_SESSION_INFO:"missing-verification-id",SESSION_EXPIRED:"code-expired",MISSING_ANDROID_PACKAGE_NAME:"missing-android-pkg-name",UNAUTHORIZED_DOMAIN:"unauthorized-continue-uri",INVALID_OAUTH_CLIENT_ID:"invalid-oauth-client-id",ADMIN_ONLY_OPERATION:"admin-restricted-operation",INVALID_MFA_PENDING_CREDENTIAL:"invalid-multi-factor-session",MFA_ENROLLMENT_NOT_FOUND:"multi-factor-info-not-found",MISSING_MFA_ENROLLMENT_ID:"missing-multi-factor-info",MISSING_MFA_PENDING_CREDENTIAL:"missing-multi-factor-session",SECOND_FACTOR_EXISTS:"second-factor-already-in-use",SECOND_FACTOR_LIMIT_EXCEEDED:"maximum-second-factor-count-exceeded",BLOCKING_FUNCTION_ERROR_RESPONSE:"internal-error",RECAPTCHA_NOT_ENABLED:"recaptcha-not-enabled",MISSING_RECAPTCHA_TOKEN:"missing-recaptcha-token",INVALID_RECAPTCHA_TOKEN:"invalid-recaptcha-token",INVALID_RECAPTCHA_ACTION:"invalid-recaptcha-action",MISSING_CLIENT_TYPE:"missing-client-type",MISSING_RECAPTCHA_VERSION:"missing-recaptcha-version",INVALID_RECAPTCHA_VERSION:"invalid-recaptcha-version",INVALID_REQ_TYPE:"invalid-req-type"},ir=new Zo(3e4,6e4);
883
+ /**
884
+ * @license
885
+ * Copyright 2020 Google LLC
886
+ *
887
+ * Licensed under the Apache License, Version 2.0 (the "License");
888
+ * you may not use this file except in compliance with the License.
889
+ * You may obtain a copy of the License at
890
+ *
891
+ * http://www.apache.org/licenses/LICENSE-2.0
892
+ *
893
+ * Unless required by applicable law or agreed to in writing, software
894
+ * distributed under the License is distributed on an "AS IS" BASIS,
895
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
896
+ * See the License for the specific language governing permissions and
897
+ * limitations under the License.
898
+ */function or(e,t){return e.tenantId&&!t.tenantId?Object.assign(Object.assign({},t),{tenantId:e.tenantId}):t}async function rr(e,t,n,i,o={}){return sr(e,o,(async()=>{let o={},r={};i&&("GET"===t?r=i:o={body:JSON.stringify(i)});const s=Ft(Object.assign({key:e.config.apiKey},r)).slice(1),a=await e._getAdditionalHeaders();a["Content-Type"]="application/json",e.languageCode&&(a["X-Firebase-Locale"]=e.languageCode);const l=Object.assign({method:t,headers:a},o);return"undefined"!=typeof navigator&&"Cloudflare-Workers"===navigator.userAgent||(l.referrerPolicy="no-referrer"),tr.fetch()(lr(e,e.config.apiHost,n,s),l)}))}async function sr(e,t,n){e._canInitEmulator=!1;const i=Object.assign(Object.assign({},nr),t);try{const t=new cr(e),o=await Promise.race([n(),t.promise]);t.clearNetworkTimeout();const r=await o.json();if("needConfirmation"in r)throw dr(e,"account-exists-with-different-credential",r);if(o.ok&&!("errorMessage"in r))return r;{const t=o.ok?r.errorMessage:r.error.message,[n,s]=t.split(" : ");if("FEDERATED_USER_ID_ALREADY_LINKED"===n)throw dr(e,"credential-already-in-use",r);if("EMAIL_EXISTS"===n)throw dr(e,"email-already-in-use",r);if("USER_DISABLED"===n)throw dr(e,"user-disabled",r);const a=i[n]||n.toLowerCase().replace(/[_\s]+/g,"-");if(s)throw Ho(e,a,s);Bo(e,a)}}catch(t){if(t instanceof It)throw t;Bo(e,"network-request-failed",{message:String(t)})}}async function ar(e,t,n,i,o={}){const r=await rr(e,t,n,i,o);return"mfaPendingCredential"in r&&Bo(e,"multi-factor-auth-required",{_serverResponse:r}),r}function lr(e,t,n,i){const o=`${t}${n}?${i}`;return e.config.emulator?er(e.config,o):`${e.config.apiScheme}://${o}`}class cr{clearNetworkTimeout(){clearTimeout(this.timer)}constructor(e){this.auth=e,this.timer=null,this.promise=new Promise(((e,t)=>{this.timer=setTimeout((()=>t(Vo(this.auth,"network-request-failed"))),ir.get())}))}}function dr(e,t,n){const i={appName:e.name};n.email&&(i.email=n.email),n.phoneNumber&&(i.phoneNumber=n.phoneNumber);const o=Vo(e,t,i);return o.customData._tokenResponse=n,o}
899
+ /**
900
+ * @license
901
+ * Copyright 2020 Google LLC
902
+ *
903
+ * Licensed under the Apache License, Version 2.0 (the "License");
904
+ * you may not use this file except in compliance with the License.
905
+ * You may obtain a copy of the License at
906
+ *
907
+ * http://www.apache.org/licenses/LICENSE-2.0
908
+ *
909
+ * Unless required by applicable law or agreed to in writing, software
910
+ * distributed under the License is distributed on an "AS IS" BASIS,
911
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
912
+ * See the License for the specific language governing permissions and
913
+ * limitations under the License.
914
+ */async function hr(e,t){return rr(e,"POST","/v1/accounts:lookup",t)}
915
+ /**
916
+ * @license
917
+ * Copyright 2020 Google LLC
918
+ *
919
+ * Licensed under the Apache License, Version 2.0 (the "License");
920
+ * you may not use this file except in compliance with the License.
921
+ * You may obtain a copy of the License at
922
+ *
923
+ * http://www.apache.org/licenses/LICENSE-2.0
924
+ *
925
+ * Unless required by applicable law or agreed to in writing, software
926
+ * distributed under the License is distributed on an "AS IS" BASIS,
927
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
928
+ * See the License for the specific language governing permissions and
929
+ * limitations under the License.
930
+ */function ur(e){if(e)try{const t=new Date(Number(e));if(!isNaN(t.getTime()))return t.toUTCString()}catch(e){}}function pr(e){return 1e3*Number(e)}function gr(e){const[t,n,i]=e.split(".");if(void 0===t||void 0===n||void 0===i)return qo("JWT malformed, contained fewer than 3 sections"),null;try{const e=ct(n);return e?JSON.parse(e):(qo("Failed to decode base64 JWT payload"),null)}catch(e){return qo("Caught error parsing JWT payload as JSON",null==e?void 0:e.toString()),null}}function fr(e){const t=gr(e);return Go(t,"internal-error"),Go(void 0!==t.exp,"internal-error"),Go(void 0!==t.iat,"internal-error"),Number(t.exp)-Number(t.iat)}
931
+ /**
932
+ * @license
933
+ * Copyright 2020 Google LLC
934
+ *
935
+ * Licensed under the Apache License, Version 2.0 (the "License");
936
+ * you may not use this file except in compliance with the License.
937
+ * You may obtain a copy of the License at
938
+ *
939
+ * http://www.apache.org/licenses/LICENSE-2.0
940
+ *
941
+ * Unless required by applicable law or agreed to in writing, software
942
+ * distributed under the License is distributed on an "AS IS" BASIS,
943
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
944
+ * See the License for the specific language governing permissions and
945
+ * limitations under the License.
946
+ */async function mr(e,t,n=!1){if(n)return t;try{return await t}catch(t){throw t instanceof It&&function({code:e}){return"auth/user-disabled"===e||"auth/user-token-expired"===e}
947
+ /**
948
+ * @license
949
+ * Copyright 2020 Google LLC
950
+ *
951
+ * Licensed under the Apache License, Version 2.0 (the "License");
952
+ * you may not use this file except in compliance with the License.
953
+ * You may obtain a copy of the License at
954
+ *
955
+ * http://www.apache.org/licenses/LICENSE-2.0
956
+ *
957
+ * Unless required by applicable law or agreed to in writing, software
958
+ * distributed under the License is distributed on an "AS IS" BASIS,
959
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
960
+ * See the License for the specific language governing permissions and
961
+ * limitations under the License.
962
+ */(t)&&e.auth.currentUser===e&&await e.auth.signOut(),t}}class vr{constructor(e){this.user=e,this.isRunning=!1,this.timerId=null,this.errorBackoff=3e4}_start(){this.isRunning||(this.isRunning=!0,this.schedule())}_stop(){this.isRunning&&(this.isRunning=!1,null!==this.timerId&&clearTimeout(this.timerId))}getInterval(e){var t;if(e){const e=this.errorBackoff;return this.errorBackoff=Math.min(2*this.errorBackoff,96e4),e}{this.errorBackoff=3e4;const e=(null!==(t=this.user.stsTokenManager.expirationTime)&&void 0!==t?t:0)-Date.now()-3e5;return Math.max(0,e)}}schedule(e=!1){if(!this.isRunning)return;const t=this.getInterval(e);this.timerId=setTimeout((async()=>{await this.iteration()}),t)}async iteration(){try{await this.user.getIdToken(!0)}catch(e){return void("auth/network-request-failed"===(null==e?void 0:e.code)&&this.schedule(!0))}this.schedule()}}
963
+ /**
964
+ * @license
965
+ * Copyright 2020 Google LLC
966
+ *
967
+ * Licensed under the Apache License, Version 2.0 (the "License");
968
+ * you may not use this file except in compliance with the License.
969
+ * You may obtain a copy of the License at
970
+ *
971
+ * http://www.apache.org/licenses/LICENSE-2.0
972
+ *
973
+ * Unless required by applicable law or agreed to in writing, software
974
+ * distributed under the License is distributed on an "AS IS" BASIS,
975
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
976
+ * See the License for the specific language governing permissions and
977
+ * limitations under the License.
978
+ */class br{constructor(e,t){this.createdAt=e,this.lastLoginAt=t,this._initializeTime()}_initializeTime(){this.lastSignInTime=ur(this.lastLoginAt),this.creationTime=ur(this.createdAt)}_copy(e){this.createdAt=e.createdAt,this.lastLoginAt=e.lastLoginAt,this._initializeTime()}toJSON(){return{createdAt:this.createdAt,lastLoginAt:this.lastLoginAt}}}
979
+ /**
980
+ * @license
981
+ * Copyright 2019 Google LLC
982
+ *
983
+ * Licensed under the Apache License, Version 2.0 (the "License");
984
+ * you may not use this file except in compliance with the License.
985
+ * You may obtain a copy of the License at
986
+ *
987
+ * http://www.apache.org/licenses/LICENSE-2.0
988
+ *
989
+ * Unless required by applicable law or agreed to in writing, software
990
+ * distributed under the License is distributed on an "AS IS" BASIS,
991
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
992
+ * See the License for the specific language governing permissions and
993
+ * limitations under the License.
994
+ */async function wr(e){var t;const n=e.auth,i=await e.getIdToken(),o=await mr(e,hr(n,{idToken:i}));Go(null==o?void 0:o.users.length,n,"internal-error");const r=o.users[0];e._notifyReloadListener(r);const s=(null===(t=r.providerUserInfo)||void 0===t?void 0:t.length)?xr(r.providerUserInfo):[],a=(l=e.providerData,c=s,[...l.filter((e=>!c.some((t=>t.providerId===e.providerId)))),...c]);var l,c;const d=e.isAnonymous,h=!(e.email&&r.passwordHash||(null==a?void 0:a.length)),u=!!d&&h,p={uid:r.localId,displayName:r.displayName||null,photoURL:r.photoUrl||null,email:r.email||null,emailVerified:r.emailVerified||!1,phoneNumber:r.phoneNumber||null,tenantId:r.tenantId||null,providerData:a,metadata:new br(r.createdAt,r.lastLoginAt),isAnonymous:u};Object.assign(e,p)}function xr(e){return e.map((e=>{var{providerId:t}=e,n=Mo(e,["providerId"]);return{providerId:t,uid:n.rawId||"",displayName:n.displayName||null,email:n.email||null,phoneNumber:n.phoneNumber||null,photoURL:n.photoUrl||null}}))}
995
+ /**
996
+ * @license
997
+ * Copyright 2020 Google LLC
998
+ *
999
+ * Licensed under the Apache License, Version 2.0 (the "License");
1000
+ * you may not use this file except in compliance with the License.
1001
+ * You may obtain a copy of the License at
1002
+ *
1003
+ * http://www.apache.org/licenses/LICENSE-2.0
1004
+ *
1005
+ * Unless required by applicable law or agreed to in writing, software
1006
+ * distributed under the License is distributed on an "AS IS" BASIS,
1007
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1008
+ * See the License for the specific language governing permissions and
1009
+ * limitations under the License.
1010
+ */
1011
+ /**
1012
+ * @license
1013
+ * Copyright 2020 Google LLC
1014
+ *
1015
+ * Licensed under the Apache License, Version 2.0 (the "License");
1016
+ * you may not use this file except in compliance with the License.
1017
+ * You may obtain a copy of the License at
1018
+ *
1019
+ * http://www.apache.org/licenses/LICENSE-2.0
1020
+ *
1021
+ * Unless required by applicable law or agreed to in writing, software
1022
+ * distributed under the License is distributed on an "AS IS" BASIS,
1023
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1024
+ * See the License for the specific language governing permissions and
1025
+ * limitations under the License.
1026
+ */
1027
+ class yr{constructor(){this.refreshToken=null,this.accessToken=null,this.expirationTime=null}get isExpired(){return!this.expirationTime||Date.now()>this.expirationTime-3e4}updateFromServerResponse(e){Go(e.idToken,"internal-error"),Go(void 0!==e.idToken,"internal-error"),Go(void 0!==e.refreshToken,"internal-error");const t="expiresIn"in e&&void 0!==e.expiresIn?Number(e.expiresIn):fr(e.idToken);this.updateTokensAndExpiration(e.idToken,e.refreshToken,t)}updateFromIdToken(e){Go(0!==e.length,"internal-error");const t=fr(e);this.updateTokensAndExpiration(e,null,t)}async getToken(e,t=!1){return t||!this.accessToken||this.isExpired?(Go(this.refreshToken,e,"user-token-expired"),this.refreshToken?(await this.refresh(e,this.refreshToken),this.accessToken):null):this.accessToken}clearRefreshToken(){this.refreshToken=null}async refresh(e,t){const{accessToken:n,refreshToken:i,expiresIn:o}=await async function(e,t){const n=await sr(e,{},(async()=>{const n=Ft({grant_type:"refresh_token",refresh_token:t}).slice(1),{tokenApiHost:i,apiKey:o}=e.config,r=lr(e,i,"/v1/token",`key=${o}`),s=await e._getAdditionalHeaders();return s["Content-Type"]="application/x-www-form-urlencoded",tr.fetch()(r,{method:"POST",headers:s,body:n})}));return{accessToken:n.access_token,expiresIn:n.expires_in,refreshToken:n.refresh_token}}(e,t);this.updateTokensAndExpiration(n,i,Number(o))}updateTokensAndExpiration(e,t,n){this.refreshToken=t||null,this.accessToken=e||null,this.expirationTime=Date.now()+1e3*n}static fromJSON(e,t){const{refreshToken:n,accessToken:i,expirationTime:o}=t,r=new yr;return n&&(Go("string"==typeof n,"internal-error",{appName:e}),r.refreshToken=n),i&&(Go("string"==typeof i,"internal-error",{appName:e}),r.accessToken=i),o&&(Go("number"==typeof o,"internal-error",{appName:e}),r.expirationTime=o),r}toJSON(){return{refreshToken:this.refreshToken,accessToken:this.accessToken,expirationTime:this.expirationTime}}_assign(e){this.accessToken=e.accessToken,this.refreshToken=e.refreshToken,this.expirationTime=e.expirationTime}_clone(){return Object.assign(new yr,this.toJSON())}_performRefresh(){return Ko("not implemented")}}
1028
+ /**
1029
+ * @license
1030
+ * Copyright 2020 Google LLC
1031
+ *
1032
+ * Licensed under the Apache License, Version 2.0 (the "License");
1033
+ * you may not use this file except in compliance with the License.
1034
+ * You may obtain a copy of the License at
1035
+ *
1036
+ * http://www.apache.org/licenses/LICENSE-2.0
1037
+ *
1038
+ * Unless required by applicable law or agreed to in writing, software
1039
+ * distributed under the License is distributed on an "AS IS" BASIS,
1040
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1041
+ * See the License for the specific language governing permissions and
1042
+ * limitations under the License.
1043
+ */function _r(e,t){Go("string"==typeof e||void 0===e,"internal-error",{appName:t})}class kr{constructor(e){var{uid:t,auth:n,stsTokenManager:i}=e,o=Mo(e,["uid","auth","stsTokenManager"]);this.providerId="firebase",this.proactiveRefresh=new vr(this),this.reloadUserInfo=null,this.reloadListener=null,this.uid=t,this.auth=n,this.stsTokenManager=i,this.accessToken=i.accessToken,this.displayName=o.displayName||null,this.email=o.email||null,this.emailVerified=o.emailVerified||!1,this.phoneNumber=o.phoneNumber||null,this.photoURL=o.photoURL||null,this.isAnonymous=o.isAnonymous||!1,this.tenantId=o.tenantId||null,this.providerData=o.providerData?[...o.providerData]:[],this.metadata=new br(o.createdAt||void 0,o.lastLoginAt||void 0)}async getIdToken(e){const t=await mr(this,this.stsTokenManager.getToken(this.auth,e));return Go(t,this.auth,"internal-error"),this.accessToken!==t&&(this.accessToken=t,await this.auth._persistUserIfCurrent(this),this.auth._notifyListenersIfCurrent(this)),t}getIdTokenResult(e){return async function(e,t=!1){const n=Ht(e),i=await n.getIdToken(t),o=gr(i);Go(o&&o.exp&&o.auth_time&&o.iat,n.auth,"internal-error");const r="object"==typeof o.firebase?o.firebase:void 0,s=null==r?void 0:r.sign_in_provider;return{claims:o,token:i,authTime:ur(pr(o.auth_time)),issuedAtTime:ur(pr(o.iat)),expirationTime:ur(pr(o.exp)),signInProvider:s||null,signInSecondFactor:(null==r?void 0:r.sign_in_second_factor)||null}}(this,e)}reload(){return async function(e){const t=Ht(e);await wr(t),await t.auth._persistUserIfCurrent(t),t.auth._notifyListenersIfCurrent(t)}(this)}_assign(e){this!==e&&(Go(this.uid===e.uid,this.auth,"internal-error"),this.displayName=e.displayName,this.photoURL=e.photoURL,this.email=e.email,this.emailVerified=e.emailVerified,this.phoneNumber=e.phoneNumber,this.isAnonymous=e.isAnonymous,this.tenantId=e.tenantId,this.providerData=e.providerData.map((e=>Object.assign({},e))),this.metadata._copy(e.metadata),this.stsTokenManager._assign(e.stsTokenManager))}_clone(e){const t=new kr(Object.assign(Object.assign({},this),{auth:e,stsTokenManager:this.stsTokenManager._clone()}));return t.metadata._copy(this.metadata),t}_onReload(e){Go(!this.reloadListener,this.auth,"internal-error"),this.reloadListener=e,this.reloadUserInfo&&(this._notifyReloadListener(this.reloadUserInfo),this.reloadUserInfo=null)}_notifyReloadListener(e){this.reloadListener?this.reloadListener(e):this.reloadUserInfo=e}_startProactiveRefresh(){this.proactiveRefresh._start()}_stopProactiveRefresh(){this.proactiveRefresh._stop()}async _updateTokensIfNecessary(e,t=!1){let n=!1;e.idToken&&e.idToken!==this.stsTokenManager.accessToken&&(this.stsTokenManager.updateFromServerResponse(e),n=!0),t&&await wr(this),await this.auth._persistUserIfCurrent(this),n&&this.auth._notifyListenersIfCurrent(this)}async delete(){if(ii(this.auth.app))return Promise.reject($o(this.auth));const e=await this.getIdToken();return await mr(this,async function(e,t){return rr(e,"POST","/v1/accounts:delete",t)}(this.auth,{idToken:e})),this.stsTokenManager.clearRefreshToken(),this.auth.signOut()}toJSON(){return Object.assign(Object.assign({uid:this.uid,email:this.email||void 0,emailVerified:this.emailVerified,displayName:this.displayName||void 0,isAnonymous:this.isAnonymous,photoURL:this.photoURL||void 0,phoneNumber:this.phoneNumber||void 0,tenantId:this.tenantId||void 0,providerData:this.providerData.map((e=>Object.assign({},e))),stsTokenManager:this.stsTokenManager.toJSON(),_redirectEventId:this._redirectEventId},this.metadata.toJSON()),{apiKey:this.auth.config.apiKey,appName:this.auth.name})}get refreshToken(){return this.stsTokenManager.refreshToken||""}static _fromJSON(e,t){var n,i,o,r,s,a,l,c;const d=null!==(n=t.displayName)&&void 0!==n?n:void 0,h=null!==(i=t.email)&&void 0!==i?i:void 0,u=null!==(o=t.phoneNumber)&&void 0!==o?o:void 0,p=null!==(r=t.photoURL)&&void 0!==r?r:void 0,g=null!==(s=t.tenantId)&&void 0!==s?s:void 0,f=null!==(a=t._redirectEventId)&&void 0!==a?a:void 0,m=null!==(l=t.createdAt)&&void 0!==l?l:void 0,v=null!==(c=t.lastLoginAt)&&void 0!==c?c:void 0,{uid:b,emailVerified:w,isAnonymous:x,providerData:y,stsTokenManager:_}=t;Go(b&&_,e,"internal-error");const k=yr.fromJSON(this.name,_);Go("string"==typeof b,e,"internal-error"),_r(d,e.name),_r(h,e.name),Go("boolean"==typeof w,e,"internal-error"),Go("boolean"==typeof x,e,"internal-error"),_r(u,e.name),_r(p,e.name),_r(g,e.name),_r(f,e.name),_r(m,e.name),_r(v,e.name);const C=new kr({uid:b,auth:e,email:h,emailVerified:w,displayName:d,isAnonymous:x,photoURL:p,phoneNumber:u,tenantId:g,stsTokenManager:k,createdAt:m,lastLoginAt:v});return y&&Array.isArray(y)&&(C.providerData=y.map((e=>Object.assign({},e)))),f&&(C._redirectEventId=f),C}static async _fromIdTokenResponse(e,t,n=!1){const i=new yr;i.updateFromServerResponse(t);const o=new kr({uid:t.localId,auth:e,stsTokenManager:i,isAnonymous:n});return await wr(o),o}static async _fromGetAccountInfoResponse(e,t,n){const i=t.users[0];Go(void 0!==i.localId,"internal-error");const o=void 0!==i.providerUserInfo?xr(i.providerUserInfo):[],r=!(i.email&&i.passwordHash||(null==o?void 0:o.length)),s=new yr;s.updateFromIdToken(n);const a=new kr({uid:i.localId,auth:e,stsTokenManager:s,isAnonymous:r}),l={uid:i.localId,displayName:i.displayName||null,photoURL:i.photoUrl||null,email:i.email||null,emailVerified:i.emailVerified||!1,phoneNumber:i.phoneNumber||null,tenantId:i.tenantId||null,providerData:o,metadata:new br(i.createdAt,i.lastLoginAt),isAnonymous:!(i.email&&i.passwordHash||(null==o?void 0:o.length))};return Object.assign(a,l),a}}
1044
+ /**
1045
+ * @license
1046
+ * Copyright 2020 Google LLC
1047
+ *
1048
+ * Licensed under the Apache License, Version 2.0 (the "License");
1049
+ * you may not use this file except in compliance with the License.
1050
+ * You may obtain a copy of the License at
1051
+ *
1052
+ * http://www.apache.org/licenses/LICENSE-2.0
1053
+ *
1054
+ * Unless required by applicable law or agreed to in writing, software
1055
+ * distributed under the License is distributed on an "AS IS" BASIS,
1056
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1057
+ * See the License for the specific language governing permissions and
1058
+ * limitations under the License.
1059
+ */const Cr=new Map;function Ir(e){Yo(e instanceof Function,"Expected a class definition");let t=Cr.get(e);return t?(Yo(t instanceof e,"Instance stored in cache mismatched with class"),t):(t=new e,Cr.set(e,t),t)}
1060
+ /**
1061
+ * @license
1062
+ * Copyright 2019 Google LLC
1063
+ *
1064
+ * Licensed under the Apache License, Version 2.0 (the "License");
1065
+ * you may not use this file except in compliance with the License.
1066
+ * You may obtain a copy of the License at
1067
+ *
1068
+ * http://www.apache.org/licenses/LICENSE-2.0
1069
+ *
1070
+ * Unless required by applicable law or agreed to in writing, software
1071
+ * distributed under the License is distributed on an "AS IS" BASIS,
1072
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1073
+ * See the License for the specific language governing permissions and
1074
+ * limitations under the License.
1075
+ */class Tr{constructor(){this.type="NONE",this.storage={}}async _isAvailable(){return!0}async _set(e,t){this.storage[e]=t}async _get(e){const t=this.storage[e];return void 0===t?null:t}async _remove(e){delete this.storage[e]}_addListener(e,t){}_removeListener(e,t){}}Tr.type="NONE";const Sr=Tr;
1076
+ /**
1077
+ * @license
1078
+ * Copyright 2019 Google LLC
1079
+ *
1080
+ * Licensed under the Apache License, Version 2.0 (the "License");
1081
+ * you may not use this file except in compliance with the License.
1082
+ * You may obtain a copy of the License at
1083
+ *
1084
+ * http://www.apache.org/licenses/LICENSE-2.0
1085
+ *
1086
+ * Unless required by applicable law or agreed to in writing, software
1087
+ * distributed under the License is distributed on an "AS IS" BASIS,
1088
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1089
+ * See the License for the specific language governing permissions and
1090
+ * limitations under the License.
1091
+ */function Er(e,t,n){return`firebase:${e}:${t}:${n}`}class Pr{constructor(e,t,n){this.persistence=e,this.auth=t,this.userKey=n;const{config:i,name:o}=this.auth;this.fullUserKey=Er(this.userKey,i.apiKey,o),this.fullPersistenceKey=Er("persistence",i.apiKey,o),this.boundEventHandler=t._onStorageEvent.bind(t),this.persistence._addListener(this.fullUserKey,this.boundEventHandler)}setCurrentUser(e){return this.persistence._set(this.fullUserKey,e.toJSON())}async getCurrentUser(){const e=await this.persistence._get(this.fullUserKey);return e?kr._fromJSON(this.auth,e):null}removeCurrentUser(){return this.persistence._remove(this.fullUserKey)}savePersistenceForRedirect(){return this.persistence._set(this.fullPersistenceKey,this.persistence.type)}async setPersistence(e){if(this.persistence===e)return;const t=await this.getCurrentUser();return await this.removeCurrentUser(),this.persistence=e,t?this.setCurrentUser(t):void 0}delete(){this.persistence._removeListener(this.fullUserKey,this.boundEventHandler)}static async create(e,t,n="authUser"){if(!t.length)return new Pr(Ir(Sr),e,n);const i=(await Promise.all(t.map((async e=>{if(await e._isAvailable())return e})))).filter((e=>e));let o=i[0]||Ir(Sr);const r=Er(n,e.config.apiKey,e.name);let s=null;for(const n of t)try{const t=await n._get(r);if(t){const i=kr._fromJSON(e,t);n!==o&&(s=i),o=n;break}}catch(e){}const a=i.filter((e=>e._shouldAllowMigration));return o._shouldAllowMigration&&a.length?(o=a[0],s&&await o._set(r,s.toJSON()),await Promise.all(t.map((async e=>{if(e!==o)try{await e._remove(r)}catch(e){}}))),new Pr(o,e,n)):new Pr(o,e,n)}}
1092
+ /**
1093
+ * @license
1094
+ * Copyright 2020 Google LLC
1095
+ *
1096
+ * Licensed under the Apache License, Version 2.0 (the "License");
1097
+ * you may not use this file except in compliance with the License.
1098
+ * You may obtain a copy of the License at
1099
+ *
1100
+ * http://www.apache.org/licenses/LICENSE-2.0
1101
+ *
1102
+ * Unless required by applicable law or agreed to in writing, software
1103
+ * distributed under the License is distributed on an "AS IS" BASIS,
1104
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1105
+ * See the License for the specific language governing permissions and
1106
+ * limitations under the License.
1107
+ */function Lr(e){const t=e.toLowerCase();if(t.includes("opera/")||t.includes("opr/")||t.includes("opios/"))return"Opera";if(Ar(t))return"IEMobile";if(t.includes("msie")||t.includes("trident/"))return"IE";if(t.includes("edge/"))return"Edge";if(Rr(t))return"Firefox";if(t.includes("silk/"))return"Silk";if(Mr(t))return"Blackberry";if(Fr(t))return"Webos";if(Nr(t))return"Safari";if((t.includes("chrome/")||Dr(t))&&!t.includes("edge/"))return"Chrome";if(Or(t))return"Android";{const t=/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/,n=e.match(t);if(2===(null==n?void 0:n.length))return n[1]}return"Other"}function Rr(e=bt()){return/firefox\//i.test(e)}function Nr(e=bt()){const t=e.toLowerCase();return t.includes("safari/")&&!t.includes("chrome/")&&!t.includes("crios/")&&!t.includes("android")}function Dr(e=bt()){return/crios\//i.test(e)}function Ar(e=bt()){return/iemobile/i.test(e)}function Or(e=bt()){return/android/i.test(e)}function Mr(e=bt()){return/blackberry/i.test(e)}function Fr(e=bt()){return/webos/i.test(e)}function zr(e=bt()){return/iphone|ipad|ipod/i.test(e)||/macintosh/i.test(e)&&/mobile/i.test(e)}function Ur(){return function(){const e=bt();return e.indexOf("MSIE ")>=0||e.indexOf("Trident/")>=0}()&&10===document.documentMode}function jr(e=bt()){return zr(e)||Or(e)||Fr(e)||Mr(e)||/windows phone/i.test(e)||Ar(e)}
1108
+ /**
1109
+ * @license
1110
+ * Copyright 2020 Google LLC
1111
+ *
1112
+ * Licensed under the Apache License, Version 2.0 (the "License");
1113
+ * you may not use this file except in compliance with the License.
1114
+ * You may obtain a copy of the License at
1115
+ *
1116
+ * http://www.apache.org/licenses/LICENSE-2.0
1117
+ *
1118
+ * Unless required by applicable law or agreed to in writing, software
1119
+ * distributed under the License is distributed on an "AS IS" BASIS,
1120
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1121
+ * See the License for the specific language governing permissions and
1122
+ * limitations under the License.
1123
+ */function qr(e,t=[]){let n;switch(e){case"Browser":n=Lr(bt());break;case"Worker":n=`${Lr(bt())}-${e}`;break;default:n=e}const i=t.length?t.join(","):"FirebaseCore-web";return`${n}/JsCore/${si}/${i}`}
1124
+ /**
1125
+ * @license
1126
+ * Copyright 2022 Google LLC
1127
+ *
1128
+ * Licensed under the Apache License, Version 2.0 (the "License");
1129
+ * you may not use this file except in compliance with the License.
1130
+ * You may obtain a copy of the License at
1131
+ *
1132
+ * http://www.apache.org/licenses/LICENSE-2.0
1133
+ *
1134
+ * Unless required by applicable law or agreed to in writing, software
1135
+ * distributed under the License is distributed on an "AS IS" BASIS,
1136
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1137
+ * See the License for the specific language governing permissions and
1138
+ * limitations under the License.
1139
+ */class Br{constructor(e){this.auth=e,this.queue=[]}pushCallback(e,t){const n=t=>new Promise(((n,i)=>{try{n(e(t))}catch(e){i(e)}}));n.onAbort=t,this.queue.push(n);const i=this.queue.length-1;return()=>{this.queue[i]=()=>Promise.resolve()}}async runMiddleware(e){if(this.auth.currentUser===e)return;const t=[];try{for(const n of this.queue)await n(e),n.onAbort&&t.push(n.onAbort)}catch(e){t.reverse();for(const e of t)try{e()}catch(e){}throw this.auth._errorFactory.create("login-blocked",{originalMessage:null==e?void 0:e.message})}}}
1140
+ /**
1141
+ * @license
1142
+ * Copyright 2023 Google LLC
1143
+ *
1144
+ * Licensed under the Apache License, Version 2.0 (the "License");
1145
+ * you may not use this file except in compliance with the License.
1146
+ * You may obtain a copy of the License at
1147
+ *
1148
+ * http://www.apache.org/licenses/LICENSE-2.0
1149
+ *
1150
+ * Unless required by applicable law or agreed to in writing, software
1151
+ * distributed under the License is distributed on an "AS IS" BASIS,
1152
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1153
+ * See the License for the specific language governing permissions and
1154
+ * limitations under the License.
1155
+ */class Vr{constructor(e){var t,n,i,o;const r=e.customStrengthOptions;this.customStrengthOptions={},this.customStrengthOptions.minPasswordLength=null!==(t=r.minPasswordLength)&&void 0!==t?t:6,r.maxPasswordLength&&(this.customStrengthOptions.maxPasswordLength=r.maxPasswordLength),void 0!==r.containsLowercaseCharacter&&(this.customStrengthOptions.containsLowercaseLetter=r.containsLowercaseCharacter),void 0!==r.containsUppercaseCharacter&&(this.customStrengthOptions.containsUppercaseLetter=r.containsUppercaseCharacter),void 0!==r.containsNumericCharacter&&(this.customStrengthOptions.containsNumericCharacter=r.containsNumericCharacter),void 0!==r.containsNonAlphanumericCharacter&&(this.customStrengthOptions.containsNonAlphanumericCharacter=r.containsNonAlphanumericCharacter),this.enforcementState=e.enforcementState,"ENFORCEMENT_STATE_UNSPECIFIED"===this.enforcementState&&(this.enforcementState="OFF"),this.allowedNonAlphanumericCharacters=null!==(i=null===(n=e.allowedNonAlphanumericCharacters)||void 0===n?void 0:n.join(""))&&void 0!==i?i:"",this.forceUpgradeOnSignin=null!==(o=e.forceUpgradeOnSignin)&&void 0!==o&&o,this.schemaVersion=e.schemaVersion}validatePassword(e){var t,n,i,o,r,s;const a={isValid:!0,passwordPolicy:this};return this.validatePasswordLengthOptions(e,a),this.validatePasswordCharacterOptions(e,a),a.isValid&&(a.isValid=null===(t=a.meetsMinPasswordLength)||void 0===t||t),a.isValid&&(a.isValid=null===(n=a.meetsMaxPasswordLength)||void 0===n||n),a.isValid&&(a.isValid=null===(i=a.containsLowercaseLetter)||void 0===i||i),a.isValid&&(a.isValid=null===(o=a.containsUppercaseLetter)||void 0===o||o),a.isValid&&(a.isValid=null===(r=a.containsNumericCharacter)||void 0===r||r),a.isValid&&(a.isValid=null===(s=a.containsNonAlphanumericCharacter)||void 0===s||s),a}validatePasswordLengthOptions(e,t){const n=this.customStrengthOptions.minPasswordLength,i=this.customStrengthOptions.maxPasswordLength;n&&(t.meetsMinPasswordLength=e.length>=n),i&&(t.meetsMaxPasswordLength=e.length<=i)}validatePasswordCharacterOptions(e,t){let n;this.updatePasswordCharacterOptionsStatuses(t,!1,!1,!1,!1);for(let i=0;i<e.length;i++)n=e.charAt(i),this.updatePasswordCharacterOptionsStatuses(t,n>="a"&&n<="z",n>="A"&&n<="Z",n>="0"&&n<="9",this.allowedNonAlphanumericCharacters.includes(n))}updatePasswordCharacterOptionsStatuses(e,t,n,i,o){this.customStrengthOptions.containsLowercaseLetter&&(e.containsLowercaseLetter||(e.containsLowercaseLetter=t)),this.customStrengthOptions.containsUppercaseLetter&&(e.containsUppercaseLetter||(e.containsUppercaseLetter=n)),this.customStrengthOptions.containsNumericCharacter&&(e.containsNumericCharacter||(e.containsNumericCharacter=i)),this.customStrengthOptions.containsNonAlphanumericCharacter&&(e.containsNonAlphanumericCharacter||(e.containsNonAlphanumericCharacter=o))}}
1156
+ /**
1157
+ * @license
1158
+ * Copyright 2020 Google LLC
1159
+ *
1160
+ * Licensed under the Apache License, Version 2.0 (the "License");
1161
+ * you may not use this file except in compliance with the License.
1162
+ * You may obtain a copy of the License at
1163
+ *
1164
+ * http://www.apache.org/licenses/LICENSE-2.0
1165
+ *
1166
+ * Unless required by applicable law or agreed to in writing, software
1167
+ * distributed under the License is distributed on an "AS IS" BASIS,
1168
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1169
+ * See the License for the specific language governing permissions and
1170
+ * limitations under the License.
1171
+ */class Hr{constructor(e,t,n,i){this.app=e,this.heartbeatServiceProvider=t,this.appCheckServiceProvider=n,this.config=i,this.currentUser=null,this.emulatorConfig=null,this.operations=Promise.resolve(),this.authStateSubscription=new Wr(this),this.idTokenSubscription=new Wr(this),this.beforeStateQueue=new Br(this),this.redirectUser=null,this.isProactiveRefreshEnabled=!1,this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION=1,this._canInitEmulator=!0,this._isInitialized=!1,this._deleted=!1,this._initializationPromise=null,this._popupRedirectResolver=null,this._errorFactory=Uo,this._agentRecaptchaConfig=null,this._tenantRecaptchaConfigs={},this._projectPasswordPolicy=null,this._tenantPasswordPolicies={},this.lastNotifiedUid=void 0,this.languageCode=null,this.tenantId=null,this.settings={appVerificationDisabledForTesting:!1},this.frameworks=[],this.name=e.name,this.clientVersion=i.sdkClientVersion}_initializeWithPersistence(e,t){return t&&(this._popupRedirectResolver=Ir(t)),this._initializationPromise=this.queue((async()=>{var n,i;if(!this._deleted&&(this.persistenceManager=await Pr.create(this,e),!this._deleted)){if(null===(n=this._popupRedirectResolver)||void 0===n?void 0:n._shouldInitProactively)try{await this._popupRedirectResolver._initialize(this)}catch(e){}await this.initializeCurrentUser(t),this.lastNotifiedUid=(null===(i=this.currentUser)||void 0===i?void 0:i.uid)||null,this._deleted||(this._isInitialized=!0)}})),this._initializationPromise}async _onStorageEvent(){if(this._deleted)return;const e=await this.assertedPersistence.getCurrentUser();return this.currentUser||e?this.currentUser&&e&&this.currentUser.uid===e.uid?(this._currentUser._assign(e),void await this.currentUser.getIdToken()):void await this._updateCurrentUser(e,!0):void 0}async initializeCurrentUserFromIdToken(e){try{const t=await hr(this,{idToken:e}),n=await kr._fromGetAccountInfoResponse(this,t,e);await this.directlySetCurrentUser(n)}catch(e){console.warn("FirebaseServerApp could not login user with provided authIdToken: ",e),await this.directlySetCurrentUser(null)}}async initializeCurrentUser(e){var t;if(ii(this.app)){const e=this.app.settings.authIdToken;return e?new Promise((t=>{setTimeout((()=>this.initializeCurrentUserFromIdToken(e).then(t,t)))})):this.directlySetCurrentUser(null)}const n=await this.assertedPersistence.getCurrentUser();let i=n,o=!1;if(e&&this.config.authDomain){await this.getOrInitRedirectPersistenceManager();const n=null===(t=this.redirectUser)||void 0===t?void 0:t._redirectEventId,r=null==i?void 0:i._redirectEventId,s=await this.tryRedirectSignIn(e);n&&n!==r||!(null==s?void 0:s.user)||(i=s.user,o=!0)}if(!i)return this.directlySetCurrentUser(null);if(!i._redirectEventId){if(o)try{await this.beforeStateQueue.runMiddleware(i)}catch(e){i=n,this._popupRedirectResolver._overrideRedirectResult(this,(()=>Promise.reject(e)))}return i?this.reloadAndSetCurrentUserOrClear(i):this.directlySetCurrentUser(null)}return Go(this._popupRedirectResolver,this,"argument-error"),await this.getOrInitRedirectPersistenceManager(),this.redirectUser&&this.redirectUser._redirectEventId===i._redirectEventId?this.directlySetCurrentUser(i):this.reloadAndSetCurrentUserOrClear(i)}async tryRedirectSignIn(e){let t=null;try{t=await this._popupRedirectResolver._completeRedirectFn(this,e,!0)}catch(e){await this._setRedirectUser(null)}return t}async reloadAndSetCurrentUserOrClear(e){try{await wr(e)}catch(e){if("auth/network-request-failed"!==(null==e?void 0:e.code))return this.directlySetCurrentUser(null)}return this.directlySetCurrentUser(e)}useDeviceLanguage(){this.languageCode=function(){if("undefined"==typeof navigator)return null;const e=navigator;return e.languages&&e.languages[0]||e.language||null}()}async _delete(){this._deleted=!0}async updateCurrentUser(e){if(ii(this.app))return Promise.reject($o(this));const t=e?Ht(e):null;return t&&Go(t.auth.config.apiKey===this.config.apiKey,this,"invalid-user-token"),this._updateCurrentUser(t&&t._clone(this))}async _updateCurrentUser(e,t=!1){if(!this._deleted)return e&&Go(this.tenantId===e.tenantId,this,"tenant-id-mismatch"),t||await this.beforeStateQueue.runMiddleware(e),this.queue((async()=>{await this.directlySetCurrentUser(e),this.notifyAuthListeners()}))}async signOut(){return ii(this.app)?Promise.reject($o(this)):(await this.beforeStateQueue.runMiddleware(null),(this.redirectPersistenceManager||this._popupRedirectResolver)&&await this._setRedirectUser(null),this._updateCurrentUser(null,!0))}setPersistence(e){return ii(this.app)?Promise.reject($o(this)):this.queue((async()=>{await this.assertedPersistence.setPersistence(Ir(e))}))}_getRecaptchaConfig(){return null==this.tenantId?this._agentRecaptchaConfig:this._tenantRecaptchaConfigs[this.tenantId]}async validatePassword(e){this._getPasswordPolicyInternal()||await this._updatePasswordPolicy();const t=this._getPasswordPolicyInternal();return t.schemaVersion!==this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION?Promise.reject(this._errorFactory.create("unsupported-password-policy-schema-version",{})):t.validatePassword(e)}_getPasswordPolicyInternal(){return null===this.tenantId?this._projectPasswordPolicy:this._tenantPasswordPolicies[this.tenantId]}async _updatePasswordPolicy(){const e=await async function(e,t={}){return rr(e,"GET","/v2/passwordPolicy",or(e,t))}
1172
+ /**
1173
+ * @license
1174
+ * Copyright 2023 Google LLC
1175
+ *
1176
+ * Licensed under the Apache License, Version 2.0 (the "License");
1177
+ * you may not use this file except in compliance with the License.
1178
+ * You may obtain a copy of the License at
1179
+ *
1180
+ * http://www.apache.org/licenses/LICENSE-2.0
1181
+ *
1182
+ * Unless required by applicable law or agreed to in writing, software
1183
+ * distributed under the License is distributed on an "AS IS" BASIS,
1184
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1185
+ * See the License for the specific language governing permissions and
1186
+ * limitations under the License.
1187
+ */(this),t=new Vr(e);null===this.tenantId?this._projectPasswordPolicy=t:this._tenantPasswordPolicies[this.tenantId]=t}_getPersistence(){return this.assertedPersistence.persistence.type}_updateErrorMap(e){this._errorFactory=new Tt("auth","Firebase",e())}onAuthStateChanged(e,t,n){return this.registerStateListener(this.authStateSubscription,e,t,n)}beforeAuthStateChanged(e,t){return this.beforeStateQueue.pushCallback(e,t)}onIdTokenChanged(e,t,n){return this.registerStateListener(this.idTokenSubscription,e,t,n)}authStateReady(){return new Promise(((e,t)=>{if(this.currentUser)e();else{const n=this.onAuthStateChanged((()=>{n(),e()}),t)}}))}async revokeAccessToken(e){if(this.currentUser){const t={providerId:"apple.com",tokenType:"ACCESS_TOKEN",token:e,idToken:await this.currentUser.getIdToken()};null!=this.tenantId&&(t.tenantId=this.tenantId),await async function(e,t){return rr(e,"POST","/v2/accounts:revokeToken",or(e,t))}(this,t)}}toJSON(){var e;return{apiKey:this.config.apiKey,authDomain:this.config.authDomain,appName:this.name,currentUser:null===(e=this._currentUser)||void 0===e?void 0:e.toJSON()}}async _setRedirectUser(e,t){const n=await this.getOrInitRedirectPersistenceManager(t);return null===e?n.removeCurrentUser():n.setCurrentUser(e)}async getOrInitRedirectPersistenceManager(e){if(!this.redirectPersistenceManager){const t=e&&Ir(e)||this._popupRedirectResolver;Go(t,this,"argument-error"),this.redirectPersistenceManager=await Pr.create(this,[Ir(t._redirectPersistence)],"redirectUser"),this.redirectUser=await this.redirectPersistenceManager.getCurrentUser()}return this.redirectPersistenceManager}async _redirectUserForId(e){var t,n;return this._isInitialized&&await this.queue((async()=>{})),(null===(t=this._currentUser)||void 0===t?void 0:t._redirectEventId)===e?this._currentUser:(null===(n=this.redirectUser)||void 0===n?void 0:n._redirectEventId)===e?this.redirectUser:null}async _persistUserIfCurrent(e){if(e===this.currentUser)return this.queue((async()=>this.directlySetCurrentUser(e)))}_notifyListenersIfCurrent(e){e===this.currentUser&&this.notifyAuthListeners()}_key(){return`${this.config.authDomain}:${this.config.apiKey}:${this.name}`}_startProactiveRefresh(){this.isProactiveRefreshEnabled=!0,this.currentUser&&this._currentUser._startProactiveRefresh()}_stopProactiveRefresh(){this.isProactiveRefreshEnabled=!1,this.currentUser&&this._currentUser._stopProactiveRefresh()}get _currentUser(){return this.currentUser}notifyAuthListeners(){var e,t;if(!this._isInitialized)return;this.idTokenSubscription.next(this.currentUser);const n=null!==(t=null===(e=this.currentUser)||void 0===e?void 0:e.uid)&&void 0!==t?t:null;this.lastNotifiedUid!==n&&(this.lastNotifiedUid=n,this.authStateSubscription.next(this.currentUser))}registerStateListener(e,t,n,i){if(this._deleted)return()=>{};const o="function"==typeof t?t:t.next.bind(t);let r=!1;const s=this._isInitialized?Promise.resolve():this._initializationPromise;if(Go(s,this,"internal-error"),s.then((()=>{r||o(this.currentUser)})),"function"==typeof t){const o=e.addObserver(t,n,i);return()=>{r=!0,o()}}{const n=e.addObserver(t);return()=>{r=!0,n()}}}async directlySetCurrentUser(e){this.currentUser&&this.currentUser!==e&&this._currentUser._stopProactiveRefresh(),e&&this.isProactiveRefreshEnabled&&e._startProactiveRefresh(),this.currentUser=e,e?await this.assertedPersistence.setCurrentUser(e):await this.assertedPersistence.removeCurrentUser()}queue(e){return this.operations=this.operations.then(e,e),this.operations}get assertedPersistence(){return Go(this.persistenceManager,this,"internal-error"),this.persistenceManager}_logFramework(e){e&&!this.frameworks.includes(e)&&(this.frameworks.push(e),this.frameworks.sort(),this.clientVersion=qr(this.config.clientPlatform,this._getFrameworks()))}_getFrameworks(){return this.frameworks}async _getAdditionalHeaders(){var e;const t={"X-Client-Version":this.clientVersion};this.app.options.appId&&(t["X-Firebase-gmpid"]=this.app.options.appId);const n=await(null===(e=this.heartbeatServiceProvider.getImmediate({optional:!0}))||void 0===e?void 0:e.getHeartbeatsHeader());n&&(t["X-Firebase-Client"]=n);const i=await this._getAppCheckToken();return i&&(t["X-Firebase-AppCheck"]=i),t}async _getAppCheckToken(){var e;const t=await(null===(e=this.appCheckServiceProvider.getImmediate({optional:!0}))||void 0===e?void 0:e.getToken());return(null==t?void 0:t.error)&&function(e,...t){jo.logLevel<=Yt.WARN&&jo.warn(`Auth (${si}): ${e}`,...t)}(`Error while retrieving App Check token: ${t.error}`),null==t?void 0:t.token}}function $r(e){return Ht(e)}class Wr{constructor(e){this.auth=e,this.observer=null,this.addObserver=function(e,t){const n=new Ut(e,t);return n.subscribe.bind(n)}((e=>this.observer=e))}get next(){return Go(this.observer,this.auth,"internal-error"),this.observer.next.bind(this.observer)}}
1188
+ /**
1189
+ * @license
1190
+ * Copyright 2020 Google LLC
1191
+ *
1192
+ * Licensed under the Apache License, Version 2.0 (the "License");
1193
+ * you may not use this file except in compliance with the License.
1194
+ * You may obtain a copy of the License at
1195
+ *
1196
+ * http://www.apache.org/licenses/LICENSE-2.0
1197
+ *
1198
+ * Unless required by applicable law or agreed to in writing, software
1199
+ * distributed under the License is distributed on an "AS IS" BASIS,
1200
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1201
+ * See the License for the specific language governing permissions and
1202
+ * limitations under the License.
1203
+ */let Gr={async loadJS(){throw new Error("Unable to load external scripts")},recaptchaV2Script:"",recaptchaEnterpriseScript:"",gapiScript:""};function Kr(e,t,n){const i=$r(e);Go(i._canInitEmulator,i,"emulator-config-failed"),Go(/^https?:\/\//.test(t),i,"invalid-emulator-scheme");const o=Yr(t),{host:r,port:s}=function(e){const t=Yr(e),n=/(\/\/)?([^?#/]+)/.exec(e.substr(t.length));if(!n)return{host:"",port:null};const i=n[2].split("@").pop()||"",o=/^(\[[^\]]+\])(:|$)/.exec(i);if(o){const e=o[1];return{host:e,port:Jr(i.substr(e.length+1))}}{const[e,t]=i.split(":");return{host:e,port:Jr(t)}}}(t),a=null===s?"":`:${s}`;i.config.emulator={url:`${o}//${r}${a}/`},i.settings.appVerificationDisabledForTesting=!0,i.emulatorConfig=Object.freeze({host:r,port:s,protocol:o.replace(":",""),options:Object.freeze({disableWarnings:!1})}),function(){function e(){const e=document.createElement("p"),t=e.style;e.innerText="Running in emulator mode. Do not use with production credentials.",t.position="fixed",t.width="100%",t.backgroundColor="#ffffff",t.border=".1em solid #000000",t.color="#b50000",t.bottom="0px",t.left="0px",t.margin="0px",t.zIndex="10000",t.textAlign="center",e.classList.add("firebase-emulator-warning"),document.body.appendChild(e)}"undefined"!=typeof console&&"function"==typeof console.info&&console.info("WARNING: You are using the Auth Emulator, which is intended for local testing only. Do not use with production credentials.");"undefined"!=typeof window&&"undefined"!=typeof document&&("loading"===document.readyState?window.addEventListener("DOMContentLoaded",e):e())}
1204
+ /**
1205
+ * @license
1206
+ * Copyright 2020 Google LLC
1207
+ *
1208
+ * Licensed under the Apache License, Version 2.0 (the "License");
1209
+ * you may not use this file except in compliance with the License.
1210
+ * You may obtain a copy of the License at
1211
+ *
1212
+ * http://www.apache.org/licenses/LICENSE-2.0
1213
+ *
1214
+ * Unless required by applicable law or agreed to in writing, software
1215
+ * distributed under the License is distributed on an "AS IS" BASIS,
1216
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1217
+ * See the License for the specific language governing permissions and
1218
+ * limitations under the License.
1219
+ */()}function Yr(e){const t=e.indexOf(":");return t<0?"":e.substr(0,t+1)}function Jr(e){if(!e)return null;const t=Number(e);return isNaN(t)?null:t}class Qr{constructor(e,t){this.providerId=e,this.signInMethod=t}toJSON(){return Ko("not implemented")}_getIdTokenResponse(e){return Ko("not implemented")}_linkToIdToken(e,t){return Ko("not implemented")}_getReauthenticationResolver(e){return Ko("not implemented")}}
1220
+ /**
1221
+ * @license
1222
+ * Copyright 2020 Google LLC
1223
+ *
1224
+ * Licensed under the Apache License, Version 2.0 (the "License");
1225
+ * you may not use this file except in compliance with the License.
1226
+ * You may obtain a copy of the License at
1227
+ *
1228
+ * http://www.apache.org/licenses/LICENSE-2.0
1229
+ *
1230
+ * Unless required by applicable law or agreed to in writing, software
1231
+ * distributed under the License is distributed on an "AS IS" BASIS,
1232
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1233
+ * See the License for the specific language governing permissions and
1234
+ * limitations under the License.
1235
+ */async function Xr(e,t){return ar(e,"POST","/v1/accounts:signInWithIdp",or(e,t))}
1236
+ /**
1237
+ * @license
1238
+ * Copyright 2020 Google LLC
1239
+ *
1240
+ * Licensed under the Apache License, Version 2.0 (the "License");
1241
+ * you may not use this file except in compliance with the License.
1242
+ * You may obtain a copy of the License at
1243
+ *
1244
+ * http://www.apache.org/licenses/LICENSE-2.0
1245
+ *
1246
+ * Unless required by applicable law or agreed to in writing, software
1247
+ * distributed under the License is distributed on an "AS IS" BASIS,
1248
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1249
+ * See the License for the specific language governing permissions and
1250
+ * limitations under the License.
1251
+ */class Zr extends Qr{constructor(){super(...arguments),this.pendingToken=null}static _fromParams(e){const t=new Zr(e.providerId,e.signInMethod);return e.idToken||e.accessToken?(e.idToken&&(t.idToken=e.idToken),e.accessToken&&(t.accessToken=e.accessToken),e.nonce&&!e.pendingToken&&(t.nonce=e.nonce),e.pendingToken&&(t.pendingToken=e.pendingToken)):e.oauthToken&&e.oauthTokenSecret?(t.accessToken=e.oauthToken,t.secret=e.oauthTokenSecret):Bo("argument-error"),t}toJSON(){return{idToken:this.idToken,accessToken:this.accessToken,secret:this.secret,nonce:this.nonce,pendingToken:this.pendingToken,providerId:this.providerId,signInMethod:this.signInMethod}}static fromJSON(e){const t="string"==typeof e?JSON.parse(e):e,{providerId:n,signInMethod:i}=t,o=Mo(t,["providerId","signInMethod"]);if(!n||!i)return null;const r=new Zr(n,i);return r.idToken=o.idToken||void 0,r.accessToken=o.accessToken||void 0,r.secret=o.secret,r.nonce=o.nonce,r.pendingToken=o.pendingToken||null,r}_getIdTokenResponse(e){return Xr(e,this.buildRequest())}_linkToIdToken(e,t){const n=this.buildRequest();return n.idToken=t,Xr(e,n)}_getReauthenticationResolver(e){const t=this.buildRequest();return t.autoCreate=!1,Xr(e,t)}buildRequest(){const e={requestUri:"http://localhost",returnSecureToken:!0};if(this.pendingToken)e.pendingToken=this.pendingToken;else{const t={};this.idToken&&(t.id_token=this.idToken),this.accessToken&&(t.access_token=this.accessToken),this.secret&&(t.oauth_token_secret=this.secret),t.providerId=this.providerId,this.nonce&&!this.pendingToken&&(t.nonce=this.nonce),e.postBody=Ft(t)}return e}}
1252
+ /**
1253
+ * @license
1254
+ * Copyright 2020 Google LLC
1255
+ *
1256
+ * Licensed under the Apache License, Version 2.0 (the "License");
1257
+ * you may not use this file except in compliance with the License.
1258
+ * You may obtain a copy of the License at
1259
+ *
1260
+ * http://www.apache.org/licenses/LICENSE-2.0
1261
+ *
1262
+ * Unless required by applicable law or agreed to in writing, software
1263
+ * distributed under the License is distributed on an "AS IS" BASIS,
1264
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1265
+ * See the License for the specific language governing permissions and
1266
+ * limitations under the License.
1267
+ */class es{constructor(e){this.providerId=e,this.defaultLanguageCode=null,this.customParameters={}}setDefaultLanguage(e){this.defaultLanguageCode=e}setCustomParameters(e){return this.customParameters=e,this}getCustomParameters(){return this.customParameters}}
1268
+ /**
1269
+ * @license
1270
+ * Copyright 2019 Google LLC
1271
+ *
1272
+ * Licensed under the Apache License, Version 2.0 (the "License");
1273
+ * you may not use this file except in compliance with the License.
1274
+ * You may obtain a copy of the License at
1275
+ *
1276
+ * http://www.apache.org/licenses/LICENSE-2.0
1277
+ *
1278
+ * Unless required by applicable law or agreed to in writing, software
1279
+ * distributed under the License is distributed on an "AS IS" BASIS,
1280
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1281
+ * See the License for the specific language governing permissions and
1282
+ * limitations under the License.
1283
+ */class ts extends es{constructor(){super(...arguments),this.scopes=[]}addScope(e){return this.scopes.includes(e)||this.scopes.push(e),this}getScopes(){return[...this.scopes]}}
1284
+ /**
1285
+ * @license
1286
+ * Copyright 2020 Google LLC
1287
+ *
1288
+ * Licensed under the Apache License, Version 2.0 (the "License");
1289
+ * you may not use this file except in compliance with the License.
1290
+ * You may obtain a copy of the License at
1291
+ *
1292
+ * http://www.apache.org/licenses/LICENSE-2.0
1293
+ *
1294
+ * Unless required by applicable law or agreed to in writing, software
1295
+ * distributed under the License is distributed on an "AS IS" BASIS,
1296
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1297
+ * See the License for the specific language governing permissions and
1298
+ * limitations under the License.
1299
+ */class ns extends ts{constructor(){super("facebook.com")}static credential(e){return Zr._fromParams({providerId:ns.PROVIDER_ID,signInMethod:ns.FACEBOOK_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return ns.credentialFromTaggedObject(e)}static credentialFromError(e){return ns.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e))return null;if(!e.oauthAccessToken)return null;try{return ns.credential(e.oauthAccessToken)}catch(e){return null}}}ns.FACEBOOK_SIGN_IN_METHOD="facebook.com",ns.PROVIDER_ID="facebook.com";
1300
+ /**
1301
+ * @license
1302
+ * Copyright 2020 Google LLC
1303
+ *
1304
+ * Licensed under the Apache License, Version 2.0 (the "License");
1305
+ * you may not use this file except in compliance with the License.
1306
+ * You may obtain a copy of the License at
1307
+ *
1308
+ * http://www.apache.org/licenses/LICENSE-2.0
1309
+ *
1310
+ * Unless required by applicable law or agreed to in writing, software
1311
+ * distributed under the License is distributed on an "AS IS" BASIS,
1312
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
+ * See the License for the specific language governing permissions and
1314
+ * limitations under the License.
1315
+ */
1316
+ class is extends ts{constructor(){super("google.com"),this.addScope("profile")}static credential(e,t){return Zr._fromParams({providerId:is.PROVIDER_ID,signInMethod:is.GOOGLE_SIGN_IN_METHOD,idToken:e,accessToken:t})}static credentialFromResult(e){return is.credentialFromTaggedObject(e)}static credentialFromError(e){return is.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;const{oauthIdToken:t,oauthAccessToken:n}=e;if(!t&&!n)return null;try{return is.credential(t,n)}catch(e){return null}}}is.GOOGLE_SIGN_IN_METHOD="google.com",is.PROVIDER_ID="google.com";
1317
+ /**
1318
+ * @license
1319
+ * Copyright 2020 Google LLC
1320
+ *
1321
+ * Licensed under the Apache License, Version 2.0 (the "License");
1322
+ * you may not use this file except in compliance with the License.
1323
+ * You may obtain a copy of the License at
1324
+ *
1325
+ * http://www.apache.org/licenses/LICENSE-2.0
1326
+ *
1327
+ * Unless required by applicable law or agreed to in writing, software
1328
+ * distributed under the License is distributed on an "AS IS" BASIS,
1329
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330
+ * See the License for the specific language governing permissions and
1331
+ * limitations under the License.
1332
+ */
1333
+ class os extends ts{constructor(){super("github.com")}static credential(e){return Zr._fromParams({providerId:os.PROVIDER_ID,signInMethod:os.GITHUB_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return os.credentialFromTaggedObject(e)}static credentialFromError(e){return os.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e))return null;if(!e.oauthAccessToken)return null;try{return os.credential(e.oauthAccessToken)}catch(e){return null}}}os.GITHUB_SIGN_IN_METHOD="github.com",os.PROVIDER_ID="github.com";
1334
+ /**
1335
+ * @license
1336
+ * Copyright 2020 Google LLC
1337
+ *
1338
+ * Licensed under the Apache License, Version 2.0 (the "License");
1339
+ * you may not use this file except in compliance with the License.
1340
+ * You may obtain a copy of the License at
1341
+ *
1342
+ * http://www.apache.org/licenses/LICENSE-2.0
1343
+ *
1344
+ * Unless required by applicable law or agreed to in writing, software
1345
+ * distributed under the License is distributed on an "AS IS" BASIS,
1346
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1347
+ * See the License for the specific language governing permissions and
1348
+ * limitations under the License.
1349
+ */
1350
+ class rs extends ts{constructor(){super("twitter.com")}static credential(e,t){return Zr._fromParams({providerId:rs.PROVIDER_ID,signInMethod:rs.TWITTER_SIGN_IN_METHOD,oauthToken:e,oauthTokenSecret:t})}static credentialFromResult(e){return rs.credentialFromTaggedObject(e)}static credentialFromError(e){return rs.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;const{oauthAccessToken:t,oauthTokenSecret:n}=e;if(!t||!n)return null;try{return rs.credential(t,n)}catch(e){return null}}}rs.TWITTER_SIGN_IN_METHOD="twitter.com",rs.PROVIDER_ID="twitter.com";
1351
+ /**
1352
+ * @license
1353
+ * Copyright 2020 Google LLC
1354
+ *
1355
+ * Licensed under the Apache License, Version 2.0 (the "License");
1356
+ * you may not use this file except in compliance with the License.
1357
+ * You may obtain a copy of the License at
1358
+ *
1359
+ * http://www.apache.org/licenses/LICENSE-2.0
1360
+ *
1361
+ * Unless required by applicable law or agreed to in writing, software
1362
+ * distributed under the License is distributed on an "AS IS" BASIS,
1363
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1364
+ * See the License for the specific language governing permissions and
1365
+ * limitations under the License.
1366
+ */
1367
+ class ss{constructor(e){this.user=e.user,this.providerId=e.providerId,this._tokenResponse=e._tokenResponse,this.operationType=e.operationType}static async _fromIdTokenResponse(e,t,n,i=!1){const o=await kr._fromIdTokenResponse(e,n,i),r=as(n);return new ss({user:o,providerId:r,_tokenResponse:n,operationType:t})}static async _forOperation(e,t,n){await e._updateTokensIfNecessary(n,!0);const i=as(n);return new ss({user:e,providerId:i,_tokenResponse:n,operationType:t})}}function as(e){return e.providerId?e.providerId:"phoneNumber"in e?"phone":null}
1368
+ /**
1369
+ * @license
1370
+ * Copyright 2020 Google LLC
1371
+ *
1372
+ * Licensed under the Apache License, Version 2.0 (the "License");
1373
+ * you may not use this file except in compliance with the License.
1374
+ * You may obtain a copy of the License at
1375
+ *
1376
+ * http://www.apache.org/licenses/LICENSE-2.0
1377
+ *
1378
+ * Unless required by applicable law or agreed to in writing, software
1379
+ * distributed under the License is distributed on an "AS IS" BASIS,
1380
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1381
+ * See the License for the specific language governing permissions and
1382
+ * limitations under the License.
1383
+ */class ls extends It{constructor(e,t,n,i){var o;super(t.code,t.message),this.operationType=n,this.user=i,Object.setPrototypeOf(this,ls.prototype),this.customData={appName:e.name,tenantId:null!==(o=e.tenantId)&&void 0!==o?o:void 0,_serverResponse:t.customData._serverResponse,operationType:n}}static _fromErrorAndOperation(e,t,n,i){return new ls(e,t,n,i)}}function cs(e,t,n,i){return("reauthenticate"===t?n._getReauthenticationResolver(e):n._getIdTokenResponse(e)).catch((n=>{if("auth/multi-factor-auth-required"===n.code)throw ls._fromErrorAndOperation(e,n,t,i);throw n}))}
1384
+ /**
1385
+ * @license
1386
+ * Copyright 2020 Google LLC
1387
+ *
1388
+ * Licensed under the Apache License, Version 2.0 (the "License");
1389
+ * you may not use this file except in compliance with the License.
1390
+ * You may obtain a copy of the License at
1391
+ *
1392
+ * http://www.apache.org/licenses/LICENSE-2.0
1393
+ *
1394
+ * Unless required by applicable law or agreed to in writing, software
1395
+ * distributed under the License is distributed on an "AS IS" BASIS,
1396
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1397
+ * See the License for the specific language governing permissions and
1398
+ * limitations under the License.
1399
+ */
1400
+ async function ds(e,t){if(ii(e.app))return Promise.reject($o(e));const n=$r(e),i=
1401
+ /**
1402
+ * @license
1403
+ * Copyright 2020 Google LLC
1404
+ *
1405
+ * Licensed under the Apache License, Version 2.0 (the "License");
1406
+ * you may not use this file except in compliance with the License.
1407
+ * You may obtain a copy of the License at
1408
+ *
1409
+ * http://www.apache.org/licenses/LICENSE-2.0
1410
+ *
1411
+ * Unless required by applicable law or agreed to in writing, software
1412
+ * distributed under the License is distributed on an "AS IS" BASIS,
1413
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1414
+ * See the License for the specific language governing permissions and
1415
+ * limitations under the License.
1416
+ */await async function(e,t){return ar(e,"POST","/v1/accounts:signInWithCustomToken",or(e,t))}(n,{token:t,returnSecureToken:!0}),o=await ss._fromIdTokenResponse(n,"signIn",i);return await n._updateCurrentUser(o.user),o}const hs="__sak";
1417
+ /**
1418
+ * @license
1419
+ * Copyright 2019 Google LLC
1420
+ *
1421
+ * Licensed under the Apache License, Version 2.0 (the "License");
1422
+ * you may not use this file except in compliance with the License.
1423
+ * You may obtain a copy of the License at
1424
+ *
1425
+ * http://www.apache.org/licenses/LICENSE-2.0
1426
+ *
1427
+ * Unless required by applicable law or agreed to in writing, software
1428
+ * distributed under the License is distributed on an "AS IS" BASIS,
1429
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1430
+ * See the License for the specific language governing permissions and
1431
+ * limitations under the License.
1432
+ */class us{constructor(e,t){this.storageRetriever=e,this.type=t}_isAvailable(){try{return this.storage?(this.storage.setItem(hs,"1"),this.storage.removeItem(hs),Promise.resolve(!0)):Promise.resolve(!1)}catch(e){return Promise.resolve(!1)}}_set(e,t){return this.storage.setItem(e,JSON.stringify(t)),Promise.resolve()}_get(e){const t=this.storage.getItem(e);return Promise.resolve(t?JSON.parse(t):null)}_remove(e){return this.storage.removeItem(e),Promise.resolve()}get storage(){return this.storageRetriever()}}
1433
+ /**
1434
+ * @license
1435
+ * Copyright 2020 Google LLC
1436
+ *
1437
+ * Licensed under the Apache License, Version 2.0 (the "License");
1438
+ * you may not use this file except in compliance with the License.
1439
+ * You may obtain a copy of the License at
1440
+ *
1441
+ * http://www.apache.org/licenses/LICENSE-2.0
1442
+ *
1443
+ * Unless required by applicable law or agreed to in writing, software
1444
+ * distributed under the License is distributed on an "AS IS" BASIS,
1445
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1446
+ * See the License for the specific language governing permissions and
1447
+ * limitations under the License.
1448
+ */class ps extends us{constructor(){super((()=>window.localStorage),"LOCAL"),this.boundEventHandler=(e,t)=>this.onStorageEvent(e,t),this.listeners={},this.localCache={},this.pollTimer=null,this.fallbackToPolling=jr(),this._shouldAllowMigration=!0}forAllChangedKeys(e){for(const t of Object.keys(this.listeners)){const n=this.storage.getItem(t),i=this.localCache[t];n!==i&&e(t,i,n)}}onStorageEvent(e,t=!1){if(!e.key)return void this.forAllChangedKeys(((e,t,n)=>{this.notifyListeners(e,n)}));const n=e.key;t?this.detachListener():this.stopPolling();const i=()=>{const e=this.storage.getItem(n);(t||this.localCache[n]!==e)&&this.notifyListeners(n,e)},o=this.storage.getItem(n);Ur()&&o!==e.newValue&&e.newValue!==e.oldValue?setTimeout(i,10):i()}notifyListeners(e,t){this.localCache[e]=t;const n=this.listeners[e];if(n)for(const e of Array.from(n))e(t?JSON.parse(t):t)}startPolling(){this.stopPolling(),this.pollTimer=setInterval((()=>{this.forAllChangedKeys(((e,t,n)=>{this.onStorageEvent(new StorageEvent("storage",{key:e,oldValue:t,newValue:n}),!0)}))}),1e3)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}attachListener(){window.addEventListener("storage",this.boundEventHandler)}detachListener(){window.removeEventListener("storage",this.boundEventHandler)}_addListener(e,t){0===Object.keys(this.listeners).length&&(this.fallbackToPolling?this.startPolling():this.attachListener()),this.listeners[e]||(this.listeners[e]=new Set,this.localCache[e]=this.storage.getItem(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),0===this.listeners[e].size&&delete this.listeners[e]),0===Object.keys(this.listeners).length&&(this.detachListener(),this.stopPolling())}async _set(e,t){await super._set(e,t),this.localCache[e]=JSON.stringify(t)}async _get(e){const t=await super._get(e);return this.localCache[e]=JSON.stringify(t),t}async _remove(e){await super._remove(e),delete this.localCache[e]}}ps.type="LOCAL";const gs=ps;
1449
+ /**
1450
+ * @license
1451
+ * Copyright 2020 Google LLC
1452
+ *
1453
+ * Licensed under the Apache License, Version 2.0 (the "License");
1454
+ * you may not use this file except in compliance with the License.
1455
+ * You may obtain a copy of the License at
1456
+ *
1457
+ * http://www.apache.org/licenses/LICENSE-2.0
1458
+ *
1459
+ * Unless required by applicable law or agreed to in writing, software
1460
+ * distributed under the License is distributed on an "AS IS" BASIS,
1461
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1462
+ * See the License for the specific language governing permissions and
1463
+ * limitations under the License.
1464
+ */class fs extends us{constructor(){super((()=>window.sessionStorage),"SESSION")}_addListener(e,t){}_removeListener(e,t){}}fs.type="SESSION";const ms=fs;
1465
+ /**
1466
+ * @license
1467
+ * Copyright 2019 Google LLC
1468
+ *
1469
+ * Licensed under the Apache License, Version 2.0 (the "License");
1470
+ * you may not use this file except in compliance with the License.
1471
+ * You may obtain a copy of the License at
1472
+ *
1473
+ * http://www.apache.org/licenses/LICENSE-2.0
1474
+ *
1475
+ * Unless required by applicable law or agreed to in writing, software
1476
+ * distributed under the License is distributed on an "AS IS" BASIS,
1477
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1478
+ * See the License for the specific language governing permissions and
1479
+ * limitations under the License.
1480
+ */
1481
+ /**
1482
+ * @license
1483
+ * Copyright 2019 Google LLC
1484
+ *
1485
+ * Licensed under the Apache License, Version 2.0 (the "License");
1486
+ * you may not use this file except in compliance with the License.
1487
+ * You may obtain a copy of the License at
1488
+ *
1489
+ * http://www.apache.org/licenses/LICENSE-2.0
1490
+ *
1491
+ * Unless required by applicable law or agreed to in writing, software
1492
+ * distributed under the License is distributed on an "AS IS" BASIS,
1493
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1494
+ * See the License for the specific language governing permissions and
1495
+ * limitations under the License.
1496
+ */
1497
+ class vs{constructor(e){this.eventTarget=e,this.handlersMap={},this.boundEventHandler=this.handleEvent.bind(this)}static _getInstance(e){const t=this.receivers.find((t=>t.isListeningto(e)));if(t)return t;const n=new vs(e);return this.receivers.push(n),n}isListeningto(e){return this.eventTarget===e}async handleEvent(e){const t=e,{eventId:n,eventType:i,data:o}=t.data,r=this.handlersMap[i];if(!(null==r?void 0:r.size))return;t.ports[0].postMessage({status:"ack",eventId:n,eventType:i});const s=Array.from(r).map((async e=>e(t.origin,o))),a=await function(e){return Promise.all(e.map((async e=>{try{return{fulfilled:!0,value:await e}}catch(e){return{fulfilled:!1,reason:e}}})))}(s);t.ports[0].postMessage({status:"done",eventId:n,eventType:i,response:a})}_subscribe(e,t){0===Object.keys(this.handlersMap).length&&this.eventTarget.addEventListener("message",this.boundEventHandler),this.handlersMap[e]||(this.handlersMap[e]=new Set),this.handlersMap[e].add(t)}_unsubscribe(e,t){this.handlersMap[e]&&t&&this.handlersMap[e].delete(t),t&&0!==this.handlersMap[e].size||delete this.handlersMap[e],0===Object.keys(this.handlersMap).length&&this.eventTarget.removeEventListener("message",this.boundEventHandler)}}
1498
+ /**
1499
+ * @license
1500
+ * Copyright 2020 Google LLC
1501
+ *
1502
+ * Licensed under the Apache License, Version 2.0 (the "License");
1503
+ * you may not use this file except in compliance with the License.
1504
+ * You may obtain a copy of the License at
1505
+ *
1506
+ * http://www.apache.org/licenses/LICENSE-2.0
1507
+ *
1508
+ * Unless required by applicable law or agreed to in writing, software
1509
+ * distributed under the License is distributed on an "AS IS" BASIS,
1510
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1511
+ * See the License for the specific language governing permissions and
1512
+ * limitations under the License.
1513
+ */
1514
+ function bs(e="",t=10){let n="";for(let e=0;e<t;e++)n+=Math.floor(10*Math.random());return e+n}
1515
+ /**
1516
+ * @license
1517
+ * Copyright 2019 Google LLC
1518
+ *
1519
+ * Licensed under the Apache License, Version 2.0 (the "License");
1520
+ * you may not use this file except in compliance with the License.
1521
+ * You may obtain a copy of the License at
1522
+ *
1523
+ * http://www.apache.org/licenses/LICENSE-2.0
1524
+ *
1525
+ * Unless required by applicable law or agreed to in writing, software
1526
+ * distributed under the License is distributed on an "AS IS" BASIS,
1527
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1528
+ * See the License for the specific language governing permissions and
1529
+ * limitations under the License.
1530
+ */vs.receivers=[];class ws{constructor(e){this.target=e,this.handlers=new Set}removeMessageHandler(e){e.messageChannel&&(e.messageChannel.port1.removeEventListener("message",e.onMessage),e.messageChannel.port1.close()),this.handlers.delete(e)}async _send(e,t,n=50){const i="undefined"!=typeof MessageChannel?new MessageChannel:null;if(!i)throw new Error("connection_unavailable");let o,r;return new Promise(((s,a)=>{const l=bs("",20);i.port1.start();const c=setTimeout((()=>{a(new Error("unsupported_event"))}),n);r={messageChannel:i,onMessage(e){const t=e;if(t.data.eventId===l)switch(t.data.status){case"ack":clearTimeout(c),o=setTimeout((()=>{a(new Error("timeout"))}),3e3);break;case"done":clearTimeout(o),s(t.data.response);break;default:clearTimeout(c),clearTimeout(o),a(new Error("invalid_response"))}}},this.handlers.add(r),i.port1.addEventListener("message",r.onMessage),this.target.postMessage({eventType:e,eventId:l,data:t},[i.port2])})).finally((()=>{r&&this.removeMessageHandler(r)}))}}
1531
+ /**
1532
+ * @license
1533
+ * Copyright 2020 Google LLC
1534
+ *
1535
+ * Licensed under the Apache License, Version 2.0 (the "License");
1536
+ * you may not use this file except in compliance with the License.
1537
+ * You may obtain a copy of the License at
1538
+ *
1539
+ * http://www.apache.org/licenses/LICENSE-2.0
1540
+ *
1541
+ * Unless required by applicable law or agreed to in writing, software
1542
+ * distributed under the License is distributed on an "AS IS" BASIS,
1543
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1544
+ * See the License for the specific language governing permissions and
1545
+ * limitations under the License.
1546
+ */function xs(){return window}
1547
+ /**
1548
+ * @license
1549
+ * Copyright 2020 Google LLC.
1550
+ *
1551
+ * Licensed under the Apache License, Version 2.0 (the "License");
1552
+ * you may not use this file except in compliance with the License.
1553
+ * You may obtain a copy of the License at
1554
+ *
1555
+ * http://www.apache.org/licenses/LICENSE-2.0
1556
+ *
1557
+ * Unless required by applicable law or agreed to in writing, software
1558
+ * distributed under the License is distributed on an "AS IS" BASIS,
1559
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1560
+ * See the License for the specific language governing permissions and
1561
+ * limitations under the License.
1562
+ */
1563
+ function ys(){return void 0!==xs().WorkerGlobalScope&&"function"==typeof xs().importScripts}
1564
+ /**
1565
+ * @license
1566
+ * Copyright 2019 Google LLC
1567
+ *
1568
+ * Licensed under the Apache License, Version 2.0 (the "License");
1569
+ * you may not use this file except in compliance with the License.
1570
+ * You may obtain a copy of the License at
1571
+ *
1572
+ * http://www.apache.org/licenses/LICENSE-2.0
1573
+ *
1574
+ * Unless required by applicable law or agreed to in writing, software
1575
+ * distributed under the License is distributed on an "AS IS" BASIS,
1576
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1577
+ * See the License for the specific language governing permissions and
1578
+ * limitations under the License.
1579
+ */
1580
+ const _s="firebaseLocalStorageDb",ks="firebaseLocalStorage",Cs="fbase_key";class Is{constructor(e){this.request=e}toPromise(){return new Promise(((e,t)=>{this.request.addEventListener("success",(()=>{e(this.request.result)})),this.request.addEventListener("error",(()=>{t(this.request.error)}))}))}}function Ts(e,t){return e.transaction([ks],t?"readwrite":"readonly").objectStore(ks)}function Ss(){const e=indexedDB.open(_s,1);return new Promise(((t,n)=>{e.addEventListener("error",(()=>{n(e.error)})),e.addEventListener("upgradeneeded",(()=>{const t=e.result;try{t.createObjectStore(ks,{keyPath:Cs})}catch(e){n(e)}})),e.addEventListener("success",(async()=>{const n=e.result;n.objectStoreNames.contains(ks)?t(n):(n.close(),await function(){const e=indexedDB.deleteDatabase(_s);return new Is(e).toPromise()}(),t(await Ss()))}))}))}async function Es(e,t,n){const i=Ts(e,!0).put({[Cs]:t,value:n});return new Is(i).toPromise()}function Ps(e,t){const n=Ts(e,!0).delete(t);return new Is(n).toPromise()}class Ls{constructor(){this.type="LOCAL",this._shouldAllowMigration=!0,this.listeners={},this.localCache={},this.pollTimer=null,this.pendingWrites=0,this.receiver=null,this.sender=null,this.serviceWorkerReceiverAvailable=!1,this.activeServiceWorker=null,this._workerInitializationPromise=this.initializeServiceWorkerMessaging().then((()=>{}),(()=>{}))}async _openDb(){return this.db||(this.db=await Ss()),this.db}async _withRetries(e){let t=0;for(;;)try{const t=await this._openDb();return await e(t)}catch(e){if(t++>3)throw e;this.db&&(this.db.close(),this.db=void 0)}}async initializeServiceWorkerMessaging(){return ys()?this.initializeReceiver():this.initializeSender()}async initializeReceiver(){this.receiver=vs._getInstance(ys()?self:null),this.receiver._subscribe("keyChanged",(async(e,t)=>({keyProcessed:(await this._poll()).includes(t.key)}))),this.receiver._subscribe("ping",(async(e,t)=>["keyChanged"]))}async initializeSender(){var e,t;if(this.activeServiceWorker=await async function(){if(!(null===navigator||void 0===navigator?void 0:navigator.serviceWorker))return null;try{return(await navigator.serviceWorker.ready).active}catch(e){return null}}(),!this.activeServiceWorker)return;this.sender=new ws(this.activeServiceWorker);const n=await this.sender._send("ping",{},800);n&&(null===(e=n[0])||void 0===e?void 0:e.fulfilled)&&(null===(t=n[0])||void 0===t?void 0:t.value.includes("keyChanged"))&&(this.serviceWorkerReceiverAvailable=!0)}async notifyServiceWorker(e){var t;if(this.sender&&this.activeServiceWorker&&((null===(t=null===navigator||void 0===navigator?void 0:navigator.serviceWorker)||void 0===t?void 0:t.controller)||null)===this.activeServiceWorker)try{await this.sender._send("keyChanged",{key:e},this.serviceWorkerReceiverAvailable?800:50)}catch(t){}}async _isAvailable(){try{if(!indexedDB)return!1;const e=await Ss();return await Es(e,hs,"1"),await Ps(e,hs),!0}catch(e){}return!1}async _withPendingWrite(e){this.pendingWrites++;try{await e()}finally{this.pendingWrites--}}async _set(e,t){return this._withPendingWrite((async()=>(await this._withRetries((n=>Es(n,e,t))),this.localCache[e]=t,this.notifyServiceWorker(e))))}async _get(e){const t=await this._withRetries((t=>async function(e,t){const n=Ts(e,!1).get(t),i=await new Is(n).toPromise();return void 0===i?null:i.value}(t,e)));return this.localCache[e]=t,t}async _remove(e){return this._withPendingWrite((async()=>(await this._withRetries((t=>Ps(t,e))),delete this.localCache[e],this.notifyServiceWorker(e))))}async _poll(){const e=await this._withRetries((e=>{const t=Ts(e,!1).getAll();return new Is(t).toPromise()}));if(!e)return[];if(0!==this.pendingWrites)return[];const t=[],n=new Set;if(0!==e.length)for(const{fbase_key:i,value:o}of e)n.add(i),JSON.stringify(this.localCache[i])!==JSON.stringify(o)&&(this.notifyListeners(i,o),t.push(i));for(const e of Object.keys(this.localCache))this.localCache[e]&&!n.has(e)&&(this.notifyListeners(e,null),t.push(e));return t}notifyListeners(e,t){this.localCache[e]=t;const n=this.listeners[e];if(n)for(const e of Array.from(n))e(t)}startPolling(){this.stopPolling(),this.pollTimer=setInterval((async()=>this._poll()),800)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}_addListener(e,t){0===Object.keys(this.listeners).length&&this.startPolling(),this.listeners[e]||(this.listeners[e]=new Set,this._get(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),0===this.listeners[e].size&&delete this.listeners[e]),0===Object.keys(this.listeners).length&&this.stopPolling()}}Ls.type="LOCAL";const Rs=Ls;new Zo(3e4,6e4);
1581
+ /**
1582
+ * @license
1583
+ * Copyright 2019 Google LLC
1584
+ *
1585
+ * Licensed under the Apache License, Version 2.0 (the "License");
1586
+ * you may not use this file except in compliance with the License.
1587
+ * You may obtain a copy of the License at
1588
+ *
1589
+ * http://www.apache.org/licenses/LICENSE-2.0
1590
+ *
1591
+ * Unless required by applicable law or agreed to in writing, software
1592
+ * distributed under the License is distributed on an "AS IS" BASIS,
1593
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1594
+ * See the License for the specific language governing permissions and
1595
+ * limitations under the License.
1596
+ */
1597
+ class Ns extends Qr{constructor(e){super("custom","custom"),this.params=e}_getIdTokenResponse(e){return Xr(e,this._buildIdpRequest())}_linkToIdToken(e,t){return Xr(e,this._buildIdpRequest(t))}_getReauthenticationResolver(e){return Xr(e,this._buildIdpRequest())}_buildIdpRequest(e){const t={requestUri:this.params.requestUri,sessionId:this.params.sessionId,postBody:this.params.postBody,tenantId:this.params.tenantId,pendingToken:this.params.pendingToken,returnSecureToken:!0,returnIdpCredential:!0};return e&&(t.idToken=e),t}}function Ds(e){
1598
+ /**
1599
+ * @license
1600
+ * Copyright 2020 Google LLC
1601
+ *
1602
+ * Licensed under the Apache License, Version 2.0 (the "License");
1603
+ * you may not use this file except in compliance with the License.
1604
+ * You may obtain a copy of the License at
1605
+ *
1606
+ * http://www.apache.org/licenses/LICENSE-2.0
1607
+ *
1608
+ * Unless required by applicable law or agreed to in writing, software
1609
+ * distributed under the License is distributed on an "AS IS" BASIS,
1610
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1611
+ * See the License for the specific language governing permissions and
1612
+ * limitations under the License.
1613
+ */
1614
+ return async function(e,t,n=!1){if(ii(e.app))return Promise.reject($o(e));const i="signIn",o=await cs(e,i,t),r=await ss._fromIdTokenResponse(e,i,o);return n||await e._updateCurrentUser(r.user),r}(e.auth,new Ns(e),e.bypassAuthState)}function As(e){const{auth:t,user:n}=e;return Go(n,t,"internal-error"),
1615
+ /**
1616
+ * @license
1617
+ * Copyright 2019 Google LLC
1618
+ *
1619
+ * Licensed under the Apache License, Version 2.0 (the "License");
1620
+ * you may not use this file except in compliance with the License.
1621
+ * You may obtain a copy of the License at
1622
+ *
1623
+ * http://www.apache.org/licenses/LICENSE-2.0
1624
+ *
1625
+ * Unless required by applicable law or agreed to in writing, software
1626
+ * distributed under the License is distributed on an "AS IS" BASIS,
1627
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1628
+ * See the License for the specific language governing permissions and
1629
+ * limitations under the License.
1630
+ */
1631
+ async function(e,t,n=!1){const{auth:i}=e;if(ii(i.app))return Promise.reject($o(i));const o="reauthenticate";try{const r=await mr(e,cs(i,o,t,e),n);Go(r.idToken,i,"internal-error");const s=gr(r.idToken);Go(s,i,"internal-error");const{sub:a}=s;return Go(e.uid===a,i,"user-mismatch"),ss._forOperation(e,o,r)}catch(e){throw"auth/user-not-found"===(null==e?void 0:e.code)&&Bo(i,"user-mismatch"),e}}(n,new Ns(e),e.bypassAuthState)}async function Os(e){const{auth:t,user:n}=e;return Go(n,t,"internal-error"),async function(e,t,n=!1){const i=await mr(e,t._linkToIdToken(e.auth,await e.getIdToken()),n);return ss._forOperation(e,"link",i)}(n,new Ns(e),e.bypassAuthState)}
1632
+ /**
1633
+ * @license
1634
+ * Copyright 2020 Google LLC
1635
+ *
1636
+ * Licensed under the Apache License, Version 2.0 (the "License");
1637
+ * you may not use this file except in compliance with the License.
1638
+ * You may obtain a copy of the License at
1639
+ *
1640
+ * http://www.apache.org/licenses/LICENSE-2.0
1641
+ *
1642
+ * Unless required by applicable law or agreed to in writing, software
1643
+ * distributed under the License is distributed on an "AS IS" BASIS,
1644
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1645
+ * See the License for the specific language governing permissions and
1646
+ * limitations under the License.
1647
+ */class Ms{constructor(e,t,n,i,o=!1){this.auth=e,this.resolver=n,this.user=i,this.bypassAuthState=o,this.pendingPromise=null,this.eventManager=null,this.filter=Array.isArray(t)?t:[t]}execute(){return new Promise((async(e,t)=>{this.pendingPromise={resolve:e,reject:t};try{this.eventManager=await this.resolver._initialize(this.auth),await this.onExecution(),this.eventManager.registerConsumer(this)}catch(e){this.reject(e)}}))}async onAuthEvent(e){const{urlResponse:t,sessionId:n,postBody:i,tenantId:o,error:r,type:s}=e;if(r)return void this.reject(r);const a={auth:this.auth,requestUri:t,sessionId:n,tenantId:o||void 0,postBody:i||void 0,user:this.user,bypassAuthState:this.bypassAuthState};try{this.resolve(await this.getIdpTask(s)(a))}catch(e){this.reject(e)}}onError(e){this.reject(e)}getIdpTask(e){switch(e){case"signInViaPopup":case"signInViaRedirect":return Ds;case"linkViaPopup":case"linkViaRedirect":return Os;case"reauthViaPopup":case"reauthViaRedirect":return As;default:Bo(this.auth,"internal-error")}}resolve(e){Yo(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.resolve(e),this.unregisterAndCleanUp()}reject(e){Yo(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.reject(e),this.unregisterAndCleanUp()}unregisterAndCleanUp(){this.eventManager&&this.eventManager.unregisterConsumer(this),this.pendingPromise=null,this.cleanUp()}}
1648
+ /**
1649
+ * @license
1650
+ * Copyright 2020 Google LLC
1651
+ *
1652
+ * Licensed under the Apache License, Version 2.0 (the "License");
1653
+ * you may not use this file except in compliance with the License.
1654
+ * You may obtain a copy of the License at
1655
+ *
1656
+ * http://www.apache.org/licenses/LICENSE-2.0
1657
+ *
1658
+ * Unless required by applicable law or agreed to in writing, software
1659
+ * distributed under the License is distributed on an "AS IS" BASIS,
1660
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1661
+ * See the License for the specific language governing permissions and
1662
+ * limitations under the License.
1663
+ */const Fs=new Zo(2e3,1e4);class zs extends Ms{constructor(e,t,n,i,o){super(e,t,i,o),this.provider=n,this.authWindow=null,this.pollId=null,zs.currentPopupAction&&zs.currentPopupAction.cancel(),zs.currentPopupAction=this}async executeNotNull(){const e=await this.execute();return Go(e,this.auth,"internal-error"),e}async onExecution(){Yo(1===this.filter.length,"Popup operations only handle one event");const e=bs();this.authWindow=await this.resolver._openPopup(this.auth,this.provider,this.filter[0],e),this.authWindow.associatedEvent=e,this.resolver._originValidation(this.auth).catch((e=>{this.reject(e)})),this.resolver._isIframeWebStorageSupported(this.auth,(e=>{e||this.reject(Vo(this.auth,"web-storage-unsupported"))})),this.pollUserCancellation()}get eventId(){var e;return(null===(e=this.authWindow)||void 0===e?void 0:e.associatedEvent)||null}cancel(){this.reject(Vo(this.auth,"cancelled-popup-request"))}cleanUp(){this.authWindow&&this.authWindow.close(),this.pollId&&window.clearTimeout(this.pollId),this.authWindow=null,this.pollId=null,zs.currentPopupAction=null}pollUserCancellation(){const e=()=>{var t,n;(null===(n=null===(t=this.authWindow)||void 0===t?void 0:t.window)||void 0===n?void 0:n.closed)?this.pollId=window.setTimeout((()=>{this.pollId=null,this.reject(Vo(this.auth,"popup-closed-by-user"))}),8e3):this.pollId=window.setTimeout(e,Fs.get())};e()}}zs.currentPopupAction=null;
1664
+ /**
1665
+ * @license
1666
+ * Copyright 2020 Google LLC
1667
+ *
1668
+ * Licensed under the Apache License, Version 2.0 (the "License");
1669
+ * you may not use this file except in compliance with the License.
1670
+ * You may obtain a copy of the License at
1671
+ *
1672
+ * http://www.apache.org/licenses/LICENSE-2.0
1673
+ *
1674
+ * Unless required by applicable law or agreed to in writing, software
1675
+ * distributed under the License is distributed on an "AS IS" BASIS,
1676
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1677
+ * See the License for the specific language governing permissions and
1678
+ * limitations under the License.
1679
+ */
1680
+ const Us="pendingRedirect",js=new Map;class qs extends Ms{constructor(e,t,n=!1){super(e,["signInViaRedirect","linkViaRedirect","reauthViaRedirect","unknown"],t,void 0,n),this.eventId=null}async execute(){let e=js.get(this.auth._key());if(!e){try{const t=await async function(e,t){const n=function(e){return Er(Us,e.config.apiKey,e.name)}(t),i=function(e){return Ir(e._redirectPersistence)}(e);if(!await i._isAvailable())return!1;const o="true"===await i._get(n);return await i._remove(n),o}(this.resolver,this.auth),n=t?await super.execute():null;e=()=>Promise.resolve(n)}catch(t){e=()=>Promise.reject(t)}js.set(this.auth._key(),e)}return this.bypassAuthState||js.set(this.auth._key(),(()=>Promise.resolve(null))),e()}async onAuthEvent(e){if("signInViaRedirect"===e.type)return super.onAuthEvent(e);if("unknown"!==e.type){if(e.eventId){const t=await this.auth._redirectUserForId(e.eventId);if(t)return this.user=t,super.onAuthEvent(e);this.resolve(null)}}else this.resolve(null)}async onExecution(){}cleanUp(){}}function Bs(e,t){js.set(e._key(),t)}async function Vs(e,t,n=!1){if(ii(e.app))return Promise.reject($o(e));const i=$r(e),o=
1681
+ /**
1682
+ * @license
1683
+ * Copyright 2021 Google LLC
1684
+ *
1685
+ * Licensed under the Apache License, Version 2.0 (the "License");
1686
+ * you may not use this file except in compliance with the License.
1687
+ * You may obtain a copy of the License at
1688
+ *
1689
+ * http://www.apache.org/licenses/LICENSE-2.0
1690
+ *
1691
+ * Unless required by applicable law or agreed to in writing, software
1692
+ * distributed under the License is distributed on an "AS IS" BASIS,
1693
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1694
+ * See the License for the specific language governing permissions and
1695
+ * limitations under the License.
1696
+ */
1697
+ function(e,t){return t?Ir(t):(Go(e._popupRedirectResolver,e,"argument-error"),e._popupRedirectResolver)}(i,t),r=new qs(i,o,n),s=await r.execute();return s&&!n&&(delete s.user._redirectEventId,await i._persistUserIfCurrent(s.user),await i._setRedirectUser(null,t)),s}
1698
+ /**
1699
+ * @license
1700
+ * Copyright 2020 Google LLC
1701
+ *
1702
+ * Licensed under the Apache License, Version 2.0 (the "License");
1703
+ * you may not use this file except in compliance with the License.
1704
+ * You may obtain a copy of the License at
1705
+ *
1706
+ * http://www.apache.org/licenses/LICENSE-2.0
1707
+ *
1708
+ * Unless required by applicable law or agreed to in writing, software
1709
+ * distributed under the License is distributed on an "AS IS" BASIS,
1710
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1711
+ * See the License for the specific language governing permissions and
1712
+ * limitations under the License.
1713
+ */class Hs{constructor(e){this.auth=e,this.cachedEventUids=new Set,this.consumers=new Set,this.queuedRedirectEvent=null,this.hasHandledPotentialRedirect=!1,this.lastProcessedEventTime=Date.now()}registerConsumer(e){this.consumers.add(e),this.queuedRedirectEvent&&this.isEventForConsumer(this.queuedRedirectEvent,e)&&(this.sendToConsumer(this.queuedRedirectEvent,e),this.saveEventToCache(this.queuedRedirectEvent),this.queuedRedirectEvent=null)}unregisterConsumer(e){this.consumers.delete(e)}onEvent(e){if(this.hasEventBeenHandled(e))return!1;let t=!1;return this.consumers.forEach((n=>{this.isEventForConsumer(e,n)&&(t=!0,this.sendToConsumer(e,n),this.saveEventToCache(e))})),this.hasHandledPotentialRedirect||!function(e){switch(e.type){case"signInViaRedirect":case"linkViaRedirect":case"reauthViaRedirect":return!0;case"unknown":return Ws(e);default:return!1}}
1714
+ /**
1715
+ * @license
1716
+ * Copyright 2020 Google LLC
1717
+ *
1718
+ * Licensed under the Apache License, Version 2.0 (the "License");
1719
+ * you may not use this file except in compliance with the License.
1720
+ * You may obtain a copy of the License at
1721
+ *
1722
+ * http://www.apache.org/licenses/LICENSE-2.0
1723
+ *
1724
+ * Unless required by applicable law or agreed to in writing, software
1725
+ * distributed under the License is distributed on an "AS IS" BASIS,
1726
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1727
+ * See the License for the specific language governing permissions and
1728
+ * limitations under the License.
1729
+ */(e)||(this.hasHandledPotentialRedirect=!0,t||(this.queuedRedirectEvent=e,t=!0)),t}sendToConsumer(e,t){var n;if(e.error&&!Ws(e)){const i=(null===(n=e.error.code)||void 0===n?void 0:n.split("auth/")[1])||"internal-error";t.onError(Vo(this.auth,i))}else t.onAuthEvent(e)}isEventForConsumer(e,t){const n=null===t.eventId||!!e.eventId&&e.eventId===t.eventId;return t.filter.includes(e.type)&&n}hasEventBeenHandled(e){return Date.now()-this.lastProcessedEventTime>=6e5&&this.cachedEventUids.clear(),this.cachedEventUids.has($s(e))}saveEventToCache(e){this.cachedEventUids.add($s(e)),this.lastProcessedEventTime=Date.now()}}function $s(e){return[e.type,e.eventId,e.sessionId,e.tenantId].filter((e=>e)).join("-")}function Ws({type:e,error:t}){return"unknown"===e&&"auth/no-auth-event"===(null==t?void 0:t.code)}
1730
+ /**
1731
+ * @license
1732
+ * Copyright 2020 Google LLC
1733
+ *
1734
+ * Licensed under the Apache License, Version 2.0 (the "License");
1735
+ * you may not use this file except in compliance with the License.
1736
+ * You may obtain a copy of the License at
1737
+ *
1738
+ * http://www.apache.org/licenses/LICENSE-2.0
1739
+ *
1740
+ * Unless required by applicable law or agreed to in writing, software
1741
+ * distributed under the License is distributed on an "AS IS" BASIS,
1742
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1743
+ * See the License for the specific language governing permissions and
1744
+ * limitations under the License.
1745
+ */
1746
+ const Gs=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,Ks=/^https?/;async function Ys(e){if(e.config.emulator)return;const{authorizedDomains:t}=await async function(e,t={}){return rr(e,"GET","/v1/projects",t)}(e);for(const e of t)try{if(Js(e))return}catch(e){}Bo(e,"unauthorized-domain")}function Js(e){const t=Jo(),{protocol:n,hostname:i}=new URL(t);if(e.startsWith("chrome-extension://")){const o=new URL(e);return""===o.hostname&&""===i?"chrome-extension:"===n&&e.replace("chrome-extension://","")===t.replace("chrome-extension://",""):"chrome-extension:"===n&&o.hostname===i}if(!Ks.test(n))return!1;if(Gs.test(e))return i===e;const o=e.replace(/\./g,"\\.");return new RegExp("^(.+\\."+o+"|"+o+")$","i").test(i)}
1747
+ /**
1748
+ * @license
1749
+ * Copyright 2020 Google LLC.
1750
+ *
1751
+ * Licensed under the Apache License, Version 2.0 (the "License");
1752
+ * you may not use this file except in compliance with the License.
1753
+ * You may obtain a copy of the License at
1754
+ *
1755
+ * http://www.apache.org/licenses/LICENSE-2.0
1756
+ *
1757
+ * Unless required by applicable law or agreed to in writing, software
1758
+ * distributed under the License is distributed on an "AS IS" BASIS,
1759
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1760
+ * See the License for the specific language governing permissions and
1761
+ * limitations under the License.
1762
+ */const Qs=new Zo(3e4,6e4);function Xs(){const e=xs().___jsl;if(null==e?void 0:e.H)for(const t of Object.keys(e.H))if(e.H[t].r=e.H[t].r||[],e.H[t].L=e.H[t].L||[],e.H[t].r=[...e.H[t].L],e.CP)for(let t=0;t<e.CP.length;t++)e.CP[t]=null}function Zs(e){return new Promise(((t,n)=>{var i,o,r,s;function a(){Xs(),gapi.load("gapi.iframes",{callback:()=>{t(gapi.iframes.getContext())},ontimeout:()=>{Xs(),n(Vo(e,"network-request-failed"))},timeout:Qs.get()})}if(null===(o=null===(i=xs().gapi)||void 0===i?void 0:i.iframes)||void 0===o?void 0:o.Iframe)t(gapi.iframes.getContext());else{if(!(null===(r=xs().gapi)||void 0===r?void 0:r.load)){const t=`__${"iframefcb"}${Math.floor(1e6*Math.random())}`;return xs()[t]=()=>{gapi.load?a():n(Vo(e,"network-request-failed"))},(s=`${Gr.gapiScript}?onload=${t}`,Gr.loadJS(s)).catch((e=>n(e)))}a()}})).catch((e=>{throw ea=null,e}))}let ea=null;
1763
+ /**
1764
+ * @license
1765
+ * Copyright 2020 Google LLC.
1766
+ *
1767
+ * Licensed under the Apache License, Version 2.0 (the "License");
1768
+ * you may not use this file except in compliance with the License.
1769
+ * You may obtain a copy of the License at
1770
+ *
1771
+ * http://www.apache.org/licenses/LICENSE-2.0
1772
+ *
1773
+ * Unless required by applicable law or agreed to in writing, software
1774
+ * distributed under the License is distributed on an "AS IS" BASIS,
1775
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1776
+ * See the License for the specific language governing permissions and
1777
+ * limitations under the License.
1778
+ */
1779
+ const ta=new Zo(5e3,15e3),na={style:{position:"absolute",top:"-100px",width:"1px",height:"1px"},"aria-hidden":"true",tabindex:"-1"},ia=new Map([["identitytoolkit.googleapis.com","p"],["staging-identitytoolkit.sandbox.googleapis.com","s"],["test-identitytoolkit.sandbox.googleapis.com","t"]]);function oa(e){const t=e.config;Go(t.authDomain,e,"auth-domain-config-required");const n=t.emulator?er(t,"emulator/auth/iframe"):`https://${e.config.authDomain}/__/auth/iframe`,i={apiKey:t.apiKey,appName:e.name,v:si},o=ia.get(e.config.apiHost);o&&(i.eid=o);const r=e._getFrameworks();return r.length&&(i.fw=r.join(",")),`${n}?${Ft(i).slice(1)}`}async function ra(e){const t=await function(e){return ea=ea||Zs(e),ea}(e),n=xs().gapi;return Go(n,e,"internal-error"),t.open({where:document.body,url:oa(e),messageHandlersFilter:n.iframes.CROSS_ORIGIN_IFRAMES_FILTER,attributes:na,dontclear:!0},(t=>new Promise((async(n,i)=>{await t.restyle({setHideOnLeave:!1});const o=Vo(e,"network-request-failed"),r=xs().setTimeout((()=>{i(o)}),ta.get());function s(){xs().clearTimeout(r),n(t)}t.ping(s).then(s,(()=>{i(o)}))}))))}
1780
+ /**
1781
+ * @license
1782
+ * Copyright 2020 Google LLC.
1783
+ *
1784
+ * Licensed under the Apache License, Version 2.0 (the "License");
1785
+ * you may not use this file except in compliance with the License.
1786
+ * You may obtain a copy of the License at
1787
+ *
1788
+ * http://www.apache.org/licenses/LICENSE-2.0
1789
+ *
1790
+ * Unless required by applicable law or agreed to in writing, software
1791
+ * distributed under the License is distributed on an "AS IS" BASIS,
1792
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1793
+ * See the License for the specific language governing permissions and
1794
+ * limitations under the License.
1795
+ */const sa={location:"yes",resizable:"yes",statusbar:"yes",toolbar:"no"};class aa{constructor(e){this.window=e,this.associatedEvent=null}close(){if(this.window)try{this.window.close()}catch(e){}}}function la(e,t,n,i=500,o=600){const r=Math.max((window.screen.availHeight-o)/2,0).toString(),s=Math.max((window.screen.availWidth-i)/2,0).toString();let a="";const l=Object.assign(Object.assign({},sa),{width:i.toString(),height:o.toString(),top:r,left:s}),c=bt().toLowerCase();n&&(a=Dr(c)?"_blank":n),Rr(c)&&(t=t||"http://localhost",l.scrollbars="yes");const d=Object.entries(l).reduce(((e,[t,n])=>`${e}${t}=${n},`),"");if(function(e=bt()){var t;return zr(e)&&!!(null===(t=window.navigator)||void 0===t?void 0:t.standalone)}(c)&&"_self"!==a)return function(e,t){const n=document.createElement("a");n.href=e,n.target=t;const i=document.createEvent("MouseEvent");i.initMouseEvent("click",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,1,null),n.dispatchEvent(i)}
1796
+ /**
1797
+ * @license
1798
+ * Copyright 2021 Google LLC
1799
+ *
1800
+ * Licensed under the Apache License, Version 2.0 (the "License");
1801
+ * you may not use this file except in compliance with the License.
1802
+ * You may obtain a copy of the License at
1803
+ *
1804
+ * http://www.apache.org/licenses/LICENSE-2.0
1805
+ *
1806
+ * Unless required by applicable law or agreed to in writing, software
1807
+ * distributed under the License is distributed on an "AS IS" BASIS,
1808
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1809
+ * See the License for the specific language governing permissions and
1810
+ * limitations under the License.
1811
+ */(t||"",a),new aa(null);const h=window.open(t||"",a,d);Go(h,e,"popup-blocked");try{h.focus()}catch(e){}return new aa(h)}const ca="__/auth/handler",da="emulator/auth/handler",ha=encodeURIComponent("fac");async function ua(e,t,n,i,o,r){Go(e.config.authDomain,e,"auth-domain-config-required"),Go(e.config.apiKey,e,"invalid-api-key");const s={apiKey:e.config.apiKey,appName:e.name,authType:n,redirectUrl:i,v:si,eventId:o};if(t instanceof es){t.setDefaultLanguage(e.languageCode),s.providerId=t.providerId||"",Dt(t.getCustomParameters())||(s.customParameters=JSON.stringify(t.getCustomParameters()));for(const[e,t]of Object.entries({}))s[e]=t}if(t instanceof ts){const e=t.getScopes().filter((e=>""!==e));e.length>0&&(s.scopes=e.join(","))}e.tenantId&&(s.tid=e.tenantId);const a=s;for(const e of Object.keys(a))void 0===a[e]&&delete a[e];const l=await e._getAppCheckToken(),c=l?`#${ha}=${encodeURIComponent(l)}`:"";return`${function({config:e}){if(!e.emulator)return`https://${e.authDomain}/${ca}`;return er(e,da)}
1812
+ /**
1813
+ * @license
1814
+ * Copyright 2020 Google LLC
1815
+ *
1816
+ * Licensed under the Apache License, Version 2.0 (the "License");
1817
+ * you may not use this file except in compliance with the License.
1818
+ * You may obtain a copy of the License at
1819
+ *
1820
+ * http://www.apache.org/licenses/LICENSE-2.0
1821
+ *
1822
+ * Unless required by applicable law or agreed to in writing, software
1823
+ * distributed under the License is distributed on an "AS IS" BASIS,
1824
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1825
+ * See the License for the specific language governing permissions and
1826
+ * limitations under the License.
1827
+ */(e)}?${Ft(a).slice(1)}${c}`}const pa="webStorageSupport";const ga=class{constructor(){this.eventManagers={},this.iframes={},this.originValidationPromises={},this._redirectPersistence=ms,this._completeRedirectFn=Vs,this._overrideRedirectResult=Bs}async _openPopup(e,t,n,i){var o;Yo(null===(o=this.eventManagers[e._key()])||void 0===o?void 0:o.manager,"_initialize() not called before _openPopup()");return la(e,await ua(e,t,n,Jo(),i),bs())}async _openRedirect(e,t,n,i){await this._originValidation(e);return function(e){xs().location.href=e}(await ua(e,t,n,Jo(),i)),new Promise((()=>{}))}_initialize(e){const t=e._key();if(this.eventManagers[t]){const{manager:e,promise:n}=this.eventManagers[t];return e?Promise.resolve(e):(Yo(n,"If manager is not set, promise should be"),n)}const n=this.initAndGetManager(e);return this.eventManagers[t]={promise:n},n.catch((()=>{delete this.eventManagers[t]})),n}async initAndGetManager(e){const t=await ra(e),n=new Hs(e);return t.register("authEvent",(t=>{Go(null==t?void 0:t.authEvent,e,"invalid-auth-event");return{status:n.onEvent(t.authEvent)?"ACK":"ERROR"}}),gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER),this.eventManagers[e._key()]={manager:n},this.iframes[e._key()]=t,n}_isIframeWebStorageSupported(e,t){this.iframes[e._key()].send(pa,{type:pa},(n=>{var i;const o=null===(i=null==n?void 0:n[0])||void 0===i?void 0:i[pa];void 0!==o&&t(!!o),Bo(e,"internal-error")}),gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER)}_originValidation(e){const t=e._key();return this.originValidationPromises[t]||(this.originValidationPromises[t]=Ys(e)),this.originValidationPromises[t]}get _shouldInitProactively(){return jr()||Nr()||zr()}};var fa="@firebase/auth",ma="1.8.1";
1828
+ /**
1829
+ * @license
1830
+ * Copyright 2020 Google LLC
1831
+ *
1832
+ * Licensed under the Apache License, Version 2.0 (the "License");
1833
+ * you may not use this file except in compliance with the License.
1834
+ * You may obtain a copy of the License at
1835
+ *
1836
+ * http://www.apache.org/licenses/LICENSE-2.0
1837
+ *
1838
+ * Unless required by applicable law or agreed to in writing, software
1839
+ * distributed under the License is distributed on an "AS IS" BASIS,
1840
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1841
+ * See the License for the specific language governing permissions and
1842
+ * limitations under the License.
1843
+ */
1844
+ class va{constructor(e){this.auth=e,this.internalListeners=new Map}getUid(){var e;return this.assertAuthConfigured(),(null===(e=this.auth.currentUser)||void 0===e?void 0:e.uid)||null}async getToken(e){if(this.assertAuthConfigured(),await this.auth._initializationPromise,!this.auth.currentUser)return null;return{accessToken:await this.auth.currentUser.getIdToken(e)}}addAuthTokenListener(e){if(this.assertAuthConfigured(),this.internalListeners.has(e))return;const t=this.auth.onIdTokenChanged((t=>{e((null==t?void 0:t.stsTokenManager.accessToken)||null)}));this.internalListeners.set(e,t),this.updateProactiveRefresh()}removeAuthTokenListener(e){this.assertAuthConfigured();const t=this.internalListeners.get(e);t&&(this.internalListeners.delete(e),t(),this.updateProactiveRefresh())}assertAuthConfigured(){Go(this.auth._initializationPromise,"dependent-sdk-initialized-before-auth")}updateProactiveRefresh(){this.internalListeners.size>0?this.auth._startProactiveRefresh():this.auth._stopProactiveRefresh()}}
1845
+ /**
1846
+ * @license
1847
+ * Copyright 2020 Google LLC
1848
+ *
1849
+ * Licensed under the Apache License, Version 2.0 (the "License");
1850
+ * you may not use this file except in compliance with the License.
1851
+ * You may obtain a copy of the License at
1852
+ *
1853
+ * http://www.apache.org/licenses/LICENSE-2.0
1854
+ *
1855
+ * Unless required by applicable law or agreed to in writing, software
1856
+ * distributed under the License is distributed on an "AS IS" BASIS,
1857
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1858
+ * See the License for the specific language governing permissions and
1859
+ * limitations under the License.
1860
+ */
1861
+ /**
1862
+ * @license
1863
+ * Copyright 2021 Google LLC
1864
+ *
1865
+ * Licensed under the Apache License, Version 2.0 (the "License");
1866
+ * you may not use this file except in compliance with the License.
1867
+ * You may obtain a copy of the License at
1868
+ *
1869
+ * http://www.apache.org/licenses/LICENSE-2.0
1870
+ *
1871
+ * Unless required by applicable law or agreed to in writing, software
1872
+ * distributed under the License is distributed on an "AS IS" BASIS,
1873
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1874
+ * See the License for the specific language governing permissions and
1875
+ * limitations under the License.
1876
+ */
1877
+ const ba=mt("authIdTokenMaxAge")||300;let wa=null;function xa(e=li()){const t=ni(e,"auth");if(t.isInitialized())return t.getImmediate();const n=
1878
+ /**
1879
+ * @license
1880
+ * Copyright 2020 Google LLC
1881
+ *
1882
+ * Licensed under the Apache License, Version 2.0 (the "License");
1883
+ * you may not use this file except in compliance with the License.
1884
+ * You may obtain a copy of the License at
1885
+ *
1886
+ * http://www.apache.org/licenses/LICENSE-2.0
1887
+ *
1888
+ * Unless required by applicable law or agreed to in writing, software
1889
+ * distributed under the License is distributed on an "AS IS" BASIS,
1890
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1891
+ * See the License for the specific language governing permissions and
1892
+ * limitations under the License.
1893
+ */
1894
+ function(e,t){const n=ni(e,"auth");if(n.isInitialized()){const e=n.getImmediate();if(Ot(n.getOptions(),null!=t?t:{}))return e;Bo(e,"already-initialized")}return n.initialize({options:t})}(e,{popupRedirectResolver:ga,persistence:[Rs,gs,ms]}),i=mt("authTokenSyncURL");if(i&&"boolean"==typeof isSecureContext&&isSecureContext){const e=new URL(i,location.origin);if(location.origin===e.origin){const t=(o=e.toString(),async e=>{const t=e&&await e.getIdTokenResult(),n=t&&((new Date).getTime()-Date.parse(t.issuedAtTime))/1e3;if(n&&n>ba)return;const i=null==t?void 0:t.token;wa!==i&&(wa=i,await fetch(o,{method:i?"POST":"DELETE",headers:i?{Authorization:`Bearer ${i}`}:{}}))});!function(e,t,n){Ht(e).beforeAuthStateChanged(t,n)}(n,t,(()=>t(n.currentUser))),function(e,t,n,i){Ht(e).onIdTokenChanged(t,n,i)}(n,(e=>t(e)))}}var o;const r=gt("auth");return r&&Kr(n,`http://${r}`),n}var ya,_a;ya={loadJS:e=>new Promise(((t,n)=>{const i=document.createElement("script");var o,r;i.setAttribute("src",e),i.onload=t,i.onerror=e=>{const t=Vo("internal-error");t.customData=e,n(t)},i.type="text/javascript",i.charset="UTF-8",(null!==(r=null===(o=document.getElementsByTagName("head"))||void 0===o?void 0:o[0])&&void 0!==r?r:document).appendChild(i)})),gapiScript:"https://apis.google.com/js/api.js",recaptchaV2Script:"https://www.google.com/recaptcha/api.js",recaptchaEnterpriseScript:"https://www.google.com/recaptcha/enterprise.js?render="},Gr=ya,_a="Browser",ti(new $t("auth",((e,{options:t})=>{const n=e.getProvider("app").getImmediate(),i=e.getProvider("heartbeat"),o=e.getProvider("app-check-internal"),{apiKey:r,authDomain:s}=n.options;Go(r&&!r.includes(":"),"invalid-api-key",{appName:n.name});const a={apiKey:r,authDomain:s,clientPlatform:_a,apiHost:"identitytoolkit.googleapis.com",tokenApiHost:"securetoken.googleapis.com",apiScheme:"https",sdkClientVersion:qr(_a)},l=new Hr(n,i,o,a);return function(e,t){const n=(null==t?void 0:t.persistence)||[],i=(Array.isArray(n)?n:[n]).map(Ir);(null==t?void 0:t.errorMap)&&e._updateErrorMap(t.errorMap),e._initializeWithPersistence(i,null==t?void 0:t.popupRedirectResolver)}(l,t),l}),"PUBLIC").setInstantiationMode("EXPLICIT").setInstanceCreatedCallback(((e,t,n)=>{e.getProvider("auth-internal").initialize()}))),ti(new $t("auth-internal",(e=>(e=>new va(e))($r(e.getProvider("auth").getImmediate()))),"PRIVATE").setInstantiationMode("EXPLICIT")),ci(fa,ma,function(e){switch(e){case"Node":return"node";case"ReactNative":return"rn";case"Worker":return"webworker";case"Cordova":return"cordova";case"WebExtension":return"web-extension";default:return}}(_a)),ci(fa,ma,"esm2017");const ka="@firebase/database",Ca="1.0.10";
1895
+ /**
1896
+ * @license
1897
+ * Copyright 2019 Google LLC
1898
+ *
1899
+ * Licensed under the Apache License, Version 2.0 (the "License");
1900
+ * you may not use this file except in compliance with the License.
1901
+ * You may obtain a copy of the License at
1902
+ *
1903
+ * http://www.apache.org/licenses/LICENSE-2.0
1904
+ *
1905
+ * Unless required by applicable law or agreed to in writing, software
1906
+ * distributed under the License is distributed on an "AS IS" BASIS,
1907
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1908
+ * See the License for the specific language governing permissions and
1909
+ * limitations under the License.
1910
+ */
1911
+ let Ia="";
1912
+ /**
1913
+ * @license
1914
+ * Copyright 2017 Google LLC
1915
+ *
1916
+ * Licensed under the Apache License, Version 2.0 (the "License");
1917
+ * you may not use this file except in compliance with the License.
1918
+ * You may obtain a copy of the License at
1919
+ *
1920
+ * http://www.apache.org/licenses/LICENSE-2.0
1921
+ *
1922
+ * Unless required by applicable law or agreed to in writing, software
1923
+ * distributed under the License is distributed on an "AS IS" BASIS,
1924
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1925
+ * See the License for the specific language governing permissions and
1926
+ * limitations under the License.
1927
+ */
1928
+ class Ta{constructor(e){this.domStorage_=e,this.prefix_="firebase:"}set(e,t){null==t?this.domStorage_.removeItem(this.prefixedName_(e)):this.domStorage_.setItem(this.prefixedName_(e),Pt(t))}get(e){const t=this.domStorage_.getItem(this.prefixedName_(e));return null==t?null:Et(t)}remove(e){this.domStorage_.removeItem(this.prefixedName_(e))}prefixedName_(e){return this.prefix_+e}toString(){return this.domStorage_.toString()}}
1929
+ /**
1930
+ * @license
1931
+ * Copyright 2017 Google LLC
1932
+ *
1933
+ * Licensed under the Apache License, Version 2.0 (the "License");
1934
+ * you may not use this file except in compliance with the License.
1935
+ * You may obtain a copy of the License at
1936
+ *
1937
+ * http://www.apache.org/licenses/LICENSE-2.0
1938
+ *
1939
+ * Unless required by applicable law or agreed to in writing, software
1940
+ * distributed under the License is distributed on an "AS IS" BASIS,
1941
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1942
+ * See the License for the specific language governing permissions and
1943
+ * limitations under the License.
1944
+ */class Sa{constructor(){this.cache_={},this.isInMemoryStorage=!0}set(e,t){null==t?delete this.cache_[e]:this.cache_[e]=t}get(e){return Rt(this.cache_,e)?this.cache_[e]:null}remove(e){delete this.cache_[e]}}
1945
+ /**
1946
+ * @license
1947
+ * Copyright 2017 Google LLC
1948
+ *
1949
+ * Licensed under the Apache License, Version 2.0 (the "License");
1950
+ * you may not use this file except in compliance with the License.
1951
+ * You may obtain a copy of the License at
1952
+ *
1953
+ * http://www.apache.org/licenses/LICENSE-2.0
1954
+ *
1955
+ * Unless required by applicable law or agreed to in writing, software
1956
+ * distributed under the License is distributed on an "AS IS" BASIS,
1957
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1958
+ * See the License for the specific language governing permissions and
1959
+ * limitations under the License.
1960
+ */const Ea=function(e){try{if("undefined"!=typeof window&&void 0!==window[e]){const t=window[e];return t.setItem("firebase:sentinel","cache"),t.removeItem("firebase:sentinel"),new Ta(t)}}catch(e){}return new Sa},Pa=Ea("localStorage"),La=Ea("sessionStorage"),Ra=new en("@firebase/database"),Na=function(){let e=1;return function(){return e++}}(),Da=function(e){const t=function(e){const t=[];let n=0;for(let i=0;i<e.length;i++){let o=e.charCodeAt(i);if(o>=55296&&o<=56319){const t=o-55296;i++,nt(i<e.length,"Surrogate pair missing trail surrogate."),o=65536+(t<<10)+(e.charCodeAt(i)-56320)}o<128?t[n++]=o:o<2048?(t[n++]=o>>6|192,t[n++]=63&o|128):o<65536?(t[n++]=o>>12|224,t[n++]=o>>6&63|128,t[n++]=63&o|128):(t[n++]=o>>18|240,t[n++]=o>>12&63|128,t[n++]=o>>6&63|128,t[n++]=63&o|128)}return t}(e),n=new zt;n.update(t);const i=n.digest();return rt.encodeByteArray(i)},Aa=function(...e){let t="";for(let n=0;n<e.length;n++){const i=e[n];Array.isArray(i)||i&&"object"==typeof i&&"number"==typeof i.length?t+=Aa.apply(null,i):t+="object"==typeof i?Pt(i):i,t+=" "}return t};let Oa=null,Ma=!0;const Fa=function(...e){var t;if(!0===Ma&&(Ma=!1,null===Oa&&!0===La.get("logging_enabled")&&(nt(!t,"Can't turn on custom loggers persistently."),Ra.logLevel=Yt.VERBOSE,Oa=Ra.log.bind(Ra))),Oa){const t=Aa.apply(null,e);Oa(t)}},za=function(e){return function(...t){Fa(e,...t)}},Ua=function(...e){const t="FIREBASE INTERNAL ERROR: "+Aa(...e);Ra.error(t)},ja=function(...e){const t=`FIREBASE FATAL ERROR: ${Aa(...e)}`;throw Ra.error(t),new Error(t)},qa=function(...e){const t="FIREBASE WARNING: "+Aa(...e);Ra.warn(t)},Ba=function(e){return"number"==typeof e&&(e!=e||e===Number.POSITIVE_INFINITY||e===Number.NEGATIVE_INFINITY)},Va="[MIN_NAME]",Ha="[MAX_NAME]",$a=function(e,t){if(e===t)return 0;if(e===Va||t===Ha)return-1;if(t===Va||e===Ha)return 1;{const n=Za(e),i=Za(t);return null!==n?null!==i?n-i==0?e.length-t.length:n-i:-1:null!==i?1:e<t?-1:1}},Wa=function(e,t){return e===t?0:e<t?-1:1},Ga=function(e,t){if(t&&e in t)return t[e];throw new Error("Missing required key ("+e+") in object: "+Pt(t))},Ka=function(e){if("object"!=typeof e||null===e)return Pt(e);const t=[];for(const n in e)t.push(n);t.sort();let n="{";for(let i=0;i<t.length;i++)0!==i&&(n+=","),n+=Pt(t[i]),n+=":",n+=Ka(e[t[i]]);return n+="}",n},Ya=function(e,t){const n=e.length;if(n<=t)return[e];const i=[];for(let o=0;o<n;o+=t)o+t>n?i.push(e.substring(o,n)):i.push(e.substring(o,o+t));return i};function Ja(e,t){for(const n in e)e.hasOwnProperty(n)&&t(n,e[n])}const Qa=function(e){nt(!Ba(e),"Invalid JSON number");const t=1023;let n,i,o,r,s;0===e?(i=0,o=0,n=1/e==-1/0?1:0):(n=e<0,(e=Math.abs(e))>=Math.pow(2,-1022)?(r=Math.min(Math.floor(Math.log(e)/Math.LN2),t),i=r+t,o=Math.round(e*Math.pow(2,52-r)-Math.pow(2,52))):(i=0,o=Math.round(e/Math.pow(2,-1074))));const a=[];for(s=52;s;s-=1)a.push(o%2?1:0),o=Math.floor(o/2);for(s=11;s;s-=1)a.push(i%2?1:0),i=Math.floor(i/2);a.push(n?1:0),a.reverse();const l=a.join("");let c="";for(s=0;s<64;s+=8){let e=parseInt(l.substr(s,8),2).toString(16);1===e.length&&(e="0"+e),c+=e}return c.toLowerCase()};const Xa=new RegExp("^-?(0*)\\d{1,10}$"),Za=function(e){if(Xa.test(e)){const t=Number(e);if(t>=-2147483648&&t<=2147483647)return t}return null},el=function(e){try{e()}catch(e){setTimeout((()=>{const t=e.stack||"";throw qa("Exception was thrown by user callback.",t),e}),Math.floor(0))}},tl=function(e,t){const n=setTimeout(e,t);return"number"==typeof n&&"undefined"!=typeof Deno&&Deno.unrefTimer?Deno.unrefTimer(n):"object"==typeof n&&n.unref&&n.unref(),n};
1961
+ /**
1962
+ * @license
1963
+ * Copyright 2021 Google LLC
1964
+ *
1965
+ * Licensed under the Apache License, Version 2.0 (the "License");
1966
+ * you may not use this file except in compliance with the License.
1967
+ * You may obtain a copy of the License at
1968
+ *
1969
+ * http://www.apache.org/licenses/LICENSE-2.0
1970
+ *
1971
+ * Unless required by applicable law or agreed to in writing, software
1972
+ * distributed under the License is distributed on an "AS IS" BASIS,
1973
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1974
+ * See the License for the specific language governing permissions and
1975
+ * limitations under the License.
1976
+ */
1977
+ class nl{constructor(e,t){this.appName_=e,this.appCheckProvider=t,this.appCheck=null==t?void 0:t.getImmediate({optional:!0}),this.appCheck||null==t||t.get().then((e=>this.appCheck=e))}getToken(e){return this.appCheck?this.appCheck.getToken(e):new Promise(((t,n)=>{setTimeout((()=>{this.appCheck?this.getToken(e).then(t,n):t(null)}),0)}))}addTokenChangeListener(e){var t;null===(t=this.appCheckProvider)||void 0===t||t.get().then((t=>t.addTokenListener(e)))}notifyForInvalidToken(){qa(`Provided AppCheck credentials for the app named "${this.appName_}" are invalid. This usually indicates your app was not initialized correctly.`)}}
1978
+ /**
1979
+ * @license
1980
+ * Copyright 2017 Google LLC
1981
+ *
1982
+ * Licensed under the Apache License, Version 2.0 (the "License");
1983
+ * you may not use this file except in compliance with the License.
1984
+ * You may obtain a copy of the License at
1985
+ *
1986
+ * http://www.apache.org/licenses/LICENSE-2.0
1987
+ *
1988
+ * Unless required by applicable law or agreed to in writing, software
1989
+ * distributed under the License is distributed on an "AS IS" BASIS,
1990
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1991
+ * See the License for the specific language governing permissions and
1992
+ * limitations under the License.
1993
+ */class il{constructor(e,t,n){this.appName_=e,this.firebaseOptions_=t,this.authProvider_=n,this.auth_=null,this.auth_=n.getImmediate({optional:!0}),this.auth_||n.onInit((e=>this.auth_=e))}getToken(e){return this.auth_?this.auth_.getToken(e).catch((e=>e&&"auth/token-not-initialized"===e.code?(Fa("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(e))):new Promise(((t,n)=>{setTimeout((()=>{this.auth_?this.getToken(e).then(t,n):t(null)}),0)}))}addTokenChangeListener(e){this.auth_?this.auth_.addAuthTokenListener(e):this.authProvider_.get().then((t=>t.addAuthTokenListener(e)))}removeTokenChangeListener(e){this.authProvider_.get().then((t=>t.removeAuthTokenListener(e)))}notifyForInvalidToken(){let e='Provided authentication credentials for the app named "'+this.appName_+'" are invalid. This usually indicates your app was not initialized correctly. ';"credential"in this.firebaseOptions_?e+='Make sure the "credential" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project.':"serviceAccount"in this.firebaseOptions_?e+='Make sure the "serviceAccount" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project.':e+='Make sure the "apiKey" and "databaseURL" properties provided to initializeApp() match the values provided for your app at https://console.firebase.google.com/.',qa(e)}}class ol{constructor(e){this.accessToken=e}getToken(e){return Promise.resolve({accessToken:this.accessToken})}addTokenChangeListener(e){e(this.accessToken)}removeTokenChangeListener(e){}notifyForInvalidToken(){}}ol.OWNER="owner";
1994
+ /**
1995
+ * @license
1996
+ * Copyright 2017 Google LLC
1997
+ *
1998
+ * Licensed under the Apache License, Version 2.0 (the "License");
1999
+ * you may not use this file except in compliance with the License.
2000
+ * You may obtain a copy of the License at
2001
+ *
2002
+ * http://www.apache.org/licenses/LICENSE-2.0
2003
+ *
2004
+ * Unless required by applicable law or agreed to in writing, software
2005
+ * distributed under the License is distributed on an "AS IS" BASIS,
2006
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2007
+ * See the License for the specific language governing permissions and
2008
+ * limitations under the License.
2009
+ */
2010
+ const rl=/(console\.firebase|firebase-console-\w+\.corp|firebase\.corp)\.google\.com/,sl="ac",al="websocket",ll="long_polling";
2011
+ /**
2012
+ * @license
2013
+ * Copyright 2017 Google LLC
2014
+ *
2015
+ * Licensed under the Apache License, Version 2.0 (the "License");
2016
+ * you may not use this file except in compliance with the License.
2017
+ * You may obtain a copy of the License at
2018
+ *
2019
+ * http://www.apache.org/licenses/LICENSE-2.0
2020
+ *
2021
+ * Unless required by applicable law or agreed to in writing, software
2022
+ * distributed under the License is distributed on an "AS IS" BASIS,
2023
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2024
+ * See the License for the specific language governing permissions and
2025
+ * limitations under the License.
2026
+ */
2027
+ class cl{constructor(e,t,n,i,o=!1,r="",s=!1,a=!1){this.secure=t,this.namespace=n,this.webSocketOnly=i,this.nodeAdmin=o,this.persistenceKey=r,this.includeNamespaceInQueryParams=s,this.isUsingEmulator=a,this._host=e.toLowerCase(),this._domain=this._host.substr(this._host.indexOf(".")+1),this.internalHost=Pa.get("host:"+e)||this._host}isCacheableHost(){return"s-"===this.internalHost.substr(0,2)}isCustomHost(){return"firebaseio.com"!==this._domain&&"firebaseio-demo.com"!==this._domain}get host(){return this._host}set host(e){e!==this.internalHost&&(this.internalHost=e,this.isCacheableHost()&&Pa.set("host:"+this._host,this.internalHost))}toString(){let e=this.toURLString();return this.persistenceKey&&(e+="<"+this.persistenceKey+">"),e}toURLString(){const e=this.secure?"https://":"http://",t=this.includeNamespaceInQueryParams?`?ns=${this.namespace}`:"";return`${e}${this.host}/${t}`}}function dl(e,t,n){let i;if(nt("string"==typeof t,"typeof type must == string"),nt("object"==typeof n,"typeof params must == object"),t===al)i=(e.secure?"wss://":"ws://")+e.internalHost+"/.ws?";else{if(t!==ll)throw new Error("Unknown connection type: "+t);i=(e.secure?"https://":"http://")+e.internalHost+"/.lp?"}(function(e){return e.host!==e.internalHost||e.isCustomHost()||e.includeNamespaceInQueryParams})(e)&&(n.ns=e.namespace);const o=[];return Ja(n,((e,t)=>{o.push(e+"="+t)})),i+o.join("&")}
2028
+ /**
2029
+ * @license
2030
+ * Copyright 2017 Google LLC
2031
+ *
2032
+ * Licensed under the Apache License, Version 2.0 (the "License");
2033
+ * you may not use this file except in compliance with the License.
2034
+ * You may obtain a copy of the License at
2035
+ *
2036
+ * http://www.apache.org/licenses/LICENSE-2.0
2037
+ *
2038
+ * Unless required by applicable law or agreed to in writing, software
2039
+ * distributed under the License is distributed on an "AS IS" BASIS,
2040
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2041
+ * See the License for the specific language governing permissions and
2042
+ * limitations under the License.
2043
+ */class hl{constructor(){this.counters_={}}incrementCounter(e,t=1){Rt(this.counters_,e)||(this.counters_[e]=0),this.counters_[e]+=t}get(){return dt(this.counters_)}}
2044
+ /**
2045
+ * @license
2046
+ * Copyright 2017 Google LLC
2047
+ *
2048
+ * Licensed under the Apache License, Version 2.0 (the "License");
2049
+ * you may not use this file except in compliance with the License.
2050
+ * You may obtain a copy of the License at
2051
+ *
2052
+ * http://www.apache.org/licenses/LICENSE-2.0
2053
+ *
2054
+ * Unless required by applicable law or agreed to in writing, software
2055
+ * distributed under the License is distributed on an "AS IS" BASIS,
2056
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2057
+ * See the License for the specific language governing permissions and
2058
+ * limitations under the License.
2059
+ */const ul={},pl={};function gl(e){const t=e.toString();return ul[t]||(ul[t]=new hl),ul[t]}
2060
+ /**
2061
+ * @license
2062
+ * Copyright 2017 Google LLC
2063
+ *
2064
+ * Licensed under the Apache License, Version 2.0 (the "License");
2065
+ * you may not use this file except in compliance with the License.
2066
+ * You may obtain a copy of the License at
2067
+ *
2068
+ * http://www.apache.org/licenses/LICENSE-2.0
2069
+ *
2070
+ * Unless required by applicable law or agreed to in writing, software
2071
+ * distributed under the License is distributed on an "AS IS" BASIS,
2072
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2073
+ * See the License for the specific language governing permissions and
2074
+ * limitations under the License.
2075
+ */
2076
+ class fl{constructor(e){this.onMessage_=e,this.pendingResponses=[],this.currentResponseNum=0,this.closeAfterResponse=-1,this.onClose=null}closeAfter(e,t){this.closeAfterResponse=e,this.onClose=t,this.closeAfterResponse<this.currentResponseNum&&(this.onClose(),this.onClose=null)}handleResponse(e,t){for(this.pendingResponses[e]=t;this.pendingResponses[this.currentResponseNum];){const e=this.pendingResponses[this.currentResponseNum];delete this.pendingResponses[this.currentResponseNum];for(let t=0;t<e.length;++t)e[t]&&el((()=>{this.onMessage_(e[t])}));if(this.currentResponseNum===this.closeAfterResponse){this.onClose&&(this.onClose(),this.onClose=null);break}this.currentResponseNum++}}}
2077
+ /**
2078
+ * @license
2079
+ * Copyright 2017 Google LLC
2080
+ *
2081
+ * Licensed under the Apache License, Version 2.0 (the "License");
2082
+ * you may not use this file except in compliance with the License.
2083
+ * You may obtain a copy of the License at
2084
+ *
2085
+ * http://www.apache.org/licenses/LICENSE-2.0
2086
+ *
2087
+ * Unless required by applicable law or agreed to in writing, software
2088
+ * distributed under the License is distributed on an "AS IS" BASIS,
2089
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2090
+ * See the License for the specific language governing permissions and
2091
+ * limitations under the License.
2092
+ */const ml="start";class vl{constructor(e,t,n,i,o,r,s){this.connId=e,this.repoInfo=t,this.applicationId=n,this.appCheckToken=i,this.authToken=o,this.transportSessionId=r,this.lastSessionId=s,this.bytesSent=0,this.bytesReceived=0,this.everConnected_=!1,this.log_=za(e),this.stats_=gl(t),this.urlFn=e=>(this.appCheckToken&&(e[sl]=this.appCheckToken),dl(t,ll,e))}open(e,t){this.curSegmentNum=0,this.onDisconnect_=t,this.myPacketOrderer=new fl(e),this.isClosed_=!1,this.connectTimeoutTimer_=setTimeout((()=>{this.log_("Timed out trying to connect."),this.onClosed_(),this.connectTimeoutTimer_=null}),Math.floor(3e4)),function(e){if("complete"===document.readyState)e();else{let t=!1;const n=function(){document.body?t||(t=!0,e()):setTimeout(n,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",n,!1),window.addEventListener("load",n,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",(()=>{"complete"===document.readyState&&n()})),window.attachEvent("onload",n))}}((()=>{if(this.isClosed_)return;this.scriptTagHolder=new bl(((...e)=>{const[t,n,i,o,r]=e;if(this.incrementIncomingBytes_(e),this.scriptTagHolder)if(this.connectTimeoutTimer_&&(clearTimeout(this.connectTimeoutTimer_),this.connectTimeoutTimer_=null),this.everConnected_=!0,t===ml)this.id=n,this.password=i;else{if("close"!==t)throw new Error("Unrecognized command received: "+t);n?(this.scriptTagHolder.sendNewPolls=!1,this.myPacketOrderer.closeAfter(n,(()=>{this.onClosed_()}))):this.onClosed_()}}),((...e)=>{const[t,n]=e;this.incrementIncomingBytes_(e),this.myPacketOrderer.handleResponse(t,n)}),(()=>{this.onClosed_()}),this.urlFn);const e={};e[ml]="t",e.ser=Math.floor(1e8*Math.random()),this.scriptTagHolder.uniqueCallbackIdentifier&&(e.cb=this.scriptTagHolder.uniqueCallbackIdentifier),e.v="5",this.transportSessionId&&(e.s=this.transportSessionId),this.lastSessionId&&(e.ls=this.lastSessionId),this.applicationId&&(e.p=this.applicationId),this.appCheckToken&&(e[sl]=this.appCheckToken),"undefined"!=typeof location&&location.hostname&&rl.test(location.hostname)&&(e.r="f");const t=this.urlFn(e);this.log_("Connecting via long-poll to "+t),this.scriptTagHolder.addTag(t,(()=>{}))}))}start(){this.scriptTagHolder.startLongPoll(this.id,this.password),this.addDisconnectPingFrame(this.id,this.password)}static forceAllow(){vl.forceAllow_=!0}static forceDisallow(){vl.forceDisallow_=!0}static isAvailable(){return!!vl.forceAllow_||!(vl.forceDisallow_||"undefined"==typeof document||null==document.createElement||"object"==typeof window&&window.chrome&&window.chrome.extension&&!/^chrome/.test(window.location.href)||"object"==typeof Windows&&"object"==typeof Windows.UI)}markConnectionHealthy(){}shutdown_(){this.isClosed_=!0,this.scriptTagHolder&&(this.scriptTagHolder.close(),this.scriptTagHolder=null),this.myDisconnFrame&&(document.body.removeChild(this.myDisconnFrame),this.myDisconnFrame=null),this.connectTimeoutTimer_&&(clearTimeout(this.connectTimeoutTimer_),this.connectTimeoutTimer_=null)}onClosed_(){this.isClosed_||(this.log_("Longpoll is closing itself"),this.shutdown_(),this.onDisconnect_&&(this.onDisconnect_(this.everConnected_),this.onDisconnect_=null))}close(){this.isClosed_||(this.log_("Longpoll is being closed."),this.shutdown_())}send(e){const t=Pt(e);this.bytesSent+=t.length,this.stats_.incrementCounter("bytes_sent",t.length);const n=at(t),i=Ya(n,1840);for(let e=0;e<i.length;e++)this.scriptTagHolder.enqueueSegment(this.curSegmentNum,i.length,i[e]),this.curSegmentNum++}addDisconnectPingFrame(e,t){this.myDisconnFrame=document.createElement("iframe");const n={dframe:"t"};n.id=e,n.pw=t,this.myDisconnFrame.src=this.urlFn(n),this.myDisconnFrame.style.display="none",document.body.appendChild(this.myDisconnFrame)}incrementIncomingBytes_(e){const t=Pt(e).length;this.bytesReceived+=t,this.stats_.incrementCounter("bytes_received",t)}}class bl{constructor(e,t,n,i){this.onDisconnect=n,this.urlFn=i,this.outstandingRequests=new Set,this.pendingSegs=[],this.currentSerial=Math.floor(1e8*Math.random()),this.sendNewPolls=!0;{this.uniqueCallbackIdentifier=Na(),window["pLPCommand"+this.uniqueCallbackIdentifier]=e,window["pRTLPCB"+this.uniqueCallbackIdentifier]=t,this.myIFrame=bl.createIFrame_();let n="";if(this.myIFrame.src&&"javascript:"===this.myIFrame.src.substr(0,11)){n='<script>document.domain="'+document.domain+'";<\/script>'}const i="<html><body>"+n+"</body></html>";try{this.myIFrame.doc.open(),this.myIFrame.doc.write(i),this.myIFrame.doc.close()}catch(e){Fa("frame writing exception"),e.stack&&Fa(e.stack),Fa(e)}}}static createIFrame_(){const e=document.createElement("iframe");if(e.style.display="none",!document.body)throw"Document body has not initialized. Wait to initialize Firebase until after the document is ready.";document.body.appendChild(e);try{e.contentWindow.document||Fa("No IE domain setting required")}catch(t){const n=document.domain;e.src="javascript:void((function(){document.open();document.domain='"+n+"';document.close();})())"}return e.contentDocument?e.doc=e.contentDocument:e.contentWindow?e.doc=e.contentWindow.document:e.document&&(e.doc=e.document),e}close(){this.alive=!1,this.myIFrame&&(this.myIFrame.doc.body.textContent="",setTimeout((()=>{null!==this.myIFrame&&(document.body.removeChild(this.myIFrame),this.myIFrame=null)}),Math.floor(0)));const e=this.onDisconnect;e&&(this.onDisconnect=null,e())}startLongPoll(e,t){for(this.myID=e,this.myPW=t,this.alive=!0;this.newRequest_(););}newRequest_(){if(this.alive&&this.sendNewPolls&&this.outstandingRequests.size<(this.pendingSegs.length>0?2:1)){this.currentSerial++;const e={};e.id=this.myID,e.pw=this.myPW,e.ser=this.currentSerial;let t=this.urlFn(e),n="",i=0;for(;this.pendingSegs.length>0;){if(!(this.pendingSegs[0].d.length+30+n.length<=1870))break;{const e=this.pendingSegs.shift();n=n+"&seg"+i+"="+e.seg+"&ts"+i+"="+e.ts+"&d"+i+"="+e.d,i++}}return t+=n,this.addLongPollTag_(t,this.currentSerial),!0}return!1}enqueueSegment(e,t,n){this.pendingSegs.push({seg:e,ts:t,d:n}),this.alive&&this.newRequest_()}addLongPollTag_(e,t){this.outstandingRequests.add(t);const n=()=>{this.outstandingRequests.delete(t),this.newRequest_()},i=setTimeout(n,Math.floor(25e3));this.addTag(e,(()=>{clearTimeout(i),n()}))}addTag(e,t){setTimeout((()=>{try{if(!this.sendNewPolls)return;const n=this.myIFrame.doc.createElement("script");n.type="text/javascript",n.async=!0,n.src=e,n.onload=n.onreadystatechange=function(){const e=n.readyState;e&&"loaded"!==e&&"complete"!==e||(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),t())},n.onerror=()=>{Fa("Long-poll script failed to load: "+e),this.sendNewPolls=!1,this.close()},this.myIFrame.doc.body.appendChild(n)}catch(e){}}),Math.floor(1))}}
2093
+ /**
2094
+ * @license
2095
+ * Copyright 2017 Google LLC
2096
+ *
2097
+ * Licensed under the Apache License, Version 2.0 (the "License");
2098
+ * you may not use this file except in compliance with the License.
2099
+ * You may obtain a copy of the License at
2100
+ *
2101
+ * http://www.apache.org/licenses/LICENSE-2.0
2102
+ *
2103
+ * Unless required by applicable law or agreed to in writing, software
2104
+ * distributed under the License is distributed on an "AS IS" BASIS,
2105
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2106
+ * See the License for the specific language governing permissions and
2107
+ * limitations under the License.
2108
+ */let wl=null;"undefined"!=typeof MozWebSocket?wl=MozWebSocket:"undefined"!=typeof WebSocket&&(wl=WebSocket);class xl{constructor(e,t,n,i,o,r,s){this.connId=e,this.applicationId=n,this.appCheckToken=i,this.authToken=o,this.keepaliveTimer=null,this.frames=null,this.totalFrames=0,this.bytesSent=0,this.bytesReceived=0,this.log_=za(this.connId),this.stats_=gl(t),this.connURL=xl.connectionURL_(t,r,s,i,n),this.nodeAdmin=t.nodeAdmin}static connectionURL_(e,t,n,i,o){const r={v:"5"};return"undefined"!=typeof location&&location.hostname&&rl.test(location.hostname)&&(r.r="f"),t&&(r.s=t),n&&(r.ls=n),i&&(r[sl]=i),o&&(r.p=o),dl(e,al,r)}open(e,t){this.onDisconnect=t,this.onMessage=e,this.log_("Websocket connecting to "+this.connURL),this.everConnected_=!1,Pa.set("previous_websocket_failure",!0);try{let e;_t(),this.mySock=new wl(this.connURL,[],e)}catch(e){this.log_("Error instantiating WebSocket.");const t=e.message||e.data;return t&&this.log_(t),void this.onClosed_()}this.mySock.onopen=()=>{this.log_("Websocket connected."),this.everConnected_=!0},this.mySock.onclose=()=>{this.log_("Websocket connection was disconnected."),this.mySock=null,this.onClosed_()},this.mySock.onmessage=e=>{this.handleIncomingFrame(e)},this.mySock.onerror=e=>{this.log_("WebSocket error. Closing connection.");const t=e.message||e.data;t&&this.log_(t),this.onClosed_()}}start(){}static forceDisallow(){xl.forceDisallow_=!0}static isAvailable(){let e=!1;if("undefined"!=typeof navigator&&navigator.userAgent){const t=/Android ([0-9]{0,}\.[0-9]{0,})/,n=navigator.userAgent.match(t);n&&n.length>1&&parseFloat(n[1])<4.4&&(e=!0)}return!e&&null!==wl&&!xl.forceDisallow_}static previouslyFailed(){return Pa.isInMemoryStorage||!0===Pa.get("previous_websocket_failure")}markConnectionHealthy(){Pa.remove("previous_websocket_failure")}appendFrame_(e){if(this.frames.push(e),this.frames.length===this.totalFrames){const e=this.frames.join("");this.frames=null;const t=Et(e);this.onMessage(t)}}handleNewFrameCount_(e){this.totalFrames=e,this.frames=[]}extractFrameCount_(e){if(nt(null===this.frames,"We already have a frame buffer"),e.length<=6){const t=Number(e);if(!isNaN(t))return this.handleNewFrameCount_(t),null}return this.handleNewFrameCount_(1),e}handleIncomingFrame(e){if(null===this.mySock)return;const t=e.data;if(this.bytesReceived+=t.length,this.stats_.incrementCounter("bytes_received",t.length),this.resetKeepAlive(),null!==this.frames)this.appendFrame_(t);else{const e=this.extractFrameCount_(t);null!==e&&this.appendFrame_(e)}}send(e){this.resetKeepAlive();const t=Pt(e);this.bytesSent+=t.length,this.stats_.incrementCounter("bytes_sent",t.length);const n=Ya(t,16384);n.length>1&&this.sendString_(String(n.length));for(let e=0;e<n.length;e++)this.sendString_(n[e])}shutdown_(){this.isClosed_=!0,this.keepaliveTimer&&(clearInterval(this.keepaliveTimer),this.keepaliveTimer=null),this.mySock&&(this.mySock.close(),this.mySock=null)}onClosed_(){this.isClosed_||(this.log_("WebSocket is closing itself"),this.shutdown_(),this.onDisconnect&&(this.onDisconnect(this.everConnected_),this.onDisconnect=null))}close(){this.isClosed_||(this.log_("WebSocket is being closed"),this.shutdown_())}resetKeepAlive(){clearInterval(this.keepaliveTimer),this.keepaliveTimer=setInterval((()=>{this.mySock&&this.sendString_("0"),this.resetKeepAlive()}),Math.floor(45e3))}sendString_(e){try{this.mySock.send(e)}catch(e){this.log_("Exception thrown from WebSocket.send():",e.message||e.data,"Closing connection."),setTimeout(this.onClosed_.bind(this),0)}}}xl.responsesRequiredToBeHealthy=2,xl.healthyTimeout=3e4;
2109
+ /**
2110
+ * @license
2111
+ * Copyright 2017 Google LLC
2112
+ *
2113
+ * Licensed under the Apache License, Version 2.0 (the "License");
2114
+ * you may not use this file except in compliance with the License.
2115
+ * You may obtain a copy of the License at
2116
+ *
2117
+ * http://www.apache.org/licenses/LICENSE-2.0
2118
+ *
2119
+ * Unless required by applicable law or agreed to in writing, software
2120
+ * distributed under the License is distributed on an "AS IS" BASIS,
2121
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2122
+ * See the License for the specific language governing permissions and
2123
+ * limitations under the License.
2124
+ */
2125
+ class yl{static get ALL_TRANSPORTS(){return[vl,xl]}static get IS_TRANSPORT_INITIALIZED(){return this.globalTransportInitialized_}constructor(e){this.initTransports_(e)}initTransports_(e){const t=xl&&xl.isAvailable();let n=t&&!xl.previouslyFailed();if(e.webSocketOnly&&(t||qa("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),n=!0),n)this.transports_=[xl];else{const e=this.transports_=[];for(const t of yl.ALL_TRANSPORTS)t&&t.isAvailable()&&e.push(t);yl.globalTransportInitialized_=!0}}initialTransport(){if(this.transports_.length>0)return this.transports_[0];throw new Error("No transports available")}upgradeTransport(){return this.transports_.length>1?this.transports_[1]:null}}yl.globalTransportInitialized_=!1;class _l{constructor(e,t,n,i,o,r,s,a,l,c){this.id=e,this.repoInfo_=t,this.applicationId_=n,this.appCheckToken_=i,this.authToken_=o,this.onMessage_=r,this.onReady_=s,this.onDisconnect_=a,this.onKill_=l,this.lastSessionId=c,this.connectionCount=0,this.pendingDataMessages=[],this.state_=0,this.log_=za("c:"+this.id+":"),this.transportManager_=new yl(t),this.log_("Connection created"),this.start_()}start_(){const e=this.transportManager_.initialTransport();this.conn_=new e(this.nextTransportId_(),this.repoInfo_,this.applicationId_,this.appCheckToken_,this.authToken_,null,this.lastSessionId),this.primaryResponsesRequired_=e.responsesRequiredToBeHealthy||0;const t=this.connReceiver_(this.conn_),n=this.disconnReceiver_(this.conn_);this.tx_=this.conn_,this.rx_=this.conn_,this.secondaryConn_=null,this.isHealthy_=!1,setTimeout((()=>{this.conn_&&this.conn_.open(t,n)}),Math.floor(0));const i=e.healthyTimeout||0;i>0&&(this.healthyTimeout_=tl((()=>{this.healthyTimeout_=null,this.isHealthy_||(this.conn_&&this.conn_.bytesReceived>102400?(this.log_("Connection exceeded healthy timeout but has received "+this.conn_.bytesReceived+" bytes. Marking connection healthy."),this.isHealthy_=!0,this.conn_.markConnectionHealthy()):this.conn_&&this.conn_.bytesSent>10240?this.log_("Connection exceeded healthy timeout but has sent "+this.conn_.bytesSent+" bytes. Leaving connection alive."):(this.log_("Closing unhealthy connection after timeout."),this.close()))}),Math.floor(i)))}nextTransportId_(){return"c:"+this.id+":"+this.connectionCount++}disconnReceiver_(e){return t=>{e===this.conn_?this.onConnectionLost_(t):e===this.secondaryConn_?(this.log_("Secondary connection lost."),this.onSecondaryConnectionLost_()):this.log_("closing an old connection")}}connReceiver_(e){return t=>{2!==this.state_&&(e===this.rx_?this.onPrimaryMessageReceived_(t):e===this.secondaryConn_?this.onSecondaryMessageReceived_(t):this.log_("message on old connection"))}}sendRequest(e){const t={t:"d",d:e};this.sendData_(t)}tryCleanupConnection(){this.tx_===this.secondaryConn_&&this.rx_===this.secondaryConn_&&(this.log_("cleaning up and promoting a connection: "+this.secondaryConn_.connId),this.conn_=this.secondaryConn_,this.secondaryConn_=null)}onSecondaryControl_(e){if("t"in e){const t=e.t;"a"===t?this.upgradeIfSecondaryHealthy_():"r"===t?(this.log_("Got a reset on secondary, closing it"),this.secondaryConn_.close(),this.tx_!==this.secondaryConn_&&this.rx_!==this.secondaryConn_||this.close()):"o"===t&&(this.log_("got pong on secondary."),this.secondaryResponsesRequired_--,this.upgradeIfSecondaryHealthy_())}}onSecondaryMessageReceived_(e){const t=Ga("t",e),n=Ga("d",e);if("c"===t)this.onSecondaryControl_(n);else{if("d"!==t)throw new Error("Unknown protocol layer: "+t);this.pendingDataMessages.push(n)}}upgradeIfSecondaryHealthy_(){this.secondaryResponsesRequired_<=0?(this.log_("Secondary connection is healthy."),this.isHealthy_=!0,this.secondaryConn_.markConnectionHealthy(),this.proceedWithUpgrade_()):(this.log_("sending ping on secondary."),this.secondaryConn_.send({t:"c",d:{t:"p",d:{}}}))}proceedWithUpgrade_(){this.secondaryConn_.start(),this.log_("sending client ack on secondary"),this.secondaryConn_.send({t:"c",d:{t:"a",d:{}}}),this.log_("Ending transmission on primary"),this.conn_.send({t:"c",d:{t:"n",d:{}}}),this.tx_=this.secondaryConn_,this.tryCleanupConnection()}onPrimaryMessageReceived_(e){const t=Ga("t",e),n=Ga("d",e);"c"===t?this.onControl_(n):"d"===t&&this.onDataMessage_(n)}onDataMessage_(e){this.onPrimaryResponse_(),this.onMessage_(e)}onPrimaryResponse_(){this.isHealthy_||(this.primaryResponsesRequired_--,this.primaryResponsesRequired_<=0&&(this.log_("Primary connection is healthy."),this.isHealthy_=!0,this.conn_.markConnectionHealthy()))}onControl_(e){const t=Ga("t",e);if("d"in e){const n=e.d;if("h"===t){const e=Object.assign({},n);this.repoInfo_.isUsingEmulator&&(e.h=this.repoInfo_.host),this.onHandshake_(e)}else if("n"===t){this.log_("recvd end transmission on primary"),this.rx_=this.secondaryConn_;for(let e=0;e<this.pendingDataMessages.length;++e)this.onDataMessage_(this.pendingDataMessages[e]);this.pendingDataMessages=[],this.tryCleanupConnection()}else"s"===t?this.onConnectionShutdown_(n):"r"===t?this.onReset_(n):"e"===t?Ua("Server Error: "+n):"o"===t?(this.log_("got pong on primary."),this.onPrimaryResponse_(),this.sendPingOnPrimaryIfNecessary_()):Ua("Unknown control packet command: "+t)}}onHandshake_(e){const t=e.ts,n=e.v,i=e.h;this.sessionId=e.s,this.repoInfo_.host=i,0===this.state_&&(this.conn_.start(),this.onConnectionEstablished_(this.conn_,t),"5"!==n&&qa("Protocol version mismatch detected"),this.tryStartUpgrade_())}tryStartUpgrade_(){const e=this.transportManager_.upgradeTransport();e&&this.startUpgrade_(e)}startUpgrade_(e){this.secondaryConn_=new e(this.nextTransportId_(),this.repoInfo_,this.applicationId_,this.appCheckToken_,this.authToken_,this.sessionId),this.secondaryResponsesRequired_=e.responsesRequiredToBeHealthy||0;const t=this.connReceiver_(this.secondaryConn_),n=this.disconnReceiver_(this.secondaryConn_);this.secondaryConn_.open(t,n),tl((()=>{this.secondaryConn_&&(this.log_("Timed out trying to upgrade."),this.secondaryConn_.close())}),Math.floor(6e4))}onReset_(e){this.log_("Reset packet received. New host: "+e),this.repoInfo_.host=e,1===this.state_?this.close():(this.closeConnections_(),this.start_())}onConnectionEstablished_(e,t){this.log_("Realtime connection established."),this.conn_=e,this.state_=1,this.onReady_&&(this.onReady_(t,this.sessionId),this.onReady_=null),0===this.primaryResponsesRequired_?(this.log_("Primary connection is healthy."),this.isHealthy_=!0):tl((()=>{this.sendPingOnPrimaryIfNecessary_()}),Math.floor(5e3))}sendPingOnPrimaryIfNecessary_(){this.isHealthy_||1!==this.state_||(this.log_("sending ping on primary."),this.sendData_({t:"c",d:{t:"p",d:{}}}))}onSecondaryConnectionLost_(){const e=this.secondaryConn_;this.secondaryConn_=null,this.tx_!==e&&this.rx_!==e||this.close()}onConnectionLost_(e){this.conn_=null,e||0!==this.state_?1===this.state_&&this.log_("Realtime connection lost."):(this.log_("Realtime connection failed."),this.repoInfo_.isCacheableHost()&&(Pa.remove("host:"+this.repoInfo_.host),this.repoInfo_.internalHost=this.repoInfo_.host)),this.close()}onConnectionShutdown_(e){this.log_("Connection shutdown command received. Shutting down..."),this.onKill_&&(this.onKill_(e),this.onKill_=null),this.onDisconnect_=null,this.close()}sendData_(e){if(1!==this.state_)throw"Connection is not connected";this.tx_.send(e)}close(){2!==this.state_&&(this.log_("Closing realtime connection."),this.state_=2,this.closeConnections_(),this.onDisconnect_&&(this.onDisconnect_(),this.onDisconnect_=null))}closeConnections_(){this.log_("Shutting down all connections"),this.conn_&&(this.conn_.close(),this.conn_=null),this.secondaryConn_&&(this.secondaryConn_.close(),this.secondaryConn_=null),this.healthyTimeout_&&(clearTimeout(this.healthyTimeout_),this.healthyTimeout_=null)}}
2126
+ /**
2127
+ * @license
2128
+ * Copyright 2017 Google LLC
2129
+ *
2130
+ * Licensed under the Apache License, Version 2.0 (the "License");
2131
+ * you may not use this file except in compliance with the License.
2132
+ * You may obtain a copy of the License at
2133
+ *
2134
+ * http://www.apache.org/licenses/LICENSE-2.0
2135
+ *
2136
+ * Unless required by applicable law or agreed to in writing, software
2137
+ * distributed under the License is distributed on an "AS IS" BASIS,
2138
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2139
+ * See the License for the specific language governing permissions and
2140
+ * limitations under the License.
2141
+ */class kl{put(e,t,n,i){}merge(e,t,n,i){}refreshAuthToken(e){}refreshAppCheckToken(e){}onDisconnectPut(e,t,n){}onDisconnectMerge(e,t,n){}onDisconnectCancel(e,t){}reportStats(e){}}
2142
+ /**
2143
+ * @license
2144
+ * Copyright 2017 Google LLC
2145
+ *
2146
+ * Licensed under the Apache License, Version 2.0 (the "License");
2147
+ * you may not use this file except in compliance with the License.
2148
+ * You may obtain a copy of the License at
2149
+ *
2150
+ * http://www.apache.org/licenses/LICENSE-2.0
2151
+ *
2152
+ * Unless required by applicable law or agreed to in writing, software
2153
+ * distributed under the License is distributed on an "AS IS" BASIS,
2154
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2155
+ * See the License for the specific language governing permissions and
2156
+ * limitations under the License.
2157
+ */class Cl{constructor(e){this.allowedEvents_=e,this.listeners_={},nt(Array.isArray(e)&&e.length>0,"Requires a non-empty array")}trigger(e,...t){if(Array.isArray(this.listeners_[e])){const n=[...this.listeners_[e]];for(let e=0;e<n.length;e++)n[e].callback.apply(n[e].context,t)}}on(e,t,n){this.validateEventType_(e),this.listeners_[e]=this.listeners_[e]||[],this.listeners_[e].push({callback:t,context:n});const i=this.getInitialEvent(e);i&&t.apply(n,i)}off(e,t,n){this.validateEventType_(e);const i=this.listeners_[e]||[];for(let e=0;e<i.length;e++)if(i[e].callback===t&&(!n||n===i[e].context))return void i.splice(e,1)}validateEventType_(e){nt(this.allowedEvents_.find((t=>t===e)),"Unknown event: "+e)}}
2158
+ /**
2159
+ * @license
2160
+ * Copyright 2017 Google LLC
2161
+ *
2162
+ * Licensed under the Apache License, Version 2.0 (the "License");
2163
+ * you may not use this file except in compliance with the License.
2164
+ * You may obtain a copy of the License at
2165
+ *
2166
+ * http://www.apache.org/licenses/LICENSE-2.0
2167
+ *
2168
+ * Unless required by applicable law or agreed to in writing, software
2169
+ * distributed under the License is distributed on an "AS IS" BASIS,
2170
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2171
+ * See the License for the specific language governing permissions and
2172
+ * limitations under the License.
2173
+ */class Il extends Cl{static getInstance(){return new Il}constructor(){super(["online"]),this.online_=!0,"undefined"==typeof window||void 0===window.addEventListener||wt()||(window.addEventListener("online",(()=>{this.online_||(this.online_=!0,this.trigger("online",!0))}),!1),window.addEventListener("offline",(()=>{this.online_&&(this.online_=!1,this.trigger("online",!1))}),!1))}getInitialEvent(e){return nt("online"===e,"Unknown event type: "+e),[this.online_]}currentlyOnline(){return this.online_}}
2174
+ /**
2175
+ * @license
2176
+ * Copyright 2017 Google LLC
2177
+ *
2178
+ * Licensed under the Apache License, Version 2.0 (the "License");
2179
+ * you may not use this file except in compliance with the License.
2180
+ * You may obtain a copy of the License at
2181
+ *
2182
+ * http://www.apache.org/licenses/LICENSE-2.0
2183
+ *
2184
+ * Unless required by applicable law or agreed to in writing, software
2185
+ * distributed under the License is distributed on an "AS IS" BASIS,
2186
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2187
+ * See the License for the specific language governing permissions and
2188
+ * limitations under the License.
2189
+ */class Tl{constructor(e,t){if(void 0===t){this.pieces_=e.split("/");let t=0;for(let e=0;e<this.pieces_.length;e++)this.pieces_[e].length>0&&(this.pieces_[t]=this.pieces_[e],t++);this.pieces_.length=t,this.pieceNum_=0}else this.pieces_=e,this.pieceNum_=t}toString(){let e="";for(let t=this.pieceNum_;t<this.pieces_.length;t++)""!==this.pieces_[t]&&(e+="/"+this.pieces_[t]);return e||"/"}}function Sl(){return new Tl("")}function El(e){return e.pieceNum_>=e.pieces_.length?null:e.pieces_[e.pieceNum_]}function Pl(e){return e.pieces_.length-e.pieceNum_}function Ll(e){let t=e.pieceNum_;return t<e.pieces_.length&&t++,new Tl(e.pieces_,t)}function Rl(e){return e.pieceNum_<e.pieces_.length?e.pieces_[e.pieces_.length-1]:null}function Nl(e,t=0){return e.pieces_.slice(e.pieceNum_+t)}function Dl(e){if(e.pieceNum_>=e.pieces_.length)return null;const t=[];for(let n=e.pieceNum_;n<e.pieces_.length-1;n++)t.push(e.pieces_[n]);return new Tl(t,0)}function Al(e,t){const n=[];for(let t=e.pieceNum_;t<e.pieces_.length;t++)n.push(e.pieces_[t]);if(t instanceof Tl)for(let e=t.pieceNum_;e<t.pieces_.length;e++)n.push(t.pieces_[e]);else{const e=t.split("/");for(let t=0;t<e.length;t++)e[t].length>0&&n.push(e[t])}return new Tl(n,0)}function Ol(e){return e.pieceNum_>=e.pieces_.length}function Ml(e,t){const n=El(e),i=El(t);if(null===n)return t;if(n===i)return Ml(Ll(e),Ll(t));throw new Error("INTERNAL ERROR: innerPath ("+t+") is not within outerPath ("+e+")")}function Fl(e,t){const n=Nl(e,0),i=Nl(t,0);for(let e=0;e<n.length&&e<i.length;e++){const t=$a(n[e],i[e]);if(0!==t)return t}return n.length===i.length?0:n.length<i.length?-1:1}function zl(e,t){if(Pl(e)!==Pl(t))return!1;for(let n=e.pieceNum_,i=t.pieceNum_;n<=e.pieces_.length;n++,i++)if(e.pieces_[n]!==t.pieces_[i])return!1;return!0}function Ul(e,t){let n=e.pieceNum_,i=t.pieceNum_;if(Pl(e)>Pl(t))return!1;for(;n<e.pieces_.length;){if(e.pieces_[n]!==t.pieces_[i])return!1;++n,++i}return!0}class jl{constructor(e,t){this.errorPrefix_=t,this.parts_=Nl(e,0),this.byteLength_=Math.max(1,this.parts_.length);for(let e=0;e<this.parts_.length;e++)this.byteLength_+=Bt(this.parts_[e]);ql(this)}}function ql(e){if(e.byteLength_>768)throw new Error(e.errorPrefix_+"has a key path longer than 768 bytes ("+e.byteLength_+").");if(e.parts_.length>32)throw new Error(e.errorPrefix_+"path specified exceeds the maximum depth that can be written (32) or object contains a cycle "+Bl(e))}function Bl(e){return 0===e.parts_.length?"":"in property '"+e.parts_.join(".")+"'"}
2190
+ /**
2191
+ * @license
2192
+ * Copyright 2017 Google LLC
2193
+ *
2194
+ * Licensed under the Apache License, Version 2.0 (the "License");
2195
+ * you may not use this file except in compliance with the License.
2196
+ * You may obtain a copy of the License at
2197
+ *
2198
+ * http://www.apache.org/licenses/LICENSE-2.0
2199
+ *
2200
+ * Unless required by applicable law or agreed to in writing, software
2201
+ * distributed under the License is distributed on an "AS IS" BASIS,
2202
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2203
+ * See the License for the specific language governing permissions and
2204
+ * limitations under the License.
2205
+ */class Vl extends Cl{static getInstance(){return new Vl}constructor(){let e,t;super(["visible"]),"undefined"!=typeof document&&void 0!==document.addEventListener&&(void 0!==document.hidden?(t="visibilitychange",e="hidden"):void 0!==document.mozHidden?(t="mozvisibilitychange",e="mozHidden"):void 0!==document.msHidden?(t="msvisibilitychange",e="msHidden"):void 0!==document.webkitHidden&&(t="webkitvisibilitychange",e="webkitHidden")),this.visible_=!0,t&&document.addEventListener(t,(()=>{const t=!document[e];t!==this.visible_&&(this.visible_=t,this.trigger("visible",t))}),!1)}getInitialEvent(e){return nt("visible"===e,"Unknown event type: "+e),[this.visible_]}}
2206
+ /**
2207
+ * @license
2208
+ * Copyright 2017 Google LLC
2209
+ *
2210
+ * Licensed under the Apache License, Version 2.0 (the "License");
2211
+ * you may not use this file except in compliance with the License.
2212
+ * You may obtain a copy of the License at
2213
+ *
2214
+ * http://www.apache.org/licenses/LICENSE-2.0
2215
+ *
2216
+ * Unless required by applicable law or agreed to in writing, software
2217
+ * distributed under the License is distributed on an "AS IS" BASIS,
2218
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2219
+ * See the License for the specific language governing permissions and
2220
+ * limitations under the License.
2221
+ */const Hl=1e3;class $l extends kl{constructor(e,t,n,i,o,r,s,a){if(super(),this.repoInfo_=e,this.applicationId_=t,this.onDataUpdate_=n,this.onConnectStatus_=i,this.onServerInfoUpdate_=o,this.authTokenProvider_=r,this.appCheckTokenProvider_=s,this.authOverride_=a,this.id=$l.nextPersistentConnectionId_++,this.log_=za("p:"+this.id+":"),this.interruptReasons_={},this.listens=new Map,this.outstandingPuts_=[],this.outstandingGets_=[],this.outstandingPutCount_=0,this.outstandingGetCount_=0,this.onDisconnectRequestQueue_=[],this.connected_=!1,this.reconnectDelay_=Hl,this.maxReconnectDelay_=3e5,this.securityDebugCallback_=null,this.lastSessionId=null,this.establishConnectionTimer_=null,this.visible_=!1,this.requestCBHash_={},this.requestNumber_=0,this.realtime_=null,this.authToken_=null,this.appCheckToken_=null,this.forceTokenRefresh_=!1,this.invalidAuthTokenCount_=0,this.invalidAppCheckTokenCount_=0,this.firstConnection_=!0,this.lastConnectionAttemptTime_=null,this.lastConnectionEstablishedTime_=null,a&&!_t())throw new Error("Auth override specified in options, but not supported on non Node.js platforms");Vl.getInstance().on("visible",this.onVisible_,this),-1===e.host.indexOf("fblocal")&&Il.getInstance().on("online",this.onOnline_,this)}sendRequest(e,t,n){const i=++this.requestNumber_,o={r:i,a:e,b:t};this.log_(Pt(o)),nt(this.connected_,"sendRequest call when we're not connected not allowed."),this.realtime_.sendRequest(o),n&&(this.requestCBHash_[i]=n)}get(e){this.initConnection_();const t=new vt,n={action:"g",request:{p:e._path.toString(),q:e._queryObject},onComplete:e=>{const n=e.d;"ok"===e.s?t.resolve(n):t.reject(n)}};this.outstandingGets_.push(n),this.outstandingGetCount_++;const i=this.outstandingGets_.length-1;return this.connected_&&this.sendGet_(i),t.promise}listen(e,t,n,i){this.initConnection_();const o=e._queryIdentifier,r=e._path.toString();this.log_("Listen called for "+r+" "+o),this.listens.has(r)||this.listens.set(r,new Map),nt(e._queryParams.isDefault()||!e._queryParams.loadsAllData(),"listen() called for non-default but complete query"),nt(!this.listens.get(r).has(o),"listen() called twice for same path/queryId.");const s={onComplete:i,hashFn:t,query:e,tag:n};this.listens.get(r).set(o,s),this.connected_&&this.sendListen_(s)}sendGet_(e){const t=this.outstandingGets_[e];this.sendRequest("g",t.request,(n=>{delete this.outstandingGets_[e],this.outstandingGetCount_--,0===this.outstandingGetCount_&&(this.outstandingGets_=[]),t.onComplete&&t.onComplete(n)}))}sendListen_(e){const t=e.query,n=t._path.toString(),i=t._queryIdentifier;this.log_("Listen on "+n+" for "+i);const o={p:n};e.tag&&(o.q=t._queryObject,o.t=e.tag),o.h=e.hashFn(),this.sendRequest("q",o,(o=>{const r=o.d,s=o.s;$l.warnOnListenWarnings_(r,t);(this.listens.get(n)&&this.listens.get(n).get(i))===e&&(this.log_("listen response",o),"ok"!==s&&this.removeListen_(n,i),e.onComplete&&e.onComplete(s,r))}))}static warnOnListenWarnings_(e,t){if(e&&"object"==typeof e&&Rt(e,"w")){const n=Nt(e,"w");if(Array.isArray(n)&&~n.indexOf("no_index")){const e='".indexOn": "'+t._queryParams.getIndex().toString()+'"',n=t._path.toString();qa(`Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ${e} at ${n} to your security rules for better performance.`)}}}refreshAuthToken(e){this.authToken_=e,this.log_("Auth token refreshed"),this.authToken_?this.tryAuth():this.connected_&&this.sendRequest("unauth",{},(()=>{})),this.reduceReconnectDelayIfAdminCredential_(e)}reduceReconnectDelayIfAdminCredential_(e){(e&&40===e.length||function(e){const t=Lt(e).claims;return"object"==typeof t&&!0===t.admin}(e))&&(this.log_("Admin auth credential detected. Reducing max reconnect time."),this.maxReconnectDelay_=3e4)}refreshAppCheckToken(e){this.appCheckToken_=e,this.log_("App check token refreshed"),this.appCheckToken_?this.tryAppCheck():this.connected_&&this.sendRequest("unappeck",{},(()=>{}))}tryAuth(){if(this.connected_&&this.authToken_){const e=this.authToken_,t=function(e){const t=Lt(e).claims;return!!t&&"object"==typeof t&&t.hasOwnProperty("iat")}(e)?"auth":"gauth",n={cred:e};null===this.authOverride_?n.noauth=!0:"object"==typeof this.authOverride_&&(n.authvar=this.authOverride_),this.sendRequest(t,n,(t=>{const n=t.s,i=t.d||"error";this.authToken_===e&&("ok"===n?this.invalidAuthTokenCount_=0:this.onAuthRevoked_(n,i))}))}}tryAppCheck(){this.connected_&&this.appCheckToken_&&this.sendRequest("appcheck",{token:this.appCheckToken_},(e=>{const t=e.s,n=e.d||"error";"ok"===t?this.invalidAppCheckTokenCount_=0:this.onAppCheckRevoked_(t,n)}))}unlisten(e,t){const n=e._path.toString(),i=e._queryIdentifier;this.log_("Unlisten called for "+n+" "+i),nt(e._queryParams.isDefault()||!e._queryParams.loadsAllData(),"unlisten() called for non-default but complete query");this.removeListen_(n,i)&&this.connected_&&this.sendUnlisten_(n,i,e._queryObject,t)}sendUnlisten_(e,t,n,i){this.log_("Unlisten on "+e+" for "+t);const o={p:e};i&&(o.q=n,o.t=i),this.sendRequest("n",o)}onDisconnectPut(e,t,n){this.initConnection_(),this.connected_?this.sendOnDisconnect_("o",e,t,n):this.onDisconnectRequestQueue_.push({pathString:e,action:"o",data:t,onComplete:n})}onDisconnectMerge(e,t,n){this.initConnection_(),this.connected_?this.sendOnDisconnect_("om",e,t,n):this.onDisconnectRequestQueue_.push({pathString:e,action:"om",data:t,onComplete:n})}onDisconnectCancel(e,t){this.initConnection_(),this.connected_?this.sendOnDisconnect_("oc",e,null,t):this.onDisconnectRequestQueue_.push({pathString:e,action:"oc",data:null,onComplete:t})}sendOnDisconnect_(e,t,n,i){const o={p:t,d:n};this.log_("onDisconnect "+e,o),this.sendRequest(e,o,(e=>{i&&setTimeout((()=>{i(e.s,e.d)}),Math.floor(0))}))}put(e,t,n,i){this.putInternal("p",e,t,n,i)}merge(e,t,n,i){this.putInternal("m",e,t,n,i)}putInternal(e,t,n,i,o){this.initConnection_();const r={p:t,d:n};void 0!==o&&(r.h=o),this.outstandingPuts_.push({action:e,request:r,onComplete:i}),this.outstandingPutCount_++;const s=this.outstandingPuts_.length-1;this.connected_?this.sendPut_(s):this.log_("Buffering put: "+t)}sendPut_(e){const t=this.outstandingPuts_[e].action,n=this.outstandingPuts_[e].request,i=this.outstandingPuts_[e].onComplete;this.outstandingPuts_[e].queued=this.connected_,this.sendRequest(t,n,(n=>{this.log_(t+" response",n),delete this.outstandingPuts_[e],this.outstandingPutCount_--,0===this.outstandingPutCount_&&(this.outstandingPuts_=[]),i&&i(n.s,n.d)}))}reportStats(e){if(this.connected_){const t={c:e};this.log_("reportStats",t),this.sendRequest("s",t,(e=>{if("ok"!==e.s){const t=e.d;this.log_("reportStats","Error sending stats: "+t)}}))}}onDataMessage_(e){if("r"in e){this.log_("from server: "+Pt(e));const t=e.r,n=this.requestCBHash_[t];n&&(delete this.requestCBHash_[t],n(e.b))}else{if("error"in e)throw"A server-side error has occurred: "+e.error;"a"in e&&this.onDataPush_(e.a,e.b)}}onDataPush_(e,t){this.log_("handleServerMessage",e,t),"d"===e?this.onDataUpdate_(t.p,t.d,!1,t.t):"m"===e?this.onDataUpdate_(t.p,t.d,!0,t.t):"c"===e?this.onListenRevoked_(t.p,t.q):"ac"===e?this.onAuthRevoked_(t.s,t.d):"apc"===e?this.onAppCheckRevoked_(t.s,t.d):"sd"===e?this.onSecurityDebugPacket_(t):Ua("Unrecognized action received from server: "+Pt(e)+"\nAre you using the latest client?")}onReady_(e,t){this.log_("connection ready"),this.connected_=!0,this.lastConnectionEstablishedTime_=(new Date).getTime(),this.handleTimestamp_(e),this.lastSessionId=t,this.firstConnection_&&this.sendConnectStats_(),this.restoreState_(),this.firstConnection_=!1,this.onConnectStatus_(!0)}scheduleConnect_(e){nt(!this.realtime_,"Scheduling a connect when we're already connected/ing?"),this.establishConnectionTimer_&&clearTimeout(this.establishConnectionTimer_),this.establishConnectionTimer_=setTimeout((()=>{this.establishConnectionTimer_=null,this.establishConnection_()}),Math.floor(e))}initConnection_(){!this.realtime_&&this.firstConnection_&&this.scheduleConnect_(0)}onVisible_(e){e&&!this.visible_&&this.reconnectDelay_===this.maxReconnectDelay_&&(this.log_("Window became visible. Reducing delay."),this.reconnectDelay_=Hl,this.realtime_||this.scheduleConnect_(0)),this.visible_=e}onOnline_(e){e?(this.log_("Browser went online."),this.reconnectDelay_=Hl,this.realtime_||this.scheduleConnect_(0)):(this.log_("Browser went offline. Killing connection."),this.realtime_&&this.realtime_.close())}onRealtimeDisconnect_(){if(this.log_("data client disconnected"),this.connected_=!1,this.realtime_=null,this.cancelSentTransactions_(),this.requestCBHash_={},this.shouldReconnect_()){if(this.visible_){if(this.lastConnectionEstablishedTime_){(new Date).getTime()-this.lastConnectionEstablishedTime_>3e4&&(this.reconnectDelay_=Hl),this.lastConnectionEstablishedTime_=null}}else this.log_("Window isn't visible. Delaying reconnect."),this.reconnectDelay_=this.maxReconnectDelay_,this.lastConnectionAttemptTime_=(new Date).getTime();const e=(new Date).getTime()-this.lastConnectionAttemptTime_;let t=Math.max(0,this.reconnectDelay_-e);t=Math.random()*t,this.log_("Trying to reconnect in "+t+"ms"),this.scheduleConnect_(t),this.reconnectDelay_=Math.min(this.maxReconnectDelay_,1.3*this.reconnectDelay_)}this.onConnectStatus_(!1)}async establishConnection_(){if(this.shouldReconnect_()){this.log_("Making a connection attempt"),this.lastConnectionAttemptTime_=(new Date).getTime(),this.lastConnectionEstablishedTime_=null;const e=this.onDataMessage_.bind(this),t=this.onReady_.bind(this),n=this.onRealtimeDisconnect_.bind(this),i=this.id+":"+$l.nextConnectionId_++,o=this.lastSessionId;let r=!1,s=null;const a=function(){s?s.close():(r=!0,n())},l=function(e){nt(s,"sendRequest call when we're not connected not allowed."),s.sendRequest(e)};this.realtime_={close:a,sendRequest:l};const c=this.forceTokenRefresh_;this.forceTokenRefresh_=!1;try{const[a,l]=await Promise.all([this.authTokenProvider_.getToken(c),this.appCheckTokenProvider_.getToken(c)]);r?Fa("getToken() completed but was canceled"):(Fa("getToken() completed. Creating connection."),this.authToken_=a&&a.accessToken,this.appCheckToken_=l&&l.token,s=new _l(i,this.repoInfo_,this.applicationId_,this.appCheckToken_,this.authToken_,e,t,n,(e=>{qa(e+" ("+this.repoInfo_.toString()+")"),this.interrupt("server_kill")}),o))}catch(e){this.log_("Failed to get token: "+e),r||(this.repoInfo_.nodeAdmin&&qa(e),a())}}}interrupt(e){Fa("Interrupting connection for reason: "+e),this.interruptReasons_[e]=!0,this.realtime_?this.realtime_.close():(this.establishConnectionTimer_&&(clearTimeout(this.establishConnectionTimer_),this.establishConnectionTimer_=null),this.connected_&&this.onRealtimeDisconnect_())}resume(e){Fa("Resuming connection for reason: "+e),delete this.interruptReasons_[e],Dt(this.interruptReasons_)&&(this.reconnectDelay_=Hl,this.realtime_||this.scheduleConnect_(0))}handleTimestamp_(e){const t=e-(new Date).getTime();this.onServerInfoUpdate_({serverTimeOffset:t})}cancelSentTransactions_(){for(let e=0;e<this.outstandingPuts_.length;e++){const t=this.outstandingPuts_[e];t&&"h"in t.request&&t.queued&&(t.onComplete&&t.onComplete("disconnect"),delete this.outstandingPuts_[e],this.outstandingPutCount_--)}0===this.outstandingPutCount_&&(this.outstandingPuts_=[])}onListenRevoked_(e,t){let n;n=t?t.map((e=>Ka(e))).join("$"):"default";const i=this.removeListen_(e,n);i&&i.onComplete&&i.onComplete("permission_denied")}removeListen_(e,t){const n=new Tl(e).toString();let i;if(this.listens.has(n)){const e=this.listens.get(n);i=e.get(t),e.delete(t),0===e.size&&this.listens.delete(n)}else i=void 0;return i}onAuthRevoked_(e,t){Fa("Auth token revoked: "+e+"/"+t),this.authToken_=null,this.forceTokenRefresh_=!0,this.realtime_.close(),"invalid_token"!==e&&"permission_denied"!==e||(this.invalidAuthTokenCount_++,this.invalidAuthTokenCount_>=3&&(this.reconnectDelay_=3e4,this.authTokenProvider_.notifyForInvalidToken()))}onAppCheckRevoked_(e,t){Fa("App check token revoked: "+e+"/"+t),this.appCheckToken_=null,this.forceTokenRefresh_=!0,"invalid_token"!==e&&"permission_denied"!==e||(this.invalidAppCheckTokenCount_++,this.invalidAppCheckTokenCount_>=3&&this.appCheckTokenProvider_.notifyForInvalidToken())}onSecurityDebugPacket_(e){this.securityDebugCallback_?this.securityDebugCallback_(e):"msg"in e&&console.log("FIREBASE: "+e.msg.replace("\n","\nFIREBASE: "))}restoreState_(){this.tryAuth(),this.tryAppCheck();for(const e of this.listens.values())for(const t of e.values())this.sendListen_(t);for(let e=0;e<this.outstandingPuts_.length;e++)this.outstandingPuts_[e]&&this.sendPut_(e);for(;this.onDisconnectRequestQueue_.length;){const e=this.onDisconnectRequestQueue_.shift();this.sendOnDisconnect_(e.action,e.pathString,e.data,e.onComplete)}for(let e=0;e<this.outstandingGets_.length;e++)this.outstandingGets_[e]&&this.sendGet_(e)}sendConnectStats_(){const e={};e["sdk.js."+Ia.replace(/\./g,"-")]=1,wt()?e["framework.cordova"]=1:yt()&&(e["framework.reactnative"]=1),this.reportStats(e)}shouldReconnect_(){const e=Il.getInstance().currentlyOnline();return Dt(this.interruptReasons_)&&e}}$l.nextPersistentConnectionId_=0,$l.nextConnectionId_=0;
2222
+ /**
2223
+ * @license
2224
+ * Copyright 2017 Google LLC
2225
+ *
2226
+ * Licensed under the Apache License, Version 2.0 (the "License");
2227
+ * you may not use this file except in compliance with the License.
2228
+ * You may obtain a copy of the License at
2229
+ *
2230
+ * http://www.apache.org/licenses/LICENSE-2.0
2231
+ *
2232
+ * Unless required by applicable law or agreed to in writing, software
2233
+ * distributed under the License is distributed on an "AS IS" BASIS,
2234
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2235
+ * See the License for the specific language governing permissions and
2236
+ * limitations under the License.
2237
+ */
2238
+ class Wl{constructor(e,t){this.name=e,this.node=t}static Wrap(e,t){return new Wl(e,t)}}
2239
+ /**
2240
+ * @license
2241
+ * Copyright 2017 Google LLC
2242
+ *
2243
+ * Licensed under the Apache License, Version 2.0 (the "License");
2244
+ * you may not use this file except in compliance with the License.
2245
+ * You may obtain a copy of the License at
2246
+ *
2247
+ * http://www.apache.org/licenses/LICENSE-2.0
2248
+ *
2249
+ * Unless required by applicable law or agreed to in writing, software
2250
+ * distributed under the License is distributed on an "AS IS" BASIS,
2251
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2252
+ * See the License for the specific language governing permissions and
2253
+ * limitations under the License.
2254
+ */class Gl{getCompare(){return this.compare.bind(this)}indexedValueChanged(e,t){const n=new Wl(Va,e),i=new Wl(Va,t);return 0!==this.compare(n,i)}minPost(){return Wl.MIN}}
2255
+ /**
2256
+ * @license
2257
+ * Copyright 2017 Google LLC
2258
+ *
2259
+ * Licensed under the Apache License, Version 2.0 (the "License");
2260
+ * you may not use this file except in compliance with the License.
2261
+ * You may obtain a copy of the License at
2262
+ *
2263
+ * http://www.apache.org/licenses/LICENSE-2.0
2264
+ *
2265
+ * Unless required by applicable law or agreed to in writing, software
2266
+ * distributed under the License is distributed on an "AS IS" BASIS,
2267
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2268
+ * See the License for the specific language governing permissions and
2269
+ * limitations under the License.
2270
+ */let Kl;class Yl extends Gl{static get __EMPTY_NODE(){return Kl}static set __EMPTY_NODE(e){Kl=e}compare(e,t){return $a(e.name,t.name)}isDefinedOn(e){throw it("KeyIndex.isDefinedOn not expected to be called.")}indexedValueChanged(e,t){return!1}minPost(){return Wl.MIN}maxPost(){return new Wl(Ha,Kl)}makePost(e,t){return nt("string"==typeof e,"KeyIndex indexValue must always be a string."),new Wl(e,Kl)}toString(){return".key"}}const Jl=new Yl;
2271
+ /**
2272
+ * @license
2273
+ * Copyright 2017 Google LLC
2274
+ *
2275
+ * Licensed under the Apache License, Version 2.0 (the "License");
2276
+ * you may not use this file except in compliance with the License.
2277
+ * You may obtain a copy of the License at
2278
+ *
2279
+ * http://www.apache.org/licenses/LICENSE-2.0
2280
+ *
2281
+ * Unless required by applicable law or agreed to in writing, software
2282
+ * distributed under the License is distributed on an "AS IS" BASIS,
2283
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2284
+ * See the License for the specific language governing permissions and
2285
+ * limitations under the License.
2286
+ */class Ql{constructor(e,t,n,i,o=null){this.isReverse_=i,this.resultGenerator_=o,this.nodeStack_=[];let r=1;for(;!e.isEmpty();)if(r=t?n(e.key,t):1,i&&(r*=-1),r<0)e=this.isReverse_?e.left:e.right;else{if(0===r){this.nodeStack_.push(e);break}this.nodeStack_.push(e),e=this.isReverse_?e.right:e.left}}getNext(){if(0===this.nodeStack_.length)return null;let e,t=this.nodeStack_.pop();if(e=this.resultGenerator_?this.resultGenerator_(t.key,t.value):{key:t.key,value:t.value},this.isReverse_)for(t=t.left;!t.isEmpty();)this.nodeStack_.push(t),t=t.right;else for(t=t.right;!t.isEmpty();)this.nodeStack_.push(t),t=t.left;return e}hasNext(){return this.nodeStack_.length>0}peek(){if(0===this.nodeStack_.length)return null;const e=this.nodeStack_[this.nodeStack_.length-1];return this.resultGenerator_?this.resultGenerator_(e.key,e.value):{key:e.key,value:e.value}}}class Xl{constructor(e,t,n,i,o){this.key=e,this.value=t,this.color=null!=n?n:Xl.RED,this.left=null!=i?i:Zl.EMPTY_NODE,this.right=null!=o?o:Zl.EMPTY_NODE}copy(e,t,n,i,o){return new Xl(null!=e?e:this.key,null!=t?t:this.value,null!=n?n:this.color,null!=i?i:this.left,null!=o?o:this.right)}count(){return this.left.count()+1+this.right.count()}isEmpty(){return!1}inorderTraversal(e){return this.left.inorderTraversal(e)||!!e(this.key,this.value)||this.right.inorderTraversal(e)}reverseTraversal(e){return this.right.reverseTraversal(e)||e(this.key,this.value)||this.left.reverseTraversal(e)}min_(){return this.left.isEmpty()?this:this.left.min_()}minKey(){return this.min_().key}maxKey(){return this.right.isEmpty()?this.key:this.right.maxKey()}insert(e,t,n){let i=this;const o=n(e,i.key);return i=o<0?i.copy(null,null,null,i.left.insert(e,t,n),null):0===o?i.copy(null,t,null,null,null):i.copy(null,null,null,null,i.right.insert(e,t,n)),i.fixUp_()}removeMin_(){if(this.left.isEmpty())return Zl.EMPTY_NODE;let e=this;return e.left.isRed_()||e.left.left.isRed_()||(e=e.moveRedLeft_()),e=e.copy(null,null,null,e.left.removeMin_(),null),e.fixUp_()}remove(e,t){let n,i;if(n=this,t(e,n.key)<0)n.left.isEmpty()||n.left.isRed_()||n.left.left.isRed_()||(n=n.moveRedLeft_()),n=n.copy(null,null,null,n.left.remove(e,t),null);else{if(n.left.isRed_()&&(n=n.rotateRight_()),n.right.isEmpty()||n.right.isRed_()||n.right.left.isRed_()||(n=n.moveRedRight_()),0===t(e,n.key)){if(n.right.isEmpty())return Zl.EMPTY_NODE;i=n.right.min_(),n=n.copy(i.key,i.value,null,null,n.right.removeMin_())}n=n.copy(null,null,null,null,n.right.remove(e,t))}return n.fixUp_()}isRed_(){return this.color}fixUp_(){let e=this;return e.right.isRed_()&&!e.left.isRed_()&&(e=e.rotateLeft_()),e.left.isRed_()&&e.left.left.isRed_()&&(e=e.rotateRight_()),e.left.isRed_()&&e.right.isRed_()&&(e=e.colorFlip_()),e}moveRedLeft_(){let e=this.colorFlip_();return e.right.left.isRed_()&&(e=e.copy(null,null,null,null,e.right.rotateRight_()),e=e.rotateLeft_(),e=e.colorFlip_()),e}moveRedRight_(){let e=this.colorFlip_();return e.left.left.isRed_()&&(e=e.rotateRight_(),e=e.colorFlip_()),e}rotateLeft_(){const e=this.copy(null,null,Xl.RED,null,this.right.left);return this.right.copy(null,null,this.color,e,null)}rotateRight_(){const e=this.copy(null,null,Xl.RED,this.left.right,null);return this.left.copy(null,null,this.color,null,e)}colorFlip_(){const e=this.left.copy(null,null,!this.left.color,null,null),t=this.right.copy(null,null,!this.right.color,null,null);return this.copy(null,null,!this.color,e,t)}checkMaxDepth_(){const e=this.check_();return Math.pow(2,e)<=this.count()+1}check_(){if(this.isRed_()&&this.left.isRed_())throw new Error("Red node has red child("+this.key+","+this.value+")");if(this.right.isRed_())throw new Error("Right child of ("+this.key+","+this.value+") is red");const e=this.left.check_();if(e!==this.right.check_())throw new Error("Black depths differ");return e+(this.isRed_()?0:1)}}Xl.RED=!0,Xl.BLACK=!1;class Zl{constructor(e,t=Zl.EMPTY_NODE){this.comparator_=e,this.root_=t}insert(e,t){return new Zl(this.comparator_,this.root_.insert(e,t,this.comparator_).copy(null,null,Xl.BLACK,null,null))}remove(e){return new Zl(this.comparator_,this.root_.remove(e,this.comparator_).copy(null,null,Xl.BLACK,null,null))}get(e){let t,n=this.root_;for(;!n.isEmpty();){if(t=this.comparator_(e,n.key),0===t)return n.value;t<0?n=n.left:t>0&&(n=n.right)}return null}getPredecessorKey(e){let t,n=this.root_,i=null;for(;!n.isEmpty();){if(t=this.comparator_(e,n.key),0===t){if(n.left.isEmpty())return i?i.key:null;for(n=n.left;!n.right.isEmpty();)n=n.right;return n.key}t<0?n=n.left:t>0&&(i=n,n=n.right)}throw new Error("Attempted to find predecessor key for a nonexistent key. What gives?")}isEmpty(){return this.root_.isEmpty()}count(){return this.root_.count()}minKey(){return this.root_.minKey()}maxKey(){return this.root_.maxKey()}inorderTraversal(e){return this.root_.inorderTraversal(e)}reverseTraversal(e){return this.root_.reverseTraversal(e)}getIterator(e){return new Ql(this.root_,null,this.comparator_,!1,e)}getIteratorFrom(e,t){return new Ql(this.root_,e,this.comparator_,!1,t)}getReverseIteratorFrom(e,t){return new Ql(this.root_,e,this.comparator_,!0,t)}getReverseIterator(e){return new Ql(this.root_,null,this.comparator_,!0,e)}}
2287
+ /**
2288
+ * @license
2289
+ * Copyright 2017 Google LLC
2290
+ *
2291
+ * Licensed under the Apache License, Version 2.0 (the "License");
2292
+ * you may not use this file except in compliance with the License.
2293
+ * You may obtain a copy of the License at
2294
+ *
2295
+ * http://www.apache.org/licenses/LICENSE-2.0
2296
+ *
2297
+ * Unless required by applicable law or agreed to in writing, software
2298
+ * distributed under the License is distributed on an "AS IS" BASIS,
2299
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2300
+ * See the License for the specific language governing permissions and
2301
+ * limitations under the License.
2302
+ */
2303
+ function ec(e,t){return $a(e.name,t.name)}function tc(e,t){return $a(e,t)}
2304
+ /**
2305
+ * @license
2306
+ * Copyright 2017 Google LLC
2307
+ *
2308
+ * Licensed under the Apache License, Version 2.0 (the "License");
2309
+ * you may not use this file except in compliance with the License.
2310
+ * You may obtain a copy of the License at
2311
+ *
2312
+ * http://www.apache.org/licenses/LICENSE-2.0
2313
+ *
2314
+ * Unless required by applicable law or agreed to in writing, software
2315
+ * distributed under the License is distributed on an "AS IS" BASIS,
2316
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2317
+ * See the License for the specific language governing permissions and
2318
+ * limitations under the License.
2319
+ */let nc;Zl.EMPTY_NODE=new class{copy(e,t,n,i,o){return this}insert(e,t,n){return new Xl(e,t,null)}remove(e,t){return this}count(){return 0}isEmpty(){return!0}inorderTraversal(e){return!1}reverseTraversal(e){return!1}minKey(){return null}maxKey(){return null}check_(){return 0}isRed_(){return!1}};const ic=function(e){return"number"==typeof e?"number:"+Qa(e):"string:"+e},oc=function(e){if(e.isLeafNode()){const t=e.val();nt("string"==typeof t||"number"==typeof t||"object"==typeof t&&Rt(t,".sv"),"Priority must be a string or number.")}else nt(e===nc||e.isEmpty(),"priority of unexpected type.");nt(e===nc||e.getPriority().isEmpty(),"Priority nodes can't have a priority of their own.")};
2320
+ /**
2321
+ * @license
2322
+ * Copyright 2017 Google LLC
2323
+ *
2324
+ * Licensed under the Apache License, Version 2.0 (the "License");
2325
+ * you may not use this file except in compliance with the License.
2326
+ * You may obtain a copy of the License at
2327
+ *
2328
+ * http://www.apache.org/licenses/LICENSE-2.0
2329
+ *
2330
+ * Unless required by applicable law or agreed to in writing, software
2331
+ * distributed under the License is distributed on an "AS IS" BASIS,
2332
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2333
+ * See the License for the specific language governing permissions and
2334
+ * limitations under the License.
2335
+ */
2336
+ let rc,sc,ac;class lc{static set __childrenNodeConstructor(e){rc=e}static get __childrenNodeConstructor(){return rc}constructor(e,t=lc.__childrenNodeConstructor.EMPTY_NODE){this.value_=e,this.priorityNode_=t,this.lazyHash_=null,nt(void 0!==this.value_&&null!==this.value_,"LeafNode shouldn't be created with null/undefined value."),oc(this.priorityNode_)}isLeafNode(){return!0}getPriority(){return this.priorityNode_}updatePriority(e){return new lc(this.value_,e)}getImmediateChild(e){return".priority"===e?this.priorityNode_:lc.__childrenNodeConstructor.EMPTY_NODE}getChild(e){return Ol(e)?this:".priority"===El(e)?this.priorityNode_:lc.__childrenNodeConstructor.EMPTY_NODE}hasChild(){return!1}getPredecessorChildName(e,t){return null}updateImmediateChild(e,t){return".priority"===e?this.updatePriority(t):t.isEmpty()&&".priority"!==e?this:lc.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(e,t).updatePriority(this.priorityNode_)}updateChild(e,t){const n=El(e);return null===n?t:t.isEmpty()&&".priority"!==n?this:(nt(".priority"!==n||1===Pl(e),".priority must be the last token in a path"),this.updateImmediateChild(n,lc.__childrenNodeConstructor.EMPTY_NODE.updateChild(Ll(e),t)))}isEmpty(){return!1}numChildren(){return 0}forEachChild(e,t){return!1}val(e){return e&&!this.getPriority().isEmpty()?{".value":this.getValue(),".priority":this.getPriority().val()}:this.getValue()}hash(){if(null===this.lazyHash_){let e="";this.priorityNode_.isEmpty()||(e+="priority:"+ic(this.priorityNode_.val())+":");const t=typeof this.value_;e+=t+":",e+="number"===t?Qa(this.value_):this.value_,this.lazyHash_=Da(e)}return this.lazyHash_}getValue(){return this.value_}compareTo(e){return e===lc.__childrenNodeConstructor.EMPTY_NODE?1:e instanceof lc.__childrenNodeConstructor?-1:(nt(e.isLeafNode(),"Unknown node type"),this.compareToLeafNode_(e))}compareToLeafNode_(e){const t=typeof e.value_,n=typeof this.value_,i=lc.VALUE_TYPE_ORDER.indexOf(t),o=lc.VALUE_TYPE_ORDER.indexOf(n);return nt(i>=0,"Unknown leaf type: "+t),nt(o>=0,"Unknown leaf type: "+n),i===o?"object"===n?0:this.value_<e.value_?-1:this.value_===e.value_?0:1:o-i}withIndex(){return this}isIndexed(){return!0}equals(e){if(e===this)return!0;if(e.isLeafNode()){const t=e;return this.value_===t.value_&&this.priorityNode_.equals(t.priorityNode_)}return!1}}lc.VALUE_TYPE_ORDER=["object","boolean","number","string"];const cc=new class extends Gl{compare(e,t){const n=e.node.getPriority(),i=t.node.getPriority(),o=n.compareTo(i);return 0===o?$a(e.name,t.name):o}isDefinedOn(e){return!e.getPriority().isEmpty()}indexedValueChanged(e,t){return!e.getPriority().equals(t.getPriority())}minPost(){return Wl.MIN}maxPost(){return new Wl(Ha,new lc("[PRIORITY-POST]",ac))}makePost(e,t){const n=sc(e);return new Wl(t,new lc("[PRIORITY-POST]",n))}toString(){return".priority"}},dc=Math.log(2);
2337
+ /**
2338
+ * @license
2339
+ * Copyright 2017 Google LLC
2340
+ *
2341
+ * Licensed under the Apache License, Version 2.0 (the "License");
2342
+ * you may not use this file except in compliance with the License.
2343
+ * You may obtain a copy of the License at
2344
+ *
2345
+ * http://www.apache.org/licenses/LICENSE-2.0
2346
+ *
2347
+ * Unless required by applicable law or agreed to in writing, software
2348
+ * distributed under the License is distributed on an "AS IS" BASIS,
2349
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2350
+ * See the License for the specific language governing permissions and
2351
+ * limitations under the License.
2352
+ */class hc{constructor(e){var t;this.count=(t=e+1,parseInt(Math.log(t)/dc,10)),this.current_=this.count-1;const n=(i=this.count,parseInt(Array(i+1).join("1"),2));var i;this.bits_=e+1&n}nextBitIsOne(){const e=!(this.bits_&1<<this.current_);return this.current_--,e}}const uc=function(e,t,n,i){e.sort(t);const o=function(t,i){const r=i-t;let s,a;if(0===r)return null;if(1===r)return s=e[t],a=n?n(s):s,new Xl(a,s.node,Xl.BLACK,null,null);{const l=parseInt(r/2,10)+t,c=o(t,l),d=o(l+1,i);return s=e[l],a=n?n(s):s,new Xl(a,s.node,Xl.BLACK,c,d)}},r=function(t){let i=null,r=null,s=e.length;const a=function(t,i){const r=s-t,a=s;s-=t;const c=o(r+1,a),d=e[r],h=n?n(d):d;l(new Xl(h,d.node,i,null,c))},l=function(e){i?(i.left=e,i=e):(r=e,i=e)};for(let e=0;e<t.count;++e){const n=t.nextBitIsOne(),i=Math.pow(2,t.count-(e+1));n?a(i,Xl.BLACK):(a(i,Xl.BLACK),a(i,Xl.RED))}return r}(new hc(e.length));return new Zl(i||t,r)};
2353
+ /**
2354
+ * @license
2355
+ * Copyright 2017 Google LLC
2356
+ *
2357
+ * Licensed under the Apache License, Version 2.0 (the "License");
2358
+ * you may not use this file except in compliance with the License.
2359
+ * You may obtain a copy of the License at
2360
+ *
2361
+ * http://www.apache.org/licenses/LICENSE-2.0
2362
+ *
2363
+ * Unless required by applicable law or agreed to in writing, software
2364
+ * distributed under the License is distributed on an "AS IS" BASIS,
2365
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2366
+ * See the License for the specific language governing permissions and
2367
+ * limitations under the License.
2368
+ */let pc;const gc={};class fc{static get Default(){return nt(gc&&cc,"ChildrenNode.ts has not been loaded"),pc=pc||new fc({".priority":gc},{".priority":cc}),pc}constructor(e,t){this.indexes_=e,this.indexSet_=t}get(e){const t=Nt(this.indexes_,e);if(!t)throw new Error("No index defined for "+e);return t instanceof Zl?t:null}hasIndex(e){return Rt(this.indexSet_,e.toString())}addIndex(e,t){nt(e!==Jl,"KeyIndex always exists and isn't meant to be added to the IndexMap.");const n=[];let i=!1;const o=t.getIterator(Wl.Wrap);let r,s=o.getNext();for(;s;)i=i||e.isDefinedOn(s.node),n.push(s),s=o.getNext();r=i?uc(n,e.getCompare()):gc;const a=e.toString(),l=Object.assign({},this.indexSet_);l[a]=e;const c=Object.assign({},this.indexes_);return c[a]=r,new fc(c,l)}addToIndexes(e,t){const n=At(this.indexes_,((n,i)=>{const o=Nt(this.indexSet_,i);if(nt(o,"Missing index implementation for "+i),n===gc){if(o.isDefinedOn(e.node)){const n=[],i=t.getIterator(Wl.Wrap);let r=i.getNext();for(;r;)r.name!==e.name&&n.push(r),r=i.getNext();return n.push(e),uc(n,o.getCompare())}return gc}{const i=t.get(e.name);let o=n;return i&&(o=o.remove(new Wl(e.name,i))),o.insert(e,e.node)}}));return new fc(n,this.indexSet_)}removeFromIndexes(e,t){const n=At(this.indexes_,(n=>{if(n===gc)return n;{const i=t.get(e.name);return i?n.remove(new Wl(e.name,i)):n}}));return new fc(n,this.indexSet_)}}
2369
+ /**
2370
+ * @license
2371
+ * Copyright 2017 Google LLC
2372
+ *
2373
+ * Licensed under the Apache License, Version 2.0 (the "License");
2374
+ * you may not use this file except in compliance with the License.
2375
+ * You may obtain a copy of the License at
2376
+ *
2377
+ * http://www.apache.org/licenses/LICENSE-2.0
2378
+ *
2379
+ * Unless required by applicable law or agreed to in writing, software
2380
+ * distributed under the License is distributed on an "AS IS" BASIS,
2381
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2382
+ * See the License for the specific language governing permissions and
2383
+ * limitations under the License.
2384
+ */let mc;class vc{static get EMPTY_NODE(){return mc||(mc=new vc(new Zl(tc),null,fc.Default))}constructor(e,t,n){this.children_=e,this.priorityNode_=t,this.indexMap_=n,this.lazyHash_=null,this.priorityNode_&&oc(this.priorityNode_),this.children_.isEmpty()&&nt(!this.priorityNode_||this.priorityNode_.isEmpty(),"An empty node cannot have a priority")}isLeafNode(){return!1}getPriority(){return this.priorityNode_||mc}updatePriority(e){return this.children_.isEmpty()?this:new vc(this.children_,e,this.indexMap_)}getImmediateChild(e){if(".priority"===e)return this.getPriority();{const t=this.children_.get(e);return null===t?mc:t}}getChild(e){const t=El(e);return null===t?this:this.getImmediateChild(t).getChild(Ll(e))}hasChild(e){return null!==this.children_.get(e)}updateImmediateChild(e,t){if(nt(t,"We should always be passing snapshot nodes"),".priority"===e)return this.updatePriority(t);{const n=new Wl(e,t);let i,o;t.isEmpty()?(i=this.children_.remove(e),o=this.indexMap_.removeFromIndexes(n,this.children_)):(i=this.children_.insert(e,t),o=this.indexMap_.addToIndexes(n,this.children_));const r=i.isEmpty()?mc:this.priorityNode_;return new vc(i,r,o)}}updateChild(e,t){const n=El(e);if(null===n)return t;{nt(".priority"!==El(e)||1===Pl(e),".priority must be the last token in a path");const i=this.getImmediateChild(n).updateChild(Ll(e),t);return this.updateImmediateChild(n,i)}}isEmpty(){return this.children_.isEmpty()}numChildren(){return this.children_.count()}val(e){if(this.isEmpty())return null;const t={};let n=0,i=0,o=!0;if(this.forEachChild(cc,((r,s)=>{t[r]=s.val(e),n++,o&&vc.INTEGER_REGEXP_.test(r)?i=Math.max(i,Number(r)):o=!1})),!e&&o&&i<2*n){const e=[];for(const n in t)e[n]=t[n];return e}return e&&!this.getPriority().isEmpty()&&(t[".priority"]=this.getPriority().val()),t}hash(){if(null===this.lazyHash_){let e="";this.getPriority().isEmpty()||(e+="priority:"+ic(this.getPriority().val())+":"),this.forEachChild(cc,((t,n)=>{const i=n.hash();""!==i&&(e+=":"+t+":"+i)})),this.lazyHash_=""===e?"":Da(e)}return this.lazyHash_}getPredecessorChildName(e,t,n){const i=this.resolveIndex_(n);if(i){const n=i.getPredecessorKey(new Wl(e,t));return n?n.name:null}return this.children_.getPredecessorKey(e)}getFirstChildName(e){const t=this.resolveIndex_(e);if(t){const e=t.minKey();return e&&e.name}return this.children_.minKey()}getFirstChild(e){const t=this.getFirstChildName(e);return t?new Wl(t,this.children_.get(t)):null}getLastChildName(e){const t=this.resolveIndex_(e);if(t){const e=t.maxKey();return e&&e.name}return this.children_.maxKey()}getLastChild(e){const t=this.getLastChildName(e);return t?new Wl(t,this.children_.get(t)):null}forEachChild(e,t){const n=this.resolveIndex_(e);return n?n.inorderTraversal((e=>t(e.name,e.node))):this.children_.inorderTraversal(t)}getIterator(e){return this.getIteratorFrom(e.minPost(),e)}getIteratorFrom(e,t){const n=this.resolveIndex_(t);if(n)return n.getIteratorFrom(e,(e=>e));{const n=this.children_.getIteratorFrom(e.name,Wl.Wrap);let i=n.peek();for(;null!=i&&t.compare(i,e)<0;)n.getNext(),i=n.peek();return n}}getReverseIterator(e){return this.getReverseIteratorFrom(e.maxPost(),e)}getReverseIteratorFrom(e,t){const n=this.resolveIndex_(t);if(n)return n.getReverseIteratorFrom(e,(e=>e));{const n=this.children_.getReverseIteratorFrom(e.name,Wl.Wrap);let i=n.peek();for(;null!=i&&t.compare(i,e)>0;)n.getNext(),i=n.peek();return n}}compareTo(e){return this.isEmpty()?e.isEmpty()?0:-1:e.isLeafNode()||e.isEmpty()?1:e===bc?-1:0}withIndex(e){if(e===Jl||this.indexMap_.hasIndex(e))return this;{const t=this.indexMap_.addIndex(e,this.children_);return new vc(this.children_,this.priorityNode_,t)}}isIndexed(e){return e===Jl||this.indexMap_.hasIndex(e)}equals(e){if(e===this)return!0;if(e.isLeafNode())return!1;{const t=e;if(this.getPriority().equals(t.getPriority())){if(this.children_.count()===t.children_.count()){const e=this.getIterator(cc),n=t.getIterator(cc);let i=e.getNext(),o=n.getNext();for(;i&&o;){if(i.name!==o.name||!i.node.equals(o.node))return!1;i=e.getNext(),o=n.getNext()}return null===i&&null===o}return!1}return!1}}resolveIndex_(e){return e===Jl?null:this.indexMap_.get(e.toString())}}vc.INTEGER_REGEXP_=/^(0|[1-9]\d*)$/;const bc=new class extends vc{constructor(){super(new Zl(tc),vc.EMPTY_NODE,fc.Default)}compareTo(e){return e===this?0:1}equals(e){return e===this}getPriority(){return this}getImmediateChild(e){return vc.EMPTY_NODE}isEmpty(){return!1}};Object.defineProperties(Wl,{MIN:{value:new Wl(Va,vc.EMPTY_NODE)},MAX:{value:new Wl(Ha,bc)}}),Yl.__EMPTY_NODE=vc.EMPTY_NODE,lc.__childrenNodeConstructor=vc,nc=bc,function(e){ac=e}(bc);function wc(e,t=null){if(null===e)return vc.EMPTY_NODE;if("object"==typeof e&&".priority"in e&&(t=e[".priority"]),nt(null===t||"string"==typeof t||"number"==typeof t||"object"==typeof t&&".sv"in t,"Invalid priority type found: "+typeof t),"object"==typeof e&&".value"in e&&null!==e[".value"]&&(e=e[".value"]),"object"!=typeof e||".sv"in e){return new lc(e,wc(t))}if(e instanceof Array){let n=vc.EMPTY_NODE;return Ja(e,((t,i)=>{if(Rt(e,t)&&"."!==t.substring(0,1)){const e=wc(i);!e.isLeafNode()&&e.isEmpty()||(n=n.updateImmediateChild(t,e))}})),n.updatePriority(wc(t))}{const n=[];let i=!1;if(Ja(e,((e,t)=>{if("."!==e.substring(0,1)){const o=wc(t);o.isEmpty()||(i=i||!o.getPriority().isEmpty(),n.push(new Wl(e,o)))}})),0===n.length)return vc.EMPTY_NODE;const o=uc(n,ec,(e=>e.name),tc);if(i){const e=uc(n,cc.getCompare());return new vc(o,wc(t),new fc({".priority":e},{".priority":cc}))}return new vc(o,wc(t),fc.Default)}}!function(e){sc=e}(wc);
2385
+ /**
2386
+ * @license
2387
+ * Copyright 2017 Google LLC
2388
+ *
2389
+ * Licensed under the Apache License, Version 2.0 (the "License");
2390
+ * you may not use this file except in compliance with the License.
2391
+ * You may obtain a copy of the License at
2392
+ *
2393
+ * http://www.apache.org/licenses/LICENSE-2.0
2394
+ *
2395
+ * Unless required by applicable law or agreed to in writing, software
2396
+ * distributed under the License is distributed on an "AS IS" BASIS,
2397
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2398
+ * See the License for the specific language governing permissions and
2399
+ * limitations under the License.
2400
+ */
2401
+ class xc extends Gl{constructor(e){super(),this.indexPath_=e,nt(!Ol(e)&&".priority"!==El(e),"Can't create PathIndex with empty path or .priority key")}extractChild(e){return e.getChild(this.indexPath_)}isDefinedOn(e){return!e.getChild(this.indexPath_).isEmpty()}compare(e,t){const n=this.extractChild(e.node),i=this.extractChild(t.node),o=n.compareTo(i);return 0===o?$a(e.name,t.name):o}makePost(e,t){const n=wc(e),i=vc.EMPTY_NODE.updateChild(this.indexPath_,n);return new Wl(t,i)}maxPost(){const e=vc.EMPTY_NODE.updateChild(this.indexPath_,bc);return new Wl(Ha,e)}toString(){return Nl(this.indexPath_,0).join("/")}}
2402
+ /**
2403
+ * @license
2404
+ * Copyright 2017 Google LLC
2405
+ *
2406
+ * Licensed under the Apache License, Version 2.0 (the "License");
2407
+ * you may not use this file except in compliance with the License.
2408
+ * You may obtain a copy of the License at
2409
+ *
2410
+ * http://www.apache.org/licenses/LICENSE-2.0
2411
+ *
2412
+ * Unless required by applicable law or agreed to in writing, software
2413
+ * distributed under the License is distributed on an "AS IS" BASIS,
2414
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2415
+ * See the License for the specific language governing permissions and
2416
+ * limitations under the License.
2417
+ */const yc=new class extends Gl{compare(e,t){const n=e.node.compareTo(t.node);return 0===n?$a(e.name,t.name):n}isDefinedOn(e){return!0}indexedValueChanged(e,t){return!e.equals(t)}minPost(){return Wl.MIN}maxPost(){return Wl.MAX}makePost(e,t){const n=wc(e);return new Wl(t,n)}toString(){return".value"}};
2418
+ /**
2419
+ * @license
2420
+ * Copyright 2017 Google LLC
2421
+ *
2422
+ * Licensed under the Apache License, Version 2.0 (the "License");
2423
+ * you may not use this file except in compliance with the License.
2424
+ * You may obtain a copy of the License at
2425
+ *
2426
+ * http://www.apache.org/licenses/LICENSE-2.0
2427
+ *
2428
+ * Unless required by applicable law or agreed to in writing, software
2429
+ * distributed under the License is distributed on an "AS IS" BASIS,
2430
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2431
+ * See the License for the specific language governing permissions and
2432
+ * limitations under the License.
2433
+ */function _c(e){return{type:"value",snapshotNode:e}}function kc(e,t){return{type:"child_added",snapshotNode:t,childName:e}}function Cc(e,t){return{type:"child_removed",snapshotNode:t,childName:e}}function Ic(e,t,n){return{type:"child_changed",snapshotNode:t,childName:e,oldSnap:n}}
2434
+ /**
2435
+ * @license
2436
+ * Copyright 2017 Google LLC
2437
+ *
2438
+ * Licensed under the Apache License, Version 2.0 (the "License");
2439
+ * you may not use this file except in compliance with the License.
2440
+ * You may obtain a copy of the License at
2441
+ *
2442
+ * http://www.apache.org/licenses/LICENSE-2.0
2443
+ *
2444
+ * Unless required by applicable law or agreed to in writing, software
2445
+ * distributed under the License is distributed on an "AS IS" BASIS,
2446
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2447
+ * See the License for the specific language governing permissions and
2448
+ * limitations under the License.
2449
+ */
2450
+ class Tc{constructor(e){this.index_=e}updateChild(e,t,n,i,o,r){nt(e.isIndexed(this.index_),"A node must be indexed if only a child is updated");const s=e.getImmediateChild(t);return s.getChild(i).equals(n.getChild(i))&&s.isEmpty()===n.isEmpty()?e:(null!=r&&(n.isEmpty()?e.hasChild(t)?r.trackChildChange(Cc(t,s)):nt(e.isLeafNode(),"A child remove without an old child only makes sense on a leaf node"):s.isEmpty()?r.trackChildChange(kc(t,n)):r.trackChildChange(Ic(t,n,s))),e.isLeafNode()&&n.isEmpty()?e:e.updateImmediateChild(t,n).withIndex(this.index_))}updateFullNode(e,t,n){return null!=n&&(e.isLeafNode()||e.forEachChild(cc,((e,i)=>{t.hasChild(e)||n.trackChildChange(Cc(e,i))})),t.isLeafNode()||t.forEachChild(cc,((t,i)=>{if(e.hasChild(t)){const o=e.getImmediateChild(t);o.equals(i)||n.trackChildChange(Ic(t,i,o))}else n.trackChildChange(kc(t,i))}))),t.withIndex(this.index_)}updatePriority(e,t){return e.isEmpty()?vc.EMPTY_NODE:e.updatePriority(t)}filtersNodes(){return!1}getIndexedFilter(){return this}getIndex(){return this.index_}}
2451
+ /**
2452
+ * @license
2453
+ * Copyright 2017 Google LLC
2454
+ *
2455
+ * Licensed under the Apache License, Version 2.0 (the "License");
2456
+ * you may not use this file except in compliance with the License.
2457
+ * You may obtain a copy of the License at
2458
+ *
2459
+ * http://www.apache.org/licenses/LICENSE-2.0
2460
+ *
2461
+ * Unless required by applicable law or agreed to in writing, software
2462
+ * distributed under the License is distributed on an "AS IS" BASIS,
2463
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2464
+ * See the License for the specific language governing permissions and
2465
+ * limitations under the License.
2466
+ */class Sc{constructor(e){this.indexedFilter_=new Tc(e.getIndex()),this.index_=e.getIndex(),this.startPost_=Sc.getStartPost_(e),this.endPost_=Sc.getEndPost_(e),this.startIsInclusive_=!e.startAfterSet_,this.endIsInclusive_=!e.endBeforeSet_}getStartPost(){return this.startPost_}getEndPost(){return this.endPost_}matches(e){const t=this.startIsInclusive_?this.index_.compare(this.getStartPost(),e)<=0:this.index_.compare(this.getStartPost(),e)<0,n=this.endIsInclusive_?this.index_.compare(e,this.getEndPost())<=0:this.index_.compare(e,this.getEndPost())<0;return t&&n}updateChild(e,t,n,i,o,r){return this.matches(new Wl(t,n))||(n=vc.EMPTY_NODE),this.indexedFilter_.updateChild(e,t,n,i,o,r)}updateFullNode(e,t,n){t.isLeafNode()&&(t=vc.EMPTY_NODE);let i=t.withIndex(this.index_);i=i.updatePriority(vc.EMPTY_NODE);const o=this;return t.forEachChild(cc,((e,t)=>{o.matches(new Wl(e,t))||(i=i.updateImmediateChild(e,vc.EMPTY_NODE))})),this.indexedFilter_.updateFullNode(e,i,n)}updatePriority(e,t){return e}filtersNodes(){return!0}getIndexedFilter(){return this.indexedFilter_}getIndex(){return this.index_}static getStartPost_(e){if(e.hasStart()){const t=e.getIndexStartName();return e.getIndex().makePost(e.getIndexStartValue(),t)}return e.getIndex().minPost()}static getEndPost_(e){if(e.hasEnd()){const t=e.getIndexEndName();return e.getIndex().makePost(e.getIndexEndValue(),t)}return e.getIndex().maxPost()}}
2467
+ /**
2468
+ * @license
2469
+ * Copyright 2017 Google LLC
2470
+ *
2471
+ * Licensed under the Apache License, Version 2.0 (the "License");
2472
+ * you may not use this file except in compliance with the License.
2473
+ * You may obtain a copy of the License at
2474
+ *
2475
+ * http://www.apache.org/licenses/LICENSE-2.0
2476
+ *
2477
+ * Unless required by applicable law or agreed to in writing, software
2478
+ * distributed under the License is distributed on an "AS IS" BASIS,
2479
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2480
+ * See the License for the specific language governing permissions and
2481
+ * limitations under the License.
2482
+ */class Ec{constructor(e){this.withinDirectionalStart=e=>this.reverse_?this.withinEndPost(e):this.withinStartPost(e),this.withinDirectionalEnd=e=>this.reverse_?this.withinStartPost(e):this.withinEndPost(e),this.withinStartPost=e=>{const t=this.index_.compare(this.rangedFilter_.getStartPost(),e);return this.startIsInclusive_?t<=0:t<0},this.withinEndPost=e=>{const t=this.index_.compare(e,this.rangedFilter_.getEndPost());return this.endIsInclusive_?t<=0:t<0},this.rangedFilter_=new Sc(e),this.index_=e.getIndex(),this.limit_=e.getLimit(),this.reverse_=!e.isViewFromLeft(),this.startIsInclusive_=!e.startAfterSet_,this.endIsInclusive_=!e.endBeforeSet_}updateChild(e,t,n,i,o,r){return this.rangedFilter_.matches(new Wl(t,n))||(n=vc.EMPTY_NODE),e.getImmediateChild(t).equals(n)?e:e.numChildren()<this.limit_?this.rangedFilter_.getIndexedFilter().updateChild(e,t,n,i,o,r):this.fullLimitUpdateChild_(e,t,n,o,r)}updateFullNode(e,t,n){let i;if(t.isLeafNode()||t.isEmpty())i=vc.EMPTY_NODE.withIndex(this.index_);else if(2*this.limit_<t.numChildren()&&t.isIndexed(this.index_)){let e;i=vc.EMPTY_NODE.withIndex(this.index_),e=this.reverse_?t.getReverseIteratorFrom(this.rangedFilter_.getEndPost(),this.index_):t.getIteratorFrom(this.rangedFilter_.getStartPost(),this.index_);let n=0;for(;e.hasNext()&&n<this.limit_;){const t=e.getNext();if(this.withinDirectionalStart(t)){if(!this.withinDirectionalEnd(t))break;i=i.updateImmediateChild(t.name,t.node),n++}}}else{let e;i=t.withIndex(this.index_),i=i.updatePriority(vc.EMPTY_NODE),e=this.reverse_?i.getReverseIterator(this.index_):i.getIterator(this.index_);let n=0;for(;e.hasNext();){const t=e.getNext();n<this.limit_&&this.withinDirectionalStart(t)&&this.withinDirectionalEnd(t)?n++:i=i.updateImmediateChild(t.name,vc.EMPTY_NODE)}}return this.rangedFilter_.getIndexedFilter().updateFullNode(e,i,n)}updatePriority(e,t){return e}filtersNodes(){return!0}getIndexedFilter(){return this.rangedFilter_.getIndexedFilter()}getIndex(){return this.index_}fullLimitUpdateChild_(e,t,n,i,o){let r;if(this.reverse_){const e=this.index_.getCompare();r=(t,n)=>e(n,t)}else r=this.index_.getCompare();const s=e;nt(s.numChildren()===this.limit_,"");const a=new Wl(t,n),l=this.reverse_?s.getFirstChild(this.index_):s.getLastChild(this.index_),c=this.rangedFilter_.matches(a);if(s.hasChild(t)){const e=s.getImmediateChild(t);let d=i.getChildAfterChild(this.index_,l,this.reverse_);for(;null!=d&&(d.name===t||s.hasChild(d.name));)d=i.getChildAfterChild(this.index_,d,this.reverse_);const h=null==d?1:r(d,a);if(c&&!n.isEmpty()&&h>=0)return null!=o&&o.trackChildChange(Ic(t,n,e)),s.updateImmediateChild(t,n);{null!=o&&o.trackChildChange(Cc(t,e));const n=s.updateImmediateChild(t,vc.EMPTY_NODE);return null!=d&&this.rangedFilter_.matches(d)?(null!=o&&o.trackChildChange(kc(d.name,d.node)),n.updateImmediateChild(d.name,d.node)):n}}return n.isEmpty()?e:c&&r(l,a)>=0?(null!=o&&(o.trackChildChange(Cc(l.name,l.node)),o.trackChildChange(kc(t,n))),s.updateImmediateChild(t,n).updateImmediateChild(l.name,vc.EMPTY_NODE)):e}}
2483
+ /**
2484
+ * @license
2485
+ * Copyright 2017 Google LLC
2486
+ *
2487
+ * Licensed under the Apache License, Version 2.0 (the "License");
2488
+ * you may not use this file except in compliance with the License.
2489
+ * You may obtain a copy of the License at
2490
+ *
2491
+ * http://www.apache.org/licenses/LICENSE-2.0
2492
+ *
2493
+ * Unless required by applicable law or agreed to in writing, software
2494
+ * distributed under the License is distributed on an "AS IS" BASIS,
2495
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2496
+ * See the License for the specific language governing permissions and
2497
+ * limitations under the License.
2498
+ */class Pc{constructor(){this.limitSet_=!1,this.startSet_=!1,this.startNameSet_=!1,this.startAfterSet_=!1,this.endSet_=!1,this.endNameSet_=!1,this.endBeforeSet_=!1,this.limit_=0,this.viewFrom_="",this.indexStartValue_=null,this.indexStartName_="",this.indexEndValue_=null,this.indexEndName_="",this.index_=cc}hasStart(){return this.startSet_}isViewFromLeft(){return""===this.viewFrom_?this.startSet_:"l"===this.viewFrom_}getIndexStartValue(){return nt(this.startSet_,"Only valid if start has been set"),this.indexStartValue_}getIndexStartName(){return nt(this.startSet_,"Only valid if start has been set"),this.startNameSet_?this.indexStartName_:Va}hasEnd(){return this.endSet_}getIndexEndValue(){return nt(this.endSet_,"Only valid if end has been set"),this.indexEndValue_}getIndexEndName(){return nt(this.endSet_,"Only valid if end has been set"),this.endNameSet_?this.indexEndName_:Ha}hasLimit(){return this.limitSet_}hasAnchoredLimit(){return this.limitSet_&&""!==this.viewFrom_}getLimit(){return nt(this.limitSet_,"Only valid if limit has been set"),this.limit_}getIndex(){return this.index_}loadsAllData(){return!(this.startSet_||this.endSet_||this.limitSet_)}isDefault(){return this.loadsAllData()&&this.index_===cc}copy(){const e=new Pc;return e.limitSet_=this.limitSet_,e.limit_=this.limit_,e.startSet_=this.startSet_,e.startAfterSet_=this.startAfterSet_,e.indexStartValue_=this.indexStartValue_,e.startNameSet_=this.startNameSet_,e.indexStartName_=this.indexStartName_,e.endSet_=this.endSet_,e.endBeforeSet_=this.endBeforeSet_,e.indexEndValue_=this.indexEndValue_,e.endNameSet_=this.endNameSet_,e.indexEndName_=this.indexEndName_,e.index_=this.index_,e.viewFrom_=this.viewFrom_,e}}function Lc(e){const t={};if(e.isDefault())return t;let n;if(e.index_===cc?n="$priority":e.index_===yc?n="$value":e.index_===Jl?n="$key":(nt(e.index_ instanceof xc,"Unrecognized index type!"),n=e.index_.toString()),t.orderBy=Pt(n),e.startSet_){const n=e.startAfterSet_?"startAfter":"startAt";t[n]=Pt(e.indexStartValue_),e.startNameSet_&&(t[n]+=","+Pt(e.indexStartName_))}if(e.endSet_){const n=e.endBeforeSet_?"endBefore":"endAt";t[n]=Pt(e.indexEndValue_),e.endNameSet_&&(t[n]+=","+Pt(e.indexEndName_))}return e.limitSet_&&(e.isViewFromLeft()?t.limitToFirst=e.limit_:t.limitToLast=e.limit_),t}function Rc(e){const t={};if(e.startSet_&&(t.sp=e.indexStartValue_,e.startNameSet_&&(t.sn=e.indexStartName_),t.sin=!e.startAfterSet_),e.endSet_&&(t.ep=e.indexEndValue_,e.endNameSet_&&(t.en=e.indexEndName_),t.ein=!e.endBeforeSet_),e.limitSet_){t.l=e.limit_;let n=e.viewFrom_;""===n&&(n=e.isViewFromLeft()?"l":"r"),t.vf=n}return e.index_!==cc&&(t.i=e.index_.toString()),t}
2499
+ /**
2500
+ * @license
2501
+ * Copyright 2017 Google LLC
2502
+ *
2503
+ * Licensed under the Apache License, Version 2.0 (the "License");
2504
+ * you may not use this file except in compliance with the License.
2505
+ * You may obtain a copy of the License at
2506
+ *
2507
+ * http://www.apache.org/licenses/LICENSE-2.0
2508
+ *
2509
+ * Unless required by applicable law or agreed to in writing, software
2510
+ * distributed under the License is distributed on an "AS IS" BASIS,
2511
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2512
+ * See the License for the specific language governing permissions and
2513
+ * limitations under the License.
2514
+ */class Nc extends kl{reportStats(e){throw new Error("Method not implemented.")}static getListenId_(e,t){return void 0!==t?"tag$"+t:(nt(e._queryParams.isDefault(),"should have a tag if it's not a default query."),e._path.toString())}constructor(e,t,n,i){super(),this.repoInfo_=e,this.onDataUpdate_=t,this.authTokenProvider_=n,this.appCheckTokenProvider_=i,this.log_=za("p:rest:"),this.listens_={}}listen(e,t,n,i){const o=e._path.toString();this.log_("Listen called for "+o+" "+e._queryIdentifier);const r=Nc.getListenId_(e,n),s={};this.listens_[r]=s;const a=Lc(e._queryParams);this.restRequest_(o+".json",a,((e,t)=>{let a=t;if(404===e&&(a=null,e=null),null===e&&this.onDataUpdate_(o,a,!1,n),Nt(this.listens_,r)===s){let t;t=e?401===e?"permission_denied":"rest_error:"+e:"ok",i(t,null)}}))}unlisten(e,t){const n=Nc.getListenId_(e,t);delete this.listens_[n]}get(e){const t=Lc(e._queryParams),n=e._path.toString(),i=new vt;return this.restRequest_(n+".json",t,((e,t)=>{let o=t;404===e&&(o=null,e=null),null===e?(this.onDataUpdate_(n,o,!1,null),i.resolve(o)):i.reject(new Error(o))})),i.promise}refreshAuthToken(e){}restRequest_(e,t={},n){return t.format="export",Promise.all([this.authTokenProvider_.getToken(!1),this.appCheckTokenProvider_.getToken(!1)]).then((([i,o])=>{i&&i.accessToken&&(t.auth=i.accessToken),o&&o.token&&(t.ac=o.token);const r=(this.repoInfo_.secure?"https://":"http://")+this.repoInfo_.host+e+"?ns="+this.repoInfo_.namespace+Ft(t);this.log_("Sending REST request for "+r);const s=new XMLHttpRequest;s.onreadystatechange=()=>{if(n&&4===s.readyState){this.log_("REST Response for "+r+" received. status:",s.status,"response:",s.responseText);let e=null;if(s.status>=200&&s.status<300){try{e=Et(s.responseText)}catch(e){qa("Failed to parse JSON response for "+r+": "+s.responseText)}n(null,e)}else 401!==s.status&&404!==s.status&&qa("Got unsuccessful REST response for "+r+" Status: "+s.status),n(s.status);n=null}},s.open("GET",r,!0),s.send()}))}}
2515
+ /**
2516
+ * @license
2517
+ * Copyright 2017 Google LLC
2518
+ *
2519
+ * Licensed under the Apache License, Version 2.0 (the "License");
2520
+ * you may not use this file except in compliance with the License.
2521
+ * You may obtain a copy of the License at
2522
+ *
2523
+ * http://www.apache.org/licenses/LICENSE-2.0
2524
+ *
2525
+ * Unless required by applicable law or agreed to in writing, software
2526
+ * distributed under the License is distributed on an "AS IS" BASIS,
2527
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2528
+ * See the License for the specific language governing permissions and
2529
+ * limitations under the License.
2530
+ */class Dc{constructor(){this.rootNode_=vc.EMPTY_NODE}getNode(e){return this.rootNode_.getChild(e)}updateSnapshot(e,t){this.rootNode_=this.rootNode_.updateChild(e,t)}}
2531
+ /**
2532
+ * @license
2533
+ * Copyright 2017 Google LLC
2534
+ *
2535
+ * Licensed under the Apache License, Version 2.0 (the "License");
2536
+ * you may not use this file except in compliance with the License.
2537
+ * You may obtain a copy of the License at
2538
+ *
2539
+ * http://www.apache.org/licenses/LICENSE-2.0
2540
+ *
2541
+ * Unless required by applicable law or agreed to in writing, software
2542
+ * distributed under the License is distributed on an "AS IS" BASIS,
2543
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2544
+ * See the License for the specific language governing permissions and
2545
+ * limitations under the License.
2546
+ */function Ac(){return{value:null,children:new Map}}function Oc(e,t,n){if(Ol(t))e.value=n,e.children.clear();else if(null!==e.value)e.value=e.value.updateChild(t,n);else{const i=El(t);e.children.has(i)||e.children.set(i,Ac());Oc(e.children.get(i),t=Ll(t),n)}}function Mc(e,t){if(Ol(t))return e.value=null,e.children.clear(),!0;if(null!==e.value){if(e.value.isLeafNode())return!1;{const n=e.value;return e.value=null,n.forEachChild(cc,((t,n)=>{Oc(e,new Tl(t),n)})),Mc(e,t)}}if(e.children.size>0){const n=El(t);if(t=Ll(t),e.children.has(n)){Mc(e.children.get(n),t)&&e.children.delete(n)}return 0===e.children.size}return!0}function Fc(e,t,n){null!==e.value?n(t,e.value):function(e,t){e.children.forEach(((e,n)=>{t(n,e)}))}
2547
+ /**
2548
+ * @license
2549
+ * Copyright 2017 Google LLC
2550
+ *
2551
+ * Licensed under the Apache License, Version 2.0 (the "License");
2552
+ * you may not use this file except in compliance with the License.
2553
+ * You may obtain a copy of the License at
2554
+ *
2555
+ * http://www.apache.org/licenses/LICENSE-2.0
2556
+ *
2557
+ * Unless required by applicable law or agreed to in writing, software
2558
+ * distributed under the License is distributed on an "AS IS" BASIS,
2559
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2560
+ * See the License for the specific language governing permissions and
2561
+ * limitations under the License.
2562
+ */(e,((e,i)=>{Fc(i,new Tl(t.toString()+"/"+e),n)}))}class zc{constructor(e){this.collection_=e,this.last_=null}get(){const e=this.collection_.get(),t=Object.assign({},e);return this.last_&&Ja(this.last_,((e,n)=>{t[e]=t[e]-n})),this.last_=e,t}}
2563
+ /**
2564
+ * @license
2565
+ * Copyright 2017 Google LLC
2566
+ *
2567
+ * Licensed under the Apache License, Version 2.0 (the "License");
2568
+ * you may not use this file except in compliance with the License.
2569
+ * You may obtain a copy of the License at
2570
+ *
2571
+ * http://www.apache.org/licenses/LICENSE-2.0
2572
+ *
2573
+ * Unless required by applicable law or agreed to in writing, software
2574
+ * distributed under the License is distributed on an "AS IS" BASIS,
2575
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2576
+ * See the License for the specific language governing permissions and
2577
+ * limitations under the License.
2578
+ */class Uc{constructor(e,t){this.server_=t,this.statsToReport_={},this.statsListener_=new zc(e);const n=1e4+2e4*Math.random();tl(this.reportStats_.bind(this),Math.floor(n))}reportStats_(){const e=this.statsListener_.get(),t={};let n=!1;Ja(e,((e,i)=>{i>0&&Rt(this.statsToReport_,e)&&(t[e]=i,n=!0)})),n&&this.server_.reportStats(t),tl(this.reportStats_.bind(this),Math.floor(2*Math.random()*3e5))}}
2579
+ /**
2580
+ * @license
2581
+ * Copyright 2017 Google LLC
2582
+ *
2583
+ * Licensed under the Apache License, Version 2.0 (the "License");
2584
+ * you may not use this file except in compliance with the License.
2585
+ * You may obtain a copy of the License at
2586
+ *
2587
+ * http://www.apache.org/licenses/LICENSE-2.0
2588
+ *
2589
+ * Unless required by applicable law or agreed to in writing, software
2590
+ * distributed under the License is distributed on an "AS IS" BASIS,
2591
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2592
+ * See the License for the specific language governing permissions and
2593
+ * limitations under the License.
2594
+ */var jc;function qc(e){return{fromUser:!1,fromServer:!0,queryId:e,tagged:!0}}
2595
+ /**
2596
+ * @license
2597
+ * Copyright 2017 Google LLC
2598
+ *
2599
+ * Licensed under the Apache License, Version 2.0 (the "License");
2600
+ * you may not use this file except in compliance with the License.
2601
+ * You may obtain a copy of the License at
2602
+ *
2603
+ * http://www.apache.org/licenses/LICENSE-2.0
2604
+ *
2605
+ * Unless required by applicable law or agreed to in writing, software
2606
+ * distributed under the License is distributed on an "AS IS" BASIS,
2607
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2608
+ * See the License for the specific language governing permissions and
2609
+ * limitations under the License.
2610
+ */!function(e){e[e.OVERWRITE=0]="OVERWRITE",e[e.MERGE=1]="MERGE",e[e.ACK_USER_WRITE=2]="ACK_USER_WRITE",e[e.LISTEN_COMPLETE=3]="LISTEN_COMPLETE"}(jc||(jc={}));class Bc{constructor(e,t,n){this.path=e,this.affectedTree=t,this.revert=n,this.type=jc.ACK_USER_WRITE,this.source={fromUser:!0,fromServer:!1,queryId:null,tagged:!1}}operationForChild(e){if(Ol(this.path)){if(null!=this.affectedTree.value)return nt(this.affectedTree.children.isEmpty(),"affectedTree should not have overlapping affected paths."),this;{const t=this.affectedTree.subtree(new Tl(e));return new Bc(Sl(),t,this.revert)}}return nt(El(this.path)===e,"operationForChild called for unrelated child."),new Bc(Ll(this.path),this.affectedTree,this.revert)}}
2611
+ /**
2612
+ * @license
2613
+ * Copyright 2017 Google LLC
2614
+ *
2615
+ * Licensed under the Apache License, Version 2.0 (the "License");
2616
+ * you may not use this file except in compliance with the License.
2617
+ * You may obtain a copy of the License at
2618
+ *
2619
+ * http://www.apache.org/licenses/LICENSE-2.0
2620
+ *
2621
+ * Unless required by applicable law or agreed to in writing, software
2622
+ * distributed under the License is distributed on an "AS IS" BASIS,
2623
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2624
+ * See the License for the specific language governing permissions and
2625
+ * limitations under the License.
2626
+ */class Vc{constructor(e,t){this.source=e,this.path=t,this.type=jc.LISTEN_COMPLETE}operationForChild(e){return Ol(this.path)?new Vc(this.source,Sl()):new Vc(this.source,Ll(this.path))}}
2627
+ /**
2628
+ * @license
2629
+ * Copyright 2017 Google LLC
2630
+ *
2631
+ * Licensed under the Apache License, Version 2.0 (the "License");
2632
+ * you may not use this file except in compliance with the License.
2633
+ * You may obtain a copy of the License at
2634
+ *
2635
+ * http://www.apache.org/licenses/LICENSE-2.0
2636
+ *
2637
+ * Unless required by applicable law or agreed to in writing, software
2638
+ * distributed under the License is distributed on an "AS IS" BASIS,
2639
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2640
+ * See the License for the specific language governing permissions and
2641
+ * limitations under the License.
2642
+ */class Hc{constructor(e,t,n){this.source=e,this.path=t,this.snap=n,this.type=jc.OVERWRITE}operationForChild(e){return Ol(this.path)?new Hc(this.source,Sl(),this.snap.getImmediateChild(e)):new Hc(this.source,Ll(this.path),this.snap)}}
2643
+ /**
2644
+ * @license
2645
+ * Copyright 2017 Google LLC
2646
+ *
2647
+ * Licensed under the Apache License, Version 2.0 (the "License");
2648
+ * you may not use this file except in compliance with the License.
2649
+ * You may obtain a copy of the License at
2650
+ *
2651
+ * http://www.apache.org/licenses/LICENSE-2.0
2652
+ *
2653
+ * Unless required by applicable law or agreed to in writing, software
2654
+ * distributed under the License is distributed on an "AS IS" BASIS,
2655
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2656
+ * See the License for the specific language governing permissions and
2657
+ * limitations under the License.
2658
+ */class $c{constructor(e,t,n){this.source=e,this.path=t,this.children=n,this.type=jc.MERGE}operationForChild(e){if(Ol(this.path)){const t=this.children.subtree(new Tl(e));return t.isEmpty()?null:t.value?new Hc(this.source,Sl(),t.value):new $c(this.source,Sl(),t)}return nt(El(this.path)===e,"Can't get a merge for a child not on the path of the operation"),new $c(this.source,Ll(this.path),this.children)}toString(){return"Operation("+this.path+": "+this.source.toString()+" merge: "+this.children.toString()+")"}}
2659
+ /**
2660
+ * @license
2661
+ * Copyright 2017 Google LLC
2662
+ *
2663
+ * Licensed under the Apache License, Version 2.0 (the "License");
2664
+ * you may not use this file except in compliance with the License.
2665
+ * You may obtain a copy of the License at
2666
+ *
2667
+ * http://www.apache.org/licenses/LICENSE-2.0
2668
+ *
2669
+ * Unless required by applicable law or agreed to in writing, software
2670
+ * distributed under the License is distributed on an "AS IS" BASIS,
2671
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2672
+ * See the License for the specific language governing permissions and
2673
+ * limitations under the License.
2674
+ */class Wc{constructor(e,t,n){this.node_=e,this.fullyInitialized_=t,this.filtered_=n}isFullyInitialized(){return this.fullyInitialized_}isFiltered(){return this.filtered_}isCompleteForPath(e){if(Ol(e))return this.isFullyInitialized()&&!this.filtered_;const t=El(e);return this.isCompleteForChild(t)}isCompleteForChild(e){return this.isFullyInitialized()&&!this.filtered_||this.node_.hasChild(e)}getNode(){return this.node_}}
2675
+ /**
2676
+ * @license
2677
+ * Copyright 2017 Google LLC
2678
+ *
2679
+ * Licensed under the Apache License, Version 2.0 (the "License");
2680
+ * you may not use this file except in compliance with the License.
2681
+ * You may obtain a copy of the License at
2682
+ *
2683
+ * http://www.apache.org/licenses/LICENSE-2.0
2684
+ *
2685
+ * Unless required by applicable law or agreed to in writing, software
2686
+ * distributed under the License is distributed on an "AS IS" BASIS,
2687
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2688
+ * See the License for the specific language governing permissions and
2689
+ * limitations under the License.
2690
+ */class Gc{constructor(e){this.query_=e,this.index_=this.query_._queryParams.getIndex()}}function Kc(e,t,n,i,o,r){const s=i.filter((e=>e.type===n));s.sort(((t,n)=>function(e,t,n){if(null==t.childName||null==n.childName)throw it("Should only compare child_ events.");const i=new Wl(t.childName,t.snapshotNode),o=new Wl(n.childName,n.snapshotNode);return e.index_.compare(i,o)}
2691
+ /**
2692
+ * @license
2693
+ * Copyright 2017 Google LLC
2694
+ *
2695
+ * Licensed under the Apache License, Version 2.0 (the "License");
2696
+ * you may not use this file except in compliance with the License.
2697
+ * You may obtain a copy of the License at
2698
+ *
2699
+ * http://www.apache.org/licenses/LICENSE-2.0
2700
+ *
2701
+ * Unless required by applicable law or agreed to in writing, software
2702
+ * distributed under the License is distributed on an "AS IS" BASIS,
2703
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2704
+ * See the License for the specific language governing permissions and
2705
+ * limitations under the License.
2706
+ */(e,t,n))),s.forEach((n=>{const i=function(e,t,n){return"value"===t.type||"child_removed"===t.type||(t.prevName=n.getPredecessorChildName(t.childName,t.snapshotNode,e.index_)),t}(e,n,r);o.forEach((o=>{o.respondsTo(n.type)&&t.push(o.createEvent(i,e.query_))}))}))}function Yc(e,t){return{eventCache:e,serverCache:t}}function Jc(e,t,n,i){return Yc(new Wc(t,n,i),e.serverCache)}function Qc(e,t,n,i){return Yc(e.eventCache,new Wc(t,n,i))}function Xc(e){return e.eventCache.isFullyInitialized()?e.eventCache.getNode():null}function Zc(e){return e.serverCache.isFullyInitialized()?e.serverCache.getNode():null}
2707
+ /**
2708
+ * @license
2709
+ * Copyright 2017 Google LLC
2710
+ *
2711
+ * Licensed under the Apache License, Version 2.0 (the "License");
2712
+ * you may not use this file except in compliance with the License.
2713
+ * You may obtain a copy of the License at
2714
+ *
2715
+ * http://www.apache.org/licenses/LICENSE-2.0
2716
+ *
2717
+ * Unless required by applicable law or agreed to in writing, software
2718
+ * distributed under the License is distributed on an "AS IS" BASIS,
2719
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2720
+ * See the License for the specific language governing permissions and
2721
+ * limitations under the License.
2722
+ */let ed;class td{static fromObject(e){let t=new td(null);return Ja(e,((e,n)=>{t=t.set(new Tl(e),n)})),t}constructor(e,t=(()=>(ed||(ed=new Zl(Wa)),ed))()){this.value=e,this.children=t}isEmpty(){return null===this.value&&this.children.isEmpty()}findRootMostMatchingPathAndValue(e,t){if(null!=this.value&&t(this.value))return{path:Sl(),value:this.value};if(Ol(e))return null;{const n=El(e),i=this.children.get(n);if(null!==i){const o=i.findRootMostMatchingPathAndValue(Ll(e),t);if(null!=o){return{path:Al(new Tl(n),o.path),value:o.value}}return null}return null}}findRootMostValueAndPath(e){return this.findRootMostMatchingPathAndValue(e,(()=>!0))}subtree(e){if(Ol(e))return this;{const t=El(e),n=this.children.get(t);return null!==n?n.subtree(Ll(e)):new td(null)}}set(e,t){if(Ol(e))return new td(t,this.children);{const n=El(e),i=(this.children.get(n)||new td(null)).set(Ll(e),t),o=this.children.insert(n,i);return new td(this.value,o)}}remove(e){if(Ol(e))return this.children.isEmpty()?new td(null):new td(null,this.children);{const t=El(e),n=this.children.get(t);if(n){const i=n.remove(Ll(e));let o;return o=i.isEmpty()?this.children.remove(t):this.children.insert(t,i),null===this.value&&o.isEmpty()?new td(null):new td(this.value,o)}return this}}get(e){if(Ol(e))return this.value;{const t=El(e),n=this.children.get(t);return n?n.get(Ll(e)):null}}setTree(e,t){if(Ol(e))return t;{const n=El(e),i=(this.children.get(n)||new td(null)).setTree(Ll(e),t);let o;return o=i.isEmpty()?this.children.remove(n):this.children.insert(n,i),new td(this.value,o)}}fold(e){return this.fold_(Sl(),e)}fold_(e,t){const n={};return this.children.inorderTraversal(((i,o)=>{n[i]=o.fold_(Al(e,i),t)})),t(e,this.value,n)}findOnPath(e,t){return this.findOnPath_(e,Sl(),t)}findOnPath_(e,t,n){const i=!!this.value&&n(t,this.value);if(i)return i;if(Ol(e))return null;{const i=El(e),o=this.children.get(i);return o?o.findOnPath_(Ll(e),Al(t,i),n):null}}foreachOnPath(e,t){return this.foreachOnPath_(e,Sl(),t)}foreachOnPath_(e,t,n){if(Ol(e))return this;{this.value&&n(t,this.value);const i=El(e),o=this.children.get(i);return o?o.foreachOnPath_(Ll(e),Al(t,i),n):new td(null)}}foreach(e){this.foreach_(Sl(),e)}foreach_(e,t){this.children.inorderTraversal(((n,i)=>{i.foreach_(Al(e,n),t)})),this.value&&t(e,this.value)}foreachChild(e){this.children.inorderTraversal(((t,n)=>{n.value&&e(t,n.value)}))}}
2723
+ /**
2724
+ * @license
2725
+ * Copyright 2017 Google LLC
2726
+ *
2727
+ * Licensed under the Apache License, Version 2.0 (the "License");
2728
+ * you may not use this file except in compliance with the License.
2729
+ * You may obtain a copy of the License at
2730
+ *
2731
+ * http://www.apache.org/licenses/LICENSE-2.0
2732
+ *
2733
+ * Unless required by applicable law or agreed to in writing, software
2734
+ * distributed under the License is distributed on an "AS IS" BASIS,
2735
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2736
+ * See the License for the specific language governing permissions and
2737
+ * limitations under the License.
2738
+ */class nd{constructor(e){this.writeTree_=e}static empty(){return new nd(new td(null))}}function id(e,t,n){if(Ol(t))return new nd(new td(n));{const i=e.writeTree_.findRootMostValueAndPath(t);if(null!=i){const o=i.path;let r=i.value;const s=Ml(o,t);return r=r.updateChild(s,n),new nd(e.writeTree_.set(o,r))}{const i=new td(n),o=e.writeTree_.setTree(t,i);return new nd(o)}}}function od(e,t,n){let i=e;return Ja(n,((e,n)=>{i=id(i,Al(t,e),n)})),i}function rd(e,t){if(Ol(t))return nd.empty();{const n=e.writeTree_.setTree(t,new td(null));return new nd(n)}}function sd(e,t){return null!=ad(e,t)}function ad(e,t){const n=e.writeTree_.findRootMostValueAndPath(t);return null!=n?e.writeTree_.get(n.path).getChild(Ml(n.path,t)):null}function ld(e){const t=[],n=e.writeTree_.value;return null!=n?n.isLeafNode()||n.forEachChild(cc,((e,n)=>{t.push(new Wl(e,n))})):e.writeTree_.children.inorderTraversal(((e,n)=>{null!=n.value&&t.push(new Wl(e,n.value))})),t}function cd(e,t){if(Ol(t))return e;{const n=ad(e,t);return new nd(null!=n?new td(n):e.writeTree_.subtree(t))}}function dd(e){return e.writeTree_.isEmpty()}function hd(e,t){return ud(Sl(),e.writeTree_,t)}function ud(e,t,n){if(null!=t.value)return n.updateChild(e,t.value);{let i=null;return t.children.inorderTraversal(((t,o)=>{".priority"===t?(nt(null!==o.value,"Priority writes must always be leaf nodes"),i=o.value):n=ud(Al(e,t),o,n)})),n.getChild(e).isEmpty()||null===i||(n=n.updateChild(Al(e,".priority"),i)),n}}
2739
+ /**
2740
+ * @license
2741
+ * Copyright 2017 Google LLC
2742
+ *
2743
+ * Licensed under the Apache License, Version 2.0 (the "License");
2744
+ * you may not use this file except in compliance with the License.
2745
+ * You may obtain a copy of the License at
2746
+ *
2747
+ * http://www.apache.org/licenses/LICENSE-2.0
2748
+ *
2749
+ * Unless required by applicable law or agreed to in writing, software
2750
+ * distributed under the License is distributed on an "AS IS" BASIS,
2751
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2752
+ * See the License for the specific language governing permissions and
2753
+ * limitations under the License.
2754
+ */function pd(e,t){return Td(t,e)}function gd(e,t){const n=e.allWrites.findIndex((e=>e.writeId===t));nt(n>=0,"removeWrite called with nonexistent writeId.");const i=e.allWrites[n];e.allWrites.splice(n,1);let o=i.visible,r=!1,s=e.allWrites.length-1;for(;o&&s>=0;){const t=e.allWrites[s];t.visible&&(s>=n&&fd(t,i.path)?o=!1:Ul(i.path,t.path)&&(r=!0)),s--}if(o){if(r)return function(e){e.visibleWrites=vd(e.allWrites,md,Sl()),e.allWrites.length>0?e.lastWriteId=e.allWrites[e.allWrites.length-1].writeId:e.lastWriteId=-1}(e),!0;if(i.snap)e.visibleWrites=rd(e.visibleWrites,i.path);else{Ja(i.children,(t=>{e.visibleWrites=rd(e.visibleWrites,Al(i.path,t))}))}return!0}return!1}function fd(e,t){if(e.snap)return Ul(e.path,t);for(const n in e.children)if(e.children.hasOwnProperty(n)&&Ul(Al(e.path,n),t))return!0;return!1}function md(e){return e.visible}function vd(e,t,n){let i=nd.empty();for(let o=0;o<e.length;++o){const r=e[o];if(t(r)){const e=r.path;let t;if(r.snap)Ul(n,e)?(t=Ml(n,e),i=id(i,t,r.snap)):Ul(e,n)&&(t=Ml(e,n),i=id(i,Sl(),r.snap.getChild(t)));else{if(!r.children)throw it("WriteRecord should have .snap or .children");if(Ul(n,e))t=Ml(n,e),i=od(i,t,r.children);else if(Ul(e,n))if(t=Ml(e,n),Ol(t))i=od(i,Sl(),r.children);else{const e=Nt(r.children,El(t));if(e){const n=e.getChild(Ll(t));i=id(i,Sl(),n)}}}}}return i}function bd(e,t,n,i,o){if(i||o){const r=cd(e.visibleWrites,t);if(!o&&dd(r))return n;if(o||null!=n||sd(r,Sl())){const r=function(e){return(e.visible||o)&&(!i||!~i.indexOf(e.writeId))&&(Ul(e.path,t)||Ul(t,e.path))};return hd(vd(e.allWrites,r,t),n||vc.EMPTY_NODE)}return null}{const i=ad(e.visibleWrites,t);if(null!=i)return i;{const i=cd(e.visibleWrites,t);if(dd(i))return n;if(null!=n||sd(i,Sl())){return hd(i,n||vc.EMPTY_NODE)}return null}}}function wd(e,t,n,i){return bd(e.writeTree,e.treePath,t,n,i)}function xd(e,t){return function(e,t,n){let i=vc.EMPTY_NODE;const o=ad(e.visibleWrites,t);if(o)return o.isLeafNode()||o.forEachChild(cc,((e,t)=>{i=i.updateImmediateChild(e,t)})),i;if(n){const o=cd(e.visibleWrites,t);return n.forEachChild(cc,((e,t)=>{const n=hd(cd(o,new Tl(e)),t);i=i.updateImmediateChild(e,n)})),ld(o).forEach((e=>{i=i.updateImmediateChild(e.name,e.node)})),i}return ld(cd(e.visibleWrites,t)).forEach((e=>{i=i.updateImmediateChild(e.name,e.node)})),i}(e.writeTree,e.treePath,t)}function yd(e,t,n,i){return function(e,t,n,i,o){nt(i||o,"Either existingEventSnap or existingServerSnap must exist");const r=Al(t,n);if(sd(e.visibleWrites,r))return null;{const t=cd(e.visibleWrites,r);return dd(t)?o.getChild(n):hd(t,o.getChild(n))}}(e.writeTree,e.treePath,t,n,i)}function _d(e,t){return function(e,t){return ad(e.visibleWrites,t)}(e.writeTree,Al(e.treePath,t))}function kd(e,t,n,i,o,r){return function(e,t,n,i,o,r,s){let a;const l=cd(e.visibleWrites,t),c=ad(l,Sl());if(null!=c)a=c;else{if(null==n)return[];a=hd(l,n)}if(a=a.withIndex(s),a.isEmpty()||a.isLeafNode())return[];{const e=[],t=s.getCompare(),n=r?a.getReverseIteratorFrom(i,s):a.getIteratorFrom(i,s);let l=n.getNext();for(;l&&e.length<o;)0!==t(l,i)&&e.push(l),l=n.getNext();return e}}(e.writeTree,e.treePath,t,n,i,o,r)}function Cd(e,t,n){return function(e,t,n,i){const o=Al(t,n),r=ad(e.visibleWrites,o);if(null!=r)return r;if(i.isCompleteForChild(n))return hd(cd(e.visibleWrites,o),i.getNode().getImmediateChild(n));return null}(e.writeTree,e.treePath,t,n)}function Id(e,t){return Td(Al(e.treePath,t),e.writeTree)}function Td(e,t){return{treePath:e,writeTree:t}}
2755
+ /**
2756
+ * @license
2757
+ * Copyright 2017 Google LLC
2758
+ *
2759
+ * Licensed under the Apache License, Version 2.0 (the "License");
2760
+ * you may not use this file except in compliance with the License.
2761
+ * You may obtain a copy of the License at
2762
+ *
2763
+ * http://www.apache.org/licenses/LICENSE-2.0
2764
+ *
2765
+ * Unless required by applicable law or agreed to in writing, software
2766
+ * distributed under the License is distributed on an "AS IS" BASIS,
2767
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2768
+ * See the License for the specific language governing permissions and
2769
+ * limitations under the License.
2770
+ */class Sd{constructor(){this.changeMap=new Map}trackChildChange(e){const t=e.type,n=e.childName;nt("child_added"===t||"child_changed"===t||"child_removed"===t,"Only child changes supported for tracking"),nt(".priority"!==n,"Only non-priority child changes can be tracked.");const i=this.changeMap.get(n);if(i){const o=i.type;if("child_added"===t&&"child_removed"===o)this.changeMap.set(n,Ic(n,e.snapshotNode,i.snapshotNode));else if("child_removed"===t&&"child_added"===o)this.changeMap.delete(n);else if("child_removed"===t&&"child_changed"===o)this.changeMap.set(n,Cc(n,i.oldSnap));else if("child_changed"===t&&"child_added"===o)this.changeMap.set(n,kc(n,e.snapshotNode));else{if("child_changed"!==t||"child_changed"!==o)throw it("Illegal combination of changes: "+e+" occurred after "+i);this.changeMap.set(n,Ic(n,e.snapshotNode,i.oldSnap))}}else this.changeMap.set(n,e)}getChanges(){return Array.from(this.changeMap.values())}}
2771
+ /**
2772
+ * @license
2773
+ * Copyright 2017 Google LLC
2774
+ *
2775
+ * Licensed under the Apache License, Version 2.0 (the "License");
2776
+ * you may not use this file except in compliance with the License.
2777
+ * You may obtain a copy of the License at
2778
+ *
2779
+ * http://www.apache.org/licenses/LICENSE-2.0
2780
+ *
2781
+ * Unless required by applicable law or agreed to in writing, software
2782
+ * distributed under the License is distributed on an "AS IS" BASIS,
2783
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2784
+ * See the License for the specific language governing permissions and
2785
+ * limitations under the License.
2786
+ */const Ed=new class{getCompleteChild(e){return null}getChildAfterChild(e,t,n){return null}};class Pd{constructor(e,t,n=null){this.writes_=e,this.viewCache_=t,this.optCompleteServerCache_=n}getCompleteChild(e){const t=this.viewCache_.eventCache;if(t.isCompleteForChild(e))return t.getNode().getImmediateChild(e);{const t=null!=this.optCompleteServerCache_?new Wc(this.optCompleteServerCache_,!0,!1):this.viewCache_.serverCache;return Cd(this.writes_,e,t)}}getChildAfterChild(e,t,n){const i=null!=this.optCompleteServerCache_?this.optCompleteServerCache_:Zc(this.viewCache_),o=kd(this.writes_,i,t,1,n,e);return 0===o.length?null:o[0]}}
2787
+ /**
2788
+ * @license
2789
+ * Copyright 2017 Google LLC
2790
+ *
2791
+ * Licensed under the Apache License, Version 2.0 (the "License");
2792
+ * you may not use this file except in compliance with the License.
2793
+ * You may obtain a copy of the License at
2794
+ *
2795
+ * http://www.apache.org/licenses/LICENSE-2.0
2796
+ *
2797
+ * Unless required by applicable law or agreed to in writing, software
2798
+ * distributed under the License is distributed on an "AS IS" BASIS,
2799
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2800
+ * See the License for the specific language governing permissions and
2801
+ * limitations under the License.
2802
+ */function Ld(e,t,n,i,o){const r=new Sd;let s,a;if(n.type===jc.OVERWRITE){const l=n;l.source.fromUser?s=Dd(e,t,l.path,l.snap,i,o,r):(nt(l.source.fromServer,"Unknown source."),a=l.source.tagged||t.serverCache.isFiltered()&&!Ol(l.path),s=Nd(e,t,l.path,l.snap,i,o,a,r))}else if(n.type===jc.MERGE){const l=n;l.source.fromUser?s=function(e,t,n,i,o,r,s){let a=t;return i.foreach(((i,l)=>{const c=Al(n,i);Ad(t,El(c))&&(a=Dd(e,a,c,l,o,r,s))})),i.foreach(((i,l)=>{const c=Al(n,i);Ad(t,El(c))||(a=Dd(e,a,c,l,o,r,s))})),a}(e,t,l.path,l.children,i,o,r):(nt(l.source.fromServer,"Unknown source."),a=l.source.tagged||t.serverCache.isFiltered(),s=Md(e,t,l.path,l.children,i,o,a,r))}else if(n.type===jc.ACK_USER_WRITE){const a=n;s=a.revert?function(e,t,n,i,o,r){let s;if(null!=_d(i,n))return t;{const a=new Pd(i,t,o),l=t.eventCache.getNode();let c;if(Ol(n)||".priority"===El(n)){let n;if(t.serverCache.isFullyInitialized())n=wd(i,Zc(t));else{const e=t.serverCache.getNode();nt(e instanceof vc,"serverChildren would be complete if leaf node"),n=xd(i,e)}c=e.filter.updateFullNode(l,n,r)}else{const o=El(n);let d=Cd(i,o,t.serverCache);null==d&&t.serverCache.isCompleteForChild(o)&&(d=l.getImmediateChild(o)),c=null!=d?e.filter.updateChild(l,o,d,Ll(n),a,r):t.eventCache.getNode().hasChild(o)?e.filter.updateChild(l,o,vc.EMPTY_NODE,Ll(n),a,r):l,c.isEmpty()&&t.serverCache.isFullyInitialized()&&(s=wd(i,Zc(t)),s.isLeafNode()&&(c=e.filter.updateFullNode(c,s,r)))}return s=t.serverCache.isFullyInitialized()||null!=_d(i,Sl()),Jc(t,c,s,e.filter.filtersNodes())}}
2803
+ /**
2804
+ * @license
2805
+ * Copyright 2017 Google LLC
2806
+ *
2807
+ * Licensed under the Apache License, Version 2.0 (the "License");
2808
+ * you may not use this file except in compliance with the License.
2809
+ * You may obtain a copy of the License at
2810
+ *
2811
+ * http://www.apache.org/licenses/LICENSE-2.0
2812
+ *
2813
+ * Unless required by applicable law or agreed to in writing, software
2814
+ * distributed under the License is distributed on an "AS IS" BASIS,
2815
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2816
+ * See the License for the specific language governing permissions and
2817
+ * limitations under the License.
2818
+ */(e,t,a.path,i,o,r):function(e,t,n,i,o,r,s){if(null!=_d(o,n))return t;const a=t.serverCache.isFiltered(),l=t.serverCache;if(null!=i.value){if(Ol(n)&&l.isFullyInitialized()||l.isCompleteForPath(n))return Nd(e,t,n,l.getNode().getChild(n),o,r,a,s);if(Ol(n)){let i=new td(null);return l.getNode().forEachChild(Jl,((e,t)=>{i=i.set(new Tl(e),t)})),Md(e,t,n,i,o,r,a,s)}return t}{let c=new td(null);return i.foreach(((e,t)=>{const i=Al(n,e);l.isCompleteForPath(i)&&(c=c.set(e,l.getNode().getChild(i)))})),Md(e,t,n,c,o,r,a,s)}}(e,t,a.path,a.affectedTree,i,o,r)}else{if(n.type!==jc.LISTEN_COMPLETE)throw it("Unknown operation type: "+n.type);s=function(e,t,n,i,o){const r=t.serverCache,s=Qc(t,r.getNode(),r.isFullyInitialized()||Ol(n),r.isFiltered());return Rd(e,s,n,i,Ed,o)}(e,t,n.path,i,r)}const l=r.getChanges();return function(e,t,n){const i=t.eventCache;if(i.isFullyInitialized()){const o=i.getNode().isLeafNode()||i.getNode().isEmpty(),r=Xc(e);(n.length>0||!e.eventCache.isFullyInitialized()||o&&!i.getNode().equals(r)||!i.getNode().getPriority().equals(r.getPriority()))&&n.push(_c(Xc(t)))}}(t,s,l),{viewCache:s,changes:l}}function Rd(e,t,n,i,o,r){const s=t.eventCache;if(null!=_d(i,n))return t;{let a,l;if(Ol(n))if(nt(t.serverCache.isFullyInitialized(),"If change path is empty, we must have complete server data"),t.serverCache.isFiltered()){const n=Zc(t),o=xd(i,n instanceof vc?n:vc.EMPTY_NODE);a=e.filter.updateFullNode(t.eventCache.getNode(),o,r)}else{const n=wd(i,Zc(t));a=e.filter.updateFullNode(t.eventCache.getNode(),n,r)}else{const c=El(n);if(".priority"===c){nt(1===Pl(n),"Can't have a priority with additional path components");const o=s.getNode();l=t.serverCache.getNode();const r=yd(i,n,o,l);a=null!=r?e.filter.updatePriority(o,r):s.getNode()}else{const d=Ll(n);let h;if(s.isCompleteForChild(c)){l=t.serverCache.getNode();const e=yd(i,n,s.getNode(),l);h=null!=e?s.getNode().getImmediateChild(c).updateChild(d,e):s.getNode().getImmediateChild(c)}else h=Cd(i,c,t.serverCache);a=null!=h?e.filter.updateChild(s.getNode(),c,h,d,o,r):s.getNode()}}return Jc(t,a,s.isFullyInitialized()||Ol(n),e.filter.filtersNodes())}}function Nd(e,t,n,i,o,r,s,a){const l=t.serverCache;let c;const d=s?e.filter:e.filter.getIndexedFilter();if(Ol(n))c=d.updateFullNode(l.getNode(),i,null);else if(d.filtersNodes()&&!l.isFiltered()){const e=l.getNode().updateChild(n,i);c=d.updateFullNode(l.getNode(),e,null)}else{const e=El(n);if(!l.isCompleteForPath(n)&&Pl(n)>1)return t;const o=Ll(n),r=l.getNode().getImmediateChild(e).updateChild(o,i);c=".priority"===e?d.updatePriority(l.getNode(),r):d.updateChild(l.getNode(),e,r,o,Ed,null)}const h=Qc(t,c,l.isFullyInitialized()||Ol(n),d.filtersNodes());return Rd(e,h,n,o,new Pd(o,h,r),a)}function Dd(e,t,n,i,o,r,s){const a=t.eventCache;let l,c;const d=new Pd(o,t,r);if(Ol(n))c=e.filter.updateFullNode(t.eventCache.getNode(),i,s),l=Jc(t,c,!0,e.filter.filtersNodes());else{const o=El(n);if(".priority"===o)c=e.filter.updatePriority(t.eventCache.getNode(),i),l=Jc(t,c,a.isFullyInitialized(),a.isFiltered());else{const r=Ll(n),c=a.getNode().getImmediateChild(o);let h;if(Ol(r))h=i;else{const e=d.getCompleteChild(o);h=null!=e?".priority"===Rl(r)&&e.getChild(Dl(r)).isEmpty()?e:e.updateChild(r,i):vc.EMPTY_NODE}if(c.equals(h))l=t;else{l=Jc(t,e.filter.updateChild(a.getNode(),o,h,r,d,s),a.isFullyInitialized(),e.filter.filtersNodes())}}}return l}function Ad(e,t){return e.eventCache.isCompleteForChild(t)}function Od(e,t,n){return n.foreach(((e,n)=>{t=t.updateChild(e,n)})),t}function Md(e,t,n,i,o,r,s,a){if(t.serverCache.getNode().isEmpty()&&!t.serverCache.isFullyInitialized())return t;let l,c=t;l=Ol(n)?i:new td(null).setTree(n,i);const d=t.serverCache.getNode();return l.children.inorderTraversal(((n,i)=>{if(d.hasChild(n)){const l=Od(0,t.serverCache.getNode().getImmediateChild(n),i);c=Nd(e,c,new Tl(n),l,o,r,s,a)}})),l.children.inorderTraversal(((n,i)=>{const l=!t.serverCache.isCompleteForChild(n)&&null===i.value;if(!d.hasChild(n)&&!l){const l=Od(0,t.serverCache.getNode().getImmediateChild(n),i);c=Nd(e,c,new Tl(n),l,o,r,s,a)}})),c}let Fd,zd,Ud=class{constructor(e,t){this.query_=e,this.eventRegistrations_=[];const n=this.query_._queryParams,i=new Tc(n.getIndex()),o=(r=n).loadsAllData()?new Tc(r.getIndex()):r.hasLimit()?new Ec(r):new Sc(r);var r;this.processor_=function(e){return{filter:e}}(o);const s=t.serverCache,a=t.eventCache,l=i.updateFullNode(vc.EMPTY_NODE,s.getNode(),null),c=o.updateFullNode(vc.EMPTY_NODE,a.getNode(),null),d=new Wc(l,s.isFullyInitialized(),i.filtersNodes()),h=new Wc(c,a.isFullyInitialized(),o.filtersNodes());this.viewCache_=Yc(h,d),this.eventGenerator_=new Gc(this.query_)}get query(){return this.query_}};function jd(e,t){const n=Zc(e.viewCache_);return n&&(e.query._queryParams.loadsAllData()||!Ol(t)&&!n.getImmediateChild(El(t)).isEmpty())?n.getChild(t):null}function qd(e){return 0===e.eventRegistrations_.length}function Bd(e,t,n){const i=[];if(n){nt(null==t,"A cancel should cancel all event registrations.");const o=e.query._path;e.eventRegistrations_.forEach((e=>{const t=e.createCancelEvent(n,o);t&&i.push(t)}))}if(t){let n=[];for(let i=0;i<e.eventRegistrations_.length;++i){const o=e.eventRegistrations_[i];if(o.matches(t)){if(t.hasAnyCallback()){n=n.concat(e.eventRegistrations_.slice(i+1));break}}else n.push(o)}e.eventRegistrations_=n}else e.eventRegistrations_=[];return i}function Vd(e,t,n,i){t.type===jc.MERGE&&null!==t.source.queryId&&(nt(Zc(e.viewCache_),"We should always have a full cache before handling merges"),nt(Xc(e.viewCache_),"Missing event cache, even though we have a server cache"));const o=e.viewCache_,r=Ld(e.processor_,o,t,n,i);var s,a;return s=e.processor_,a=r.viewCache,nt(a.eventCache.getNode().isIndexed(s.filter.getIndex()),"Event snap not indexed"),nt(a.serverCache.getNode().isIndexed(s.filter.getIndex()),"Server snap not indexed"),nt(r.viewCache.serverCache.isFullyInitialized()||!o.serverCache.isFullyInitialized(),"Once a server snap is complete, it should never go back"),e.viewCache_=r.viewCache,Hd(e,r.changes,r.viewCache.eventCache.getNode(),null)}function Hd(e,t,n,i){const o=i?[i]:e.eventRegistrations_;return function(e,t,n,i){const o=[],r=[];return t.forEach((t=>{var n;"child_changed"===t.type&&e.index_.indexedValueChanged(t.oldSnap,t.snapshotNode)&&r.push((n=t.childName,{type:"child_moved",snapshotNode:t.snapshotNode,childName:n}))})),Kc(e,o,"child_removed",t,i,n),Kc(e,o,"child_added",t,i,n),Kc(e,o,"child_moved",r,i,n),Kc(e,o,"child_changed",t,i,n),Kc(e,o,"value",t,i,n),o}(e.eventGenerator_,t,n,o)}
2819
+ /**
2820
+ * @license
2821
+ * Copyright 2017 Google LLC
2822
+ *
2823
+ * Licensed under the Apache License, Version 2.0 (the "License");
2824
+ * you may not use this file except in compliance with the License.
2825
+ * You may obtain a copy of the License at
2826
+ *
2827
+ * http://www.apache.org/licenses/LICENSE-2.0
2828
+ *
2829
+ * Unless required by applicable law or agreed to in writing, software
2830
+ * distributed under the License is distributed on an "AS IS" BASIS,
2831
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2832
+ * See the License for the specific language governing permissions and
2833
+ * limitations under the License.
2834
+ */class $d{constructor(){this.views=new Map}}function Wd(e,t,n,i){const o=t.source.queryId;if(null!==o){const r=e.views.get(o);return nt(null!=r,"SyncTree gave us an op for an invalid query."),Vd(r,t,n,i)}{let o=[];for(const r of e.views.values())o=o.concat(Vd(r,t,n,i));return o}}function Gd(e,t,n,i,o,r){const s=function(e,t,n,i,o){const r=t._queryIdentifier,s=e.views.get(r);if(!s){let e=wd(n,o?i:null),r=!1;e?r=!0:i instanceof vc?(e=xd(n,i),r=!1):(e=vc.EMPTY_NODE,r=!1);const s=Yc(new Wc(e,r,!1),new Wc(i,o,!1));return new Ud(t,s)}return s}(e,t,i,o,r);return e.views.has(t._queryIdentifier)||e.views.set(t._queryIdentifier,s),function(e,t){e.eventRegistrations_.push(t)}(s,n),function(e,t){const n=e.viewCache_.eventCache,i=[];n.getNode().isLeafNode()||n.getNode().forEachChild(cc,((e,t)=>{i.push(kc(e,t))}));return n.isFullyInitialized()&&i.push(_c(n.getNode())),Hd(e,i,n.getNode(),t)}(s,n)}function Kd(e,t,n,i){const o=t._queryIdentifier,r=[];let s=[];const a=Zd(e);if("default"===o)for(const[t,o]of e.views.entries())s=s.concat(Bd(o,n,i)),qd(o)&&(e.views.delete(t),o.query._queryParams.loadsAllData()||r.push(o.query));else{const t=e.views.get(o);t&&(s=s.concat(Bd(t,n,i)),qd(t)&&(e.views.delete(o),t.query._queryParams.loadsAllData()||r.push(t.query)))}return a&&!Zd(e)&&r.push(new(nt(Fd,"Reference.ts has not been loaded"),Fd)(t._repo,t._path)),{removed:r,events:s}}function Yd(e){const t=[];for(const n of e.views.values())n.query._queryParams.loadsAllData()||t.push(n);return t}function Jd(e,t){let n=null;for(const i of e.views.values())n=n||jd(i,t);return n}function Qd(e,t){if(t._queryParams.loadsAllData())return eh(e);{const n=t._queryIdentifier;return e.views.get(n)}}function Xd(e,t){return null!=Qd(e,t)}function Zd(e){return null!=eh(e)}function eh(e){for(const t of e.views.values())if(t.query._queryParams.loadsAllData())return t;return null}
2835
+ /**
2836
+ * @license
2837
+ * Copyright 2017 Google LLC
2838
+ *
2839
+ * Licensed under the Apache License, Version 2.0 (the "License");
2840
+ * you may not use this file except in compliance with the License.
2841
+ * You may obtain a copy of the License at
2842
+ *
2843
+ * http://www.apache.org/licenses/LICENSE-2.0
2844
+ *
2845
+ * Unless required by applicable law or agreed to in writing, software
2846
+ * distributed under the License is distributed on an "AS IS" BASIS,
2847
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2848
+ * See the License for the specific language governing permissions and
2849
+ * limitations under the License.
2850
+ */let th=1;class nh{constructor(e){this.listenProvider_=e,this.syncPointTree_=new td(null),this.pendingWriteTree_={visibleWrites:nd.empty(),allWrites:[],lastWriteId:-1},this.tagToQueryMap=new Map,this.queryToTagMap=new Map}}function ih(e,t,n,i,o){return function(e,t,n,i,o){nt(i>e.lastWriteId,"Stacking an older write on top of newer ones"),void 0===o&&(o=!0),e.allWrites.push({path:t,snap:n,writeId:i,visible:o}),o&&(e.visibleWrites=id(e.visibleWrites,t,n)),e.lastWriteId=i}(e.pendingWriteTree_,t,n,i,o),o?ch(e,new Hc({fromUser:!0,fromServer:!1,queryId:null,tagged:!1},t,n)):[]}function oh(e,t,n=!1){const i=function(e,t){for(let n=0;n<e.allWrites.length;n++){const i=e.allWrites[n];if(i.writeId===t)return i}return null}(e.pendingWriteTree_,t);if(gd(e.pendingWriteTree_,t)){let t=new td(null);return null!=i.snap?t=t.set(Sl(),!0):Ja(i.children,(e=>{t=t.set(new Tl(e),!0)})),ch(e,new Bc(i.path,t,n))}return[]}function rh(e,t,n){return ch(e,new Hc({fromUser:!1,fromServer:!0,queryId:null,tagged:!1},t,n))}function sh(e,t,n,i,o=!1){const r=t._path,s=e.syncPointTree_.get(r);let a=[];if(s&&("default"===t._queryIdentifier||Xd(s,t))){const l=Kd(s,t,n,i);0===s.views.size&&(e.syncPointTree_=e.syncPointTree_.remove(r));const c=l.removed;if(a=l.events,!o){const n=-1!==c.findIndex((e=>e._queryParams.loadsAllData())),o=e.syncPointTree_.findOnPath(r,((e,t)=>Zd(t)));if(n&&!o){const t=e.syncPointTree_.subtree(r);if(!t.isEmpty()){const n=function(e){return e.fold(((e,t,n)=>{if(t&&Zd(t)){return[eh(t)]}{let e=[];return t&&(e=Yd(t)),Ja(n,((t,n)=>{e=e.concat(n)})),e}}))}(t);for(let t=0;t<n.length;++t){const i=n[t],o=i.query,r=uh(e,i);e.listenProvider_.startListening(bh(o),ph(e,o),r.hashFn,r.onComplete)}}}if(!o&&c.length>0&&!i)if(n){const n=null;e.listenProvider_.stopListening(bh(t),n)}else c.forEach((t=>{const n=e.queryToTagMap.get(gh(t));e.listenProvider_.stopListening(bh(t),n)}))}!function(e,t){for(let n=0;n<t.length;++n){const i=t[n];if(!i._queryParams.loadsAllData()){const t=gh(i),n=e.queryToTagMap.get(t);e.queryToTagMap.delete(t),e.tagToQueryMap.delete(n)}}}(e,c)}return a}function ah(e,t,n,i=!1){const o=t._path;let r=null,s=!1;e.syncPointTree_.foreachOnPath(o,((e,t)=>{const n=Ml(e,o);r=r||Jd(t,n),s=s||Zd(t)}));let a,l=e.syncPointTree_.get(o);if(l?(s=s||Zd(l),r=r||Jd(l,Sl())):(l=new $d,e.syncPointTree_=e.syncPointTree_.set(o,l)),null!=r)a=!0;else{a=!1,r=vc.EMPTY_NODE;e.syncPointTree_.subtree(o).foreachChild(((e,t)=>{const n=Jd(t,Sl());n&&(r=r.updateImmediateChild(e,n))}))}const c=Xd(l,t);if(!c&&!t._queryParams.loadsAllData()){const n=gh(t);nt(!e.queryToTagMap.has(n),"View does not exist, but we have a tag");const i=th++;e.queryToTagMap.set(n,i),e.tagToQueryMap.set(i,n)}let d=Gd(l,t,n,pd(e.pendingWriteTree_,o),r,a);if(!c&&!s&&!i){const n=Qd(l,t);d=d.concat(function(e,t,n){const i=t._path,o=ph(e,t),r=uh(e,n),s=e.listenProvider_.startListening(bh(t),o,r.hashFn,r.onComplete),a=e.syncPointTree_.subtree(i);if(o)nt(!Zd(a.value),"If we're adding a query, it shouldn't be shadowed");else{const t=a.fold(((e,t,n)=>{if(!Ol(e)&&t&&Zd(t))return[eh(t).query];{let e=[];return t&&(e=e.concat(Yd(t).map((e=>e.query)))),Ja(n,((t,n)=>{e=e.concat(n)})),e}}));for(let n=0;n<t.length;++n){const i=t[n];e.listenProvider_.stopListening(bh(i),ph(e,i))}}return s}
2851
+ /**
2852
+ * @license
2853
+ * Copyright 2017 Google LLC
2854
+ *
2855
+ * Licensed under the Apache License, Version 2.0 (the "License");
2856
+ * you may not use this file except in compliance with the License.
2857
+ * You may obtain a copy of the License at
2858
+ *
2859
+ * http://www.apache.org/licenses/LICENSE-2.0
2860
+ *
2861
+ * Unless required by applicable law or agreed to in writing, software
2862
+ * distributed under the License is distributed on an "AS IS" BASIS,
2863
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2864
+ * See the License for the specific language governing permissions and
2865
+ * limitations under the License.
2866
+ */(e,t,n))}return d}function lh(e,t,n){const i=e.pendingWriteTree_,o=e.syncPointTree_.findOnPath(t,((e,n)=>{const i=Jd(n,Ml(e,t));if(i)return i}));return bd(i,t,o,n,!0)}function ch(e,t){return dh(t,e.syncPointTree_,null,pd(e.pendingWriteTree_,Sl()))}function dh(e,t,n,i){if(Ol(e.path))return hh(e,t,n,i);{const o=t.get(Sl());null==n&&null!=o&&(n=Jd(o,Sl()));let r=[];const s=El(e.path),a=e.operationForChild(s),l=t.children.get(s);if(l&&a){const e=n?n.getImmediateChild(s):null,t=Id(i,s);r=r.concat(dh(a,l,e,t))}return o&&(r=r.concat(Wd(o,e,i,n))),r}}function hh(e,t,n,i){const o=t.get(Sl());null==n&&null!=o&&(n=Jd(o,Sl()));let r=[];return t.children.inorderTraversal(((t,o)=>{const s=n?n.getImmediateChild(t):null,a=Id(i,t),l=e.operationForChild(t);l&&(r=r.concat(hh(l,o,s,a)))})),o&&(r=r.concat(Wd(o,e,i,n))),r}function uh(e,t){const n=t.query,i=ph(e,n);return{hashFn:()=>{const e=function(e){return e.viewCache_.serverCache.getNode()}(t)||vc.EMPTY_NODE;return e.hash()},onComplete:t=>{if("ok"===t)return i?function(e,t,n){const i=fh(e,n);if(i){const n=mh(i),o=n.path,r=n.queryId,s=Ml(o,t);return vh(e,o,new Vc(qc(r),s))}return[]}(e,n._path,i):function(e,t){return ch(e,new Vc({fromUser:!1,fromServer:!0,queryId:null,tagged:!1},t))}(e,n._path);{const i=function(e,t){let n="Unknown Error";"too_big"===e?n="The data requested exceeds the maximum size that can be accessed with a single request.":"permission_denied"===e?n="Client doesn't have permission to access the desired data.":"unavailable"===e&&(n="The service is unavailable");const i=new Error(e+" at "+t._path.toString()+": "+n);return i.code=e.toUpperCase(),i}(t,n);return sh(e,n,null,i)}}}}function ph(e,t){const n=gh(t);return e.queryToTagMap.get(n)}function gh(e){return e._path.toString()+"$"+e._queryIdentifier}function fh(e,t){return e.tagToQueryMap.get(t)}function mh(e){const t=e.indexOf("$");return nt(-1!==t&&t<e.length-1,"Bad queryKey."),{queryId:e.substr(t+1),path:new Tl(e.substr(0,t))}}function vh(e,t,n){const i=e.syncPointTree_.get(t);nt(i,"Missing sync point for query tag that we're tracking");return Wd(i,n,pd(e.pendingWriteTree_,t),null)}function bh(e){return e._queryParams.loadsAllData()&&!e._queryParams.isDefault()?new(nt(zd,"Reference.ts has not been loaded"),zd)(e._repo,e._path):e}class wh{constructor(e){this.node_=e}getImmediateChild(e){const t=this.node_.getImmediateChild(e);return new wh(t)}node(){return this.node_}}class xh{constructor(e,t){this.syncTree_=e,this.path_=t}getImmediateChild(e){const t=Al(this.path_,e);return new xh(this.syncTree_,t)}node(){return lh(this.syncTree_,this.path_)}}const yh=function(e,t,n){return e&&"object"==typeof e?(nt(".sv"in e,"Unexpected leaf node or priority contents"),"string"==typeof e[".sv"]?_h(e[".sv"],t,n):"object"==typeof e[".sv"]?kh(e[".sv"],t):void nt(!1,"Unexpected server value: "+JSON.stringify(e,null,2))):e},_h=function(e,t,n){if("timestamp"===e)return n.timestamp;nt(!1,"Unexpected server value: "+e)},kh=function(e,t,n){e.hasOwnProperty("increment")||nt(!1,"Unexpected server value: "+JSON.stringify(e,null,2));const i=e.increment;"number"!=typeof i&&nt(!1,"Unexpected increment value: "+i);const o=t.node();if(nt(null!=o,"Expected ChildrenNode.EMPTY_NODE for nulls"),!o.isLeafNode())return i;const r=o.getValue();return"number"!=typeof r?i:r+i},Ch=function(e,t,n){return Ih(e,new wh(t),n)};function Ih(e,t,n){const i=e.getPriority().val(),o=yh(i,t.getImmediateChild(".priority"),n);let r;if(e.isLeafNode()){const i=e,r=yh(i.getValue(),t,n);return r!==i.getValue()||o!==i.getPriority().val()?new lc(r,wc(o)):e}{const i=e;return r=i,o!==i.getPriority().val()&&(r=r.updatePriority(new lc(o))),i.forEachChild(cc,((e,i)=>{const o=Ih(i,t.getImmediateChild(e),n);o!==i&&(r=r.updateImmediateChild(e,o))})),r}}
2867
+ /**
2868
+ * @license
2869
+ * Copyright 2017 Google LLC
2870
+ *
2871
+ * Licensed under the Apache License, Version 2.0 (the "License");
2872
+ * you may not use this file except in compliance with the License.
2873
+ * You may obtain a copy of the License at
2874
+ *
2875
+ * http://www.apache.org/licenses/LICENSE-2.0
2876
+ *
2877
+ * Unless required by applicable law or agreed to in writing, software
2878
+ * distributed under the License is distributed on an "AS IS" BASIS,
2879
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2880
+ * See the License for the specific language governing permissions and
2881
+ * limitations under the License.
2882
+ */class Th{constructor(e="",t=null,n={children:{},childCount:0}){this.name=e,this.parent=t,this.node=n}}function Sh(e,t){let n=t instanceof Tl?t:new Tl(t),i=e,o=El(n);for(;null!==o;){const e=Nt(i.node.children,o)||{children:{},childCount:0};i=new Th(o,i,e),n=Ll(n),o=El(n)}return i}function Eh(e){return e.node.value}function Ph(e,t){e.node.value=t,Ah(e)}function Lh(e){return e.node.childCount>0}function Rh(e,t){Ja(e.node.children,((n,i)=>{t(new Th(n,e,i))}))}function Nh(e,t,n,i){n&&!i&&t(e),Rh(e,(e=>{Nh(e,t,!0,i)})),n&&i&&t(e)}function Dh(e){return new Tl(null===e.parent?e.name:Dh(e.parent)+"/"+e.name)}function Ah(e){null!==e.parent&&function(e,t,n){const i=function(e){return void 0===Eh(e)&&!Lh(e)}(n),o=Rt(e.node.children,t);i&&o?(delete e.node.children[t],e.node.childCount--,Ah(e)):i||o||(e.node.children[t]=n.node,e.node.childCount++,Ah(e))}
2883
+ /**
2884
+ * @license
2885
+ * Copyright 2017 Google LLC
2886
+ *
2887
+ * Licensed under the Apache License, Version 2.0 (the "License");
2888
+ * you may not use this file except in compliance with the License.
2889
+ * You may obtain a copy of the License at
2890
+ *
2891
+ * http://www.apache.org/licenses/LICENSE-2.0
2892
+ *
2893
+ * Unless required by applicable law or agreed to in writing, software
2894
+ * distributed under the License is distributed on an "AS IS" BASIS,
2895
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2896
+ * See the License for the specific language governing permissions and
2897
+ * limitations under the License.
2898
+ */(e.parent,e.name,e)}const Oh=/[\[\].#$\/\u0000-\u001F\u007F]/,Mh=/[\[\].#$\u0000-\u001F\u007F]/,Fh=10485760,zh=function(e){return"string"==typeof e&&0!==e.length&&!Oh.test(e)},Uh=function(e){return"string"==typeof e&&0!==e.length&&!Mh.test(e)},jh=function(e){return null===e||"string"==typeof e||"number"==typeof e&&!Ba(e)||e&&"object"==typeof e&&Rt(e,".sv")},qh=function(e,t,n,i){i&&void 0===t||Bh(qt(e,"value"),t,n)},Bh=function(e,t,n){const i=n instanceof Tl?new jl(n,e):n;if(void 0===t)throw new Error(e+"contains undefined "+Bl(i));if("function"==typeof t)throw new Error(e+"contains a function "+Bl(i)+" with contents = "+t.toString());if(Ba(t))throw new Error(e+"contains "+t.toString()+" "+Bl(i));if("string"==typeof t&&t.length>Fh/3&&Bt(t)>Fh)throw new Error(e+"contains a string greater than "+Fh+" utf8 bytes "+Bl(i)+" ('"+t.substring(0,50)+"...')");if(t&&"object"==typeof t){let n=!1,o=!1;if(Ja(t,((t,r)=>{if(".value"===t)n=!0;else if(".priority"!==t&&".sv"!==t&&(o=!0,!zh(t)))throw new Error(e+" contains an invalid key ("+t+") "+Bl(i)+'. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"');!function(e,t){e.parts_.length>0&&(e.byteLength_+=1),e.parts_.push(t),e.byteLength_+=Bt(t),ql(e)}(i,t),Bh(e,r,i),function(e){const t=e.parts_.pop();e.byteLength_-=Bt(t),e.parts_.length>0&&(e.byteLength_-=1)}(i)})),n&&o)throw new Error(e+' contains ".value" child '+Bl(i)+" in addition to actual children.")}},Vh=function(e,t,n,i){const o=qt(e,"values");if(!t||"object"!=typeof t||Array.isArray(t))throw new Error(o+" must be an object containing the children to replace.");const r=[];Ja(t,((e,t)=>{const i=new Tl(e);if(Bh(o,t,Al(n,i)),".priority"===Rl(i)&&!jh(t))throw new Error(o+"contains an invalid value for '"+i.toString()+"', which must be a valid Firebase priority (a string, finite number, server value, or null).");r.push(i)})),function(e,t){let n,i;for(n=0;n<t.length;n++){i=t[n];const o=Nl(i);for(let t=0;t<o.length;t++)if(".priority"===o[t]&&t===o.length-1);else if(!zh(o[t]))throw new Error(e+"contains an invalid key ("+o[t]+") in path "+i.toString()+'. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"')}t.sort(Fl);let o=null;for(n=0;n<t.length;n++){if(i=t[n],null!==o&&Ul(o,i))throw new Error(e+"contains a path "+o.toString()+" that is ancestor of another path "+i.toString());o=i}}(o,r)},Hh=function(e,t,n,i){if(!Uh(n))throw new Error(qt(e,t)+'was an invalid path = "'+n+'". Paths must be non-empty strings and can\'t contain ".", "#", "$", "[", or "]"')},$h=function(e,t){if(".info"===El(t))throw new Error(e+" failed = Can't modify data under /.info/")},Wh=function(e,t){const n=t.path.toString();if("string"!=typeof t.repoInfo.host||0===t.repoInfo.host.length||!zh(t.repoInfo.namespace)&&"localhost"!==t.repoInfo.host.split(":")[0]||0!==n.length&&!function(e){return e&&(e=e.replace(/^\/*\.info(\/|$)/,"/")),Uh(e)}(n))throw new Error(qt(e,"url")+'must be a valid firebase URL and the path can\'t contain ".", "#", "$", "[", or "]".')};
2899
+ /**
2900
+ * @license
2901
+ * Copyright 2017 Google LLC
2902
+ *
2903
+ * Licensed under the Apache License, Version 2.0 (the "License");
2904
+ * you may not use this file except in compliance with the License.
2905
+ * You may obtain a copy of the License at
2906
+ *
2907
+ * http://www.apache.org/licenses/LICENSE-2.0
2908
+ *
2909
+ * Unless required by applicable law or agreed to in writing, software
2910
+ * distributed under the License is distributed on an "AS IS" BASIS,
2911
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2912
+ * See the License for the specific language governing permissions and
2913
+ * limitations under the License.
2914
+ */
2915
+ class Gh{constructor(){this.eventLists_=[],this.recursionDepth_=0}}function Kh(e,t){let n=null;for(let i=0;i<t.length;i++){const o=t[i],r=o.getPath();null===n||zl(r,n.path)||(e.eventLists_.push(n),n=null),null===n&&(n={events:[],path:r}),n.events.push(o)}n&&e.eventLists_.push(n)}function Yh(e,t,n){Kh(e,n),Qh(e,(e=>zl(e,t)))}function Jh(e,t,n){Kh(e,n),Qh(e,(e=>Ul(e,t)||Ul(t,e)))}function Qh(e,t){e.recursionDepth_++;let n=!0;for(let i=0;i<e.eventLists_.length;i++){const o=e.eventLists_[i];if(o){t(o.path)?(Xh(e.eventLists_[i]),e.eventLists_[i]=null):n=!1}}n&&(e.eventLists_=[]),e.recursionDepth_--}function Xh(e){for(let t=0;t<e.events.length;t++){const n=e.events[t];if(null!==n){e.events[t]=null;const i=n.getEventRunner();Oa&&Fa("event: "+n.toString()),el(i)}}}
2916
+ /**
2917
+ * @license
2918
+ * Copyright 2017 Google LLC
2919
+ *
2920
+ * Licensed under the Apache License, Version 2.0 (the "License");
2921
+ * you may not use this file except in compliance with the License.
2922
+ * You may obtain a copy of the License at
2923
+ *
2924
+ * http://www.apache.org/licenses/LICENSE-2.0
2925
+ *
2926
+ * Unless required by applicable law or agreed to in writing, software
2927
+ * distributed under the License is distributed on an "AS IS" BASIS,
2928
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2929
+ * See the License for the specific language governing permissions and
2930
+ * limitations under the License.
2931
+ */class Zh{constructor(e,t,n,i){this.repoInfo_=e,this.forceRestClient_=t,this.authTokenProvider_=n,this.appCheckProvider_=i,this.dataUpdateCount=0,this.statsListener_=null,this.eventQueue_=new Gh,this.nextWriteId_=1,this.interceptServerDataCallback_=null,this.onDisconnect_=Ac(),this.transactionQueueTree_=new Th,this.persistentConnection_=null,this.key=this.repoInfo_.toURLString()}toString(){return(this.repoInfo_.secure?"https://":"http://")+this.repoInfo_.host}}function eu(e,t,n){if(e.stats_=gl(e.repoInfo_),e.forceRestClient_||("object"==typeof window&&window.navigator&&window.navigator.userAgent||"").search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i)>=0)e.server_=new Nc(e.repoInfo_,((t,n,i,o)=>{iu(e,t,n,i,o)}),e.authTokenProvider_,e.appCheckProvider_),setTimeout((()=>ou(e,!0)),0);else{if(null!=n){if("object"!=typeof n)throw new Error("Only objects are supported for option databaseAuthVariableOverride");try{Pt(n)}catch(e){throw new Error("Invalid authOverride provided: "+e)}}e.persistentConnection_=new $l(e.repoInfo_,t,((t,n,i,o)=>{iu(e,t,n,i,o)}),(t=>{ou(e,t)}),(t=>{!function(e,t){Ja(t,((t,n)=>{ru(e,t,n)}))}(e,t)}),e.authTokenProvider_,e.appCheckProvider_,n),e.server_=e.persistentConnection_}e.authTokenProvider_.addTokenChangeListener((t=>{e.server_.refreshAuthToken(t)})),e.appCheckProvider_.addTokenChangeListener((t=>{e.server_.refreshAppCheckToken(t.token)})),e.statsReporter_=function(e,t){const n=e.toString();return pl[n]||(pl[n]=t()),pl[n]}(e.repoInfo_,(()=>new Uc(e.stats_,e.server_))),e.infoData_=new Dc,e.infoSyncTree_=new nh({startListening:(t,n,i,o)=>{let r=[];const s=e.infoData_.getNode(t._path);return s.isEmpty()||(r=rh(e.infoSyncTree_,t._path,s),setTimeout((()=>{o("ok")}),0)),r},stopListening:()=>{}}),ru(e,"connected",!1),e.serverSyncTree_=new nh({startListening:(t,n,i,o)=>(e.server_.listen(t,i,n,((n,i)=>{const r=o(n,i);Jh(e.eventQueue_,t._path,r)})),[]),stopListening:(t,n)=>{e.server_.unlisten(t,n)}})}function tu(e){const t=e.infoData_.getNode(new Tl(".info/serverTimeOffset")).val()||0;return(new Date).getTime()+t}function nu(e){return(t=(t={timestamp:tu(e)})||{}).timestamp=t.timestamp||(new Date).getTime(),t;var t}function iu(e,t,n,i,o){e.dataUpdateCount++;const r=new Tl(t);n=e.interceptServerDataCallback_?e.interceptServerDataCallback_(t,n):n;let s=[];if(o)if(i){const t=At(n,(e=>wc(e)));s=function(e,t,n,i){const o=fh(e,i);if(o){const i=mh(o),r=i.path,s=i.queryId,a=Ml(r,t),l=td.fromObject(n);return vh(e,r,new $c(qc(s),a,l))}return[]}(e.serverSyncTree_,r,t,o)}else{const t=wc(n);s=function(e,t,n,i){const o=fh(e,i);if(null!=o){const i=mh(o),r=i.path,s=i.queryId,a=Ml(r,t);return vh(e,r,new Hc(qc(s),a,n))}return[]}(e.serverSyncTree_,r,t,o)}else if(i){const t=At(n,(e=>wc(e)));s=function(e,t,n){const i=td.fromObject(n);return ch(e,new $c({fromUser:!1,fromServer:!0,queryId:null,tagged:!1},t,i))}(e.serverSyncTree_,r,t)}else{const t=wc(n);s=rh(e.serverSyncTree_,r,t)}let a=r;s.length>0&&(a=gu(e,r)),Jh(e.eventQueue_,a,s)}function ou(e,t){ru(e,"connected",t),!1===t&&function(e){du(e,"onDisconnectEvents");const t=nu(e),n=Ac();Fc(e.onDisconnect_,Sl(),((i,o)=>{const r=function(e,t,n,i){return Ih(t,new xh(n,e),i)}(i,o,e.serverSyncTree_,t);Oc(n,i,r)}));let i=[];Fc(n,Sl(),((t,n)=>{i=i.concat(rh(e.serverSyncTree_,t,n));const o=wu(e,t);gu(e,o)})),e.onDisconnect_=Ac(),Jh(e.eventQueue_,Sl(),i)}(e)}function ru(e,t,n){const i=new Tl("/.info/"+t),o=wc(n);e.infoData_.updateSnapshot(i,o);const r=rh(e.infoSyncTree_,i,o);Jh(e.eventQueue_,i,r)}function su(e){return e.nextWriteId_++}function au(e,t,n){e.server_.onDisconnectCancel(t.toString(),((i,o)=>{"ok"===i&&Mc(e.onDisconnect_,t),hu(e,n,i,o)}))}function lu(e,t,n,i){const o=wc(n);e.server_.onDisconnectPut(t.toString(),o.val(!0),((n,r)=>{"ok"===n&&Oc(e.onDisconnect_,t,o),hu(e,i,n,r)}))}function cu(e,t,n){let i;i=".info"===El(t._path)?sh(e.infoSyncTree_,t,n):sh(e.serverSyncTree_,t,n),Yh(e.eventQueue_,t._path,i)}function du(e,...t){let n="";e.persistentConnection_&&(n=e.persistentConnection_.id+":"),Fa(n,...t)}function hu(e,t,n,i){t&&el((()=>{if("ok"===n)t(null);else{const e=(n||"error").toUpperCase();let o=e;i&&(o+=": "+i);const r=new Error(o);r.code=e,t(r)}}))}function uu(e,t,n){return lh(e.serverSyncTree_,t,n)||vc.EMPTY_NODE}function pu(e,t=e.transactionQueueTree_){if(t||bu(e,t),Eh(t)){const n=mu(e,t);nt(n.length>0,"Sending zero length transaction queue");n.every((e=>0===e.status))&&function(e,t,n){const i=n.map((e=>e.currentWriteId)),o=uu(e,t,i);let r=o;const s=o.hash();for(let e=0;e<n.length;e++){const i=n[e];nt(0===i.status,"tryToSendTransactionQueue_: items in queue should all be run."),i.status=1,i.retryCount++;const o=Ml(t,i.path);r=r.updateChild(o,i.currentOutputSnapshotRaw)}const a=r.val(!0),l=t;e.server_.put(l.toString(),a,(i=>{du(e,"transaction put response",{path:l.toString(),status:i});let o=[];if("ok"===i){const i=[];for(let t=0;t<n.length;t++)n[t].status=2,o=o.concat(oh(e.serverSyncTree_,n[t].currentWriteId)),n[t].onComplete&&i.push((()=>n[t].onComplete(null,!0,n[t].currentOutputSnapshotResolved))),n[t].unwatcher();bu(e,Sh(e.transactionQueueTree_,t)),pu(e,e.transactionQueueTree_),Jh(e.eventQueue_,t,o);for(let e=0;e<i.length;e++)el(i[e])}else{if("datastale"===i)for(let e=0;e<n.length;e++)3===n[e].status?n[e].status=4:n[e].status=0;else{qa("transaction at "+l.toString()+" failed: "+i);for(let e=0;e<n.length;e++)n[e].status=4,n[e].abortReason=i}gu(e,t)}}),s)}(e,Dh(t),n)}else Lh(t)&&Rh(t,(t=>{pu(e,t)}))}function gu(e,t){const n=fu(e,t),i=Dh(n);return function(e,t,n){if(0===t.length)return;const i=[];let o=[];const r=t.filter((e=>0===e.status)),s=r.map((e=>e.currentWriteId));for(let r=0;r<t.length;r++){const l=t[r],c=Ml(n,l.path);let d,h=!1;if(nt(null!==c,"rerunTransactionsUnderNode_: relativePath should not be null."),4===l.status)h=!0,d=l.abortReason,o=o.concat(oh(e.serverSyncTree_,l.currentWriteId,!0));else if(0===l.status)if(l.retryCount>=25)h=!0,d="maxretry",o=o.concat(oh(e.serverSyncTree_,l.currentWriteId,!0));else{const n=uu(e,l.path,s);l.currentInputSnapshot=n;const i=t[r].update(n.val());if(void 0!==i){Bh("transaction failed: Data returned ",i,l.path);let t=wc(i);"object"==typeof i&&null!=i&&Rt(i,".priority")||(t=t.updatePriority(n.getPriority()));const r=l.currentWriteId,a=nu(e),c=Ch(t,n,a);l.currentOutputSnapshotRaw=t,l.currentOutputSnapshotResolved=c,l.currentWriteId=su(e),s.splice(s.indexOf(r),1),o=o.concat(ih(e.serverSyncTree_,l.path,c,l.currentWriteId,l.applyLocally)),o=o.concat(oh(e.serverSyncTree_,r,!0))}else h=!0,d="nodata",o=o.concat(oh(e.serverSyncTree_,l.currentWriteId,!0))}Jh(e.eventQueue_,n,o),o=[],h&&(t[r].status=2,a=t[r].unwatcher,setTimeout(a,Math.floor(0)),t[r].onComplete&&("nodata"===d?i.push((()=>t[r].onComplete(null,!1,t[r].currentInputSnapshot))):i.push((()=>t[r].onComplete(new Error(d),!1,null)))))}var a;bu(e,e.transactionQueueTree_);for(let e=0;e<i.length;e++)el(i[e]);pu(e,e.transactionQueueTree_)}(e,mu(e,n),i),i}function fu(e,t){let n,i=e.transactionQueueTree_;for(n=El(t);null!==n&&void 0===Eh(i);)i=Sh(i,n),n=El(t=Ll(t));return i}function mu(e,t){const n=[];return vu(e,t,n),n.sort(((e,t)=>e.order-t.order)),n}function vu(e,t,n){const i=Eh(t);if(i)for(let e=0;e<i.length;e++)n.push(i[e]);Rh(t,(t=>{vu(e,t,n)}))}function bu(e,t){const n=Eh(t);if(n){let e=0;for(let t=0;t<n.length;t++)2!==n[t].status&&(n[e]=n[t],e++);n.length=e,Ph(t,n.length>0?n:void 0)}Rh(t,(t=>{bu(e,t)}))}function wu(e,t){const n=Dh(fu(e,t)),i=Sh(e.transactionQueueTree_,t);return function(e,t){let n=e.parent;for(;null!==n;){if(t(n))return!0;n=n.parent}}(i,(t=>{xu(e,t)})),xu(e,i),Nh(i,(t=>{xu(e,t)})),n}function xu(e,t){const n=Eh(t);if(n){const i=[];let o=[],r=-1;for(let t=0;t<n.length;t++)3===n[t].status||(1===n[t].status?(nt(r===t-1,"All SENT items should be at beginning of queue."),r=t,n[t].status=3,n[t].abortReason="set"):(nt(0===n[t].status,"Unexpected transaction status in abort"),n[t].unwatcher(),o=o.concat(oh(e.serverSyncTree_,n[t].currentWriteId,!0)),n[t].onComplete&&i.push(n[t].onComplete.bind(null,new Error("set"),!1,null))));-1===r?Ph(t,void 0):n.length=r+1,Jh(e.eventQueue_,Dh(t),o);for(let e=0;e<i.length;e++)el(i[e])}}
2932
+ /**
2933
+ * @license
2934
+ * Copyright 2017 Google LLC
2935
+ *
2936
+ * Licensed under the Apache License, Version 2.0 (the "License");
2937
+ * you may not use this file except in compliance with the License.
2938
+ * You may obtain a copy of the License at
2939
+ *
2940
+ * http://www.apache.org/licenses/LICENSE-2.0
2941
+ *
2942
+ * Unless required by applicable law or agreed to in writing, software
2943
+ * distributed under the License is distributed on an "AS IS" BASIS,
2944
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2945
+ * See the License for the specific language governing permissions and
2946
+ * limitations under the License.
2947
+ */const yu=function(e,t){const n=_u(e),i=n.namespace;"firebase.com"===n.domain&&ja(n.host+" is no longer supported. Please use <YOUR FIREBASE>.firebaseio.com instead"),i&&"undefined"!==i||"localhost"===n.domain||ja("Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com"),n.secure||"undefined"!=typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&qa("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");const o="ws"===n.scheme||"wss"===n.scheme;return{repoInfo:new cl(n.host,n.secure,i,o,t,"",i!==n.subdomain),path:new Tl(n.pathString)}},_u=function(e){let t="",n="",i="",o="",r="",s=!0,a="https",l=443;if("string"==typeof e){let c=e.indexOf("//");c>=0&&(a=e.substring(0,c-1),e=e.substring(c+2));let d=e.indexOf("/");-1===d&&(d=e.length);let h=e.indexOf("?");-1===h&&(h=e.length),t=e.substring(0,Math.min(d,h)),d<h&&(o=function(e){let t="";const n=e.split("/");for(let e=0;e<n.length;e++)if(n[e].length>0){let i=n[e];try{i=decodeURIComponent(i.replace(/\+/g," "))}catch(e){}t+="/"+i}return t}(e.substring(d,h)));const u=function(e){const t={};"?"===e.charAt(0)&&(e=e.substring(1));for(const n of e.split("&")){if(0===n.length)continue;const i=n.split("=");2===i.length?t[decodeURIComponent(i[0])]=decodeURIComponent(i[1]):qa(`Invalid query segment '${n}' in query '${e}'`)}return t}(e.substring(Math.min(e.length,h)));c=t.indexOf(":"),c>=0?(s="https"===a||"wss"===a,l=parseInt(t.substring(c+1),10)):c=t.length;const p=t.slice(0,c);if("localhost"===p.toLowerCase())n="localhost";else if(p.split(".").length<=2)n=p;else{const e=t.indexOf(".");i=t.substring(0,e).toLowerCase(),n=t.substring(e+1),r=i}"ns"in u&&(r=u.ns)}return{host:t,port:l,domain:n,subdomain:i,secure:s,scheme:a,pathString:o,namespace:r}},ku="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",Cu=function(){let e=0;const t=[];return function(n){const i=n===e;let o;e=n;const r=new Array(8);for(o=7;o>=0;o--)r[o]=ku.charAt(n%64),n=Math.floor(n/64);nt(0===n,"Cannot push at time == 0");let s=r.join("");if(i){for(o=11;o>=0&&63===t[o];o--)t[o]=0;t[o]++}else for(o=0;o<12;o++)t[o]=Math.floor(64*Math.random());for(o=0;o<12;o++)s+=ku.charAt(t[o]);return nt(20===s.length,"nextPushId: Length should be 20."),s}}();
2948
+ /**
2949
+ * @license
2950
+ * Copyright 2017 Google LLC
2951
+ *
2952
+ * Licensed under the Apache License, Version 2.0 (the "License");
2953
+ * you may not use this file except in compliance with the License.
2954
+ * You may obtain a copy of the License at
2955
+ *
2956
+ * http://www.apache.org/licenses/LICENSE-2.0
2957
+ *
2958
+ * Unless required by applicable law or agreed to in writing, software
2959
+ * distributed under the License is distributed on an "AS IS" BASIS,
2960
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2961
+ * See the License for the specific language governing permissions and
2962
+ * limitations under the License.
2963
+ */
2964
+ class Iu{constructor(e,t,n,i){this.eventType=e,this.eventRegistration=t,this.snapshot=n,this.prevName=i}getPath(){const e=this.snapshot.ref;return"value"===this.eventType?e._path:e.parent._path}getEventType(){return this.eventType}getEventRunner(){return this.eventRegistration.getEventRunner(this)}toString(){return this.getPath().toString()+":"+this.eventType+":"+Pt(this.snapshot.exportVal())}}class Tu{constructor(e,t,n){this.eventRegistration=e,this.error=t,this.path=n}getPath(){return this.path}getEventType(){return"cancel"}getEventRunner(){return this.eventRegistration.getEventRunner(this)}toString(){return this.path.toString()+":cancel"}}
2965
+ /**
2966
+ * @license
2967
+ * Copyright 2017 Google LLC
2968
+ *
2969
+ * Licensed under the Apache License, Version 2.0 (the "License");
2970
+ * you may not use this file except in compliance with the License.
2971
+ * You may obtain a copy of the License at
2972
+ *
2973
+ * http://www.apache.org/licenses/LICENSE-2.0
2974
+ *
2975
+ * Unless required by applicable law or agreed to in writing, software
2976
+ * distributed under the License is distributed on an "AS IS" BASIS,
2977
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2978
+ * See the License for the specific language governing permissions and
2979
+ * limitations under the License.
2980
+ */class Su{constructor(e,t){this.snapshotCallback=e,this.cancelCallback=t}onValue(e,t){this.snapshotCallback.call(null,e,t)}onCancel(e){return nt(this.hasCancelCallback,"Raising a cancel event on a listener with no cancel callback"),this.cancelCallback.call(null,e)}get hasCancelCallback(){return!!this.cancelCallback}matches(e){return this.snapshotCallback===e.snapshotCallback||void 0!==this.snapshotCallback.userCallback&&this.snapshotCallback.userCallback===e.snapshotCallback.userCallback&&this.snapshotCallback.context===e.snapshotCallback.context}}
2981
+ /**
2982
+ * @license
2983
+ * Copyright 2021 Google LLC
2984
+ *
2985
+ * Licensed under the Apache License, Version 2.0 (the "License");
2986
+ * you may not use this file except in compliance with the License.
2987
+ * You may obtain a copy of the License at
2988
+ *
2989
+ * http://www.apache.org/licenses/LICENSE-2.0
2990
+ *
2991
+ * Unless required by applicable law or agreed to in writing, software
2992
+ * distributed under the License is distributed on an "AS IS" BASIS,
2993
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2994
+ * See the License for the specific language governing permissions and
2995
+ * limitations under the License.
2996
+ */class Eu{constructor(e,t){this._repo=e,this._path=t}cancel(){const e=new vt;return au(this._repo,this._path,e.wrapCallback((()=>{}))),e.promise}remove(){$h("OnDisconnect.remove",this._path);const e=new vt;return lu(this._repo,this._path,null,e.wrapCallback((()=>{}))),e.promise}set(e){$h("OnDisconnect.set",this._path),qh("OnDisconnect.set",e,this._path,!1);const t=new vt;return lu(this._repo,this._path,e,t.wrapCallback((()=>{}))),t.promise}setWithPriority(e,t){$h("OnDisconnect.setWithPriority",this._path),qh("OnDisconnect.setWithPriority",e,this._path,!1),function(e,t){if(Ba(t))throw new Error(qt(e,"priority")+"is "+t.toString()+", but must be a valid Firebase priority (a string, finite number, server value, or null).");if(!jh(t))throw new Error(qt(e,"priority")+"must be a valid Firebase priority (a string, finite number, server value, or null).")}("OnDisconnect.setWithPriority",t);const n=new vt;return function(e,t,n,i,o){const r=wc(n,i);e.server_.onDisconnectPut(t.toString(),r.val(!0),((n,i)=>{"ok"===n&&Oc(e.onDisconnect_,t,r),hu(0,o,n,i)}))}(this._repo,this._path,e,t,n.wrapCallback((()=>{}))),n.promise}update(e){$h("OnDisconnect.update",this._path),Vh("OnDisconnect.update",e,this._path);const t=new vt;return function(e,t,n,i){if(Dt(n))return Fa("onDisconnect().update() called with empty data. Don't do anything."),void hu(0,i,"ok",void 0);e.server_.onDisconnectMerge(t.toString(),n,((o,r)=>{"ok"===o&&Ja(n,((n,i)=>{const o=wc(i);Oc(e.onDisconnect_,Al(t,n),o)})),hu(0,i,o,r)}))}(this._repo,this._path,e,t.wrapCallback((()=>{}))),t.promise}}
2997
+ /**
2998
+ * @license
2999
+ * Copyright 2020 Google LLC
3000
+ *
3001
+ * Licensed under the Apache License, Version 2.0 (the "License");
3002
+ * you may not use this file except in compliance with the License.
3003
+ * You may obtain a copy of the License at
3004
+ *
3005
+ * http://www.apache.org/licenses/LICENSE-2.0
3006
+ *
3007
+ * Unless required by applicable law or agreed to in writing, software
3008
+ * distributed under the License is distributed on an "AS IS" BASIS,
3009
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3010
+ * See the License for the specific language governing permissions and
3011
+ * limitations under the License.
3012
+ */class Pu{constructor(e,t,n,i){this._repo=e,this._path=t,this._queryParams=n,this._orderByCalled=i}get key(){return Ol(this._path)?null:Rl(this._path)}get ref(){return new Lu(this._repo,this._path)}get _queryIdentifier(){const e=Rc(this._queryParams),t=Ka(e);return"{}"===t?"default":t}get _queryObject(){return Rc(this._queryParams)}isEqual(e){if(!((e=Ht(e))instanceof Pu))return!1;const t=this._repo===e._repo,n=zl(this._path,e._path),i=this._queryIdentifier===e._queryIdentifier;return t&&n&&i}toJSON(){return this.toString()}toString(){return this._repo.toString()+function(e){let t="";for(let n=e.pieceNum_;n<e.pieces_.length;n++)""!==e.pieces_[n]&&(t+="/"+encodeURIComponent(String(e.pieces_[n])));return t||"/"}(this._path)}}class Lu extends Pu{constructor(e,t){super(e,t,new Pc,!1)}get parent(){const e=Dl(this._path);return null===e?null:new Lu(this._repo,e)}get root(){let e=this;for(;null!==e.parent;)e=e.parent;return e}}class Ru{constructor(e,t,n){this._node=e,this.ref=t,this._index=n}get priority(){return this._node.getPriority().val()}get key(){return this.ref.key}get size(){return this._node.numChildren()}child(e){const t=new Tl(e),n=Du(this.ref,e);return new Ru(this._node.getChild(t),n,cc)}exists(){return!this._node.isEmpty()}exportVal(){return this._node.val(!0)}forEach(e){if(this._node.isLeafNode())return!1;return!!this._node.forEachChild(this._index,((t,n)=>e(new Ru(n,Du(this.ref,t),cc))))}hasChild(e){const t=new Tl(e);return!this._node.getChild(t).isEmpty()}hasChildren(){return!this._node.isLeafNode()&&!this._node.isEmpty()}toJSON(){return this.exportVal()}val(){return this._node.val()}}function Nu(e,t){return(e=Ht(e))._checkNotDeleted("ref"),void 0!==t?Du(e._root,t):e._root}function Du(e,t){var n,i,o;return null===El((e=Ht(e))._path)?(n="child",i="path",(o=t)&&(o=o.replace(/^\/*\.info(\/|$)/,"/")),Hh(n,i,o)):Hh("child","path",t),new Lu(e._repo,Al(e._path,t))}function Au(e,t){e=Ht(e),$h("set",e._path),qh("set",t,e._path,!1);const n=new vt;return function(e,t,n,i,o){du(e,"set",{path:t.toString(),value:n,priority:i});const r=nu(e),s=wc(n,i),a=lh(e.serverSyncTree_,t),l=Ch(s,a,r),c=su(e),d=ih(e.serverSyncTree_,t,l,c,!0);Kh(e.eventQueue_,d),e.server_.put(t.toString(),s.val(!0),((n,i)=>{const r="ok"===n;r||qa("set at "+t+" failed: "+n);const s=oh(e.serverSyncTree_,c,!r);Jh(e.eventQueue_,t,s),hu(0,o,n,i)}));const h=wu(e,t);gu(e,h),Jh(e.eventQueue_,h,[])}(e._repo,e._path,t,null,n.wrapCallback((()=>{}))),n.promise}class Ou{constructor(e){this.callbackContext=e}respondsTo(e){return"value"===e}createEvent(e,t){const n=t._queryParams.getIndex();return new Iu("value",this,new Ru(e.snapshotNode,new Lu(t._repo,t._path),n))}getEventRunner(e){return"cancel"===e.getEventType()?()=>this.callbackContext.onCancel(e.error):()=>this.callbackContext.onValue(e.snapshot,null)}createCancelEvent(e,t){return this.callbackContext.hasCancelCallback?new Tu(this,e,t):null}matches(e){return e instanceof Ou&&(!e.callbackContext||!this.callbackContext||e.callbackContext.matches(this.callbackContext))}hasAnyCallback(){return null!==this.callbackContext}}function Mu(e,t,n,i,o){const r=new Su(n,void 0),s=new Ou(r);return function(e,t,n){let i;i=".info"===El(t._path)?ah(e.infoSyncTree_,t,n):ah(e.serverSyncTree_,t,n),Yh(e.eventQueue_,t._path,i)}(e._repo,e,s),()=>cu(e._repo,e,s)}function Fu(e,t,n,i){return Mu(e,0,t)}!function(e){nt(!Fd,"__referenceConstructor has already been defined"),Fd=e}(Lu),function(e){nt(!zd,"__referenceConstructor has already been defined"),zd=e}(Lu);
3013
+ /**
3014
+ * @license
3015
+ * Copyright 2020 Google LLC
3016
+ *
3017
+ * Licensed under the Apache License, Version 2.0 (the "License");
3018
+ * you may not use this file except in compliance with the License.
3019
+ * You may obtain a copy of the License at
3020
+ *
3021
+ * http://www.apache.org/licenses/LICENSE-2.0
3022
+ *
3023
+ * Unless required by applicable law or agreed to in writing, software
3024
+ * distributed under the License is distributed on an "AS IS" BASIS,
3025
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3026
+ * See the License for the specific language governing permissions and
3027
+ * limitations under the License.
3028
+ */
3029
+ const zu={};let Uu,ju,qu,Bu,Vu=!1;function Hu(e,t,n,i,o){let r=i||e.options.databaseURL;void 0===r&&(e.options.projectId||ja("Can't determine Firebase Database URL. Be sure to include a Project ID when calling firebase.initializeApp()."),Fa("Using default host for project ",e.options.projectId),r=`${e.options.projectId}-default-rtdb.firebaseio.com`);let s,a=yu(r,o),l=a.repoInfo;"undefined"!=typeof process&&process.env&&(s=process.env.FIREBASE_DATABASE_EMULATOR_HOST),s?(r=`http://${s}?ns=${l.namespace}`,a=yu(r,o),l=a.repoInfo):a.repoInfo.secure;const c=new il(e.name,e.options,t);Wh("Invalid Firebase Database URL",a),Ol(a.path)||ja("Database URL must point to the root of a Firebase Database (not including a child path).");const d=function(e,t,n,i){let o=zu[t.name];o||(o={},zu[t.name]=o);let r=o[e.toURLString()];r&&ja("Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.");return r=new Zh(e,Vu,n,i),o[e.toURLString()]=r,r}(l,e,c,new nl(e.name,n));return new $u(d,e)}class $u{constructor(e,t){this._repoInternal=e,this.app=t,this.type="database",this._instanceStarted=!1}get _repo(){return this._instanceStarted||(eu(this._repoInternal,this.app.options.appId,this.app.options.databaseAuthVariableOverride),this._instanceStarted=!0),this._repoInternal}get _root(){return this._rootInternal||(this._rootInternal=new Lu(this._repo,Sl())),this._rootInternal}_delete(){return null!==this._rootInternal&&(!function(e,t){const n=zu[t];n&&n[e.key]===e||ja(`Database ${t}(${e.repoInfo_}) has already been deleted.`),function(e){e.persistentConnection_&&e.persistentConnection_.interrupt("repo_interrupt")}(e),delete n[e.key]}(this._repo,this.app.name),this._repoInternal=null,this._rootInternal=null),Promise.resolve()}_checkNotDeleted(e){null===this._rootInternal&&ja("Cannot call "+e+" on a deleted database.")}}function Wu(e=li(),t){const n=ni(e,"database").getImmediate({identifier:t});if(!n._instanceStarted){const e=(e=>{const t=gt(e);if(!t)return;const n=t.lastIndexOf(":");if(n<=0||n+1===t.length)throw new Error(`Invalid host ${t} with no separate hostname and port!`);const i=parseInt(t.substring(n+1),10);return"["===t[0]?[t.substring(1,n-1),i]:[t.substring(0,n),i]})("database");e&&function(e,t,n,i={}){e=Ht(e),e._checkNotDeleted("useEmulator"),e._instanceStarted&&ja("Cannot call useEmulator() after instance has already been initialized.");const o=e._repoInternal;let r;if(o.repoInfo_.nodeAdmin)i.mockUserToken&&ja('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the "firebase" package instead of "firebase-admin".'),r=new ol(ol.OWNER);else if(i.mockUserToken){const t="string"==typeof i.mockUserToken?i.mockUserToken:function(e,t){if(e.uid)throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');const n=t||"demo-project",i=e.iat||0,o=e.sub||e.user_id;if(!o)throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");const r=Object.assign({iss:`https://securetoken.google.com/${n}`,aud:n,iat:i,exp:i+3600,auth_time:i,sub:o,user_id:o,firebase:{sign_in_provider:"custom",identities:{}}},e);return[lt(JSON.stringify({alg:"none",type:"JWT"})),lt(JSON.stringify(r)),""].join(".")}(i.mockUserToken,e.app.options.projectId);r=new ol(t)}!function(e,t,n,i){e.repoInfo_=new cl(`${t}:${n}`,!1,e.repoInfo_.namespace,e.repoInfo_.webSocketOnly,e.repoInfo_.nodeAdmin,e.repoInfo_.persistenceKey,e.repoInfo_.includeNamespaceInQueryParams,!0),i&&(e.authTokenProvider_=i)}(o,t,n,r)}
3030
+ /**
3031
+ * @license
3032
+ * Copyright 2021 Google LLC
3033
+ *
3034
+ * Licensed under the Apache License, Version 2.0 (the "License");
3035
+ * you may not use this file except in compliance with the License.
3036
+ * You may obtain a copy of the License at
3037
+ *
3038
+ * http://www.apache.org/licenses/LICENSE-2.0
3039
+ *
3040
+ * Unless required by applicable law or agreed to in writing, software
3041
+ * distributed under the License is distributed on an "AS IS" BASIS,
3042
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3043
+ * See the License for the specific language governing permissions and
3044
+ * limitations under the License.
3045
+ */(n,...e)}return n}async function Gu(e,t,n){if(Uu||function(e){try{const t=e.projectId,n={projectId:t,apiKey:e.firebaseAPIKey,authDomain:`${t}.firebaseapp.com`,databaseURL:e.databaseURL,storageBucket:`${t}.firebasestorage.app`,messagingSenderId:e.firebaseSenderId,appId:e.firebaseAppId,measurementId:e.measurementId};Uu=ai(n,"netskrafl"),Uu||console.error("Failed to initialize Firebase")}catch(e){console.error("Failed to initialize Firebase",e)}}(e),!Uu)return;const i=e.userId,o=e.locale;ju=xa(Uu),ju?function(e,t,n,i){Ht(e).onAuthStateChanged(t,n,i)}(ju,(t=>{null!==t&&(e.newUser&&Ju("sign_up",{locale:e.locale,method:e.loginMethod,userid:e.userId}),Ju("login",{locale:e.locale,method:e.loginMethod,userid:e.userId}))})):console.error("Failed to initialize Firebase Auth"),await ds(ju,t),qu=Wu(Uu),qu||console.error("Failed to initialize Firebase Database"),Bu=No(Uu),Bu||console.error("Failed to initialize Firebase Analytics"),function(e,t,n){if(!qu)return;const i=Nu(qu,".info/connected"),o="netskrafl"===e?`connection/${t}`:`connection/${n}/${t}`,r=function(e,t){e=Ht(e),$h("push",e._path),qh("push",t,e._path,!0);const n=tu(e._repo),i=Cu(n),o=Du(e,i),r=Du(e,i);let s;return s=Promise.resolve(r),o.then=s.then.bind(s),o.catch=s.then.bind(s,void 0),o}(Nu(qu,o));Fu(i,(e=>{e.val()?(function(e){return e=Ht(e),new Eu(e._repo,e._path)}(r).remove(),Au(r,!0)):function(e){$h("remove",e._path),Au(e,null)}(r)}))}(e.projectId,i,o)}function Ku(e,t){if(!qu)return;let n=0;Fu(Nu(qu,e),(function(e){n++;const i=e.val();i&&t(i,1==n)}))}function Yu(e){if(!qu)return;const t=Nu(qu,e);var n;cu((n=t)._repo,n,null)}function Ju(e,t){Bu&&Do(Bu,e,t)}$l.prototype.simpleListen=function(e,t){this.sendRequest("q",{p:e},t)},$l.prototype.echo=function(e,t){this.sendRequest("echo",{d:e},t)},function(e){!function(e){Ia=e}(si),ti(new $t("database",((e,{instanceIdentifier:t})=>Hu(e.getProvider("app").getImmediate(),e.getProvider("auth-internal"),e.getProvider("app-check-internal"),t)),"PUBLIC").setMultipleInstances(!0)),ci(ka,Ca,e),ci(ka,Ca,"esm2017")}();const Qu=new class{constructor(){this.wordCheckCache={}}ingestTwoLetterWords(e,t){var n;const i=null!==(n=this.wordCheckCache[e])&&void 0!==n?n:this.wordCheckCache[e]={};for(const[,e]of t)for(const t of e)i[t]=!0}async checkWords(e,t){let n=this.wordCheckCache[e];if(n){let e=!0;for(const i of t){if(void 0===n[i]){if(2===i.length)return!1;e=!1;break}if(!1===n[i])return!1}if(e)return!0}try{const i=await we({url:"/wordcheck",body:{locale:e,word:t[0],words:t}});if((null==i?void 0:i.word)===t[0]&&(null==i?void 0:i.valid)){n||(n=this.wordCheckCache[e]={});for(const[e,t]of i.valid)n[e]=t}return!!i.ok}catch(e){}return!1}};let Xu=null;class Zu{constructor(e){this._prefix=`game.${e}`}getLocalTile(e){return window.localStorage[`${this._prefix}.tile.${e}.t`]}getLocalTileSq(e){return window.localStorage[`${this._prefix}.tile.${e}.sq`]}setLocalTile(e,t){window.localStorage[`${this._prefix}.tile.${e}.t`]=t}setLocalTileSq(e,t){window.localStorage[`${this._prefix}.tile.${e}.sq`]=t}clearTiles(){try{const e=window.localStorage;for(let t=1;t<=7;t++)e.removeItem(`${this._prefix}.tile.${t}.sq`),e.removeItem(`${this._prefix}.tile.${t}.t`)}catch(e){}}saveTiles(e){let t;for(t=0;t<e.length;t++){const n=e[t].sq,i=e[t].tile;this.setLocalTileSq(t+1,n),this.setLocalTile(t+1,i)}for(;t<7;t++)this.setLocalTileSq(t+1,""),this.setLocalTile(t+1,"")}loadTiles(){let e,t,n=[];for(let i=0;i<7;i++)e=this.getLocalTileSq(i+1),t=this.getLocalTile(i+1),e&&t&&n.push({sq:e,tile:t});return n}}class ep{constructor(){}getLocalTile(e){return""}getLocalTileSq(e){return""}setLocalTile(e,t){}setLocalTileSq(e,t){}clearTiles(){}saveTiles(e){}loadTiles(){return[]}}const tp=e=>function(){if(null===Xu)try{Xu="localStorage"in window&&null!==window.localStorage&&void 0!==window.localStorage}catch(e){Xu=!1}return Xu}()?new Zu(e):new ep,np={explo:"D4",standard:"H8"},ip={explo:[3,3],standard:[7,7]},op={standard:{WORDSCORE:["3 3 3"," 2 2 "," 2 2 "," 2 2 "," 2 2 "," "," ","3 2 3"," "," "," 2 2 "," 2 2 "," 2 2 "," 2 2 ","3 3 3"],LETTERSCORE:[" 2 2 "," 3 3 "," 2 2 ","2 2 2"," "," 3 3 3 3 "," 2 2 2 2 "," 2 2 "," 2 2 2 2 "," 3 3 3 3 "," ","2 2 2"," 2 2 "," 3 3 "," 2 2 "]},explo:{WORDSCORE:["3 3 3"," 2 "," 2 "," 2 "," 2 "," 2 2 "," 2 2 ","3 2 3"," 2 2 "," 2 2 "," 2 "," 2 "," 2 "," 2 ","3 3 3"],LETTERSCORE:[" 2 2 "," 3 2 3 "," 2 3 2 "," 2 3 2","2 3 "," 2 2 "," 3 2 "," 2 2 "," 2 3 "," 2 2 "," 3 2","2 3 2 "," 2 3 2 "," 3 2 3 "," 2 2 "]}};class rp{constructor(e,t,n,i){this.locale="is_IS",this.alphabet="",this.tile_scores={},this.board_type="standard",this.startSquare="H8",this.startCoord=[7,7],this.two_letter_words=[[],[]],this.userid=["",""],this.nickname=["",""],this.fullname=["",""],this.autoplayer=[!1,!1],this.maxOvertime=600,this.scores=[0,0],this.moves=[],this.newmoves=[],this.lastmove=void 0,this.tiles={},this.rack=[],this.racks=[],this.num_moves=0,this.bag="",this.newbag=!0,this.localturn=!1,this.player=null,this.stats=null,this.over=!1,this.manual=!1,this.fairplay=!1,this.zombie=!1,this.overdue=!1,this.currentScore=void 0,this.messages=null,this.wordBad=!1,this.wordGood=!1,this.xchg=!1,this.chall=!1,this.last_chall=!1,this.succ_chall=!1,this.showingDialog=null,this.moveInProgress=!1,this.askingForBlank=null,this.currentError=null,this.currentMessage=null,this.isFresh=!1,this.numTileMoves=0,this.chatLoading=!1,this.chatSeen=!0,this.congratulate=!1,this.selectedSq=null,this.sel="movelist",this.interval=null,this.time_info=null,this.penalty0=0,this.penalty1=0,this.timeBase=null,this.runningOut0=!1,this.runningOut1=!1,this.blinking0=!1,this.blinking1=!1,this.clockText0="",this.clockText1="",this.localStorage=null,this.uuid=e,this.moveListener=n,void 0!==i&&(this.maxOvertime=i),this.localStorage=tp(e);let o=this.localStorage.loadTiles();this.init(t),this.restoreTiles(o),!this.over&&this.isTimed()&&this.startClock(),this.autoplayer[0]||this.autoplayer[1]||this.loadMessages()}init(e){if(this.over=99===e.result,!this.over&&0!==e.result)return this.currentError=e.result||"server",void(this.currentMessage=e.msg||"");this.currentError=this.currentMessage=null,Object.assign(this,e),e.newmoves&&(this.moves=this.moves.concat(e.newmoves)),this.newmoves=[],this.localturn=!this.over&&this.moves.length%2===this.player,this.isFresh=!0,this.startSquare=np[this.board_type],this.startCoord=ip[this.board_type],this.congratulate=this.over&&null!==this.player&&this.scores[this.player]>this.scores[1-this.player],null===this.currentError&&this.placeTiles(),Qu.ingestTwoLetterWords(this.locale,this.two_letter_words[0])}update(e){for(let e in this.tiles)this.tiles.hasOwnProperty(e)&&(this.tiles[e].freshtile=!1);this.init(e),null===this.currentError&&(this.succ_chall?this.resetRack():this.updateScore()),this.saveTiles(),this.isTimed()&&this.resetClock()}async refresh(){try{if(!this.uuid)return;const e=await be({method:"POST",url:"/gamestate",body:{game:this.uuid}});(null==e?void 0:e.ok)&&this.update(e.game)}catch(e){}finally{this.moveInProgress=!1}}notifyUserChange(e){null!==this.player&&(this.nickname[this.player]=e)}buttonState(){let e={};return e.tilesPlaced=this.tilesPlaced().length>0,e.gameOver=this.over,e.congratulate=this.congratulate,e.localTurn=this.localturn,e.gameIsManual=this.manual,e.challengeAllowed=this.chall,e.lastChallenge=this.last_chall,e.showingDialog=null!==this.showingDialog,e.exchangeAllowed=this.xchg,e.wordGood=this.wordGood,e.wordBad=this.wordBad,e.canPlay=!1,e.tardyOpponent=!e.localTurn&&!e.gameOver&&this.overdue,e.showResign=!1,e.showExchange=!1,e.showPass=!1,e.showRecall=!1,e.showScramble=!1,e.showMove=!1,e.showMoveMobile=!1,e.showForceResignMobile=!1,e.showChallenge=!1,e.showChallengeInfo=!1,this.moveInProgress||(e.localTurn&&!e.gameOver&&(e.lastChallenge?(e.showChallenge=!0,e.showPass=!0,e.showChallengeInfo=!0):(e.showMove=e.tilesPlaced,e.showExchange=!e.tilesPlaced,e.showPass=!e.tilesPlaced,e.showResign=!e.tilesPlaced,e.showChallenge=!e.tilesPlaced&&e.gameIsManual&&e.challengeAllowed)),e.showMove&&(e.wordGood||e.gameIsManual)&&(e.canPlay=!0),e.gameOver||(e.tilesPlaced?(e.showRecall=!0,e.showMoveMobile=!0):(e.showScramble=!0,e.tardyOpponent&&(e.showForceResignMobile=!0)))),e}setSelectedTab(e){return this.sel!=e&&(this.sel=e,!0)}tilescore(e){return this.tile_scores[e]}twoLetterWords(){return this.two_letter_words}isTimed(){return null!==this.time_info&&this.time_info.duration>=1}showClock(){return!!this.isTimed()&&(!this.over||(!!this.clockText0||!!this.clockText1))}updateClock(){var e=this.calcTimeToGo(0),t=this.calcTimeToGo(1);this.clockText0=e,this.clockText1=t,this.runningOut0="-"==e[0]||e<="02:00",this.runningOut1="-"==t[0]||t<="02:00",this.blinking0=this.runningOut0&&e>="00:00"&&e<="00:30"&&0===this.player,this.blinking1=this.runningOut1&&t>="00:00"&&t<="00:30"&&1===this.player,pe.redraw()}resetClock(){this.timeBase=new Date,this.updateClock(),this.over&&(this.interval&&(window.clearInterval(this.interval),this.interval=null),this.blinking0=!1,this.blinking1=!1,this.runningOut0=!1,this.runningOut1=!1)}startClock(){this.resetClock(),this.interval||(this.interval=window.setInterval((()=>{this.updateClock()}),500))}cleanup(){this.interval&&(window.clearInterval(this.interval),this.interval=null)}calcTimeToGo(e){let t=this.time_info;if(null===t||null===this.timeBase)return"";let n=t.elapsed[e],i=this.over;if(!i&&this.moves.length%2===e){n+=((new Date).getTime()-this.timeBase.getTime())/1e3,n-60*t.duration>this.maxOvertime&&(this.moveInProgress||(this.moveInProgress=!0,window.setTimeout((()=>{this.refresh()}),500)))}const o=Math.max(60*t.duration-n,-this.maxOvertime),r=Math.abs(o),s=Math.floor(r/60),a=Math.floor(r-60*s);return i?(this.penalty0=0,this.penalty1=0):o<0&&(0===e?this.penalty0=-10*Math.floor((60*s+a+59)/60):this.penalty1=-10*Math.floor((60*s+a+59)/60)),(o<0?"-":"")+("0"+s.toString()).slice(-2)+":"+("0"+a.toString()).slice(-2)}displayScore(e){return Math.max(this.scores[e]+(0===e?this.penalty0:this.penalty1),0)}async loadMessages(){if(!this.chatLoading){this.chatLoading=!0,this.messages=[];try{const e=await be({method:"POST",url:"/chatload",body:{channel:"game:"+this.uuid}});e.ok?this.messages=e.messages||[]:this.messages=[],void 0===e.seen?this.chatSeen=!0:this.chatSeen=e.seen}catch(e){}finally{this.chatLoading=!1}}}async loadStats(){this.stats=void 0;try{const e=await be({method:"POST",url:"/gamestats",body:{game:this.uuid}});if(!e||void 0===e.result)return;if(0!==e.result&&99!==e.result)return;this.stats=e}catch(e){}}async sendMessage(e){try{await be({method:"POST",url:"/chatmsg",body:{channel:"game:"+this.uuid,msg:e}})}catch(e){}}sendChatSeenMarker(){this.sendMessage(""),this.chatSeen=!0}addChatMessage(e,t,n,i){this.chatLoading||""===t||(null===this.messages&&(this.messages=[]),this.messages.push({from_userid:e,msg:t,ts:n}),"chat"==this.sel?this.sendChatSeenMarker():i||(this.chatSeen=!1))}markChatShown(){return!this.chatSeen&&(this.sendChatSeenMarker(),!0)}placeMove(e,t,n,i){const o=Xe(t);let r=o.col,s=o.row,a=!1,l=0;for(let t=0;t<n.length;t++){let c=n[t];if("?"==c){a=!0;continue}const d=Qe(s,r);if(null===d)continue;let h=c;a&&(c="?");const u=this.tilescore(c);d in this.tiles||(this.tiles[d]={player:e,tile:c,letter:h,score:u,draggable:!1,freshtile:!1,index:l,xchg:!1},i&&(e===this.player?this.tiles[d].highlight=0:1-e===this.player&&(this.tiles[d].highlight=1),l++)),r+=o.dx,s+=o.dy,a=!1}}setRack(e){this.rack=e}rackAtMove(e){var t;const n=(null===(t=this.racks)||void 0===t?void 0:t.length)||0;return n?this.racks[e>=n?n-1:e]:""}isFinalMove(e){return e>=this.num_moves}boardAsStrings(){const e=[];for(const t of Re){let n="";for(let e=0;e<15;e++){let i=`${t}${e+1}`;if(i in this.tiles){const{tile:e,letter:t}=this.tiles[i];n+="?"===e?t.toLocaleUpperCase():t}else n+="."}e.push(n)}return e}placeTiles(e,t){this.tiles={},this.numTileMoves=0;const n=this.moves,i=void 0!==e,o=!i&&!this.lastmove&&this.localturn,r=!t&&(o||i),s=void 0!==e?e:n.length;function a(e){if(e+2>=s)return!1;let[t,[i,o,r]]=n[e+2];return""===i&&("RESP"===o&&r<0)}for(let e=0;e<s;e++){let[t,[i,o]]=n[e];""==i||a(e)||(this.placeMove(t,i,o,e===s-1&&r),this.numTileMoves++)}let l=this.lastmove;if(l&&this.localturn)for(let e=0;e<l.length;e++){let t=l[e][0];if(!(t in this.tiles))throw"Tile from lastmove not in square "+t;this.tiles[t].freshtile=!0,this.tiles[t].index=e}for(let e=0;e<this.rack.length;e++){const t="R"+(e+1),[n,i]=this.rack[e],o="?"===n?" ":n;this.tiles[t]={player:this.player?1:0,tile:n,letter:o,score:i,draggable:!0,freshtile:!1,index:0,xchg:!1}}}_moveTile(e,t){if(e==t)return;let n=this.tiles[e];if(void 0===n)throw"Moving from an empty square";if(delete this.tiles[e],t in this.tiles){if("R"!=t.charAt(0))throw"Dropping to an occupied square";let e=parseInt(t.slice(1)),n=e+1;for(;"R"+n in this.tiles;)n++;if(n<=7)for(let t=n;t>e;t--)this.tiles["R"+t]=this.tiles["R"+(t-1)];else{for(n=e-1;"R"+n in this.tiles;)n--;if(n<1)throw"No place in rack to drop tile";for(let t=n;t<e;t++)this.tiles["R"+t]=this.tiles["R"+(t+1)]}}"R"==t[0]&&"?"==n.tile&&(n.letter=" "),this.tiles[t]=n}moveTile(e,t){this._moveTile(e,t),this.currentError=this.currentMessage=null,this.updateScore(),this.saveTiles()}attemptMove(e,t){if(t==e)return;if(t in this.tiles&&"R"!=t[0])throw"Square "+t+" occupied";if(!(e in this.tiles))throw"No tile at "+e;const n=this.tiles[e];"R"==t[0]||"?"!=n.tile||" "!=n.letter?this.moveTile(e,t):this.askingForBlank={from:e,to:t}}cancelBlankDialog(){this.askingForBlank=null}placeBlank(e){if(null===this.askingForBlank)return;const{from:t,to:n}=this.askingForBlank;this.tiles[t].letter=e,this.moveTile(t,n),this.askingForBlank=null}tilesPlaced(){const e=[];for(let t in this.tiles)this.tiles.hasOwnProperty(t)&&"R"!=t[0]&&this.tiles[t].draggable&&e.push(t);return e}async sendMove(e){this.moveInProgress=!0;try{const t=await be({method:"POST",url:"/submitmove",body:{moves:e,mcount:this.moves.length,uuid:this.uuid}});this.update(t),this.moveListener&&this.moveListener.notifyMove()}catch(e){this.currentError="server",e instanceof Error?this.currentMessage=e.message:this.currentMessage=String(e)}finally{this.moveInProgress=!1}}async forceResign(){this.moveInProgress=!0;try{const e=await be({method:"POST",url:"/forceresign",body:{mcount:this.moves.length,game:this.uuid}});this.update(e)}catch(e){this.currentError="server",e instanceof Error?this.currentMessage=e.message:this.currentMessage=String(e)}finally{this.moveInProgress=!1}}submitMove(){const e=this.tilesPlaced();let t=[];this.selectedSq=null;for(let n=0;n<e.length;n++){const i=e[n],{tile:o,letter:r}=this.tiles[i];t.push(i+"="+o+("?"===o?r:""))}t.length>0&&this.sendMove(t)}submitPass(){this.showingDialog="pass",this.selectedSq=null}submitChallenge(){this.showingDialog="chall",this.selectedSq=null}submitExchange(){this.showingDialog="exchange",this.selectedSq=null;for(let e=1;e<=7;e++){const t="R"+e;t in this.tiles&&(this.tiles[t].xchg=!1)}}submitResign(){this.showingDialog="resign",this.selectedSq=null}confirmPass(e){this.showingDialog=null,e&&this.sendMove(["pass"])}confirmChallenge(e){this.showingDialog=null,e&&this.sendMove(["chall"])}confirmExchange(e){let t="";this.showingDialog=null;for(let e=1;e<=7;e++){const n="R"+e;n in this.tiles&&this.tiles[n].xchg&&(t+=this.tiles[n].tile,this.tiles[n].xchg=!1)}e&&t.length>0&&this.sendMove(["exch="+t])}confirmResign(e){this.showingDialog=null,e&&this.sendMove(["rsgn"])}rescrambleRack(){if(this.selectedSq=null,null!==this.showingDialog)return;this._resetRack();const e=[];for(let t=1;t<=7;t++){const n="R"+t;n in this.tiles?e.push(this.tiles[n]):e.push(null)}let t=e.length;for(;0!==t;){const n=Math.floor(Math.random()*t);t-=1;const i=e[t];e[t]=e[n],e[n]=i}let n=0;for(let t=1;t<=7;t++){const i=e[t-1];null!==i?this.tiles["R"+(t-n)]=i:(delete this.tiles["R"+(7-n)],n++)}this.saveTiles()}saveTiles(){var e;let t=[];const n=this.tilesPlaced();for(const e of n){const{tile:n,letter:i}=this.tiles[e];t.push({sq:e,tile:"?"===n?n+i:n})}for(let e=1;e<=7;e++){const n=`R${e}`;n in this.tiles&&t.push({sq:n,tile:this.tiles[n].tile})}null===(e=this.localStorage)||void 0===e||e.saveTiles(t)}restoreTiles(e){if(!e.length)return;let t=[],n=[],i={};for(let n=0;n<e.length;n++)t.push(e[n].tile.charAt(0));for(let e=1;e<=7;e++)"R"+e in this.tiles&&n.push(this.tiles["R"+e].tile.charAt(0));if(t.sort(),n.sort(),!function(e,t){if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}(t,n))return;for(let e=1;e<=7;e++)"R"+e in this.tiles&&(i["R"+e]=this.tiles["R"+e],delete this.tiles["R"+e]);for(let t=0;t<e.length;t++){const n=e[t].sq;if(!(n in this.tiles)){const o=e[t].tile;for(let e in i)if(i.hasOwnProperty(e)&&i[e].tile==o.charAt(0)){"?"===o.charAt(0)&&("R"===n.charAt(0)?i[e].letter=" ":i[e].letter=o.charAt(1)),this.tiles[n]=i[e],delete i[e];break}}}let o=1;for(let e in i)if(i.hasOwnProperty(e)){for(;"R"+o in this.tiles;)o++;o<=7&&(this.tiles["R"+o]=i[e])}this.saveTiles(),this.updateScore()}_resetRack(){const e=this.tilesPlaced();if(e.length){let t=1;for(let n=0;n<e.length;n++){for(;"R"+t in this.tiles;)t++;const i="R"+t;this.tiles[i]=this.tiles[e[n]],delete this.tiles[e[n]],"?"===this.tiles[i].tile&&(this.tiles[i].letter=" "),t++}this.updateScore()}this.currentError=null}resetError(){this.currentError=this.currentMessage=null}resetRack(){this.selectedSq=null,this._resetRack(),this.saveTiles()}async updateScore(){const e=this.calcScore();if(this.wordGood=!1,this.wordBad=!1,void 0!==e&&e.word){if(this.currentScore=e.score,!this.manual){const t=await Qu.checkWords(this.locale,e.words);this.wordGood=t,this.wordBad=!t}}else this.currentScore=void 0}wordScore(e,t){const n=op[this.board_type].WORDSCORE;return parseInt(n[e].charAt(t))||1}letterScore(e,t){const n=op[this.board_type].LETTERSCORE;return parseInt(n[e].charAt(t))||1}squareType(e,t){const n=this.wordScore(e,t);if(2===n)return"dw";if(3===n)return"tw";const i=this.letterScore(e,t);return 2===i?"dl":3===i?"tl":""}squareClass(e){if(!e||"R"===e[0])return;const{row:t,col:n}=Xe(e);return this.squareType(t,n)||void 0}tileAt(e,t){const n=Qe(e,t);return n&&this.tiles[n]||null}calcScore(){let e=0,t=0,n=1,i=15,o=15,r=0,s=0,a=0,l=0,c="",d=[];if(this.tilesPlaced().forEach((t=>{const l=Re.indexOf(t.charAt(0)),c=parseInt(t.slice(1))-1,d=this.tiles[t];e+=d.score*this.letterScore(l,c),a++,n*=this.wordScore(l,c),l<i&&(i=l),c<o&&(o=c),l>r&&(r=l),c>s&&(s=c)})),!a)return;if(i!==r&&o!==s)return;let h,u=o,p=i,g=0,f=0;for(i!==r?f=1:o!==s||null===this.tileAt(i-1,o)&&null===this.tileAt(i+1,o)?g=1:f=1;null!==this.tileAt(p-f,u-g);)u-=g,p-=f;for(;null!==(h=this.tileAt(p,u));){if(h.draggable){const e=this.calcCrossScore(p,u,1-f,1-g);e.score>=0&&(t+=e.score,l++,d.push(e.word))}else e+=h.score,l++;c+=h.letter,u+=g,p+=f}if(0===this.numTileMoves){const e=this.startCoord;if(null===this.tileAt(e[0],e[1]))return}else if(!l)return;return g&&u<=s||f&&p<=r?void 0:(d.push(c),{word:c,words:d,score:e*n+t+(7===a?50:0)})}calcCrossScore(e,t,n,i){let o,r=0,s=!1,a=t,l=e,c="";for(;null!==this.tileAt(l-n,a-i);)a-=i,l-=n;for(;null!==(o=this.tileAt(l,a));){let d=o.score;a===t&&l===e?d*=this.letterScore(l,a):s=!0,c+=o.letter,r+=d,a+=i,l+=n}return s?{score:r*this.wordScore(e,t),word:c}:{score:-1,word:""}}}class sp{constructor(e,t){this.state=null,this.paths=[],this.routeName=void 0,this.params=void 0,this.game=null,this.gameList=null,this.numGames=0,this.loadingGameList=!1,this.challengeList=null,this.numChallenges=0,this.loadingChallengeList=!1,this.oppReady=0,this.recentList=null,this.loadingRecentList=!1,this.userListCriteria=null,this.userList=null,this.loadingUserList=!1,this.ownStats=null,this.user=null,this.userErrors=null,this.userLoadError=!1,this.helpHTML=null,this.friendHTML=null,this.spinners=0,this.reviewMove=null,this.bestMoves=null,this.highlightedMove=null,this.maxFreeGames=0,this.isExplo=!1,this.paths=e.paths.slice(),this.state=t,this.isExplo=t.isExplo,this.maxFreeGames=t.isExplo?3:8,async function(e){try{Te(e,await be({method:"GET",url:"/static/assets/messages.json"}))}catch(t){Te(e,{})}}(t.locale)}async loadGame(e,t,n=!1){var i,o;try{if(null!==this.game&&this.game.cleanup(),this.game=null,this.reviewMove=null,this.bestMoves=null,this.highlightedMove=null,!e)return;const r=await be({method:"POST",url:"/gamestate",body:{game:e,delete_zombie:n}});(null==r?void 0:r.ok)&&(this.game=new rp(e,r.game,this,(null===(i=this.state)||void 0===i?void 0:i.runningLocal)?60:600),void 0!==t&&t(),(null===(o=this.state)||void 0===o?void 0:o.uiFullscreen)||this.game.setSelectedTab("board"))}catch(e){}}async loadGameList(e=!0){if(!this.loadingGameList){this.loadingGameList=!0,this.gameList=[],this.numGames=0,this.spinners++;try{const t=await be({method:"POST",url:"/gamelist",body:{zombie:e}});if(!t||0!==t.result)return void(this.gameList=[]);this.gameList=t.gamelist||[],this.gameList&&(this.numGames=this.gameList.reduce(((e,t)=>e+(t.my_turn||t.zombie?1:0)),0))}catch(e){this.gameList=[]}finally{this.loadingGameList=!1,this.spinners&&this.spinners--}}}async loadChallengeList(){if(!this.loadingChallengeList){this.loadingChallengeList=!0,this.challengeList=[],this.numChallenges=0,this.oppReady=0;try{const e=await be({method:"POST",url:"/challengelist"});if(!e||0!==e.result)return void(this.challengeList=[]);this.challengeList=e.challengelist||[];for(let e of this.challengeList)e.opp_ready&&this.oppReady++;this.numChallenges=this.oppReady,this.challengeList&&(this.numChallenges+=this.challengeList.reduce(((e,t)=>e+(t.received?1:0)),0))}catch(e){this.challengeList=[]}finally{this.loadingChallengeList=!1}}}async loadRecentList(){if(!this.loadingRecentList){this.loadingRecentList=!0,this.recentList=[];try{const e=await be({method:"POST",url:"/recentlist",body:{versus:null,count:40}});if(!e||0!==e.result)return void(this.recentList=[]);this.recentList=e.recentlist||[]}catch(e){this.recentList=[]}finally{this.loadingRecentList=!1}}}async loadUserRecentList(e,t,n){n(await be({method:"POST",url:"/recentlist",body:{user:e,versus:t,count:40}}))}async loadUserList(e,t){if("search"===e.query&&""===e.spec)return this.userList=[],this.userListCriteria=e,void pe.redraw();this.userList=void 0,this.userListCriteria=void 0,t&&this.spinners++;let n="/userlist",i=e;"elo"===e.query&&(n="/rating",i={kind:e.spec});try{const t=await be({method:"POST",url:n,body:i});if(!t||0!==t.result)return this.userList=[],void(this.userListCriteria=e);this.userList=t.userlist||t.rating,this.userListCriteria=e}catch(t){this.userList=[],this.userListCriteria=e}finally{t&&this.spinners&&this.spinners--}}async loadOwnStats(){this.ownStats={};try{const e=await be({method:"POST",url:"/userstats",body:{}});if(!e||0!==e.result)return;this.ownStats=e}catch(e){}}async loadUserStats(e,t){try{t(await be({method:"POST",url:"/userstats",body:{user:e}}))}catch(e){}}async loadPromoContent(e,t){try{t(await be({method:"POST",url:"/promo",body:{key:e},responseType:"text",deserialize:e=>e}))}catch(e){}}async loadBestMoves(e){if(!this.game||!this.game.uuid)return;if(!e)return this.reviewMove=0,this.bestMoves=null,this.highlightedMove=null,this.game.setRack([]),void this.game.placeTiles(0);const t=this.game.tile_scores,n=this.game.rackAtMove(e-1);if(!n||this.game.isFinalMove(e-1))return this.reviewMove=e,this.bestMoves=[],this.highlightedMove=null,n?this.game.setRack(n.split("").map((e=>[e,t[e]]))):this.game.setRack([]),void this.game.placeTiles(e);this.reviewMove=null,this.spinners++;try{const i={locale:this.game.locale,board_type:this.isExplo?"explo":"standard",board:this.game.boardAsStrings(),rack:n,limit:19},o=await we({method:"POST",url:"/moves",body:i});if(this.highlightedMove=null,!o||void 0===o.moves)return this.reviewMove=null,void(this.bestMoves=null);this.reviewMove=e,this.bestMoves=o.moves.map((t=>[(e-1)%2,[t.co,t.w,t.sc],!1])),this.game.setRack(n.split("").map((e=>[e,t[e]]))),this.game.placeTiles(e)}catch(e){this.highlightedMove=null,this.reviewMove=null,this.bestMoves=null}finally{this.spinners&&this.spinners--}}async loadHelp(){var e;if(null===this.helpHTML)try{const t=(null===(e=this.state)||void 0===e?void 0:e.locale)||"is_IS",n=await be({method:"GET",url:"/rawhelp?locale="+t,responseType:"text",deserialize:e=>e});this.helpHTML=n}catch(e){this.helpHTML=""}}async loadFriendPromo(){var e;if(null===this.friendHTML)try{const t=(null===(e=this.state)||void 0===e?void 0:e.locale)||"is_IS",n=await be({method:"GET",url:"/friend?locale="+t,responseType:"text",deserialize:e=>e});this.friendHTML=n}catch(e){this.friendHTML=""}}async loadUser(e){this.user=void 0,e&&this.spinners++;try{const e=await be({method:"POST",url:"/loaduserprefs"});e&&e.ok?(this.user=e.userprefs,this.userErrors=null):(this.user=null,this.userErrors=null,this.userLoadError=!0)}catch(e){this.user=null,this.userErrors=null,this.userLoadError=!0}finally{e&&this.spinners&&this.spinners--}}async saveUser(e){const t=this.user;if(t)try{const n=await be({method:"POST",url:"/saveuserprefs",body:t});if(null==n?void 0:n.ok){const n=this.state;null!==n&&(n.userNick=t.nickname,n.beginner=t.beginner,n.fairPlay=t.fairplay),null!==this.game&&this.game.notifyUserChange(t.nickname),void 0!==e&&e(),this.userErrors=null,this.user=null}else this.userErrors=n.err||null}catch(e){this.userErrors=null}}async setUserPref(e){try{await be({method:"POST",url:"/setuserpref",body:e})}catch(e){}}async newGame(e,t){var n;try{const i={opp:e,rev:t};this.isExplo&&(i.board_type="explo");const o={method:"POST",url:"/initgame",body:i},r=await be(o);if(null==r?void 0:r.ok){const e=(null===(n=this.state)||void 0===n?void 0:n.locale)||"is_IS";Ju("new_game",{uuid:r.uuid,timed:t,locale:e}),pe.route.set("/game/"+r.uuid)}}catch(e){}}async modifyChallenge(e){var t;try{const i=await be({method:"POST",url:"/challenge",body:e});if(0===(null==i?void 0:i.result)){var n={locale:(null===(t=this.state)||void 0===t?void 0:t.locale)||"is_IS"};void 0!==e.duration&&(n.duration=e.duration),void 0!==e.fairplay&&(n.fairplay=e.fairplay),void 0!==e.manual&&(n.manual=e.manual),Ju("challenge_"+e.action,n),this.loadChallengeList(),this.userListCriteria&&this.loadUserList(this.userListCriteria,!1)}}catch(e){}}async markFavorite(e,t){try{await be({method:"POST",url:"/favorite",body:{destuser:e,action:t?"add":"delete"}})}catch(e){}}async cancelFriendship(){const e=this.user,t=this.state;if(e&&t){try{const n=await be({method:"POST",url:"/cancelplan",body:{}});if(null==n?void 0:n.ok)return e.friend=!1,t.hasPaid=!1,t.plan="",Ju("cancel_plan",{userid:t.userId,locale:t.locale,plan:"friend"}),!0}catch(e){}return!1}}addChatMessage(e,t,n,i){var o,r;if(this.game&&this.game.uuid==e){const e=null!==(r=null===(o=this.state)||void 0===o?void 0:o.userId)&&void 0!==r?r:"";return this.game.addChatMessage(t,n,i,t==e),!0}return!1}handleUserMessage(e,t){var n;if(t||!this.state)return;let i=!1;if(void 0!==e.friend){const t=!!e.friend;this.user&&this.user.friend!=t&&(this.user.friend=t,i=!0)}if(void 0!==e.plan&&(this.state.plan!=e.plan&&(this.state.plan=e.plan,i=!0),this.user&&!this.user.friend&&"friend"==this.state.plan&&(this.user.friend=!0,i=!0),""==this.state.plan&&(null===(n=this.user)||void 0===n?void 0:n.friend)&&(this.user.friend=!1,i=!0)),void 0!==e.hasPaid){const t=!(""==this.state.plan||!e.hasPaid);this.state.hasPaid!=t&&(this.state.hasPaid=t,i=!0)}let o=!1;e.challenge?(this.loadChallengeList(),this.userListCriteria&&this.loadUserList(this.userListCriteria,!1),o=!0):e.move&&(o=!0),o&&!this.loadingGameList&&(this.gameList=null,i=!0),i&&pe.redraw()}handleMoveMessage(e,t){!t&&this.game&&(this.game.update(e),pe.redraw())}notifyMove(){this.loadingGameList||(this.gameList=null)}moreGamesAllowed(){if(!this.state)return!1;if(this.loadingGameList)return!1;if(!this.gameList)return!0;return!(this.gameList.length>=50)&&(!!this.state.hasPaid||this.gameList.length<this.maxFreeGames)}}class ap{constructor(e,t){this.model=e,this.view=t,this.initMediaListener()}onNavigateTo(e,t){var n,i,o;const r=this.model;this.view.boardScale=1,r.routeName=e,r.params=t;const s=null!==(n=t.uuid)&&void 0!==n?n:"";if("game"==e){null!==r.game&&this.detachListenerFromGame(r.game.uuid);const e="1"===t.zombie;r.loadGame(s,(()=>{this.attachListenerToGame(s),setTimeout(Je)}),e),null!==r.game&&void 0!==r.game&&Ju("game_open",{locale:r.game.locale,uuid:t.uuid})}else if("review"==e){null!==r.game&&this.detachListenerFromGame(r.game.uuid);let e=t.move||"0",n=parseInt(e);(isNaN(n)||!n||n<0)&&(n=0),null===r.game||r.game.uuid!=t.uuid?r.loadGame(s,(()=>{r.loadBestMoves(n),setTimeout(Je)})):null!==r.game&&r.loadBestMoves(n)}else{null!==r.game&&(this.detachListenerFromGame(r.game.uuid),r.game.cleanup(),r.game=null);const t=(null===(i=r.state)||void 0===i?void 0:i.locale)||"is_IS";"help"==e?(r.loadHelp(),Ju("help",{locale:t})):"thanks"==e?(null===(o=r.state)||void 0===o?void 0:o.userId)&&Ju("init_plan",{userid:r.state.userId,locale:t,plan:"friend"}):"main"==e&&(r.gameList=null,r.userListCriteria=null,r.userList=null,r.challengeList=null,r.recentList=null)}}onMoveMessage(e,t){console.log("Move message received: "+JSON.stringify(e)),this.model.handleMoveMessage(e,t)}onUserMessage(e,t){console.log("User message received: "+JSON.stringify(e)),this.model.handleUserMessage(e,t)}onChatMessage(e,t){t?console.log("First attach of chat: "+JSON.stringify(e)):(console.log("Chat message received: "+JSON.stringify(e)),this.model.addChatMessage(e.game,e.from_userid,e.msg,e.ts)&&this.view.notifyChatMessage())}onFullScreen(){const e=this.model.state;e&&!e.uiFullscreen&&(e.uiFullscreen=!0,this.view.notifyMediaChange(),pe.redraw())}onMobileScreen(){const e=this.model.state;e&&!1!==e.uiFullscreen&&(e.uiFullscreen=!1,this.view.notifyMediaChange(),pe.redraw())}onLandscapeScreen(){const e=this.model.state;e&&!e.uiLandscape&&(e.uiLandscape=!0,this.view.notifyMediaChange(),pe.redraw())}onPortraitScreen(){const e=this.model.state;e&&!1!==e.uiLandscape&&(e.uiLandscape=!1,this.view.notifyMediaChange(),pe.redraw())}mediaMinWidth667(e){e.matches?this.onLandscapeScreen():this.onPortraitScreen()}mediaMinWidth768(e){e.matches?this.onFullScreen():this.onMobileScreen()}initMediaListener(){function e(e,t){try{e.addEventListener("change",t,{passive:!0})}catch(n){try{e.addListener(t)}catch(e){console.error(e)}}}let t=window.matchMedia("(min-width: 667px)"),n=this;t&&(this.mediaMinWidth667(t),e(t,(()=>n.mediaMinWidth667(t)))),t=window.matchMedia("(min-width: 768px)"),t&&(this.mediaMinWidth768(t),e(t,(()=>n.mediaMinWidth768(t))))}attachListenerToUser(){const e=this.model.state;e&&e.userId&&Ku("user/"+e.userId,((e,t)=>this.onUserMessage(e,t)))}detachListenerFromUser(){const e=this.model.state;e&&e.userId&&Yu("user/"+e.userId)}attachListenerToGame(e){const t=this.model.state;if(!e||!t)return;const n="game/"+e+"/"+t.userId+"/";Ku(n+"move",((e,t)=>this.onMoveMessage(e,t))),Ku(n+"chat",((e,t)=>this.onChatMessage(e,t)))}detachListenerFromGame(e){const t=this.model.state;if(!e||!t)return;const n="game/"+e+"/"+t.userId+"/";Yu(n+"move"),Yu(n+"chat")}}const lp=[['<path d="M65.2672 12.542L54.3998 18.813L43.5323 25.146L32.6649 18.813L21.7354 12.542L43.5323 0L65.2672 12.542Z" fill="#FDC12C"/>','<path d="M43.5323 25.1457V37.6877L21.7354 25.1457V12.5416L43.5323 25.1457Z" fill="#E69419"/>','<path d="M65.2661 12.5416V25.1457L43.5312 37.6877V25.1457L65.2661 12.5416Z" fill="#F8DA95"/>'],['<path d="M43.5318 37.6847L32.6644 43.9557L21.7349 50.2267L10.8674 43.9557L0 37.6847L21.7349 25.1427L43.5318 37.6847Z" fill="#AA3731"/>','<path d="M21.7349 50.23V62.7719L0 50.23V37.688L21.7349 50.23Z" fill="#721D19"/>'],['<path d="M65.2672 50.23L54.3998 56.501L43.5323 62.7719L32.6028 56.501L21.7354 50.23L43.5323 37.688L65.2672 50.23Z" fill="#669256"/>','<path d="M43.5323 62.7716V75.3756L21.7354 62.7716V50.2296L43.5323 62.7716Z" fill="#496A38"/>','<path d="M65.2661 50.2296V62.7716L43.5312 75.3756V62.7716L65.2661 50.2296Z" fill="#B7C7AD"/>'],['<path d="M43.5318 75.3754L32.6644 81.6464L21.7349 87.9174L10.8674 81.6464L0 75.3754L21.7349 62.7714L43.5318 75.3754Z" fill="#83C8CE"/>','<path d="M21.7349 87.918V100.46L0 87.918V75.376L21.7349 87.918Z" fill="#5699A5"/>'],['<path d="M65.2672 87.918L54.3998 94.1889L43.5323 100.46L32.6649 94.1889L21.7354 87.918L43.5323 75.376L65.2672 87.918Z" fill="#E39FA5"/>','<path d="M43.5323 100.46V113.002L21.7354 100.46V87.9177L43.5323 100.46Z" fill="#B6676D"/>','<path d="M65.2661 87.9177V100.46L43.5312 113.002V100.46L65.2661 87.9177Z" fill="#EACFD1"/>']],cp=[['<path fill="#514c4c"',' d="M1728.66,1133.94a1.85,1.85,0,0,1-2-2v-54.59c0-10.41-4.91-17.28-14.73-17.28-9.43,0-14.93,6.87-14.93,17.28V1132a1.85,1.85,0,0,1-2,2h-23.56a1.86,1.86,0,0,1-2-2v-91.12a1.86,1.86,0,0,1,2-2h23.56a1.85,1.85,0,0,1,2,2v6.68h.2c4.32-5.89,12.37-10.8,24.55-10.8,21,0,32.4,14.53,32.4,35.34V1132a1.86,1.86,0,0,1-2,2Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M1769.19,1109a68.34,68.34,0,0,1-3.34-22.58c0-10,1.18-16.89,3.14-22.78,5.5-17.08,20.62-26.9,40.84-26.9,21,0,35.55,10,41,26.71,2,6.28,3.15,13.15,3.15,29.25a1.92,1.92,0,0,1-2.16,2h-57.54a1,1,0,0,0-1.18,1.18,21.17,21.17,0,0,0,1.18,5.3c2.55,8.24,9.82,12.56,19.64,12.56a30.5,30.5,0,0,0,21.79-8.44c1-.78,2-1,2.75,0l13,12.18a1.77,1.77,0,0,1,.2,2.75c-9,9.62-23,15.9-40.45,15.9C1789.61,1136.1,1774.69,1126.09,1769.19,1109Zm56.55-32.59a1,1,0,0,0,1.18-1.18,23.82,23.82,0,0,0-1-7.07c-2.16-6.48-8-10.41-15.91-10.41s-13.75,3.93-15.91,10.41a23.82,23.82,0,0,0-1,7.07,1,1,0,0,0,1.18,1.18Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M1898.61,1135.12c-22,0-30.24-9.82-30.24-31.62v-43.2a1,1,0,0,0-1.18-1.18h-5.89a1.85,1.85,0,0,1-2-2v-16.3a1.85,1.85,0,0,1,2-2h5.89a1,1,0,0,0,1.18-1.18v-25.53a1.85,1.85,0,0,1,2-2h23.37a1.85,1.85,0,0,1,2,2v25.53a1,1,0,0,0,1.18,1.18H1909a1.86,1.86,0,0,1,2,2v16.3a1.85,1.85,0,0,1-2,2h-12.18a1,1,0,0,0-1.18,1.18v42c0,7.06,2.36,9.42,8.64,9.42H1909a1.86,1.86,0,0,1,2,2v19.45a1.86,1.86,0,0,1-2,2Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M1919.28,1121.37a1.91,1.91,0,0,1,0-2.75l12.77-14.33a1.89,1.89,0,0,1,2.75,0c8.44,6.48,19.24,10.41,29.06,10.41,10,0,14.73-3.73,14.73-9,0-4.51-2.56-7.26-13.55-8.24l-10.61-1.18c-20-2-31-12-31-29.06,0-18.66,14.33-30.44,39.07-30.44,16.11,0,29.66,5.1,38.49,11.78a2.14,2.14,0,0,1,.2,3l-11,13.55a1.92,1.92,0,0,1-2.75.39,49.74,49.74,0,0,0-25.72-7.66c-8,0-12,3.14-12,7.86,0,4.32,2.36,6.87,13.16,7.85l10.4,1.18c22.39,2.16,31.62,13,31.62,28.86-.2,19.44-15.32,32.6-42.42,32.6C1942.65,1136.1,1928.32,1129.23,1919.28,1121.37Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M2077.79,1133.94c-1.38,0-2.16-.59-2.95-2l-21.21-38.29-9.81,12.17V1132a1.86,1.86,0,0,1-2,2h-23.56a1.85,1.85,0,0,1-2-2v-129.6a1.86,1.86,0,0,1,2-2h23.56a1.86,1.86,0,0,1,2,2v72.06l27.29-33.58a4.5,4.5,0,0,1,3.73-2H2100a1.1,1.1,0,0,1,.78,2l-29.06,33.58,33.19,57.54a1.2,1.2,0,0,1-1,2Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M2115.68,1133.94a1.85,1.85,0,0,1-2-2v-91.12a1.85,1.85,0,0,1,2-2h23.57a1.85,1.85,0,0,1,2,2v8.05h.2c4.51-7.65,13.15-12.17,24.74-12.17,6.28,0,12.57,2.16,16.69,5.69a1.93,1.93,0,0,1,.59,2.75l-11,20c-.78,1-1.57,1-2.75.4-4.51-2.95-9-4.52-13.74-4.32-10.21.39-14.73,7.85-14.73,20.61V1132a1.85,1.85,0,0,1-2,2Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M2246.58,1133.94a1.86,1.86,0,0,1-2-2v-6.29h-.19c-4.91,6.29-13.16,10.41-26.12,10.41-16.89,0-31.61-8.84-31.61-29.06,0-21,15.9-30.63,39.47-30.63H2243a1,1,0,0,0,1.18-1.18v-3.54c0-8.83-4.32-13-19.44-13-9.62,0-16.69,2.75-21.21,6.09a1.56,1.56,0,0,1-2.55-.39l-8.84-15.52a1.89,1.89,0,0,1,.59-2.74c8.06-5.7,19.64-9.43,35.35-9.43,31,0,42.22,10.6,42.22,34.36V1132a1.85,1.85,0,0,1-2,2Zm-2.36-31.61v-6.48a1,1,0,0,0-1.18-1.18h-13.35c-11.58,0-16.89,3.34-16.89,10.8,0,6.67,4.72,10,13.75,10C2238.33,1115.48,2244.22,1111.16,2244.22,1102.33Z"',' transform="translate(-1401.69 -918.27)"/>'],['<path fill="#514c4c"',' d="M2291.92,1133.94a1.86,1.86,0,0,1-2-2V1060.3a1,1,0,0,0-1.17-1.18h-5.89a1.86,1.86,0,0,1-2-2v-16.3a1.86,1.86,0,0,1,2-2h5.89a1,1,0,0,0,1.17-1.18v-4.51c0-23.18,10.8-32.8,33.39-32.8h10.8a1.86,1.86,0,0,1,2,2v18.45a1.86,1.86,0,0,1-2,2h-6.09c-8.64,0-10.8,2.16-10.8,10.21v4.71a1,1,0,0,0,1.18,1.18h15.51a1.85,1.85,0,0,1,2,2v16.3a1.85,1.85,0,0,1-2,2h-15.51a1,1,0,0,0-1.18,1.18V1132a1.85,1.85,0,0,1-2,2Zm90.13,1.18c-21,0-29.46-9.23-29.46-30.24v-102.5a1.86,1.86,0,0,1,2-2h23.56a1.86,1.86,0,0,1,2,2v100.34c0,6.48,2.55,9,8.24,9h4.13a1.85,1.85,0,0,1,2,2v19.45a1.85,1.85,0,0,1-2,2Z"',' transform="translate(-1401.69 -918.27)"/>']],dp="</svg>",hp=lp.length,up=e=>{const t=e.attrs.msStepTime||0,n=e.attrs.width/134,i=e.attrs.withCircle||!1,o=!!e.attrs.once,r=e.attrs.className;let s=1,a=t?0:hp,l=0;function c(){s<0&&0==a?s=1:s>0&&a==hp&&(o?(s=0,clearInterval(l),l=0):s=-1),a+=s,pe.redraw()}return{oninit:()=>{t&&(l=setInterval(c,t))},onremove:()=>{0!=l&&(clearInterval(l),l=0)},view:()=>{let e=['<svg width="134" height="134" viewBox="-32 -8 134 134" fill="none" xmlns="http://www.w3.org/2000/svg">'];i&&e.push('<circle class="shadow" cx="35" cy="59" r="63" fill="#ffffff"/>');for(let t=0;t<a;t++)for(let n of lp[t])e.push(n);e.push(dp);let t={style:{transform:`scale(${n})`,"transform-origin":"left top"}};return null!=r&&(t.class=r),pe("div",t,pe.trust(e.join("\n")))}}},pp=cp.length,gp=e=>{const t=e.attrs.msStepTime||0,n=e.attrs.width/992.73,i=e.attrs.className;let o=1,r=t?0:pp,s=0;function a(){o<0&&0==r?o=1:o>0&&r==pp&&(o=-1),r+=o,pe.redraw()}return{oninit:()=>{t&&(s=setInterval(a,t))},onremove:()=>{0!=s&&(clearInterval(s),s=0)},view:()=>{let e=['<svg viewBox="0 0 992.73 323.47" fill="none" xmlns="http://www.w3.org/2000/svg">'];for(let t=0;t<r;t++)for(let n of cp[t])e.push(n);e.push(dp);const t={style:{transform:`scale(${n})`,"transform-origin":"left top"}};return i&&(t.class=i),pe("div",t,pe.trust(e.join("\n")))}}},fp=e=>{const t=void 0!==e.attrs.scale?e.attrs.scale:void 0!==e.attrs.width?e.attrs.width/23:void 0!==e.attrs.height?e.attrs.height/40:1;return{view:()=>pe("div",{style:{transform:`scale(${t})`,"transform-origin":"left top"}},pe.trust('\n<svg width="23" height="40" viewBox="0 0 23 40" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M22.7373 4.36927L18.9514 6.55391L15.1655 8.76018L11.3796 6.55391L7.57202 4.36927L15.1655 0L22.7373 4.36927Z" fill="#FDC12C"/>\n<path d="M22.7369 4.36923V8.76014L15.165 13.1294V8.76014L22.7369 4.36923Z" fill="#F8DA95"/>\n<path d="M15.1655 8.76014V13.1294L7.57202 8.76014V4.36923L15.1655 8.76014Z" fill="#E69419"/>\n<path d="M15.1653 13.1295L11.3794 15.3141L7.57182 17.4988L3.78591 15.3141L0 13.1295L7.57182 8.76022L15.1653 13.1295Z" fill="#AA3731"/>\n<path d="M7.57182 17.4987V21.868L0 17.4987V13.1295L7.57182 17.4987Z" fill="#721D19"/>\n<path d="M15.1653 26.2589L11.3794 28.4435L7.57182 30.6282L3.78591 28.4435L0 26.2589L7.57182 21.868L15.1653 26.2589Z" fill="#83C8CE"/>\n<path d="M7.57182 30.6282V34.9974L0 30.6282V26.2589L7.57182 30.6282Z" fill="#5699A5"/>\n<path d="M22.7373 17.4987L18.9514 19.6834L15.1655 21.868L11.3579 19.6834L7.57202 17.4987L15.1655 13.1295L22.7373 17.4987Z" fill="#669256"/>\n<path d="M22.7369 17.4987V21.8679L15.165 26.2588V21.8679L22.7369 17.4987Z" fill="#B7C7AD"/>\n<path d="M15.1655 21.8679V26.2588L7.57202 21.8679V17.4987L15.1655 21.8679Z" fill="#496A38"/>\n<path d="M22.7373 30.6282L18.9514 32.8128L15.1655 34.9974L11.3796 32.8128L7.57202 30.6282L15.1655 26.2589L22.7373 30.6282Z" fill="#E39FA5"/>\n<path d="M22.7369 30.6282V34.9975L15.165 39.3668V34.9975L22.7369 30.6282Z" fill="#EACFD1"/>\n<path d="M15.1655 34.9975V39.3668L7.57202 34.9975V30.6282L15.1655 34.9975Z" fill="#B6676D"/>\n</svg>\n'))}},mp={oninit:e=>{e.state.show=!1,e.state.ival=setTimeout((()=>{e.state.show=!0,e.state.ival=0,pe.redraw()}),800)},onremove:e=>{e.state.ival&&clearTimeout(e.state.ival),e.state.ival=0},view:e=>{if(e.state.show)return pe(".modal-dialog",{id:"spinner-dialog",style:{visibility:"visible"}},pe("div.animated-spinner",pe(up,{msStepTime:200,width:120,withCircle:!0})))}},vp=()=>{let e="",t="";return{oninit:n=>{e=n.attrs.initialValue+"",t=n.attrs.class,t=t?"."+t.split(" ").join("."):""},view:n=>{const{id:i,maxlength:o,tabindex:r,autocomplete:s}=n.attrs;return pe("input.text"+t,{id:i,name:i,maxlength:o,tabindex:r,autocomplete:s,value:e,oninput:t=>{e=t.target.value+""}})}}},bp={view:e=>{const t={onmouseout:Be,onmouseover:qe};return Object.assign(t,e.attrs),pe(".modal-close",t,e.children)}},wp={view:e=>{const t=e.attrs.item,n=e.attrs.view,i=n.model,o=0===t.userid.indexOf("robot-");return pe("span.list-ch",{title:Ee("Skora á"),onclick:e=>{t.chall?(t.chall=!1,i.modifyChallenge({destuser:t.userid,action:"retract"})):o?i.newGame(t.userid,!1):n.pushDialog("challenge",t),e.preventDefault()}},Ve("hand-right",void 0,!t.chall))}},xp={view:e=>{const t=e.attrs.item,n=e.attrs.view,i=!t.userid||0===t.userid.indexOf("robot-");return pe("span.list-info",{title:Ee("Skoða feril"),onclick:e=>{i||n.showUserInfo(t.userid,t.nick,t.fullname),e.preventDefault()}},i?"":pe("span.usr-info"))}},yp=e=>{const t=e.attrs;let n=!!t.online;const i=void 0===t.online,o=t.id,r=t.userId;return{oninit:async function(){if(i){const e=await be({method:"POST",url:"/onlinecheck",body:{user:r}});n=e&&e.online}},view:e=>{var t,r;return i||(n=null!==(r=null===(t=e.attrs)||void 0===t?void 0:t.online)&&void 0!==r&&r),pe("span",{id:o,title:Ee(n?"Er álínis":"Álínis?"),class:n?"online":""})}}},_p={view:e=>{var t;const n=e.attrs.view,i=n.model;return(null===(t=i.state)||void 0===t?void 0:t.userId)?pe(".userid",{title:Ee("player_info"),onclick:e=>{n.pushDialog("userprefs"),e.preventDefault()}},[Ve("address-book"),$e(),i.state.userNick]):""}},kp=e=>{var t,n;let i=null!==(t=e.attrs.initialSelection)&&void 0!==t?t:0;const o=null!==(n=e.attrs.defaultClass)&&void 0!==n?n:"",r=e.attrs.selectedClass||"selected";return{view:e=>{const t=e.children;if(Array.isArray(t))return pe("div",{onclick:e=>{const n=t.map((e=>e.dom));for(let t=0;t<n.length;t++)n[t].contains(e.target)&&(i=t);e.stopPropagation()}},t.map(((e,t)=>{const n=e;return n.attrs.className=t===i?o+" "+r:o,e})))}}},Cp={view:()=>pe(".info",{title:Ee("Upplýsingar og hjálp")},pe(pe.route.Link,{href:"/help",class:"iconlink"},Ve("info-sign")))},Ip={view:()=>pe(".logo",pe(pe.route.Link,{href:"/main",class:"nodecorate"},pe(fp,{scale:1.6})))},Tp=()=>{function e(e,t){var n,i;const o=null===(n=document.querySelector("#"+e+" #opt1"))||void 0===n?void 0:n.classList,r=null===(i=document.querySelector("#"+e+" #opt2"))||void 0===i?void 0:i.classList;o&&o.toggle("selected"),r&&r.toggle("selected"),void 0!==t&&r&&t(r.contains("selected"))}return{view:({attrs:{id:t,small:n,funcToggle:i,state:o,tabindex:r,title:s,opt1:a,opt2:l}})=>{const c=t+"-toggler",d=".option"+(n?".small":"");return pe.fragment({},[pe("input.checkbox."+t,{type:"checkbox",id:t,name:t,checked:o,value:"True"}),pe(".toggler",{id:c,tabindex:r,title:s,onclick:t=>{e(c,i),t.preventDefault()},onkeypress:t=>{" "==t.key&&(e(c,i),t.preventDefault())}},[pe(d+(o?"":".selected"),{id:"opt1"},a),pe(d+(o?".selected":""),{id:"opt2"},l)])])}}},Sp=e=>{const t=e.attrs.view.model;function n(e){t.state&&(t.state.ready=e,t.setUserPref({ready:e}))}return{view:()=>{var e,i;return pe(Tp,{id:"ready",state:null!==(i=null===(e=t.state)||void 0===e?void 0:e.ready)&&void 0!==i&&i,tabindex:2,opt1:$e(),opt2:Ve("thumbs-up"),funcToggle:n,small:!0,title:Ee("Tek við áskorunum!")})}}},Ep=e=>{const t=e.attrs.view.model;function n(e){t.state&&(t.state.readyTimed=e,t.setUserPref({ready_timed:e}))}return{view:()=>{var e,i;return pe(Tp,{id:"timed",state:null!==(i=null===(e=t.state)||void 0===e?void 0:e.readyTimed)&&void 0!==i&&i,tabindex:3,opt1:$e(),opt2:Ve("time"),funcToggle:n,small:!0,title:Ee("Til í viðureign með klukku!")})}}},Pp=()=>{function e(e){e&&Ke("your-turn")}return{view:({attrs:{state:t,tabindex:n}})=>pe(Tp,{id:"audio",state:t,tabindex:n,opt1:Ve("volume-off"),opt2:Ve("volume-up"),funcToggle:e,small:!0,title:Ee("Hljóð á/af")})}},Lp=()=>{function e(e){e&&Ke("you-win")}return{view:({attrs:{state:t,tabindex:n}})=>pe(Tp,{id:"fanfare",state:t,tabindex:n,opt1:Ve("volume-off"),opt2:Ve("volume-up"),funcToggle:e,small:!0,title:Ee("Lúðraþytur á/af")})}},Rp=()=>({view:({attrs:{state:e,tabindex:t}})=>pe(Tp,{id:"beginner",state:e,tabindex:t,opt1:$e(),opt2:Ve("ok"),small:!0})}),Np=()=>({view:({attrs:{state:e,tabindex:t}})=>pe(Tp,{id:"fairplay",state:e,tabindex:t,opt1:$e(),opt2:Ve("edit"),small:!0})}),Dp=e=>{var t,n;const i=e.attrs,o=i.view,r=o.model,s=i.duration,a=i.oppId,l=i.challengeKey;let c=i.oppNick,d=i.oppName,h=!1;const u=null!==(n=null===(t=r.state)||void 0===t?void 0:t.userId)&&void 0!==n?n:"",p="user/"+u+"/wait/"+a;let g=!1;return{oninit:()=>{u&&a&&(!async function(){try{if(!a||!l)return;const e=await be({method:"POST",url:"/initwait",body:{opp:a,key:l}});e&&e.online&&e.waiting&&(h=!0)}catch(e){}}(),Ku(p,(e=>{!0!==e&&e.game&&(g=!0,Yu(p),pe.route.set("/game/"+e.game))})))},view:()=>pe(".modal-dialog",{id:"wait-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"wait-form"},[pe(".chall-hdr",pe("table",pe("tbody",pe("tr",[pe("td",pe("h1.chall-icon",Ve("time"))),pe("td.l-border",[pe(yp,{id:"chall-online",userId:a,online:h}),pe("h1",c),pe("h2",d)])])))),pe(".wait-explain",[Pe("p",["Þú ert reiðubúin(n) að taka áskorun um viðureign með klukku, ",pe("strong",["2 x ",s.toString(),Ee(" mínútur.")])]),Pe("p",["Beðið er eftir að áskorandinn ",pe("strong",c)," sé ",h?"":Pe("span#chall-is-online","álínis og "),"til í tuskið."]),Pe("p","Leikur hefst um leið og áskorandinn bregst við. Handahóf ræður hvor byrjar."),Pe("p","Ef þér leiðist biðin geturðu hætt við og reynt aftur síðar.")]),pe(bp,{id:"wait-cancel",title:Ee("Hætta við"),onclick:e=>{g||(Yu(p),async function(){try{await be({method:"POST",url:"/cancelwait",body:{user:u,opp:a,key:l}})}catch(e){}}(),o.popDialog()),e.preventDefault()}},Ve("remove"))]))}},Ap=e=>{const t=e.attrs,n=t.view,i=n.model,o=t.oppId,r=t.challengeKey;let s=t.oppNick,a=!0;return{oninit:()=>async function(){try{const e=await be({method:"POST",url:"/waitcheck",body:{user:o,key:r}});(null==e?void 0:e.waiting)?i.newGame(o,!0):a=!1}catch(e){}}(),view:()=>pe(".modal-dialog",{id:"accept-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"accept-form"},[pe(".chall-hdr",pe("table",pe("tbody",pe("tr",[pe("td",pe("h1.chall-icon",Ve("time"))),pe("td.l-border",pe("h1",s))])))),pe("div",{style:{"text-align":"center","padding-top":"32px"}},[pe("p",Pe("strong","Viðureign með klukku")),Pe("p",a?"Athuga hvort andstæðingur er reiðubúinn...":["Andstæðingurinn ",pe("strong",s)," er ekki reiðubúinn"])]),pe(bp,{id:"accept-cancel",title:Ee("Reyna síðar"),onclick:e=>{n.popDialog(),e.preventDefault()}},Ve("remove"))]))}},Op=e=>{const t=e.attrs.view,n=t.model;function i(e){if(!e||!e.dom)return;const n=e.dom.getElementsByClassName("btn-promo-no");if(n)for(let e of n)e.onclick=e=>{t.popDialog(),e.preventDefault()},e.onmouseover=qe,e.onmouseout=Be;const i=e.dom.getElementsByClassName("btn-promo-yes");if(i){for(let e of i)e.onmouseover=qe,e.onmouseout=Be;Ze()}}return n.loadFriendPromo(),{view:()=>pe(".modal-dialog",{id:"promo-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"promo-form"},pe(".promo-content",{oncreate:e=>i(e),onupdate:e=>i(e)},pe.trust(n.friendHTML||"<p>Sæki texta...</p>"))))}},Mp=e=>({view:()=>pe(".modal-dialog",{id:"thanks-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"thanks-form"},[pe(".thanks-content",[pe("h3","Frábært!"),pe("p",["Bestu þakkir fyrir að gerast ",Ve("coffee-cup"),$e(),pe("b","Vinur Netskrafls"),"."]),pe("p",["Fríðindi þín virkjast um leið og greiðsla hefur verið staðfest. ",pe("b","Það getur tekið nokkrar mínútur.")," Þú færð staðfestingu og kvittun í tölvupósti."])]),pe(bp,{id:"btn-thanks",title:"Áfram",onclick:e=>{pe.route.set("/main"),e.preventDefault()}},Ve("ok"))]))}),Fp=e=>{const t=e.attrs.view;return{view:()=>pe(".modal-dialog",{id:"cancel-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"cancel-form"},[pe("div",{id:"cancel-content"},[pe("h3","Hætta sem vinur Netskrafls?"),pe("p",["Viltu hætta sem ",Ve("coffee-cup"),$e(),pe("b","vinur Netskrafls")," og missa þar með þau fríðindi sem því tengjast?"]),pe("p","Fríðindin eru:"),pe("ul",[pe("li",[pe("b","Ótakmarkaður fjöldi viðureigna")," í gangi samtímis",pe("br"),"(í stað 8 að hámarki)"]),pe("li",["Aðgangur að ",pe("b","yfirliti")," í lok viðureignar"]),pe("li",[pe("b","Keppnishamur"),' án "græna þumalsins"'])]),pe(bp,{id:"btn-cancel-no",title:"Nei",onclick:e=>{e.preventDefault(),t.popDialog()}},[Ve("remove")," Nei"]),pe(bp,{id:"btn-cancel-yes",title:"Já",onclick:e=>{e.preventDefault(),t.popDialog(),t.cancelFriendship()}},[Ve("ok")," Já, vil hætta"])])]))}},zp=e=>{const t=e.attrs.view;return{view:()=>pe(".modal-dialog",{id:"confirm-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"confirm-form"},[pe(".confirm-content",[pe("h3","Staðfesting"),pe("p",["Þú ert ekki lengur skráð(ur) sem ",Ve("coffee-cup"),$e(),pe("b","vinur Netskrafls"),"."])]),pe(bp,{id:"btn-thanks",title:"Áfram",onclick:e=>{e.preventDefault(),t.popDialog()}},Ve("ok"))]))}},Up={view:e=>{var t;return pe("div.error",{style:{visibility:"visible"}},(null===(t=e.attrs)||void 0===t?void 0:t.message)||"Error logging in")}},jp=e=>{const t=e.attrs.loginUrl;let n=!1;function i(e){n=!0,e.preventDefault(),window.location.href=t}return{view:()=>pe.fragment({},[pe("div.loginform-large",[pe(up,{className:"login-logo",width:200,withCircle:!1,msStepTime:150,once:!0}),pe(gp,{className:"login-legend",width:600,msStepTime:0}),Pe("div.welcome","welcome_0"),Pe("div.welcome","welcome_1"),Pe("div.welcome","welcome_2"),pe("div.login-btn-large",{onclick:i},n?Se("Skrái þig inn..."):[Se("Innskrá")+" ",pe("span.glyphicon.glyphicon-play")])]),pe("div.loginform-small",[pe(up,{className:"login-logo",width:160,withCircle:!1,msStepTime:150,once:!0}),pe(gp,{className:"login-legend",width:650,msStepTime:0}),pe("div.login-btn-small",{onclick:i},Se(n?"Skrái þig inn...":"Innskrá"))])])}},qp=()=>{let e=!1;return{view:t=>{const{view:n,item:i}=t.attrs,o=n.model,r=o.state;if(!r)return;const s=""!==r.plan,a=i.fairplay&&r.fairPlay;return pe(".modal-dialog",{id:"chall-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"chall-form"},[pe(".chall-hdr",pe("table",pe("tbody",pe("tr",[pe("td",pe("h1.chall-icon",Ve("hand-right"))),pe("td.l-border",[pe(yp,{id:"chall-online",userId:i.userid}),pe("h1",i.nick),pe("h2",i.fullname)])])))),pe("div",{style:{"text-align":"center"}},[pe(".promo-fullscreen",[Pe("p",[Pe("strong","Ný áskorun")," - veldu lengd viðureignar:"]),pe(kp,{initialSelection:0,defaultClass:"chall-time"},[pe("div",{id:"chall-none",tabindex:1},Se("Viðureign án klukku")),pe("div",{id:"chall-10",tabindex:2},[Ve("time"),Se("2 x 10 mínútur")]),pe("div",{id:"chall-15",tabindex:3},[Ve("time"),Se("2 x 15 mínútur")]),pe("div",{id:"chall-20",tabindex:4},[Ve("time"),Se("2 x 20 mínútur")]),pe("div",{id:"chall-25",tabindex:5},[Ve("time"),Se("2 x 25 mínútur")]),(null==r?void 0:r.runningLocal)?pe("div",{id:"chall-3",tabindex:6},[Ve("time"),Se("2 x 3 mínútur")]):pe("div",{id:"chall-30",tabindex:6},[Ve("time"),Se("2 x 30 mínútur")])])]),pe(".promo-mobile",[pe("p",Pe("strong","Ný áskorun")),pe(".chall-time.selected",{id:"extra-none",tabindex:1},Se("Viðureign án klukku"))])]),s?pe("div",{id:"chall-manual"},[Pe("span.caption.wide",["Nota ",Pe("strong","handvirka véfengingu"),pe("br"),'("keppnishamur")']),pe(".toggler[id='manual-toggler'][tabindex='7']",{onclick:t=>{e=!e,t.preventDefault()}},[pe(".option"+(e?"":".selected"),pe("span",$e())),pe(".option"+(e?".selected":""),Ve("lightbulb"))])]):"",a?pe("div",{id:"chall-fairplay"},[Se("Báðir leikmenn lýsa því yfir að þeir skrafla "),pe("br"),Pe("strong","án stafrænna hjálpartækja"),Se(" af nokkru tagi"),"."]):"",pe(bp,{id:"chall-cancel",title:Ee("Hætta við"),tabindex:8,onclick:e=>{n.popDialog(),e.preventDefault()}},Ve("remove")),pe(bp,{id:"chall-ok",title:Ee("Skora á"),tabindex:9,onclick:t=>{var r,s;let l=null!==(s=null===(r=document.querySelector("div.chall-time.selected"))||void 0===r?void 0:r.id.slice(6))&&void 0!==s?s:"0";l="none"===l?0:parseInt(l),i.chall=!0,o.modifyChallenge({destuser:i.userid,action:"issue",duration:l,fairplay:a,manual:e}),n.popDialog(),t.preventDefault()}},Ve("ok"))]))}}},Bp=()=>{function e(e,t){let n=e.elo_adj?e.elo_adj.toString():"",i=e.human_elo_adj?e.human_elo_adj.toString():"",o="",r="";return null!==e.elo_adj&&(e.elo_adj>0?(n="+"+n,o="elo-win"):e.elo_adj<0?o="elo-loss":(o="elo-neutral",n=Ve("stroller",{title:"Byrjandi"})),null!==e.human_elo_adj&&(e.human_elo_adj>0?(i="+"+i,r="elo-win"):e.human_elo_adj<0?r="elo-loss":(r="elo-neutral",i=Ve("stroller",{title:"Byrjandi"})))),n=pe("span",{class:"elo-btn right "+o+(""==n?" invisible":"")},n),i=pe("span",{class:"elo-btn left "+r+(""==i?" invisible":"")},i),pe(".listitem"+(t%2==0?".oddlist":".evenlist"),pe(pe.route.Link,{href:Ye(e.url)},[pe("span.list-win",e.sc0>=e.sc1?Ve("bookmark",{title:e.sc0==e.sc1?Ee("Jafntefli"):Ee("Sigur")}):He("bookmark",{title:Ee("Tap")})),pe("span.list-ts-short",e.ts_last_move),pe("span.list-nick",e.opp_is_robot?[Ve("cog"),$e(),e.opp]:e.opp),pe("span.list-s0",e.sc0),pe("span.list-colon",":"),pe("span.list-s1",e.sc1),pe("div.list-elo-adj",i),pe("div.list-elo-adj",n),pe("span.list-duration",function(){let t="";return e.duration?t=[pe("span.timed-btn",{title:Ee("Viðureign með klukku")})," 2 x "+e.duration+Ee(" mínútur")]:(e.days||e.hours||e.minutes)&&(e.days>1?t=e.days.toString()+Ee(" dagar"):1==e.days&&(t=Ee("1 dagur")),e.hours>0&&(t.length&&(t+=Ee(" og ")),1==e.hours?t+=Ee("1 klst"):t+=e.hours.toString()+Ee(" klst")),0===e.days&&(t.length&&(t+=Ee(" og ")),1==e.minutes?t+=Ee("1 mínúta"):t+=e.minutes.toString()+Ee(" mínútur"))),t}()),pe("span.list-manual",e.manual?{title:Ee("Keppnishamur")}:{},Ve("lightbulb",void 0,!e.manual))]))}return{view:t=>{const n=t.attrs.recentList;return pe("div",{id:t.attrs.id},n?n.map(e):"")}}},Vp=()=>{let e="human";return{view:t=>pe.fragment({},[pe(".listitem.listheader",{key:"header"},[pe("span.list-ch",He("hand-right",{title:Ee("Skora á")})),Pe("span.list-rank","Röð"),pe("span.list-rank-no-mobile",{title:Ee("Röð í gær")},Ee("1d")),pe("span.list-rank-no-mobile",{title:Ee("Röð fyrir viku")},Ee("7d")),Pe("span.list-nick-elo","Einkenni"),pe("span.list-elo",{title:Ee("Elo-stig")},Ee("Elo")),pe("span.list-elo-no-mobile",{title:Ee("Elo-stig í gær")},Ee("1d")),pe("span.list-elo-no-mobile",{title:Ee("Elo-stig fyrir viku")},Ee("7d")),pe("span.list-elo-no-mobile",{title:Ee("Elo-stig fyrir mánuði")},Ee("30d")),pe("span.list-games",{title:Ee("Fjöldi viðureigna")},Ve("th")),pe("span.list-ratio",{title:Ee("Vinningshlutfall")},Ve("bookmark")),pe("span.list-avgpts",{title:Ee("Meðalstigafjöldi")},Ve("dashboard")),Pe("span.list-info-hdr","Ferill"),pe(".toggler[id='elo-toggler']",{title:Ee("elo_list_choice")},[pe(".option.x-small",{className:"human"===e?"selected":"",onclick:t=>{e="human",t.preventDefault()}},Ve("user")),pe(".option.x-small",{className:"all"===e?"selected":"",onclick:t=>{e="all",t.preventDefault()}},Ve("cog")),pe(".option.x-small",{className:"manual"===e?"selected":"",onclick:t=>{e="manual",t.preventDefault()}},Ve("lightbulb"))])]),pe(Hp,{id:t.attrs.id,sel:e,view:t.attrs.view,key:e})])}},Hp=e=>{const t=e.attrs.view,n=t.model,i=n.state;return{view:e=>{var o;let r=[];return void 0===n.userList||(null===n.userList||"elo"!==(null===(o=n.userListCriteria)||void 0===o?void 0:o.query)||n.userListCriteria.spec!==e.attrs.sel.toString()?n.loadUserList({query:"elo",spec:e.attrs.sel},!0):r=n.userList),pe("div",{id:e.attrs.id},r.map((function(n,o){var r;const s=0===n.userid.indexOf("robot-");function a(e,t){return 0===e||void 0!==t&&0===t?"--":e.toString()}let l=n.nick,c=pe("span.list-ch",$e());const d=null!==(r=null==i?void 0:i.userId)&&void 0!==r?r:"";return n.userid==d||n.inactive||(c=pe(wp,{view:t,item:n})),s&&(l=pe("span",[Ve("cog"),$e(),l])),n.fairplay&&!s&&(l=pe("span",[pe("span.fairplay-btn",{title:Ee("Skraflar án hjálpartækja")}),l])),pe(".listitem",{key:e.attrs.sel+o,className:o%2==0?"oddlist":"evenlist"},[c,pe("span.list-rank.bold",a(n.rank)),pe("span.list-rank-no-mobile",a(n.rank_yesterday)),pe("span.list-rank-no-mobile",a(n.rank_week_ago)),pe("span.list-nick-elo",{title:n.fullname},l),pe("span.list-elo.bold",n.elo),pe("span.list-elo-no-mobile",a(n.elo_yesterday,n.games_yesterday)),pe("span.list-elo-no-mobile",a(n.elo_week_ago,n.games_week_ago)),pe("span.list-elo-no-mobile",a(n.elo_month_ago,n.games_month_ago)),pe("span.list-games.bold",n.games>=1e5?Math.round(n.games/1e3)+"K":n.games),pe("span.list-ratio",n.ratio+"%"),pe("span.list-avgpts",n.avgpts),n.userid===d?$e():pe(xp,{view:t,item:n})])})))}}},$p=()=>{let e=1;function t(e,t,n){var i=void 0===e?"":function(e,t=1e4){const n=e<0?"-":"";return(e=Math.abs(e))<t?`${n}${e}`:`${n}${e=Math.round(e/1e3)}K`}(e);return void 0!==n&&(i+=n),t?[Ve(t),$e(),i]:i}return{view:n=>{var i,o,r=n.attrs.ownStats,s=0,a=0,l=0,c=0;return void 0!==r&&void 0!==r.games&&void 0!==r.human_games&&(r.games>0&&(s=Math.round(100*r.wins/r.games),l=Math.round(r.score/r.games)),r.human_games>0&&(a=Math.round(100*r.human_wins/r.human_games),c=Math.round(r.human_score/r.human_games))),pe("div",{id:n.attrs.id},[pe(".toggler",{id:"own-toggler",title:Ee("stats_choice"),onclick:t=>{e=3-e,t.preventDefault()}},[pe(".option.small"+(1===e?".selected":""),{id:"opt1"},Ve("user")),pe(".option.small"+(2===e?".selected":""),{id:"opt2"},Ve("cog"))]),1===e?pe("div",{id:"own-stats-human",className:"stats-box",style:{display:"inline-block"}},[pe(".stats-fig",{title:Ee("Elo-stig")},r?t(null===(i=r.locale_elo)||void 0===i?void 0:i.human_elo,"crown"):""),pe(".stats-fig.stats-games",{title:Ee("Fjöldi viðureigna")},r?t(r.human_games,"th"):""),pe(".stats-fig.stats-win-ratio",{title:Ee("Vinningshlutfall")},t(a,"bookmark","%")),pe(".stats-fig.stats-avg-score",{title:Ee("Meðalstigafjöldi")},t(c,"dashboard"))]):"",2===e?pe("div",{id:"own-stats-all",className:"stats-box",style:{display:"inline-block"}},[pe(".stats-fig",{title:Ee("Elo-stig")},r?t(null===(o=r.locale_elo)||void 0===o?void 0:o.elo,"crown"):""),pe(".stats-fig.stats-games",{title:Ee("Fjöldi viðureigna")},r?t(r.games,"th"):""),pe(".stats-fig.stats-win-ratio",{title:Ee("Vinningshlutfall")},t(s,"bookmark","%")),pe(".stats-fig.stats-avg-score",{title:Ee("Meðalstigafjöldi")},t(l,"dashboard"))]):""])}}},Wp=e=>{const t=e.attrs.view.model;let n,i="";function o(){var e,o;if(void 0!==n&&(n.result=!1,n=void 0),"search"!==((null===(e=t.userListCriteria)||void 0===e?void 0:e.query)||"robots"))return void t.loadUserList({query:"search",spec:i},!0);if(i===(null===(o=t.userListCriteria)||void 0===o?void 0:o.spec))return;let r={result:!0,p:new Promise((e=>{setTimeout((()=>{e(r.result)}),800)}))};n=r,n.p.then((e=>{e&&(t.loadUserList({query:"search",spec:i},!0),n=void 0)}))}return{view:()=>{var e;const n=(null===(e=t.userListCriteria)||void 0===e?void 0:e.query)||"robots";return pe(".user-cat[id='user-search']",[Ve("search",{id:"search",className:"search"==n?"shown":"",onclick:()=>{var e;i="",o(),null===(e=document.getElementById("search-id"))||void 0===e||e.focus()}}),$e(),pe("input.text.userid",{type:"text",id:"search-id",name:"search-id",maxlength:16,placeholder:Ee("Einkenni eða nafn"),value:i,onfocus:()=>o(),oninput:e=>{i=e.target.value+"",o()}})])}}},Gp="/page#!";function Kp(e,t,n,i,o){let r=document.getElementById(t);if(!r)return;r.setAttribute("class","ui-tabs ui-widget ui-widget-content ui-corner-all");const s=document.querySelector("#"+t+" > ul");s&&(s.setAttribute("class","ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"),s.setAttribute("role","tablist"));let a=document.querySelectorAll("#"+t+" > ul > li > a"),l=document.querySelectorAll("#"+t+" > ul > li"),c=[],d=[];for(let e=0;e<a.length;e++){const t=a[e].getAttribute("href");if(!t)continue;c.push(t.slice(1)),a[e].onclick=t=>{Jp(o,e),t.preventDefault()},a[e].removeAttribute("href"),a[e].setAttribute("class","ui-tabs-anchor sp"),a[e].setAttribute("role","presentation"),d.push(l[e]),l[e].setAttribute("class","ui-state-default ui-corner-top"),l[e].setAttribute("role","tab"),l[e].onmouseover=e=>{e.currentTarget.classList.toggle("ui-state-hover",!0)},l[e].onmouseout=e=>{e.currentTarget.classList.toggle("ui-state-hover",!1)};const n=document.getElementById(c[e]);n&&(n.setAttribute("class","ui-tabs-panel ui-widget-content ui-corner-bottom"),n.setAttribute("role","tabpanel"))}if(o.state.ids=c,o.state.lis=d,o.state.selected=0,i){const t=e.model,n=(e,t)=>{let n=t.slice(7),i=n.indexOf("?"),o=i>=0?n.slice(0,i):n,r=n.slice(o.length+1),s=r.length?function(e){const t=e.split("&"),n={};for(let e=0;e<t.length;e++){const i=t[e].split("=");2==i.length&&(n[i[0]]=decodeURIComponent(i[1]))}return n}(r):{};pe.route.set(o,s),window.history&&window.history.pushState({},"",t),e.preventDefault()},i=n=>{var i;(null===(i=null==t?void 0:t.state)||void 0===i?void 0:i.userId)&&e.pushDialog("userprefs"),n.preventDefault()},s=e=>{Jp(o,2),e.preventDefault()},a=e=>{Jp(o,3),e.preventDefault()};let l=r.querySelectorAll("a");for(let e=0;e<l.length;e++){let t=l[e],o=t.getAttribute("href");o&&o.slice(0,7)==Gp?t.onclick=e=>n(e,o):o&&"$$userprefs$$"===o?t.onclick=i:o&&"$$twoletter$$"===o?t.onclick=s:o&&"$$newbag$$"===o&&(t.onclick=a)}}n&&n(o),Yp(o)}function Yp(e){const t=e.state.selected,n=e.state.lis;e.state.ids.map(((e,i)=>{var o;null===(o=document.getElementById(e))||void 0===o||o.setAttribute("style","display: "+(i==t?"block":"none")),n[i].classList.toggle("ui-tabs-active",i===t),n[i].classList.toggle("ui-state-active",i===t)}))}function Jp(e,t){e.state.selected=t,Yp(e)}function Qp(e){var t=pe.route.param("tab");void 0!==t&&Jp(e,parseInt(t)||0)}const Xp=()=>({view:e=>{const t=e.attrs.ownStats||{},n=[];if(t.highest_score&&(n.push(Ee("Hæsta skor ")),n.push(pe("b",pe(pe.route.Link,{href:"/game/"+t.highest_score_game},t.highest_score)))),t.best_word){n.length&&(e.attrs.myself?n.push(pe("br")):n.push(" | "));let i=t.best_word,o=[];for(let e=0;e<i.length;e++)"?"==i[e]?(o.push(pe("span.blanktile",i[e+1])),e+=1):o.push(i[e]);n.push(Ee("Besta orð ")),n.push(pe("span.best-word",o)),n.push(", "),n.push(pe("b",pe(pe.route.Link,{href:"/game/"+t.best_word_game},t.best_word_score))),n.push(Ee(" stig"))}return pe("p",{id:e.attrs.id},n)}}),Zp=()=>{function e(e){const t=e.model;function n(n){const i=function(){if(!t.state)return;const i=t.state;let o=[];return t.challengeList&&(o=n?t.challengeList.filter((e=>e.received)):t.challengeList.filter((e=>!e.received))),pe("div",{id:n?"chall-received":"chall-sent",oninit:()=>{null===t.challengeList&&t.loadChallengeList()}},o.map((function(n,o){const r=!n.received&&n.opp_ready&&n.prefs&&void 0!==n.prefs.duration&&n.prefs.duration>0,s=n.received||r,a=(l=n.prefs)&&void 0!==l.duration&&0!==l.duration?Se("with_clock",{duration:l.duration.toString()}):Se("Venjuleg ótímabundin viðureign");var l;return pe(".listitem"+(o%2==0?".oddlist":".evenlist"),[pe("span.list-ch",{onclick:function(e){const i=n.received?"decline":"retract",o={destuser:n.userid,action:i,key:n.key};t.modifyChallenge(o),e.preventDefault()}},n.received?Ve("thumbs-down",{title:Ee("Hafna")}):Ve("hand-right",{title:Ee("Afturkalla")})),pe(s?"a":"span",s?{href:"#",onclick:function(o){if(o.preventDefault(),!t.moreGamesAllowed())return Ju("hit_game_limit",{userid:i.userId,locale:i.locale,limit:t.maxFreeGames}),void e.showFriendPromo();n.received?n.prefs&&void 0!==n.prefs.duration&&n.prefs.duration>0?e.pushDialog("wait",{oppId:n.userid,oppNick:n.opp,oppName:n.fullname,duration:n.prefs.duration,challengeKey:n.key}):t.newGame(n.userid,!1):e.showAcceptDialog(n.userid,n.opp,n.key)},class:r?"opp-ready":""}:{},[pe("span.list-ts",n.ts),pe("span.list-nick",{title:n.fullname},n.opp),pe("span.list-chall",[n.prefs.fairplay?pe("span.fairplay-btn",{title:Ee("Án hjálpartækja")}):"",n.prefs.manual?pe("span.manual-btn",{title:Ee("Keppnishamur")}):"",a])]),pe(xp,{view:e,item:{userid:n.userid,nick:n.opp,fullname:n.fullname}})])})))}();return i?n?[pe(".listitem.listheader",[pe("span.list-icon",He("thumbs-down",{title:Ee("Hafna")})),Pe("span.list-ts","Hvenær"),Pe("span.list-nick","Áskorandi"),Pe("span.list-chall","Hvernig"),Pe("span.list-info-hdr","Ferill")]),i]:[pe(".listitem.listheader",[pe("span.list-icon",He("hand-right",{title:Ee("Afturkalla")})),Pe("span.list-ts","Hvenær"),Pe("span.list-nick","Andstæðingur"),Pe("span.list-chall","Hvernig"),Pe("span.list-info-hdr","Ferill")]),i]:[]}function i(e,n,i){const o=t.userListCriteria?t.userListCriteria.query:"robots",r="elo"===e?"human":"";return pe("span",{className:e===o?"shown":"",id:e,onclick:n=>{t.loadUserList({query:e,spec:r},!0),n.preventDefault()}},[Ve(n,{style:{padding:0}}),$e(),i])}function o(){var n,i,o,r;const s=null!==(i=null===(n=t.userListCriteria)||void 0===n?void 0:n.query)&&void 0!==i?i:"",a=null!==(r=null===(o=t.userListCriteria)||void 0===o?void 0:o.spec)&&void 0!==r?r:"",l=s||"robots";if("elo"===l)return[pe(Vp,{id:"elolist",view:e,key:"elolist"})];let c=[];void 0===t.userList||(null===t.userList||s!==l?t.loadUserList({query:l,spec:""},!0):c=t.userList);const d=0===c.length&&"search"===l&&""!==a,h="robots"===l;return[pe(".listitem.listheader",[pe("span.list-ch",He("hand-right",{title:Ee("Skora á")})),pe("span.list-fav",Ve("star-empty",{title:Ee("Uppáhald")})),Pe("span.list-nick","Einkenni"),Pe("span.list-fullname","Nafn og merki"),h?"":Pe("span.list-human-elo[id='usr-list-elo']","Elo"),h?"":Pe("span.list-info-hdr[id='usr-list-info']","Ferill")]),function(n){return pe("div",{id:"userlist"},n.map((function(n,i){const o=0===n.userid.indexOf("robot-");let r=[];return n.ready&&!o&&(r.push(pe("span.ready-btn",{title:Ee("Álínis og tekur við áskorunum")})),r.push($e())),n.ready_timed&&(r.push(pe("span.timed-btn",{title:Ee("Til í viðureign með klukku")})),r.push($e())),n.fairplay&&(r.push(pe("span.fairplay-btn",{title:Ee("Skraflar án hjálpartækja")})),r.push($e())),r.push(n.fullname),pe(".listitem"+(i%2==0?".oddlist":".evenlist"),[pe(wp,{view:e,item:n}),o?pe("span.list-fav",{style:{cursor:"default"}},Ve("star-empty")):pe("span.list-fav",{title:Ee("Uppáhald"),onclick:e=>{n.fav=!n.fav,t.markFavorite(n.userid,n.fav),e.preventDefault()}},Ve(n.fav?"star":"star-empty")),o?pe("a",{href:"",onclick:e=>{t.newGame(n.userid,!1),e.preventDefault()}},[pe("span.list-nick",[Ve("cog"),$e(),n.nick]),pe("span.list-fullname-robot",r)]):pe.fragment({},[pe("span.list-nick",n.nick),pe("span.list-fullname",r),pe("span.list-human-elo",n.human_elo)]),pe(xp,{view:e,item:n})])})))}(c),d?pe("div",{id:"user-no-match",style:{display:"block"}},[Ve("search")," ",pe("span",{id:"search-prefix"},a),Se(" finnst ekki")]):void 0]}function r(){const n=t.ownStats;return null===n&&t.loadOwnStats(),n&&pe($p,{view:e,id:"own-stats",ownStats:n})}function s(){const e=t.ownStats;return null===e&&t.loadOwnStats(),e&&pe(Xp,{id:"own-best",ownStats:e,myself:!0})}return pe(".tabbed-page",pe("div",{id:"main-tabs"},[function(){const e=t.numGames,n=t.numChallenges;return[pe(".header-logo",pe(pe.route.Link,{href:"/page",class:"backlink"},pe(fp))),pe("ul",[pe("li",pe("a[href='#tabs-1']",[Ve("th"),pe("span.tab-legend",Se("Viðureignir")),pe("span",{id:"numgames",style:e?"display: inline-block":""},e)])),pe("li",pe("a[href='#tabs-2']",[Ve("hand-right"),pe("span.tab-legend",Se("Áskoranir")),pe("span"+(t.oppReady?".opp-ready":""),{id:"numchallenges",style:n?"display: inline-block":""},n)])),pe("li",pe("a[href='#tabs-3']",[Ve("user"),pe("span.tab-legend",Se("Andstæðingar"))])),pe("li.no-mobile-list",pe("a[href='#tabs-4']",[Ve("bookmark"),pe("span.tab-legend",Se("Ferill"))]))])]}(),pe("div.tab-scroll-area",[pe("div",{id:"tabs-1"},[Pe("p.no-mobile-block",[Pe("strong","Viðureignir sem standa yfir"),"click_on_game",Ve("flag")," þú átt leik"]),[pe(".listitem.listheader",[pe("span.list-myturn",He("flag",{title:Ee("Átt þú leik?")})),pe("span.list-overdue",He("hourglass",{title:Ee("Langt frá síðasta leik?")})),Pe("span.list-ts-short","Síðasti leikur"),Pe("span.list-opp","Andstæðingur"),Pe("span.list-info-hdr","Ferill"),Pe("span.list-scorehdr","Staða"),Pe("span.list-tc","Framvinda"),pe("span.list-manual",He("lightbulb",{title:Ee("Keppnishamur")}))]),(null===t.gameList&&t.loadGameList(),pe("div",{id:"gamelist"},t.gameList?t.gameList.map(((t,n)=>pe(".listitem"+(n%2==0?".oddlist":".evenlist"),[pe(pe.route.Link,{href:Ye(t.url)},[function(){let e="",n="";return t.my_turn?e=Ee("Þú átt leik"):t.zombie?(e=Ee("Viðureign lokið"),n=".zombie"):(e=Ee("opp_move",{opponent:t.opp}),n=".grayed"),pe("span.list-myturn",pe("span.glyphicon.glyphicon-flag"+n,{title:e}))}(),pe("span.list-overdue",t.overdue?Ve("hourglass",{title:t.my_turn?"Er að renna út á tíma":"Getur þvingað fram uppgjöf"}):He("hourglass")),pe("span.list-ts-short",t.ts),function(){let e=null===t.oppid?[Ve("cog"),$e(),t.opp]:t.opp;return pe("span.list-opp",{title:t.fullname},e)}()]),pe(xp,{view:e,item:{userid:t.oppid,nick:t.opp,fullname:t.fullname}}),pe("span.list-s0",t.sc0),pe("span.list-colon",":"),pe("span.list-s1",t.sc1),pe("span.list-tc",function(){const e=t.sc0<t.sc1?".losing":"";return pe(".tilecount",pe(".tc"+e,{style:{width:t.tile_count.toString()+"%"}}))}()),pe("span.list-manual",t.manual?Ve("lightbulb",{title:Ee("Keppnishamur")}):He("lightbulb"))]))):"")),t.loadingGameList||void 0===t.gameList||null!==t.gameList&&t.gameList.length>0?"":pe(".hint",{style:{display:"block"}},[pe("p",["Ef þig vantar einhvern til að skrafla við, veldu flipann ",pe(pe.route.Link,{href:"/main?tab=2"},[Ve("user"),$e(),"Andstæðingar"])," og skoraðu á tölvuþjarka - ",Ve("cog"),$e(),pe("b","Amlóða"),", ",Ve("cog"),$e(),pe("b","Miðlung")," eða ",Ve("cog"),$e(),pe("b","Fullsterkan")," - eða veldu þér annan leikmann úr stafrófs­listunum sem þar er að finna til að skora á."]),pe("p",["Þú stofnar áskorun með því að smella á bendi-teiknið ",Ve("hand-right",{style:{"margin-left":"6px","margin-right":"6px"}})," vinstra megin við nafn andstæðingsins."]),pe("p","Tölvuþjarkarnir eru ætíð reiðubúnir að skrafla og viðureign við þá hefst strax. Aðrir leikmenn þurfa að samþykkja áskorun áður en viðureign hefst."),pe("p.no-mobile-block",[pe(pe.route.Link,{href:"/help"},"Hjálp")," má fá með því að smella á bláa ",Ve("info-sign"),$e(),"-",$e(),"teiknið hér til vinstri."]),pe("p.no-mobile-block","Þú kemst alltaf aftur í þessa aðalsíðu með því að smella á örvarmerkið efst vinstra megin við skraflborðið.")])]]),pe("div",{id:"tabs-2"},[Pe("p.no-mobile-block",[Pe("strong","Skorað á þig"),"click_on_challenge",Ve("thumbs-down",{style:{"margin-left":"6px","margin-right":"6px"}})," til að hafna henni"]),n(!0),Pe("p.no-mobile-block",[Pe("strong","Þú skorar á aðra")," - smelltu á ",Ve("hand-right",{style:{"margin-left":"6px","margin-right":"6px"}})," til að afturkalla áskorun"]),n(!1)]),pe("div",{id:"tabs-4"},[r(),s(),Pe("p.no-mobile-block",[Pe("strong","Nýlegar viðureignir þínar"),"click_to_review"]),[pe(".listitem.listheader",[pe("span.list-win",He("bookmark",{title:Ee("Sigur")})),Pe("span.list-ts-short","Viðureign lauk"),Pe("span.list-nick","Andstæðingur"),Pe("span.list-scorehdr","Úrslit"),pe("span.list-elo-hdr",[pe("span.glyphicon.glyphicon-user.elo-hdr-left",{title:Ee("Mennskir andstæðingar")}),Se("Elo"),pe("span.glyphicon.glyphicon-cog.elo-hdr-right",{title:Ee("Allir andstæðingar")})]),Pe("span.list-duration","Lengd"),pe("span.list-manual",He("lightbulb",{title:Ee("Keppnishamur")}))]),(null===t.recentList&&t.loadRecentList(),pe(Bp,{view:e,id:"recentlist",recentList:t.recentList||[]}))]]),pe("div",{id:"tabs-3"},[pe("div",{id:"initials"},[pe(".user-cat[id='user-headings']",[i("robots","cog",Ee("Þjarkar"))," ",i("fav","star",Ee("Uppáhalds"))," ",i("live","flash",Ee("Álínis"))," ",i("alike","resize-small",Ee("Svipaðir"))," ",i("elo","crown",Ee("Topp 100"))]),pe(Wp,{view:e})]),o()])])]))}return{view:t=>{const n=t.attrs.view;return pe.fragment({},[pe(Ip),pe(_p,{view:n}),pe(Cp),pe(Sp,{view:n}),pe(Ep,{view:n}),pe("div",{oncreate:e=>{Kp(n,"main-tabs",void 0,!1,e)},onupdate:Qp},e(n))])}}},eg=e=>{const t=e.attrs.view,n=t.model;let i="";return{oninit:function(e){n.loadPromoContent(e.attrs.kind,(e=>{i=e}))},view:e=>{let n=e.attrs.initFunc;return pe(".modal-dialog",{id:"promo-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"promo-form",className:"promo-"+e.attrs.kind},pe("div",{id:"promo-content",onupdate:e=>function(e,n){var i=e.dom.getElementsByClassName("btn-promo-no");for(let e=0;e<i.length;e++)i[e].onclick=()=>t.popDialog(),i[e].onmouseover=qe,i[e].onmouseout=Be;var o=e.dom.getElementsByClassName("btn-promo-yes");for(let e=0;e<o.length;e++)o[e].onmouseover=qe,o[e].onmouseout=Be;void 0!==n&&n()}(e,n)},pe.trust(i))))}}},tg=e=>{const t=e.attrs.view,n=t.model;let i={},o=[],r=!0;function s(e){var t,i;n.loadUserRecentList(e.attrs.userid,r?null:null!==(i=null===(t=n.state)||void 0===t?void 0:t.userId)&&void 0!==i?i:"",(e=>{o=e&&0===e.result?e.recentlist:[]}))}function a(e,t){r!=t&&(r=t,s(e))}return{oninit:e=>{s(e),function(e){n.loadUserStats(e.attrs.userid,(e=>{i=e&&0===e.result?e:{}}))}(e)},view:e=>pe(".modal-dialog",{id:"usr-info-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"usr-info-form"},[pe(".usr-info-hdr",[pe("h1.usr-info-icon",[i.friend?Ve("coffee-cup",{title:Ee("Vinur Netskrafls")}):Ve("user"),$e()]),pe("h1[id='usr-info-nick']",e.attrs.nick),pe("span.vbar","|"),pe("h2[id='usr-info-fullname']",e.attrs.fullname),pe(".usr-info-fav",{title:Ee("Uppáhald"),onclick:t=>{t.preventDefault(),i.favorite=!i.favorite,n.markFavorite(e.attrs.userid,i.favorite)}},i.favorite?Ve("star"):Ve("star-empty"))]),pe("p",[pe("strong",Se("Nýjustu viðureignir")),$e(),pe("span.versus-cat",[pe("span",{class:r?"shown":"",onclick:()=>{a(e,!0)}},Se(" gegn öllum ")),pe("span",{class:r?"":"shown",onclick:()=>{a(e,!1)}},Se(" gegn þér "))])]),pe(".listitem.listheader",[pe("span.list-win",He("bookmark",{title:Ee("Sigur")})),Pe("span.list-ts-short","Viðureign lauk"),Pe("span.list-nick","Andstæðingur"),Pe("span.list-scorehdr","Úrslit"),pe("span.list-elo-hdr",[pe("span.glyphicon.glyphicon-user.elo-hdr-left",{title:Ee("Mennskir andstæðingar")}),"Elo",pe("span.glyphicon.glyphicon-cog.elo-hdr-right",{title:Ee("Allir andstæðingar")})]),Pe("span.list-duration","Lengd"),pe("span.list-manual",He("lightbulb",{title:Ee("Keppnishamur")}))]),pe(Bp,{view:t,id:"usr-recent",recentList:o}),pe($p,{view:t,id:"usr-stats",ownStats:i}),pe(Xp,{id:"usr-best",ownStats:i,myself:!1}),pe(bp,{id:"usr-info-close",title:Ee("Loka"),onclick:e=>{t.popDialog(),e.preventDefault()}},Ve("ok"))]))}},ng=e=>{const t=e.attrs.view.model;function n(e){let t=e.alphabet,n=t.length,i=0,o=[];for(;n>0;){let r=[];for(let o=0;o<6&&n>0;o++){let o=t[i++];r.push(pe("td",{onclick:t=>{e.placeBlank(o),t.preventDefault()},onmouseover:qe,onmouseout:Be},pe(".blank-choice.tile.racktile",o))),n--}o.push(pe("tr",r))}return o}return{view:()=>{const e=t.game;if(e)return pe(".modal-dialog",{id:"blank-dialog",style:{visibility:"visible"}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"blank-form"},[Pe("p","Hvaða staf táknar auða flísin?"),pe(".rack.blank-rack",pe("table.board",{id:"blank-meaning"},n(e))),pe(bp,{id:"blank-close",title:Ee("Hætta við"),onclick:t=>{t.preventDefault(),e.cancelBlankDialog()}},Ve("remove"))]))}}},ig=()=>({view:e=>{const{bag:t,newbag:n}=e.attrs;let i="";return t.length<=7?i+=".empty":n&&(i+=".new"),pe(".bag",{title:Ee("Flísar sem eftir eru")},pe("table.bag-content"+i,function(e){let t=[],n=0,i=e.length;for(;i>0;){let o=[];for(let t=0;t<19&&i>0;t++){let t=e[n++];"?"==t&&(t="&nbsp;"),o.push(pe("td",pe.trust(t))),i--}t.push(pe("tr",o))}return t}(t)))}});function og(e,t,n,i,o,r){const s={onmouseout:Be,onmouseover:qe};return i&&(s.title=i),r&&(s.id=r),s.onclick=t?e=>e.preventDefault():e=>{n&&n(),e.preventDefault()},pe("."+e+(t?".disabled":""),s,o)}const rg={view:e=>{const{game:t}=e.attrs;let n=[".score"];t.manual?n.push("manual"):t.wordGood&&(n.push("word-good"),void 0!==t.currentScore&&t.currentScore>=50&&n.push("word-great"));let i=void 0===t.currentScore?"?":t.currentScore.toString();return pe(n.join("."),{title:i},i)}},sg={view:e=>{const{view:t,disabled:n}=e.attrs,i=t.model.game;if(i)return og("recallbtn",!!n,(()=>{i.resetRack(),t.updateScale()}),Ee("Færa stafi aftur í rekka"),Ve("down-arrow"))}},ag={view:e=>{const{view:t,disabled:n}=e.attrs,i=t.model.game;if(i)return og("scramblebtn",!!n,(()=>i.rescrambleRack()),Ee("Stokka upp rekka"),Ve("random"))}},lg={view:e=>{const{view:t}=e.attrs,n=t.model.game;if(!n)return;const i=n.buttonState();return i.showRecall&&!i.showingDialog?pe(sg,{view:t}):i.showScramble&&!i.showingDialog?pe(ag,{view:t}):void 0}},cg=e=>{const t=e.attrs.view,n=t.model;return{view:()=>{const e=n.game;let i=[];if(!e)return;const o=e.buttonState();if(i.push(pe(".word-check"+(o.wordGood?".word-good":"")+(o.wordBad?".word-bad":""))),o.showChallenge){const t=(o.tilesPlaced||o.showingDialog)&&!o.lastChallenge;i.push(og("challenge",t,(()=>e.submitChallenge()),"Véfenging (röng kostar 10 stig)",Ve("ban-circle")))}if(o.showRecall&&i.push(pe(sg,{view:t,disabled:o.showingDialog})),o.showScramble&&i.push(pe(ag,{view:t,disabled:o.showingDialog})),o.showMove){const n=Ee("submit_move");i.push(og("submitmove",!o.tilesPlaced||o.showingDialog,(()=>{e.submitMove(),t.updateScale()}),n,[n,Ve("play")]))}if(o.showMoveMobile){let n=["submitmove"],r=void 0!==e.currentScore;e.manual?n.push("manual"):o.wordGood?(n.push("word-good"),void 0!==e.currentScore&&e.currentScore>=50&&n.push("word-great")):o.wordBad&&(n.push("word-bad"),r=!1);const s=void 0===e.currentScore?"?":e.currentScore.toString();let a,l=[pe("span.score-mobile",s)];o.canPlay&&r?l.push(Ve("play")):l.push(Ve("remove")),a=o.canPlay?r?()=>{e.submitMove(),t.updateScale()}:()=>{}:()=>{const e=document.querySelector("div.opp-turn");e&&(e.classList.toggle("flashing",!0),setTimeout((()=>e.classList.toggle("flashing",!1)),1200))},i.push(og(n.join("."),o.showingDialog,a,s,l,"move-mobile"))}if(o.showForceResignMobile){const t=Ee("Þvinga til uppgjafar");i.push(og("force-resign",o.showingDialog,(()=>e.forceResign()),t,t))}if(o.showPass&&i.push(og("submitpass",(o.tilesPlaced||o.showingDialog)&&!o.lastChallenge,(()=>e.submitPass()),Ee("Pass"),Ve("forward"))),o.showExchange&&i.push(og("submitexchange",o.tilesPlaced||o.showingDialog||!o.exchangeAllowed,(()=>e.submitExchange()),Ee("Skipta stöfum"),Ve("refresh"))),o.showResign&&i.push(og("submitresign",o.showingDialog,(()=>e.submitResign()),Ee("Gefa viðureign"),Ve("fire"))),o.gameOver||o.localTurn||e.moveInProgress||null===e.player||i.push(pe(".opp-turn",{style:{visibility:"visible"}},[pe("span.move-indicator"),$e(),pe("strong",e.nickname[1-e.player]),Ee(" á leik"),$e(),o.tardyOpponent?pe("span.yesnobutton",{id:"force-resign",onclick:t=>{t.preventDefault(),e.forceResign()},onmouseout:Be,onmouseover:qe,title:Ee("14 dagar liðnir án leiks")},Ee("Þvinga til uppgjafar")):""])),o.tilesPlaced){const t=pe(rg,{game:e});t&&i.push(t)}return(null==e?void 0:e.moveInProgress)&&i.push(pe(".waitmove",pe(".animated-waitmove",pe(up,{msStepTime:100,width:38,withCircle:!1})))),pe(".buttons",i)}}};class dg{getEventCoordinates(e){if(e instanceof MouseEvent)return{x:e.clientX,y:e.clientY};if(e instanceof TouchEvent){const t=e.touches[0];return t?{x:t.clientX,y:t.clientY}:{x:this.lastX,y:this.lastY}}return{x:0,y:0}}static rectContains(e,t){return t.x>=e.left&&t.x<e.right&&t.y>=e.top&&t.y<e.bottom}constructor(e,t){var n,i;this.parentElement=null,this.parentRect=null,this.offsetX=0,this.offsetY=0,this.centerX=0,this.centerY=0,this.lastX=0,this.lastY=0,this.currentDropTarget=null,e.preventDefault();const o=e.currentTarget,r=this.getEventCoordinates(e);this.lastX=r.x,this.lastY=r.y,this.draggedElement=o,this.dropHandler=t,this.parentElement=o.parentElement,this.parentRect=null!==(i=null===(n=this.parentElement)||void 0===n?void 0:n.getBoundingClientRect())&&void 0!==i?i:null;const s=o.getBoundingClientRect(),{offsetWidth:a,offsetHeight:l}=o;o.classList.add("dragging"),document.body.appendChild(o);const{offsetWidth:c,offsetHeight:d}=o;this.offsetX=r.x-s.left+(c-a)/2,this.offsetY=r.y-s.top+(d-l)/2,this.centerX=c/2,this.centerY=d/2,this.boundEventHandlers={drag:this.drag.bind(this),endDrag:this.endDrag.bind(this)};const{drag:h,endDrag:u}=this.boundEventHandlers;e instanceof MouseEvent?(document.addEventListener("mousemove",h),document.addEventListener("mouseup",u)):e instanceof TouchEvent&&(document.addEventListener("touchmove",h,{passive:!1}),document.addEventListener("touchend",u)),this.updatePosition(r.x,r.y)}removeDragListeners(){const{drag:e,endDrag:t}=this.boundEventHandlers;document.removeEventListener("mousemove",e),document.removeEventListener("mouseup",t),document.removeEventListener("touchmove",e),document.removeEventListener("touchend",t)}elementCenter(e,t){return{x:e-this.offsetX+this.centerX,y:t-this.offsetY+this.centerY}}findDropTargetAtPoint(e,t){const{x:n,y:i}=this.elementCenter(e,t);for(const e of document.elementsFromPoint(n,i)){if(e.classList.contains("drop-target"))return e;if(e.classList.contains("not-target"))return null}return null}updatePosition(e,t){this.lastX=e,this.lastY=t,this.draggedElement.style.left=e-this.offsetX+"px",this.draggedElement.style.top=t-this.offsetY+"px"}updateDropTarget(e,t){const n=this.findDropTargetAtPoint(e,t);n!==this.currentDropTarget&&(this.currentDropTarget&&this.currentDropTarget.classList.remove("over"),n&&n.classList.add("over"),this.currentDropTarget=n)}drag(e){e.preventDefault();const t=this.getEventCoordinates(e);this.updatePosition(t.x,t.y),this.updateDropTarget(t.x,t.y);const n=null!==this.currentDropTarget||this.parentRect&&dg.rectContains(this.parentRect,t);this.draggedElement.classList.toggle("no-drop",!n)}resetPosition(){this.draggedElement.style.left="",this.draggedElement.style.top="",this.draggedElement.classList.remove("dragging","no-drop"),this.parentElement&&this.parentElement.appendChild(this.draggedElement)}endDrag(e){e.preventDefault();const t=this.getEventCoordinates(e),n=this.findDropTargetAtPoint(t.x,t.y);this.currentDropTarget&&this.currentDropTarget.classList.remove("over"),this.removeDragListeners(),this.draggedElement.style.visibility="hidden",this.resetPosition(),n&&this.dropHandler(this.draggedElement,n),setTimeout((()=>{this.draggedElement.style.visibility="visible"}))}}const hg=e=>{const{view:t,coord:n,opponent:i}=e.attrs,o=t.model,r=e=>{var i;return i=(e,i)=>{const r=o.game;if(!r)return;const s=i.id;if(!s)return;let a="";if("board-background"===s?a="R1":s.startsWith("sq_")&&(a=s.slice(3)),a)try{r.attemptMove(n,a),t.updateScale(),pe.redraw()}catch(e){console.error(e)}},new dg(e,i),e.redraw=!1,!1};return{view:()=>{const e=o.game;if(!e)return;const t="R"===n[0],s=e.tiles[n];let a=[".tile"],l={};if("?"===s.tile&&a.push("blanktile"),"q".includes(s.letter)?a.push("extra-wide"):"zxmæ".includes(s.letter)&&a.push("wide"),(t||s.draggable)&&(a.push(i?"freshtile":"racktile"),t&&"exchange"===e.showingDialog&&(s.xchg&&a.push("xchgsel"),l.onclick=e=>{s.xchg=!s.xchg,e.preventDefault()})),s.freshtile&&a.push("freshtile"),s.index){const e=150,t=(s.index*e).toString()+"ms";l.style=`animation-delay: ${t}`}return n===e.selectedSq&&a.push("sel"),void 0!==s.highlight&&a.push("highlight"+s.highlight),null!==e.showingDialog||e.over||s.draggable&&(l.onmousedown=r,l.ontouchstart=r),pe(a.join("."),l,[" "===s.letter?$e():s.letter,pe(".letterscore",s.score)])}}},ug={view:e=>{const{game:t}=e.attrs;return t.congratulate?pe("div",{id:"congrats"},[Ve("bookmark")," ",Pe("strong","Til hamingju með sigurinn!")]):t.over?pe("div",{id:"gameover"},[Ve("info-sign")," ",Pe("strong","Viðureigninni er lokið")]):void 0}},pg={view:e=>{const{game:t}=e.attrs,n=t.currentError||"";if(n&&n in Ne){const e=t.currentMessage||"",i=Ee(Ne[n]),o=i.indexOf("{word}");let r;return r=o>=0?[i.slice(0,o),pe("span.errword",e),i.slice(o+6)]:[i],pe(".error",{style:{visibility:"visible"},onclick:e=>{t.resetError(),e.preventDefault()}},[Ve("exclamation-sign"),...r])}}},gg=e=>{const t=e.attrs.view,n=t.model;return{view:()=>{const e=n.game;let i=[];return e&&(i=[pe(bg,{view:t,review:!1}),pe(wg,{view:t,review:!1}),pe(cg,{view:t}),pe(pg,{game:e}),pe(ug,{game:e})],i=i.concat(t.vwDialogs())),pe(".board-area",i)}}},fg=e=>{const t=e.attrs.view,n=t.model;return{view:e=>{const i=e.attrs.coord,o=n.game;if(o)return pe("td.not-target",{id:"sq_"+i,class:o.squareClass(i)},pe(hg,{view:t,coord:i,opponent:!1}))}}},mg=e=>{const t=e.attrs.view.model;return{view:e=>{const n=t.game;if(!n)return;const i=e.attrs.coord;let o=n.squareClass(i)||"";return o&&(o="."+o),e.attrs.opponent&&(o+=".opp"),pe("td"+o,{id:"sq_"+i},e.children)}}},vg=e=>{const t=e.attrs.view,n=t.model;return{view:e=>{const i=n.game;if(!i)return;const o=e.attrs.coord;let r=i.squareClass(o)||"";return r&&(r="."+r),null!==i.askingForBlank&&i.askingForBlank.to==o&&(r+=".blinking"),o==i.startSquare&&i.localturn&&(r+=".center"),pe("td.drop-target"+r,{id:"sq_"+o,onclick:e=>{if(null!==i.selectedSq)return e.stopPropagation(),i.attemptMove(i.selectedSq,o),i.selectedSq=null,e.currentTarget.classList.remove("sel"),t.updateScale(),!1},onmouseover:e=>{null!==i.selectedSq&&e.currentTarget.classList.add("sel")},onmouseout:e=>{e.currentTarget.classList.remove("sel")}},e.children)}}},bg=e=>{const{view:t,review:n}=e.attrs,i=t.model;function o(e){let o=[];const r=i.game;o.push(pe("td.rowid",{key:"R"+e},e));for(let i=1;i<=15;i++){const s=e+i.toString();r&&s in r.tiles?o.push(pe(fg,{view:t,key:s,coord:s,opponent:!1})):n?o.push(pe(mg,{view:t,key:s,coord:s,opponent:!1})):o.push(pe(vg,{view:t,key:s,coord:s}))}return pe("tr",o)}function r(){let e=[];e.push(function(){let e=[];e.push(pe("td"));for(let t=1;t<=15;t++)e.push(pe("td",t.toString()));return pe("tr.colid",e)}());for(const t of"ABCDEFGHIJKLMNO")e.push(o(t));return e}function s(){t.boardScale=1.5}function a(){1!=t.boardScale&&(t.boardScale=1,setTimeout(t.resetScale))}return{view:e=>{const n=t.boardScale||1;let i={};return Fe(i,s,a),1!=n&&(i.style=`transform: scale(${n})`),pe(".board",{id:"board-parent"},pe("table.board",i,pe("tbody",r())))}}},wg=e=>{const{view:t,review:n}=e.attrs,i=t.model;return{view:()=>{var e;const o=i.game;if(!o)return;let r=[];const s=null!==(e=i.reviewMove)&&void 0!==e?e:0,a=n&&s>0&&s%2===o.player;for(let e=1;e<=7;e++){const i="R"+e.toString();o&&i in o.tiles?n?r.push(pe(mg,{view:t,coord:i,opponent:a},pe(hg,{view:t,coord:i,opponent:a}))):r.push(pe(vg,{view:t,coord:i},pe(hg,{view:t,coord:i,opponent:!1}))):n?r.push(pe(mg,{view:t,coord:i,opponent:!1})):r.push(pe(vg,{view:t,coord:i}))}return pe(".rack-row",[pe(".rack-left",pe(lg,{view:t})),pe(".rack",pe("table.board",pe("tbody",pe("tr",r))))])}}},xg=e=>{const{view:t}=e.attrs,n=t.model;function i(e,i,o,r){var s;(null===(s=n.state)||void 0===s?void 0:s.uiFullscreen)&&(o===r?t.pushDialog("userprefs"):e.autoplayer[r]||t.showUserInfo(e.userid[r],e.nickname[r],e.fullname[r]),i.stopPropagation(),i.preventDefault())}return{view:e=>{const t=n.game;if(!t)return;const o=t.autoplayer[0],r=t.autoplayer[1],s=t.nickname[0],a=t.nickname[1],l=t.player,c=t.localturn,d=t.over;if("left"==e.attrs.side){if(o)return pe(".robot-btn.left",[Ve("cog"),$e(),s]);return pe(".player-btn.left"+(d||c!==(0===l)?"":".tomove"),{id:"player-0",onclick:e=>i(t,e,l,0)},[pe("span.left-to-move"),s])}if(r)return pe(".robot-btn.right",[Ve("cog"),$e(),a]);return pe(".player-btn.right"+(d||c!==(1===l)?"":".tomove"),{id:"player-1",onclick:e=>i(t,e,l,1)},[pe("span.right-to-move"),a])}}},yg=e=>{const t=e.attrs.view.model;let n=0;return{view:()=>{if(!t.game)return;const e=t.game,i=e.twoLetterWords()[n],o=[];for(const e of i){const t=e[1],i=[];for(let e=0;e<t.length;e++)i.push((r=0==e,s=t[e],pe(".twoletter-word",r?0==n?[pe("b",s[0]),s[1]]:[s[0],pe("b",s[1])]:s)));o.push(pe(".twoletter-group",i))}var r,s;return pe(".twoletter",{onclick:()=>{n=1-n},style:"z-index: 6"},pe(".twoletter-area"+(e.showClock()?".with-clock":""),{title:Ee(0==n?"Smelltu til að raða eftir seinni staf":"Smelltu til að raða eftir fyrri staf")},o))}}},_g=[{icon:":-)",image:"/static/icontexto_emoticons_03.png"},{icon:":-D",image:"/static/icontexto_emoticons_02.png"},{icon:";-)",image:"/static/icontexto_emoticons_04.png"},{icon:":-(",image:"/static/icontexto_emoticons_12.png"},{icon:":-o",image:"/static/icontexto_emoticons_10.png"},{icon:":-O",image:"/static/icontexto_emoticons_10.png"},{icon:":-p",image:"/static/icontexto_emoticons_14.png"},{icon:":-P",image:"/static/icontexto_emoticons_14.png"},{icon:"B-)",image:"/static/icontexto_emoticons_16.png"},{icon:":)",image:"/static/icontexto_emoticons_03.png"},{icon:":D",image:"/static/icontexto_emoticons_02.png"},{icon:";)",image:"/static/icontexto_emoticons_04.png"},{icon:":(",image:"/static/icontexto_emoticons_12.png"},{icon:":o",image:"/static/icontexto_emoticons_10.png"},{icon:":O",image:"/static/icontexto_emoticons_10.png"},{icon:":p",image:"/static/icontexto_emoticons_14.png"},{icon:":P",image:"/static/icontexto_emoticons_14.png"},{icon:"(y)",image:"/static/thumb-up.png"}],kg=e=>{const{view:t}=e.attrs,n=t.model,i=n.game;function o(e){var t=function(e){return{year:parseInt(e.slice(0,4)),month:parseInt(e.slice(5,7)),day:parseInt(e.slice(8,10)),hour:parseInt(e.slice(11,13)),minute:parseInt(e.slice(14,16)),second:parseInt(e.slice(17,19))}}(e);return Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second)}n.state;let r=null;function s(e,t){let n=o(e),i=null;if(null===r||(s=r,a=n,Math.round((a-s)/1e3)>=300)){const o=864e5,r=(new Date).getTime();let s,a=r-r%o;s=n<a-o?e.slice(0,-3):n<a?"Í gær "+e.slice(11,16):e.slice(11,16),i=pe(".chat-ts",{key:t},s)}var s,a;return r=n,i}const a=i?i.player:null;function l(e){for(const t of _g)if(e.indexOf(t.icon)>=0){const n=`<img src='${ve(t.image)}' height='32' width='32'>`;e=e.split(t.icon).join(n)}return e}function c(){var e,t;let o=[];if((null==i?void 0:i.chatLoading)||!(null==i?void 0:i.messages))return o;var r=0;const c=null!==(t=null===(e=n.state)||void 0===e?void 0:e.userId)&&void 0!==t?t:"";for(const e of i.messages){let t=null!=a?a:0;e.from_userid!=c&&(t=1-t);const n=s(e.ts,r);null!==n&&(o.push(n),r++);let i=We(e.msg);i=l(i),o.push(pe(".chat-msg"+(0===t?".left":".right")+(t===a?".local":".remote"),{key:r++},pe.trust(i)))}return o}function d(){const e=document.querySelectorAll("#chat-area .chat-msg");if(!e.length)return;const t=e[e.length-1];t.parentNode.scrollTop=t.offsetTop}function h(e){t.isDialogShown()||e.dom.focus()}function u(){let e=Ge("msg").trim();i&&e.length>0&&(i.sendMessage(e),function(e,t){document.getElementById(e).value=t}("msg",""))}const p=(null==i?void 0:i.messages)?i.messages.length:0;return{view:()=>pe(".chat",{style:"z-index: 6"},[pe(".chat-area"+((null==i?void 0:i.showClock())?".with-clock":""),{id:"chat-area",oncreate:d,onupdate:d},c()),pe(".chat-input",[pe("input.chat-txt",{type:"text",id:"msg",name:"msg",maxlength:254,disabled:p>=250,oncreate:e=>{h(e)},onupdate:e=>{h(e)},onkeypress:e=>{"Enter"==e.key&&(u(),e.preventDefault())}}),pe(bp,{id:"chat-send",title:Ee("Senda"),onclick:e=>{u(),e.preventDefault()}},Ve("chat"))])])}},Cg=e=>{const{view:t}=e.attrs,n=t.model,i=n.game,o=n.state;function r(e,t,n,o){const r=Xe(e);let s=r.col,a=r.row;for(const e of t){if("?"==e)continue;const t=Qe(a,s);t&&i.tiles.hasOwnProperty(t)&&(i.tiles[t].highlight=o?n:void 0),s+=r.dx,a+=r.dy}}function s(e,n){const{leftTotal:s,rightTotal:a,player:l}=n;let{co:c,tiles:d}=n,h=n.score,u="wordmove",p=c,g=0;if(""===c)if(u="othermove","PASS"==d)d=" "+Ee("Pass")+" ",h="";else if(0===d.indexOf("EXCH")){let e=d.slice(5).length;const t=Ee(1==e?"letter":"letters");d=" "+Ee("exchanged",{numtiles:e.toString(),letters:t})+" ",h=""}else"RSGN"==d?d=" "+Ee("Gaf viðureign")+" ":"CHALL"==d?(d=" "+Ee("Véfengdi lögn")+" ",h=""):"RESP"==d?h<0?(d=" "+Ee("Óleyfileg lögn")+" ",g=-1):d=" "+Ee("Röng véfenging")+" ":"TIME"==d?d=" "+Ee("Umframtími")+" ":"OVER"==d?(d=Ee("Viðureign lokið"),u="gameover"):u="wordmove";else c="("+c+")",d=d.split("?").join(""),g=1;if("gameover"==u)return function(e){return pe(".move.gameover",[pe("span.gameovermsg",e),pe("span.statsbutton",{onclick:e=>{e.preventDefault(),o.hasPaid?(pe.route.set("/review/"+i.uuid),null!=i&&Ju("game_review",{locale:i.locale,uuid:i.uuid})):(Ju("click_review",{userid:o.userId,locale:o.locale}),t.showFriendPromo())}},Se("Skoða yfirlit"))])}(d);let f,m=g>0&&!i.manual?Ee("Smelltu til að fletta upp"):"",v=0,b=i.player;l===b||null===b&&0===l?f="humangrad"+(0===l?"_left":"_right"):(f="autoplayergrad"+(0===l?"_left":"_right"),v=1);const w={};return o.uiFullscreen&&g>0&&(i.manual||"is_IS"==i.locale&&(w.onclick=()=>{window.open("https://malid.is/leit/"+d,"malid")},w.title=m),w.onmouseout=()=>{e[2]=!1,r(p,d,v,!1)},w.onmouseover=()=>{e[2]=!0,r(p,d,v,!0)}),0===l?pe(".move.leftmove."+f,w,[pe("span.total"+(l==b?".human":".autoplayer"),s),pe("span.score"+(e[2]?".highlight":""),h),pe("span."+u,[pe("i",d),$e(),c])]):pe(".move.rightmove."+f,w,[pe("span."+u,[c,$e(),pe("i",d)]),pe("span.score"+(e[2]?".highlight":""),h),pe("span.total"+(l==b?".human":".autoplayer"),a)])}return{view:e=>{const{move:t,info:n}=e.attrs;return s(t,n)}}},Ig=e=>{const t=e.attrs.view,n=t.model,i=n.game,o=n.state;function r(){let e=i?i.moves:[],n=[],o=0,r=0;for(let i=0;i<e.length;i++){let s=e[i],[a,[l,c,d]]=s;0===a?o=Math.max(o+d,0):r=Math.max(r+d,0);const h=pe(Cg,{view:t,move:s,info:{key:i.toString(),leftTotal:o,rightTotal:r,player:a,co:l,tiles:c,score:d}});n.push(h)}return n}const s=i?i.bag:"",a=!i||i.newbag;return{view:()=>pe(".movelist-container",[pe(".movelist",{onupdate:()=>{setTimeout(Je)}},r()),(null==o?void 0:o.uiFullscreen)?"":pe(ig,{bag:s,newbag:a})])}},Tg=e=>{const t=e.attrs.view.model;return{view:()=>pe(".games",{style:"z-index: 6"},function(){let e=[];if(t.loadingGameList)return e;let n=t.gameList;if(void 0===n)return e;if(null===n)return t.loadGameList(),e;const i=t.game,o=i?i.uuid:"";for(let t of n){if(t.uuid==o)continue;if(!t.my_turn&&!t.zombie)continue;let n;n=null===t.oppid?[Ve("cog"),$e(),t.opp]:[t.opp];let i=t.sc0<t.sc1?".losing":"",r="Staðan er "+t.sc0+":"+t.sc1;e.push(pe(".games-item"+(t.timed?".game-timed":""),{key:t.uuid,title:r},pe(pe.route.Link,{href:Ye(t.url)},[pe(".at-top-left",pe(".tilecount",pe(".oc",n))),pe(".at-top-left",pe(".tilecount.trans",pe(".tc"+i,{style:{width:t.tile_count.toString()+"%"}},n)))])))}return e}())}},Sg=e=>{const t=e.attrs.game;return{view:e=>{const{tabid:n,title:i,icon:o,alert:r,funcSel:s}=e.attrs,a=(null==t?void 0:t.sel)||"movelist";return pe(".right-tab"+(a===n?".selected":""),{id:"tab-"+n,className:r?"alert":"",title:i,onclick:e=>{t&&null===t.showingDialog&&t.setSelectedTab(n)&&(s&&s(),"movelist"===n&&setTimeout(Je)),e.preventDefault()}},Ve(o))}}},Eg=()=>({view:e=>{const t=e.attrs.game;let n=!(t.autoplayer[0]||t.autoplayer[1]);const i=[pe(Sg,{game:t,tabid:"board",title:Ee("Borðið"),icon:"grid"}),pe(Sg,{game:t,tabid:"movelist",title:Ee("Leikir"),icon:"show-lines"}),pe(Sg,{game:t,tabid:"twoletter",title:Ee("Tveggja stafa orð"),icon:"life-preserver"}),pe(Sg,{game:t,tabid:"games",title:Ee("Viðureignir"),icon:"flag"})];return n&&i.push(pe(Sg,{game:t,tabid:"chat",title:Ee("Spjall"),icon:"conversation",funcSel:()=>{t.markChatShown()&&pe.redraw()},alert:!t.chatSeen&&"chat"!=t.sel})),pe.fragment({},i)}}),Pg=e=>{const t=e.attrs.view,n=t.model.game;function i(){if(!n||!n.showClock())return pe.fragment({},[]);function e(e,t,n,i){return pe("h3."+e+(n?".running-out":"")+(i?".blink":""),t)}return pe.fragment({},[e("clockleft",n.clockText0,n.runningOut0,n.blinking0),e("clockright",n.clockText1,n.runningOut1,n.blinking1),pe(".clockface",Ve("time"))])}function o(){const e=!!n&&n.fairplay,o=n?n.player:null,r=n?n.displayScore(0).toString():"",s=n?n.displayScore(1).toString():"";return pe(".heading",[pe(".logowrapper",pe(".header-logo",pe(pe.route.Link,{href:"/page",class:"backlink"},pe(fp)))),pe(".playerwrapper",[pe(".leftplayer"+(1===o?".autoplayercolor":".humancolor"),[pe(".player",pe(xg,{view:t,side:"left"})),pe(".scorewrapper",pe(".scoreleft",r))]),pe(".rightplayer"+(1===o?".humancolor":".autoplayercolor"),[pe(".player",pe(xg,{view:t,side:"right"})),pe(".scorewrapper",pe(".scoreright",s))]),pe(".fairplay",{style:{visibility:e?"visible":"hidden"}},pe("span.fairplay-btn.large",{title:Ee("Skraflað án hjálpartækja")}))]),i()])}function r(){if(!n)return;let e;switch(n.sel||"movelist"){case"movelist":e=pe(Ig,{view:t});break;case"twoletter":e=pe(yg,{view:t});break;case"chat":e=pe(kg,{view:t});break;case"games":e=pe(Tg,{view:t})}const i=pe(Eg,{game:n});return pe(".right-area"+((null==n?void 0:n.showClock())?".with-clock":""),e?[i,e]:[i])}return{view:()=>pe(".rightcol",[o(),r()])}},Lg=e=>{const t=e.attrs.view.model,n=t.state;return{view:()=>pe(".board-help",{title:Ee("Hvernig reitirnir margfalda stigin")},[pe(".board-help-close",{title:Ee("Loka þessari hjálp"),onclick:e=>{n&&(n.beginner=!1,t.setUserPref({beginner:!1})),e.preventDefault()}},Ve("remove")),pe(".board-colors",[pe(".board-color[id='triple-word']",["3 x",pe("br"),Se("orð")]),pe(".board-color[id='double-word']",["2 x",pe("br"),Se("orð")]),pe(".board-color[id='triple-letter']",["3 x",pe("br"),Se("stafur")]),pe(".board-color[id='double-letter']",["2 x",pe("br"),Se("stafur")]),pe(".board-color[id='single-letter']",["1 x",pe("br"),Se("stafur")])])])}},Rg=()=>({view:e=>{const t=e.attrs.view,n=t.model,i=n.game;if(!i)return pe("div",[pe(".game-container"),pe(Ip)]);const o=i.bag,r=i.newbag,s=n.state;return pe("div.drop-target",{id:"board-background"},[pe(".game-container",[pe(Pg,{view:t}),pe(gg,{view:t}),(null==s?void 0:s.uiFullscreen)?pe(ig,{bag:o,newbag:r}):"",i.askingForBlank?pe(ng,{view:t}):""]),pe(Ip),(null==s?void 0:s.beginner)?pe(Lg,{view:t}):"",pe(Cp)])}}),Ng=(e,t,n)=>{const i=e.model.game;function o(e,n,i){let o,r="wordmove";if(e.length>0)o=[pe("i",n.split("?").join(""))," ("+e+")"];else if(r="othermove","PASS"==n)o=Ee("Pass");else if(0===n.indexOf("EXCH")){let e=n.slice(5).length;const t=Ee(1==e?"letter":"letters");o=Ee("exchanged",{numtiles:e.toString(),letters:t})}else"RSGN"==n?o=Ee("Gaf viðureign"):"CHALL"==n?o=Ee("Véfengdi lögn"):"RESP"==n?o=Ee(i<0?"Óleyfileg lögn":"Röng véfenging"):"TIME"==n?o=Ee("Umframtími"):"OVER"==n?(o=Ee("Viðureign lokið"),r="gameover"):(r="othermove",o="--"==n?Ee("Stafaleif: (engin)"):[Ee("Stafaleif: "),pe("i.upper",n)]);return pe(".reviewhdr",[pe("span.movenumber","#"+t),pe("span",{class:r},o)])}return pe(".movelist-container",[pe(".movelist.bestmoves",function(){let r=[];if(!i||!t||t>i.moves.length)return r;const s=i.moves[t-1],[a,l,c]=s[1];r.push(o(a,l,c));const d=n;for(let n=0;n<d.length;n++){const[i,[o,s,a]]=d[n],l=Dg(e,t,n,d[n],{player:i,co:o,tiles:s,score:a});l&&r.push(l)}return r}())])},Dg=(e,t,n,i,o)=>{const r=e.model;if(!r.game)return;const s=r.game,{player:a,co:l,tiles:c,score:d}=o;function h(e,i,o,l){const c=Xe(e);let d=c.col,h=c.row,u=!1;l&&(r.highlightedMove=n,s.placeTiles(t-1,!0));for(let e of i){if("?"===e){u=!0;continue}const t=Qe(h,d);if(null===t)continue;const n=e;u&&(e="?");const i=s.tilescore(e);l&&(t in s.tiles?s.tiles[t].highlight=o:s.tiles[t]={player:a,tile:e,letter:n,score:i,draggable:!1,freshtile:!1,index:0,xchg:!1,review:!0,highlight:o}),d+=c.dx,h+=c.dy,u=!1}l||(r.highlightedMove=null,null!==r.reviewMove&&s.placeTiles(r.reviewMove))}const u="("+l+")",p=c.split("?").join("");let g=0;const f=s.player;let m;a===f||null===f&&0===a?m="humangrad"+(0===a?"_left":"_right"):(m="autoplayergrad"+(0===a?"_left":"_right"),g=1);const v={title:"Smelltu til að fletta upp"};return"is_IS"===s.locale&&(v.onclick=()=>{window.open("https://malid.is/leit/"+p,"malid")}),v.onmouseover=()=>{i[2]=!0,h(l,c,g,!0)},v.onmouseout=()=>{i[2]=!1,h(l,c,g,!1)},0===a?pe(".move.leftmove."+m,v,[pe("span.score"+(i[2]?".highlight":""),d),pe("span.wordmove",[pe("i",p),$e(),u])]):pe(".move.rightmove."+m,v,[pe("span.wordmove",[u,$e(),pe("i",p)]),pe("span.score"+(i[2]?".highlight":""),d)])},Ag=e=>{if(null===e.model.game)return;const t=e.model.game;function n(e,n,i){let o=i;return void 0===o&&t.stats&&(o=t.stats[e]),void 0===o?"":("number"==typeof o&&(o=void 0!==n&&n>0?o.toFixed(n).replace(".",","):o.toString()),o)}let i,o;return null===t.stats&&t.loadStats(),1===t.player?(o="humancolor",i="autoplayercolor"):(i="humancolor",o="autoplayercolor"),pe(".gamestats",{style:{visibility:"visible"}},[pe("div",{style:{position:"relative",width:"100%"}},[pe(".player",{class:i,style:{width:"50%"}},pe(".robot-btn.left",t.autoplayer[0]?[Ve("cog"),$e(),t.nickname[0]]:t.nickname[0])),pe(".player",{class:o,style:{width:"50%","text-align":"right"}},pe(".robot-btn.right",t.autoplayer[1]?[Ve("cog"),$e(),t.nickname[1]]:t.nickname[1]))]),pe("div",{id:"gamestarted"},[pe("p",["Viðureignin hófst ",pe("span",n("gamestart")),pe("br"),"og henni lauk ",pe("span",n("gameend"))]),t.manual?pe("p","Leikið var í keppnisham"):""]),pe(".statscol",{style:{clear:"left"}},[pe("p",["Fjöldi leikja: ",pe("span",n("moves0"))]),pe("p",["Fjöldi bingóa: ",pe("span",n("bingoes0"))," (bónus ",pe("span",n("bingopoints0",0,t.stats?50*t.stats.bingoes0:0))," stig)"]),pe("p",["Stafir lagðir niður: ",pe("span",n("tiles0"))," (þar af ",pe("span",n("blanks0"))," auðir)"]),pe("p",["Meðalstig stafa (án auðra): ",pe("span",n("average0",2))]),pe("p",["Samanlögð stafastig: ",pe("span",n("letterscore0"))]),pe("p",["Margföldun stafastiga: ",pe("span",n("multiple0",2))]),pe("p",["Stig án stafaleifar í lok: ",pe("span",n("cleantotal0"))]),pe("p",["Meðalstig hvers leiks: ",pe("span",n("avgmove0",2))]),t.manual?pe("p",["Rangar véfengingar andstæðings x 10: ",pe("span",n("wrongchall0"))]):"",pe("p",["Stafaleif og frádráttur í lok: ",pe("span",n("remaining0"))]),pe("p",["Umframtími: ",pe("span",n("overtime0"))]),pe("p",["Stig: ",pe("span",n("total0",0,t.stats?t.stats.scores[0]:0))," (",pe("span",n("ratio0",1)),"%)"])]),pe(".statscol",[pe("p",["Fjöldi leikja: ",pe("span",n("moves1"))]),pe("p",["Fjöldi bingóa: ",pe("span",n("bingoes1"))," (bónus ",pe("span",n("bingopoints0",0,t.stats?50*t.stats.bingoes1:0))," stig)"]),pe("p",["Stafir lagðir niður: ",pe("span",n("tiles1"))," (þar af ",pe("span",n("blanks1"))," auðir)"]),pe("p",["Meðalstig stafa (án auðra): ",pe("span",n("average1",2))]),pe("p",["Samanlögð stafastig: ",pe("span",n("letterscore1"))]),pe("p",["Margföldun stafastiga: ",pe("span",n("multiple1",2))]),pe("p",["Stig án stafaleifar í lok: ",pe("span",n("cleantotal1"))]),pe("p",["Meðalstig hvers leiks: ",pe("span",n("avgmove1",2))]),t.manual?pe("p",["Rangar véfengingar andstæðings x 10: ",pe("span",n("wrongchall1"))]):"",pe("p",["Stafaleif og frádráttur í lok: ",pe("span",n("remaining1"))]),pe("p",["Umframtími: ",pe("span",n("overtime1"))]),pe("p",["Stig: ",pe("span",n("total1",0,t.stats?t.stats.scores[1]:0))," (",pe("span",n("ratio1",1)),"%)"])]),pe(".closebtn",{id:"review-close",onclick:e=>{setTimeout((()=>{pe.route.set("/review/"+t.uuid,{move:1})})),e.preventDefault()},onmouseover:qe,onmouseout:Be},[Ve("play")," Rekja"])])},Og=(e,t)=>{var n,i;const o=e.model,r=o.game,s=null!==(n=null==r?void 0:r.moves.length)&&void 0!==n?n:0;let a=[];if(!(null!==(i=null==r?void 0:r.uuid)&&void 0!==i?i:""))return a;if(a.push(og("navbtn",!t,(()=>{o.loadBestMoves(t?t-1:0)}),"Sjá fyrri leik",pe("span",{id:"nav-prev-visible"},[Ve("chevron-left")," Fyrri"]),"navprev")),a.push(og("navbtn",!t||t>=s,(()=>{o.loadBestMoves(t+1)}),"Sjá næsta leik",pe("span",{id:"nav-next-visible"},["Næsti ",Ve("chevron-right")]),"navnext")),null!==o.highlightedMove){const n=((e,t)=>{const n=e.model,i=n.game;if(!i)return;let o=[".scorediff"];const r=t?i.moves[t-1]:void 0;let s=r?r[1][2]:void 0,a="";if(void 0===s||null===n.bestMoves||null===n.highlightedMove);else{const e=n.bestMoves[n.highlightedMove][1][2];a=(s-e).toString(),"-"!=a[0]&&"0"!=a[0]&&(a="+"+a),s>=e&&o.push("posdiff")}return pe(o.join("."),{style:{visibility:"visible"}},a)})(e,t);void 0!==n&&a.push(n)}const l=((e,t)=>{var n;const i=e.model.game;if(!i)return;const o=t?i.moves[t-1]:void 0;if(void 0===o)return;const[r,[s,a,l]]=o;if(void 0===l||""===s&&"OVER"===a)return;let c=[".score"];return t>0&&(t%2===(null!==(n=i.player)&&void 0!==n?n:0)?c.push("opponent"):c.push("localplayer")),pe(c.join("."),l.toString())})(e,t);return void 0!==l&&a.push(l),a},Mg=e=>{const t=e.attrs.view,n=t.model;return{view:e=>{let i=[];if(n.game){i=[pe(bg,{view:t,review:!0}),pe(wg,{view:t,review:!0})];const n=e.attrs.moveIndex;null!==n&&(i=i.concat(Og(t,n)))}return pe(".board-area",i)}}};async function Fg(e,t){if(!t)return console.error("No container element found"),"error";((e,t,n)=>{const i=e=>(e.length>0&&"/"===e[e.length-1]&&(e=e.slice(0,-1)),e);e&&(ge=i(e)),t&&(fe=i(t)),n&&(me=n)})(e.serverUrl,e.movesUrl,e.movesAccessKey),function(e){const t=document.styleSheets;for(const n of t)for(const t of n.cssRules)t instanceof CSSFontFaceRule&&t.style.getPropertyValue("src").includes("glyphicons-")&&t.style.setProperty("src",`\n url('${e}/static/glyphicons-regular.eot') format('embedded-opentype'),\n url('${e}/static/glyphicons-regular.woff') format('woff'),\n url('${e}/static/glyphicons-regular.ttf') format('truetype')\n `)}(e.serverUrl);try{const n=await(async(e,t,n,i)=>be({method:"POST",url:"/login_malstadur",body:{email:e,nickname:t,fullname:n,token:i}}))(e.userEmail,e.userNick,e.userFullname,e.token);if("expired"===n.status)return"expired";if("success"===n.status){e.userId=n.user_id,await Gu(e,n.firebase_token);const i=function(){const e=[{name:"main",route:"/main",mustLogin:!0},{name:"help",route:"/help",mustLogin:!1},{name:"thanks",route:"/thanks",mustLogin:!0},{name:"cancel",route:"/cancel",mustLogin:!0},{name:"confirm",route:"/confirm",mustLogin:!0},{name:"game",route:"/game/:uuid",mustLogin:!0},{name:"review",route:"/review/:uuid",mustLogin:!0},{name:"login",route:"/login",mustLogin:!1},{name:"loginerror",route:"/loginerror",mustLogin:!1}];return{paths:e,defaultRoute:e[0].route}}(),o=new sp(i,e),r=new zg(o),s=function(e){let t=e.model,n=e.view;return t.paths.reduce(((t,i)=>(t[i.route]={onmatch:t=>{n.popAllDialogs(),e.onNavigateTo(i.name,t)},render:()=>n.appView(i.name)},t)),{})}(new ap(o,r));return pe.route(t,i.defaultRoute,s),"success"}}catch(e){console.error("Exception during login: ",e)}return pe.mount(t,Up),"error"}class zg{constructor(e){this.dialogStack=[],this.boardScale=1,this.model=e,window.setInterval(this.blinker,500)}appView(e){const t=this.model;let n=[];switch(e){case"login":n.push(this.vwLogin());break;case"loginerror":n.push(pe(Up));break;case"main":n.push(pe(Zp,{view:this}));break;case"game":n.push(pe(Rg,{view:this}));break;case"review":const e=(e=>{var t;const n=e.model;if(!n.game)return;const i=n.game;let o=null!==(t=n.reviewMove)&&void 0!==t?t:0,r=n.bestMoves||[],s=[];if(i&&(s.push(pe(".rightcol",[function(){const t=i.fairplay,n=i.player;let r="",s="";if(o){let e=0,t=0;for(let n=0;n<o;n++){let o=i.moves[n];n%2==0?e+=o[1][2]:t+=o[1][2]}r=e.toString(),s=t.toString()}return pe(".heading",[pe(".logowrapper",pe(".header-logo",pe(pe.route.Link,{href:"/page",class:"backlink"},pe(fp)))),pe(".playerwrapper",[pe(".leftplayer"+(1===n?".autoplayercolor":".humancolor"),[pe(".player",pe(xg,{view:e,side:"left"})),pe(".scorewrapper",pe(".scoreleft",r))]),pe(".rightplayer"+(1===n?".humancolor":".autoplayercolor"),[pe(".player",pe(xg,{view:e,side:"right"})),pe(".scorewrapper",pe(".scoreright",s))]),pe(".fairplay",{style:{visibility:t?"visible":"hidden"}},pe("span.fairplay-btn.large",{title:Ee("Skraflað án hjálpartækja")}))])])}(),pe(".right-area",Ng(e,o,r))])),s.push(pe(Mg,{view:e,moveIndex:o})),null!==n.reviewMove&&0===o)){const t=Ag(e);t&&s.push(t)}return pe("div",[pe(".game-container",s),pe(Ip),pe(Cp)])})(this);e&&n.push(e);break;case"thanks":n.push(pe(Zp,{view:this})),this.dialogStack.length||this.showThanks();break;case"help":n.push(this.vwHelp(parseInt(pe.route.param("tab")||""),parseInt(pe.route.param("faq")||"")));break;default:return[pe("div",Se("Þessi vefslóð er ekki rétt"))]}for(const e of this.dialogStack){const t=zg.dialogViews[e.name];if(void 0===t)console.error("Unknown dialog name: "+e.name);else{const i=t(this,e.args);i&&n.push(i)}}return t.spinners&&n.push(pe(mp)),n}pushDialog(e,t){this.dialogStack.push({name:e,args:t}),pe.redraw()}popDialog(){this.dialogStack.length>0&&(this.dialogStack.pop(),pe.redraw())}popAllDialogs(){this.dialogStack.length>0&&(this.dialogStack=[],pe.redraw())}isDialogShown(){return this.dialogStack.length>0}startSpinner(){this.model.spinners++}stopSpinner(){this.model.spinners&&this.model.spinners--}async cancelFriendship(){let e=!0;try{this.startSpinner(),await this.model.cancelFriendship()&&(this.stopSpinner(),e=!1,this.pushDialog("confirm",{}))}catch(e){}finally{e&&this.stopSpinner()}}notifyMediaChange(){var e,t;const n=this.model;n.game&&((null===(e=n.state)||void 0===e?void 0:e.uiFullscreen)||(null===(t=n.state)||void 0===t?void 0:t.uiLandscape)?n.game.setSelectedTab("movelist")&&setTimeout(Je):n.game.setSelectedTab("board")),this.popAllDialogs()}notifyChatMessage(){pe.redraw()}resetScale(){this.boardScale=1;const e=document.getElementById("board-parent"),t=null==e?void 0:e.children[0];t&&t.setAttribute("style","transform: scale(1.0)"),e&&e.scrollTo(0,0)}updateScale(){var e;const t=this.model,n=t.game;if(!n||(null===(e=t.state)||void 0===e?void 0:e.uiFullscreen)||n.moveInProgress)return this.boardScale=1,void setTimeout(this.resetScale);const i=n.tilesPlaced(),o=i.length;1===o&&1===this.boardScale?(this.boardScale=1.5,setTimeout((()=>function(e){const t=Xe(e),n=Qe(Math.max(0,t.row-3),Math.max(0,t.col-3)),i=document.getElementById("board-parent"),o=null==i?void 0:i.children[0];o&&o.setAttribute("style","transform: scale(1.5)");const r=document.getElementById("sq_"+n),s=null==r?void 0:r.getBoundingClientRect(),a=null==i?void 0:i.getBoundingClientRect();i&&s&&a&&i.scrollTo({left:s.left-a.left,top:s.top-a.top,behavior:"smooth"})}(i[0])))):0===o&&this.boardScale>1&&(this.boardScale=1,setTimeout((()=>this.resetScale())))}showUserInfo(e,t,n){this.pushDialog("userinfo",{userid:e,nick:t,fullname:n})}showFriendPromo(){this.pushDialog("friend",{})}showThanks(){this.pushDialog("thanks",{})}showFriendCancel(){this.pushDialog("cancel",{})}showAcceptDialog(e,t,n){this.pushDialog("accept",{oppId:e,oppNick:t,challengeKey:n})}vwDialogButton(e,t,n,i,o){return pe(bp,{id:e,onclick:n,title:t,tabindex:o},i)}blinker(){const e=document.getElementsByClassName("blinking");for(let t of e)t.classList.toggle("over")}vwTabsFromHtml(e,t,n,i){return e?pe("div",{oninit:e=>{e.state.selected=n||1},oncreate:e=>{Kp(this,t,i,!0,e)}},pe.trust(e)):""}vwHelp(e,t){const n=this.model;return pe.fragment({},[pe(Ip),pe(_p,{view:this}),this.vwTabsFromHtml(n.helpHTML||"","tabs",e,(function(e){var n;function i(t,n){var i;e.state.selected=1,null===(i=e.dom.querySelector(n))||void 0===i||i.scrollIntoView(),t.preventDefault()}const o=e.dom.querySelectorAll("a");for(const e of o){const t=e.getAttribute("href");t&&"#faq-"==t.slice(0,5)&&(e.onclick=e=>{i(e,t)})}void 0===t||isNaN(t)||(Jp(e,1),e.state.selected=1,null===(n=e.dom.querySelector("#faq-"+t.toString()))||void 0===n||n.scrollIntoView())}))])}vwUserPrefsDialog(){const e=this.model;if(!e.user)return;const t=e.user;if(!e.state)return;const n=e.state,i=e.userErrors||{},o=this;function r(e){return i.hasOwnProperty(e)?pe(".errinput",[Ve("arrow-up"),$e(),i[e]||""]):""}function s(e){var t;const n=null===(t=document.querySelector("#"+e+"-toggler #opt2"))||void 0===t?void 0:t.classList;return!!n&&n.contains("selected")}return pe(".modal-dialog",{id:"user-dialog",oncreate:function(e){e.dom.querySelector("#nickname").focus()}},pe(".ui-widget.ui-widget-content.ui-corner-all",{id:"user-form"},[pe(".loginhdr",[Ve("address-book")," "+Ee("player_info")]),pe("div",pe("form",{action:"",id:"frm1",method:"post",name:"frm1"},[pe(".dialog-spacer",[pe("span.caption",Se("Einkenni:")),pe(vp,{initialValue:t.nickname||"",class:"username",maxlength:15,id:"nickname"}),$e(),pe("span.asterisk","*")]),pe(".explain",Se("Verður að vera útfyllt")),r("nickname"),pe(".dialog-spacer",[pe("span.caption",Se("Fullt nafn:")),pe(vp,{initialValue:t.full_name||"",class:"fullname",maxlength:32,id:"full_name",autocomplete:"name"})]),pe(".explain",Se("Valfrjálst - sýnt í notendalistum Netskrafls")),r("full_name"),pe(".dialog-spacer",[pe("span.caption.sub",Se("Hljóðmerki:")),pe(Pp,{view:o,state:t.audio,tabindex:4}),pe("span.subcaption",Se("Lúðraþytur eftir sigur:")),pe(Lp,{view:o,state:t.fanfare,tabindex:5})]),pe(".explain",Se("explain_sound")),pe(".dialog-spacer",[pe("span.caption.sub",Se("Sýna reitagildi:")),pe(Rp,{view:o,state:t.beginner,tabindex:6}),Pe(".subexplain",["Stillir hvort ",Pe("strong","minnismiði")," um margföldunargildi reita er sýndur við borðið"])]),pe(".dialog-spacer",[pe("span.caption.sub",Se("Án hjálpartækja:")),pe(Np,{view:o,state:t.fairplay,tabindex:7}),Pe(".subexplain",["no_helpers",Pe("strong","án stafrænna hjálpartækja")," af nokkru tagi"])])])),this.vwDialogButton("user-ok",Ee("Vista"),(function(){t.nickname=Ge("nickname"),t.full_name=Ge("full_name"),t.audio=s("audio"),t.fanfare=s("fanfare"),t.beginner=s("beginner"),t.fairplay=s("fairplay"),e.saveUser((()=>{o.popDialog()}))}),Ve("ok"),8),this.vwDialogButton("user-cancel",Ee("Hætta við"),(e=>{this.popDialog(),e.preventDefault()}),Ve("remove"),9),t.friend?this.vwDialogButton("user-unfriend",Ee("Hætta sem vinur"),(e=>{e.preventDefault(),o.showFriendCancel()}),[Ve("coffee-cup"),$e(),$e(),Ee("Þú ert vinur Netskrafls!")],10):this.vwDialogButton("user-friend",Ee("Gerast vinur"),(e=>{e.preventDefault(),Ju("click_friend",{userid:n.userId,locale:n.locale}),o.showFriendPromo()}),[Ve("coffee-cup"),$e(),$e(),Ee("Gerast vinur Netskrafls")],11)]))}vwUserPrefs(){const e=this.model;return null!==e.user||e.userLoadError||e.loadUser(!0),e.user?this.vwUserPrefsDialog():pe.fragment({},[])}vwUserInfo(e){return pe(tg,{view:this,userid:e.userid,nick:e.nick,fullname:e.fullname})}vwPromo(e){return pe(eg,{view:this,kind:e.kind,initFunc:e.initFunc})}vwWait(e){return pe(Dp,{view:this,oppId:e.oppId,oppNick:e.oppNick,oppName:e.oppName,duration:e.duration,challengeKey:e.challengeKey})}vwAccept(e){return pe(Ap,{view:this,oppId:e.oppId,oppNick:e.oppNick,challengeKey:e.challengeKey})}vwLogin(){var e;const t=(null===(e=this.model.state)||void 0===e?void 0:e.loginUrl)||"";return pe(jp,{loginUrl:t})}vwDialogs(){const e=this.model.game;let t=[];return!e||null===e.showingDialog&&!e.last_chall||(e.last_chall&&t.push(pe(".chall-info",{style:{visibility:"visible"}},[Ve("info-sign"),$e(),Pe("span.pass-explain","opponent_emptied_rack")])),"resign"==e.showingDialog&&t.push(pe(".resign",{style:{visibility:"visible"}},[Ve("exclamation-sign"),$e(),Ee("Viltu gefa leikinn?"),$e(),pe("span.mobile-break",pe("br")),pe("span.yesnobutton",{onclick:()=>e.confirmResign(!0)},[Ve("ok"),Ee(" Já")]),pe("span.mobile-space"),pe("span.yesnobutton",{onclick:()=>e.confirmResign(!1)},[Ve("remove"),Ee(" Nei")])])),"pass"==e.showingDialog&&(e.last_chall?t.push(pe(".pass-last",{style:{visibility:"visible"}},[Ve("forward"),$e(),Ee("Segja pass?"),Pe("span.pass-explain","Viðureign lýkur þar með"),$e(),pe("span.mobile-break",pe("br")),pe("span.yesnobutton",{onclick:()=>e.confirmPass(!0)},[Ve("ok"),Ee(" Já")]),pe("span.mobile-space"),pe("span.yesnobutton",{onclick:()=>e.confirmPass(!1)},[Ve("remove"),Ee(" Nei")])])):t.push(pe(".pass",{style:{visibility:"visible"}},[Ve("forward"),$e(),Ee("Segja pass?"),Pe("span.pass-explain","2x3 pöss í röð ljúka viðureign"),$e(),pe("span.mobile-break",pe("br")),pe("span.yesnobutton",{onclick:()=>e.confirmPass(!0)},[Ve("ok"),Ee(" Já")]),pe("span.mobile-space"),pe("span.yesnobutton",{onclick:()=>e.confirmPass(!1)},[Ve("remove"),Ee(" Nei")])]))),"exchange"==e.showingDialog&&t.push(pe(".exchange",{style:{visibility:"visible"}},[Ve("refresh"),$e(),Ee("Smelltu á flísarnar sem þú vilt skipta"),$e(),pe("span.mobile-break",pe("br")),pe("span.yesnobutton",{title:Ee("Skipta"),onclick:()=>e.confirmExchange(!0)},Ve("ok")),pe("span.mobile-space"),pe("span.yesnobutton",{title:Ee("Hætta við"),onclick:()=>e.confirmExchange(!1)},Ve("remove"))])),"chall"==e.showingDialog&&t.push(pe(".chall",{style:{visibility:"visible"}},[Ve("ban-circle"),$e(),Ee("Véfengja lögn?"),Pe("span.pass-explain","Röng véfenging kostar 10 stig"),$e(),pe("span.mobile-break",pe("br")),pe("span.yesnobutton",{onclick:()=>e.confirmChallenge(!0)},[Ve("ok"),Ee(" Já")]),pe("span.mobile-space"),pe("span.yesnobutton",{onclick:()=>e.confirmChallenge(!1)},[Ve("remove"),Ee(" Nei")])]))),t}}function Ug(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}zg.dialogViews={userprefs:e=>e.vwUserPrefs(),userinfo:(e,t)=>e.vwUserInfo(t),challenge:(e,t)=>pe(qp,{view:e,item:t}),promo:(e,t)=>e.vwPromo(t),friend:e=>pe(Op,{view:e}),thanks:e=>pe(Mp,{view:e}),cancel:e=>pe(Fp,{view:e}),confirm:e=>pe(zp,{view:e}),wait:(e,t)=>e.vwWait(t),accept:(e,t)=>e.vwAccept(t)};Ug("\n@import url('https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap');\n");Ug('/*\n\n Glyphs.css\n\n Style support for Glyphicons\n\n Copyright © 2024 Miðeind ehf.\n Author: Vilhjalmur Thorsteinsson\n\n The Creative Commons Attribution-NonCommercial 4.0\n International Public License (CC-BY-NC 4.0) applies to this software.\n For further information, see https://github.com/mideind/Netskrafl\n\n*/\n\n@font-face {\n font-family: \'Glyphicons Regular\';\n /* The following source URLs are patched up at run-time\n to point to the backend server */\n src: url(\'../fonts/glyphicons-regular.eot\') format(\'embedded-opentype\'),\n url(\'../fonts/glyphicons-regular.woff\') format(\'woff\'),\n url(\'../fonts/glyphicons-regular.ttf\') format(\'truetype\');\n}\n\n.glyphicon {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: \'Glyphicons Regular\';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n}\n\n.glyphicon-play:before {\n content: "\\E174";\n}\n.glyphicon-exclamation-sign:before {\n content: "\\E197";\n}\n.glyphicon-log-in:before {\n content: "\\E387";\n}\n.glyphicon-log-out:before {\n content: "\\E388";\n}\n.glyphicon-screenshot:before {\n content: "\\E186";\n}\n.glyphicon-refresh:before {\n content: "\\E082";\n}\n.glyphicon-forward:before {\n content: "\\E177";\n}\n.glyphicon-fire:before {\n content: "\\E023";\n}\n.glyphicon-ok:before {\n content: "\\E207";\n}\n.glyphicon-remove:before {\n content: "\\E208";\n}\n.glyphicon-info-sign:before {\n content: "\\E196";\n}\n.glyphicon-cog:before {\n content: "\\E137";\n}\n.glyphicon-chevron-left:before {\n content: "\\E225";\n}\n.glyphicon-chevron-right:before {\n content: "\\E224";\n}\n.glyphicon-circle-arrow-down:before {\n content: "\\E220";\n}\n.glyphicon-download:before {\n content: "\\E201";\n}\n.glyphicon-star:before {\n content: "\\E050";\n}\n.glyphicon-flag:before {\n content: "\\E267";\n}\n.glyphicon-flag-after:after {\n content: "\\E267";\n}\n.glyphicon-bookmark:before {\n content: "\\E073";\n}\n.glyphicon-star-empty:before {\n content: "\\E049";\n}\n.glyphicon-hand-right:before {\n content: "\\E346";\n}\n.glyphicon-hand-left:before {\n content: "\\E347";\n}\n.glyphicon-thumbs-up:before {\n content: "\\E344";\n}\n.glyphicon-thumbs-down:before {\n content: "\\E345";\n}\n.glyphicon-remove-circle:before {\n content: "\\E198";\n}\n.glyphicon-th:before {\n content: "\\E157";\n}\n.glyphicon-user:before {\n content: "\\E004";\n}\n.glyphicon-comment:before {\n content: "\\E310";\n}\n.glyphicon-eye-open:before {\n content: "\\E052";\n}\n.glyphicon-paperclip:before {\n content: "\\E063";\n}\n.glyphicon-link:before {\n content: "\\E051";\n}\n.glyphicon-arrow-up:before {\n content: "\\E214";\n}\n.glyphicon-flash:before {\n content: "\\E242";\n}\n.glyphicon-time:before {\n content: "\\E055";\n}\n.glyphicon-volume-off:before {\n content: "\\E183";\n}\n.glyphicon-volume-up:before {\n content: "\\E185";\n}\n.glyphicon-hourglass:before {\n content: "\\231B";\n}\n.glyphicon-random:before {\n content: "\\E084";\n}\n.glyphicon-down-arrow:before {\n content: "\\E213";\n}\n.glyphicon-signal:before {\n content: "\\E080";\n}\n.glyphicon-crown:before {\n content: "\\E362";\n}\n.glyphicon-dashboard:before {\n content: "\\E332";\n}\n.glyphicon-show-lines:before {\n content: "\\E159";\n}\n.glyphicon-user-conversation:before {\n content: "\\E527";\n}\n.glyphicon-life-preserver:before {\n content: "\\E308";\n}\n.glyphicon-conversation:before {\n content: "\\E245";\n}\n.glyphicon-chat:before {\n content: "\\E246";\n}\n.glyphicon-baby-formula:before {\n content: "\\E492";\n}\n.glyphicon-stroller:before {\n content: "\\E076";\n}\n.glyphicon-edit:before {\n content: "\\E151";\n}\n.glyphicon-circle-question-mark:before {\n content: "\\E195";\n}\n.glyphicon-resize-small:before {\n content: "\\E215";\n}\n.glyphicon-shopping-bag:before {\n content: "\\E351";\n}\n.glyphicon-address-book:before {\n content: "\\E089";\n}\n.glyphicon-search:before {\n content: "\\E028";\n}\n.glyphicon-lightbulb:before {\n content: "\\E065";\n}\n.glyphicon-coffee-cup:before {\n content: "\\E295";\n}\n.glyphicon-grid:before {\n content: "\\E157";\n}\n.glyphicon-home:before {\n content: "\\E021";\n}\n.glyphicon-target:before {\n content: "\\E473";\n}\n.glyphicon-ban-circle:before {\n content: "\\E200";\n}\n.glyphicon-right-arrow:before {\n content: "\\E212";\n}\n\n');Ug("/*\n\n Skrafl-explo.css\n\n Explo theme template for netskrafl.is\n\n Copyright © 2025 Miðeind ehf.\n Author: Vilhjalmur Thorsteinsson\n\n The Creative Commons Attribution-NonCommercial 4.0\n International Public License (CC-BY-NC 4.0) applies to this software.\n For further information, see https://github.com/mideind/Netskrafl\n\n*/\ndiv.netskrafl-container {\n --container-bg-color: #f8f8f8;\n --dark-bg-color: #222222;\n --light-header-color: #eaf5f7;\n --header-hover-color: #59b2c0;\n --link-hover-color: #006db8;\n --double-word-color: #f8D992;\n --triple-word-color: #F9B32D;\n --double-letter-color: #9ED5DA;\n --triple-letter-color: #21A4B6;\n --tile-background: #F9E5E6;\n --board-background: #E4EAF0;\n --tab-background: #f3f3f6;\n --header-background: #dde1e4;\n --ok-button: #72a55f;\n --cancel-button: #B6676D;\n --two-letter-background: #D8E3D2;\n --dark-shadow: rgba(0, 0, 0, 0.5);\n --light-shadow: #666666;\n --rack-shadow: #afb7cad0;\n --focus-border: var(--triple-word-color);\n --light-background: #B9D9DC;\n --stats-foreground: #197d8b;\n --human-color: #208C9F;\n --blank-tile: #999999;\n --list-header-background: #fff1d0;\n --list-header-bottom: #ffc559;\n --primary-font: 'Lato', 'Open Sans', 'Arial', sans-serif;\n --number-font: 'Open Sans', 'Lato', 'Arial', sans-serif;\n}\n\ndiv.netskrafl-container {\n position: relative;\n top: 0;\n left: 0;\n background-color: var(--container-bg-color);\n font-family: var(--primary-font);\n width: 375px;\n /* Full height is 667px - we subtract 115px for browser chrome, top and bottom */\n height: 552px;\n overflow-x: hidden;\n overflow-y: auto;\n margin: 0 auto;\n user-select: none;\n touch-action: none;\n}\ndiv.netskrafl-container * {\n box-sizing: content-box;\n}\ndiv.netskrafl-container ol, div.netskrafl-container ul {\n list-style: initial;\n}\ndiv.netskrafl-container h1,\ndiv.netskrafl-container h2,\ndiv.netskrafl-container h3 {\n font-size: revert;\n font-weight: revert;\n}\nbody div.netskrafl-loading,\nbody div.netskrafl-user {\n display: none;\n}\ndiv.netskrafl-container div.netskrafl-user {\n display: block;\n}\ndiv#board-background {\n height: 100%;\n}\ndiv.game-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: hidden;\n}\ndiv.netskrafl-container p {\n margin-top: 12px;\n margin-bottom: 12px;\n}\ninput,\ntextarea {\n user-select: text;\n}\np a img {\n display: inline;\n vertical-align: text-bottom;\n}\n.ui-helper-reset {\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n line-height: 50px;\n /* This determines the height of the tab row */\n text-decoration: none;\n font-size: 100%;\n list-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n content: \"\";\n display: table;\n border-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n clear: both;\n}\n.ui-helper-clearfix {\n min-height: 0;\n /* support: IE7 */\n}\n.ui-tabs {\n position: relative;\n /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n padding: 3px;\n border-width: 0;\n}\n.ui-tabs .ui-tabs-nav {\n margin: 0;\n padding: 3px 3px 0;\n}\n.ui-tabs .ui-tabs-nav li {\n list-style: none;\n float: left;\n position: relative;\n top: 0;\n margin: 1px 0 0 6px;\n border-bottom-width: 0;\n padding: 0;\n white-space: nowrap;\n box-shadow: 1px 2px 4px 1px #afb7cad0;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n float: left;\n text-decoration: none;\n min-width: 91px;\n padding-left: 12px;\n padding-right: 12px;\n text-align: center;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor.sp {\n /* Single page version */\n min-width: 51px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n margin-bottom: -1px;\n padding-bottom: 0px;\n background-color: var(--container-bg-color);\n}\n.ui-tabs .ui-tabs-panel {\n display: block;\n border-width: 0;\n padding-left: 6px;\n padding-right: 6px;\n padding-top: 4px;\n padding-bottom: 4px;\n background-color: var(--container-bg-color);\n}\n.ui-widget {\n font-family: var(--primary-font);\n font-size: 1.2em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n font-family: var(--primary-font);\n font-size: 1em;\n}\n.ui-widget-content {\n color: var(--dark-bg-color);\n}\n.ui-widget-content a {\n color: var(--dark-bg-color);\n}\n.ui-widget-header {\n color: var(--light-header-color);\n font-weight: bold;\n cursor: pointer;\n}\n.ui-widget-header a {\n color: var(--light-header-color);\n}\n.ui-state-default,\n.ui-widget-content .ui-state-default {\n background-color: #afb8bf;\n font-weight: bold;\n color: #ffffff;\n}\n.ui-widget-header .ui-state-default {\n background-color: #a9d0d6;\n font-weight: bold;\n color: #ffffff;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n color: #ffffff;\n text-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus {\n background-color: var(--header-hover-color);\n font-weight: bold;\n color: #ffffff;\n}\n.ui-widget-header .ui-state-hover,\n.ui-widget-header .ui-state-focus {\n background-color: var(--header-hover-color);\n font-weight: bold;\n color: #ffffff;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited {\n color: var(--link-hover-color);\n text-decoration: none;\n}\n.ui-widget-header .ui-state-hover a,\n.ui-widget-header .ui-state-hover a:hover,\n.ui-widget-header .ui-state-hover a:link,\n.ui-widget-header .ui-state-hover a:visited,\n.ui-widget-header .ui-state-focus a,\n.ui-widget-header .ui-state-focus a:hover,\n.ui-widget-header .ui-state-focus a:link,\n.ui-widget-header .ui-state-focus a:visited {\n color: #ffffff;\n /* Pantone 300 U */\n /* #026890; */\n text-decoration: none;\n}\n.ui-widget-header .ui-state-focus a:focus {\n outline: 0;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active {\n background-color: var(--container-bg-color);\n font-weight: bold;\n color: #000000;\n /* #ffffff; */\n}\n.ui-widget-header .ui-state-active {\n background-color: var(--container-bg-color);\n font-weight: bold;\n color: #000000;\n /* #ffffff; */\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n color: var(--container-bg-color);\n text-decoration: none;\n}\n.ui-widget-header .ui-state-active a,\n.ui-widget-header .ui-state-active a:link,\n.ui-widget-header .ui-state-active a:hover,\n.ui-widget-header .ui-state-active a:visited {\n color: #000000;\n text-decoration: none;\n}\n.ui-corner-all,\n.ui-corner-left,\n.ui-corner-tl {\n border-top-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-right,\n.ui-corner-tr {\n border-top-right-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n border-bottom-left-radius: 4px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n border-bottom-right-radius: 4px;\n}\n.ui-corner-top {\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n}\nul.ui-tabs-nav.ui-corner-all {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n}\n/* Default media: small screen, i.e. mobile */\nspan.mobile-space {\n display: inline;\n padding-left: 32px;\n padding-right: 32px;\n}\n.no-mobile-block {\n display: none;\n}\n.no-mobile-inline {\n display: none;\n}\n.no-mobile-inline-block {\n display: none;\n}\n.no-mobile-list {\n display: none;\n}\n.upper {\n text-transform: uppercase;\n}\n@media all and (max-width: 360px) {\n /* Hack to squeeze the content on 360 pixel wide phones */\n div.netskrafl-container {\n transform: scale(0.96, 1);\n /* 0.96 = 360/375 */\n transform-origin: center top;\n }\n}\ndiv.header-logo {\n display: block;\n float: left;\n padding-left: 5px;\n padding-top: 14px;\n}\ndiv.header-button {\n display: block;\n float: right;\n}\ndiv.logo {\n display: none;\n position: absolute;\n top: 28px;\n left: 28px;\n width: 46px;\n}\ndiv.logo:hover {\n animation: expand 0.4s;\n}\ndiv.rightcol {\n position: relative;\n width: 362px;\n left: 6px;\n}\ndiv.logowrapper {\n display: inline-block;\n width: 11%;\n vertical-align: top;\n}\ndiv.playerwrapper {\n display: inline-block;\n position: relative;\n width: 89%;\n padding-top: 4px;\n}\ndiv.bag {\n position: absolute;\n right: 12px;\n width: 304px;\n height: 100px;\n /* Content is 97px max */\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n text-align: center;\n margin: 0;\n padding: 0;\n opacity: 0.75;\n}\ntable.bag-content {\n border-collapse: separate;\n}\ntable.bag-content td {\n width: 12px;\n height: 17px;\n background-color: var(--double-letter-color);\n /* Color for old bag - seldom used */\n overflow: hidden;\n cursor: default;\n}\ntable.bag-content.new td {\n background-color: var(--tile-background);\n}\ntable.bag-content.empty td {\n background-color: var(--cancel-button);\n /* Opponent's color */\n color: white;\n}\ntd.over {\n outline: var(--focus-border) solid 3px;\n}\ntd.highlight {\n outline: var(--focus-border) solid 2px;\n}\ntr.colid td {\n height: 24px;\n width: 32px;\n margin: 0;\n padding: 0;\n overflow: hidden;\n background-color: transparent;\n text-align: center;\n font-size: 14px;\n line-height: 14px;\n font-weight: 400;\n border-color: transparent;\n box-shadow: none;\n}\n/* Board layout */\n#H8,\n#B2,\n#C3,\n#D4,\n#E5,\n#B14,\n#C13,\n#D12,\n#E11,\n#K5,\n#L4,\n#M3,\n#N2,\n#K11,\n#L12,\n#M13,\n#N14 {\n background-color: var(--double-word-color);\n}\n#A1,\n#A8,\n#A15,\n#H1,\n#H15,\n#O1,\n#O8,\n#O15 {\n background-color: var(--triple-word-color);\n}\n#A4,\n#A12,\n#C7,\n#C9,\n#D1,\n#D8,\n#D15,\n#G3,\n#G7,\n#G9,\n#G13,\n#H4,\n#H12,\n#I3,\n#I7,\n#I9,\n#I13,\n#O4,\n#O12,\n#M7,\n#M9,\n#L1,\n#L8,\n#L15 {\n background-color: var(--double-letter-color);\n}\n#B6,\n#B10,\n#F2,\n#F6,\n#F10,\n#F14,\n#N6,\n#N10,\n#J2,\n#J6,\n#J10,\n#J14 {\n background-color: var(--triple-letter-color);\n}\ntable.board td.dw:empty {\n /* Double word score */\n background-color: var(--double-word-color);\n}\ntable.board td.tw:empty {\n /* Triple word score */\n background-color: var(--triple-word-color);\n}\ntable.board td.dl:empty {\n /* Double letter score */\n background-color: var(--double-letter-color);\n}\ntable.board td.tl:empty {\n /* Triple letter score */\n background-color: var(--triple-letter-color);\n}\ntable.board td.center:empty {\n font-family: 'Glyphicons Regular';\n text-align: center;\n font-size: 17px;\n line-height: 21px;\n color: white;\n}\ntable.board td.center:empty::before {\n content: \"\\E473\";\n /* Target */\n animation: opacityBlink 1.5s infinite;\n}\ntable.board {\n margin-left: auto;\n margin-right: auto;\n padding: 0;\n border-spacing: 0;\n border-collapse: separate;\n table-layout: fixed;\n}\ndiv.board table.board {\n transform: scale(1);\n transform-origin: 0 0;\n transform-box: view-box;\n touch-action: pan-x pan-y;\n /*\n !!! Scrolling into view doesn't seem to work with this transition enabled\n transition: transform .2s ease-in-out;\n */\n}\ntable.board tr {\n height: 24px;\n}\n.rack table.board {\n border-spacing: 8px;\n margin-left: auto;\n margin-right: auto;\n}\n.rack table.board tr {\n height: 36px;\n}\ndiv.info {\n display: none;\n}\ndiv.board-help {\n display: none;\n}\ndiv.bag {\n display: none;\n}\ndiv.board-area {\n position: absolute;\n margin-left: 8px;\n top: 68px;\n padding-top: 6px;\n background-color: var(--container-bg-color);\n}\ndiv.board {\n background-color: var(--container-bg-color);\n overflow: hidden;\n width: 361px;\n}\ndiv.tile {\n position: relative;\n background-color: var(--tile-background);\n font-family: 'Open Sans', 'Arial', sans-serif;\n font-size: 17px;\n line-height: 21px;\n font-weight: 700;\n text-align: center;\n text-transform: uppercase;\n height: 21px;\n width: 21px;\n overflow: hidden;\n margin: 0;\n padding: 0;\n margin-left: -1px;\n padding-right: 1px;\n vertical-align: top;\n cursor: default;\n}\ndiv.tile.wide,\ndiv.tile.extra-wide {\n /* Wide tile in the rack */\n text-indent: -6px;\n}\ndiv.board div.tile.wide,\ndiv.board div.tile.extra-wide {\n /* Wide letter tile on the board */\n text-indent: -2px;\n}\n/* On small form factors, we have bigger tiles in the rack than on the board */\n.rack div.tile {\n font-size: 26px;\n line-height: 33px;\n height: 36px;\n width: 36px;\n margin-left: -2px;\n padding-right: 2px;\n}\n/* While dragging a tile, show it in the rack form factor */\ndiv.tile.dragging {\n position: fixed;\n z-index: 10;\n /* Note: We can't use variables here because this element\n becomes a child of the document body element when dragging, and\n the style variables are not in scope at the body level. */\n box-shadow: 3px 3px 3px 0 rgba(0, 0, 0, 0.2);\n border-color: #72a55f;\n border-radius: 5px;\n border-width: 3px;\n border-style: solid;\n overflow: visible;\n color: black;\n background-color: white;\n font-size: 26px;\n line-height: 33px;\n padding-top: 1px;\n height: 38px;\n width: 38px;\n /* The following is necessary as the tile is a child of the body,\n not of the netskrafl-container div */\n box-sizing: content-box;\n}\ndiv.tile.dragging.no-drop {\n border-color: #B6676D;\n}\n.board td {\n min-width: 21px;\n overflow: hidden;\n background-color: var(--board-background);\n padding: 0;\n border-style: solid;\n border-color: white;\n border-width: 1.5px;\n border-radius: 2.5px;\n}\n.rack td {\n min-width: 36px;\n width: 36px;\n border-width: 0px;\n box-shadow: 2px 2px 4px 0 var(--rack-shadow);\n}\ntr.colid {\n display: none;\n}\ntd.rowid {\n display: none;\n}\ndiv.rack-row {\n display: block;\n width: 100%;\n margin-top: 8px;\n height: 52px;\n}\ndiv.rack-left {\n display: block;\n width: 14%;\n height: 1px;\n float: left;\n}\ndiv.rack-right {\n display: block;\n width: 0%;\n height: 1px;\n float: left;\n}\ndiv.rack {\n display: block;\n position: relative;\n padding: 0;\n width: 86%;\n float: left;\n top: -6px;\n left: -3px;\n}\ndiv.letterscore {\n position: absolute;\n bottom: 0px;\n right: 1px;\n height: 9px;\n width: 9px;\n font-size: 6px;\n line-height: 9px;\n text-align: right;\n font-weight: 400;\n padding: 0;\n background-color: transparent;\n vertical-align: bottom;\n}\ndiv.tile.wide div.letterscore,\ndiv.tile.extra-wide div.letterscore {\n /* Adjust letter score tracking for wide tiles */\n letter-spacing: -0.5px;\n}\n.rack div.letterscore {\n right: 2px;\n bottom: 3px;\n font-size: 9px;\n line-height: 9px;\n}\ndiv.tile.dragging div.letterscore {\n bottom: 5px;\n right: 1.75px;\n font-size: 9px;\n line-height: 9px;\n}\ndiv.word-check {\n display: none;\n position: absolute;\n width: 44px;\n height: 44px;\n text-align: center;\n vertical-align: middle;\n top: 460px;\n left: 259px;\n background-color: transparent;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n font-size: 22px;\n line-height: 42px;\n visibility: hidden;\n border: 1.5px solid;\n border-radius: 4px;\n}\ndiv.score {\n display: none;\n position: absolute;\n width: 44px;\n height: 44px;\n text-align: center;\n vertical-align: middle;\n top: 460px;\n left: 318px;\n background-color: transparent;\n font-size: 20px;\n font-weight: 700;\n line-height: 42px;\n color: var(--blank-tile);\n border: 1.5px solid;\n border-radius: 4px;\n border-color: var(--blank-tile);\n}\n.standard-button {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n}\n.submitbutton {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n}\ndiv.submitnewgame {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: none;\n}\ndiv.fb-share {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: none;\n /* Don't display on mobile */\n}\ndiv.fb-share:hover {\n outline: var(--focus-border) solid 3px;\n}\ndiv.waitmove {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n z-index: 10;\n border-style: solid;\n border-width: 1px;\n border-color: var(--ok-button);\n background-color: white;\n margin-right: 1px;\n float: right;\n width: 96px;\n}\ndiv.animated-waitmove {\n position: relative;\n display: inline-block;\n width: 40px;\n top: -4px;\n}\ndiv.login-buttons {\n position: relative;\n}\ndiv.login-padding {\n min-height: 60px;\n}\ndiv.try-again {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: block;\n position: absolute;\n width: 128px;\n top: 12px;\n left: auto;\n right: 0;\n padding: 10px;\n font-size: 16px;\n}\ndiv.get-help {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: block;\n position: absolute;\n top: 12px;\n left: 0;\n right: auto;\n width: 128px;\n padding: 10px;\n font-size: 16px;\n background-color: var(--triple-letter-color);\n}\ndiv.get-help span.glyphicon {\n padding-right: 6px;\n}\ndiv.try-again span.glyphicon {\n padding-right: 6px;\n}\ndiv.recallbtn {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 33px;\n height: 26px;\n background-color: var(--triple-word-color);\n display: none;\n}\ndiv.rack-left div.recallbtn {\n display: block;\n margin-right: auto;\n /* Left-align the button */\n}\ndiv.scramblebtn {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 33px;\n height: 26px;\n background-color: var(--double-letter-color);\n display: none;\n}\ndiv.rack-left div.scramblebtn {\n display: block;\n margin-right: auto;\n /* Left-align the button */\n}\ndiv.buttons {\n position: relative;\n height: 54px;\n}\ndiv.buttons .glyphicon {\n top: 0;\n}\n.bottom-button {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n top: 0;\n padding-top: 8px;\n background-color: #fcfcfc;\n border: 1.5px solid #dddddd;\n width: 66px;\n height: 23px;\n}\ndiv.submitresign {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n top: 0;\n padding-top: 8px;\n background-color: #fcfcfc;\n border: 1.5px solid #dddddd;\n width: 66px;\n height: 23px;\n color: var(--cancel-button);\n left: 0px;\n}\ndiv.submitexchange {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 93px;\n padding-top: 8px;\n background-color: #fcfcfc;\n border: 1.5px solid #dddddd;\n width: 66px;\n height: 23px;\n color: var(--ok-button);\n}\ndiv.submitexchange.disabled {\n color: #888888;\n}\ndiv.submitpass {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n top: 0;\n padding-top: 8px;\n background-color: #fcfcfc;\n border: 1.5px solid #dddddd;\n width: 66px;\n height: 23px;\n color: var(--triple-word-color);\n left: 186px;\n}\ndiv.challenge {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n top: 0;\n padding-top: 8px;\n background-color: var(--container-bg-color);\n border: 1.5px solid #dddddd;\n width: 66px;\n height: 23px;\n left: 279px;\n color: var(--triple-letter-color);\n}\ndiv.challenge.disabled {\n border-color: var(--board-background);\n}\ndiv.submitmove {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: none;\n}\ndiv.rack-right div.submitmove {\n display: block;\n margin-left: auto;\n /* Right-align the button */\n}\ndiv.submitmove.error-shown {\n display: none;\n}\ndiv.submitmove span.glyphicon {\n margin-left: 8px;\n}\ndiv.player {\n display: block;\n padding-left: 4px;\n padding-right: 4px;\n height: 30px;\n min-height: 30px;\n font-size: 14px;\n font-weight: 400;\n color: white;\n}\ndiv.scorewrapper {\n font-family: var(--number-font);\n background-color: transparent;\n width: 100%;\n}\ndiv.scoreleft {\n display: block;\n width: 42px;\n height: 26px;\n padding-left: 4px;\n font-size: 22px;\n line-height: 27px;\n font-weight: 400;\n text-align: left;\n color: white;\n overflow: hidden;\n position: absolute;\n top: 4px;\n left: 0;\n}\ndiv.scoreright {\n display: block;\n width: 42px;\n height: 26px;\n padding-right: 4px;\n font-size: 22px;\n line-height: 27px;\n font-weight: 400;\n text-align: right;\n color: white;\n overflow: hidden;\n position: absolute;\n top: 4px;\n right: 0;\n}\ndiv.robot-btn {\n display: block;\n position: absolute;\n margin-left: 0px;\n margin-right: 2px;\n padding-top: 3px;\n height: 30px;\n min-height: 30px;\n line-height: 22px;\n border-width: 0px;\n white-space: nowrap;\n overflow: hidden;\n background-color: transparent;\n}\ndiv.robot-btn span.glyphicon-cog {\n margin-right: 2px;\n}\ndiv.gamestats div.robot-btn {\n width: 100%;\n margin: 0;\n padding-top: 6px;\n}\ndiv.player-btn {\n display: block;\n position: absolute;\n margin-left: 2px;\n margin-right: 2px;\n padding-top: 3px;\n height: 30px;\n min-height: 30px;\n line-height: 22px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n background-color: transparent;\n color: white;\n border-width: 0;\n border-radius: 5px;\n}\ndiv.player-btn.left,\ndiv.robot-btn.left {\n padding-left: 38px;\n padding-right: 12px;\n}\ndiv.player-btn.right,\ndiv.robot-btn.right {\n padding-left: 10px;\n /* Note: purposefully a bit asymmetric with the left button */\n padding-right: 38px;\n}\ndiv.player-btn.left.tomove,\ndiv.player-btn.right.tomove {\n color: white;\n}\ndiv.player-btn.left.tomove:hover,\ndiv.player-btn.right.tomove:hover {\n color: black;\n}\ndiv.heading {\n position: relative;\n width: 100%;\n /* background-color: @container; */\n top: 0;\n left: 0;\n padding-left: 0;\n padding-right: 0;\n height: 38px;\n}\ndiv.tabbed-page {\n position: absolute;\n left: 0;\n top: 0;\n width: 375px;\n height: 552px;\n overflow: hidden;\n font-size: 13px;\n line-height: 23px;\n}\ndiv.tab-scroll-area {\n position: relative;\n}\ndiv.loginform-small {\n display: block;\n position: absolute;\n width: 375px;\n padding-top: 0;\n padding-left: 0;\n padding-right: 0;\n}\ndiv.loginform-large {\n display: none;\n position: absolute;\n left: 220px;\n right: 120px;\n top: 24px;\n width: auto;\n max-width: 740px;\n padding: 0;\n}\ndiv.login-logo {\n margin-top: 120px;\n margin-left: 100px;\n}\ndiv.login-legend {\n margin-left: 50px;\n margin-top: 40px;\n}\ndiv#logo-pic {\n text-align: center;\n padding-top: 32px;\n padding-bottom: 16px;\n}\ndiv.loginform-small div#logo-pic {\n padding-top: 0;\n}\n@keyframes expand {\n 0% {\n transform: scale(1);\n }\n 40% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n}\n@-webkit-keyframes expand {\n 0% {\n transform: scale(1);\n }\n 40% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes slidein {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n@-webkit-keyframes slidein {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\ndiv.login-btn-large {\n text-align: center;\n font-size: 19px;\n font-weight: 400;\n width: 160px;\n color: white;\n background-color: var(--header-hover-color);\n margin: 0;\n margin-top: 24px;\n margin-left: 6px;\n padding: 6px;\n padding-top: 8px;\n padding-bottom: 12px;\n border-radius: 5px;\n cursor: pointer;\n float: right;\n}\ndiv.login-btn-large:hover {\n background-color: var(--triple-word-color);\n animation: expand 0.4s;\n}\ndiv.login-btn-large span {\n padding-left: 18px;\n}\ndiv.login-btn-small {\n width: 60%;\n text-align: center;\n font-size: 19px;\n font-weight: 400;\n color: white;\n background-color: var(--ok-button);\n margin-left: auto;\n margin-right: auto;\n margin-top: 60px;\n padding: 6px;\n padding-top: 9px;\n padding-bottom: 9px;\n border-radius: 5px;\n vertical-align: middle;\n cursor: pointer;\n}\ndiv.login-btn-small:hover {\n background-color: var(--triple-word-color);\n}\ndiv.blurb {\n font-size: 16px;\n font-weight: bold;\n padding-bottom: 24px;\n text-align: center;\n}\ndiv.login-error {\n padding: 12px;\n margin-top: 160px;\n margin-left: 8px;\n margin-right: 16px;\n background-color: white;\n color: black;\n border-style: solid;\n border-width: 0px;\n border-radius: 5px;\n font-size: 15px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n}\np.login-sorry {\n font-weight: bold;\n}\np.login-error-icon {\n margin-top: 8px;\n margin-bottom: 8px;\n font-size: 34px;\n color: var(--triple-word-color);\n}\ndiv.leftplayer {\n display: inline-block;\n width: 50%;\n text-align: left;\n border-radius: 4px 0 0 4px;\n}\ndiv.rightplayer {\n display: inline-block;\n width: 50%;\n text-align: right;\n border-radius: 0 4px 4px 0;\n}\ndiv.right-tab {\n position: absolute;\n top: -28px;\n height: 34px;\n min-height: 34px;\n width: 55px;\n min-width: 55px;\n overflow: visible;\n visibility: visible;\n text-align: center;\n vertical-align: middle;\n padding-top: 4px;\n font-size: 16px;\n line-height: 18px;\n border-radius: 5px;\n opacity: 0.6;\n z-index: 0;\n cursor: pointer;\n box-shadow: 2px 2px 4px 0 #afb7cad0;\n}\ndiv.right-tab#tab-board {\n left: 41px;\n background-color: var(--container-bg-color);\n}\ndiv.right-tab#tab-movelist {\n left: 106px;\n background-color: var(--board-background);\n}\ndiv.right-tab#tab-twoletter {\n left: 171px;\n background-color: var(--two-letter-background);\n}\ndiv.right-tab#tab-games {\n left: 236px;\n background-color: var(--tile-background);\n}\ndiv.right-tab#tab-chat {\n left: 301px;\n background-color: #F7F0DE;\n}\ndiv.right-tab.selected {\n opacity: 1;\n}\ndiv.right-tab:hover {\n opacity: 1;\n}\ndiv.right-tab.alert > span.glyphicon {\n color: var(--cancel-button);\n animation: redBlink 1s infinite;\n -webkit-animation: redBlink 1s infinite;\n}\ndiv.right-area {\n /* display: none; */\n position: relative;\n top: 30px;\n left: 0;\n height: 464px;\n width: 100%;\n font-size: 16px;\n line-height: 16px;\n font-weight: 400;\n color: black;\n cursor: default;\n}\ndiv.right-area.with-clock {\n height: 380px;\n margin-top: 48px;\n}\ndiv.message {\n text-align: center;\n font-size: 14px;\n line-height: 26px;\n height: 28px;\n background-color: var(--light-background);\n font-weight: 400;\n}\ndiv.message strong {\n text-transform: uppercase;\n}\ndiv.movelist-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 458px;\n background-color: var(--board-background);\n padding-top: 8px;\n padding-bottom: 0;\n z-index: 6;\n border-radius: 4px 4px 0 0;\n}\ndiv.movelist {\n font-family: var(--number-font);\n margin: 0;\n padding: 0;\n overflow: auto;\n width: 100%;\n height: 350px;\n}\ndiv.movelist.bestmoves {\n overflow-y: hidden;\n}\ndiv.movelist-container div.bag {\n display: block;\n background-color: var(--container-bg-color);\n position: relative;\n left: 0;\n margin: 0;\n padding-top: 4px;\n padding-left: 27px;\n width: 100%;\n height: 104px;\n}\ndiv.game-timed {\n display: none;\n}\ndiv.modal-dialog {\n visibility: hidden;\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: 10;\n background-color: rgba(32, 32, 32, 0.2);\n}\ndiv.modal-dialog#spinner-dialog {\n background-color: rgba(255, 255, 255, 0.4);\n}\ndiv.animated-spinner {\n position: absolute;\n left: 141.5px;\n top: 271.5px;\n}\nsvg circle.shadow {\n filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));\n}\n.std-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n}\ndiv#blank-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 124px;\n right: 36.5px;\n width: 274px;\n height: 400px;\n background-color: var(--board-background);\n}\n.bottom-message {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n}\n.bold-bottom-message {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n}\ndiv.error {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--cancel-button);\n cursor: pointer;\n}\ndiv.opp-turn {\n display: block;\n padding-top: 10px;\n width: 246px;\n}\ndiv.opp-turn.flashing {\n color: var(--cancel-button);\n transition: 0.1s;\n transform: scale(1.1);\n transform-origin: center left;\n animation: redBlink 0.4s;\n animation-iteration-count: 2;\n}\ndiv#congrats,\ndiv#gameover {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n visibility: visible;\n font-size: 16px;\n width: 100%;\n text-align: center;\n padding-bottom: 0px;\n}\ndiv#congrats span.glyphicon-bookmark {\n padding-right: 2px;\n color: var(--ok-button);\n}\ndiv#gameover span.glyphicon-info-sign {\n padding-right: 4px;\n color: var(--triple-letter-color);\n}\ndiv.resign {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--cancel-button);\n}\ndiv.pass {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--triple-word-color);\n}\ndiv.pass-last {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--triple-word-color);\n}\ndiv.chall {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--triple-letter-color);\n}\ndiv.chall-info {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--ok-button);\n bottom: 60px;\n line-height: 20px;\n width: 311px;\n padding: 2px 24px 0px;\n}\ndiv.exchange {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n text-align: center;\n color: white;\n border-radius: 4px;\n background-color: var(--ok-button);\n}\ndiv.submitmove#move-mobile {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n float: right;\n margin-right: 1px;\n width: 96px;\n font-weight: 700;\n color: black;\n background-color: var(--tile-background);\n padding-left: 10px;\n padding-right: 10px;\n padding-top: 6px;\n}\ndiv.submitmove#move-mobile.manual {\n background-color: var(--double-letter-color);\n color: white;\n}\ndiv.submitmove#move-mobile.word-good {\n background-color: var(--ok-button);\n color: white;\n}\n@keyframes colorPulseMobile {\n 0% {\n transform: scale(1);\n }\n 40% {\n transform: scale(1.3);\n }\n 60% {\n transform: scale(1.3);\n }\n 100% {\n transform: scale(1);\n }\n}\n@-webkit-keyframes colorPulseMobile {\n 0% {\n transform: scale(1);\n }\n 40% {\n transform: scale(1.3);\n }\n 60% {\n transform: scale(1.3);\n }\n 100% {\n transform: scale(1);\n }\n}\nspan.score-mobile {\n display: inline-block;\n font-weight: 400;\n font-size: 22px;\n line-height: 22px;\n}\ndiv.submitmove#move-mobile.word-great span.score-mobile {\n animation: colorPulseMobile 1.5s infinite;\n -webkit-animation: colorPulseMobile 1.5s infinite;\n}\ndiv.submitmove#move-mobile span.glyphicon {\n top: 0px;\n margin-top: 2px;\n}\ndiv.force-resign {\n font-size: 18px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 32px;\n height: 26px;\n background-color: var(--ok-button);\n display: block;\n float: right;\n padding-top: 3px;\n padding-bottom: 12px;\n margin-right: 1px;\n width: 96px;\n text-align: center;\n font-weight: normal;\n font-size: 13px;\n color: white;\n background-color: var(--cancel-button);\n}\ndiv.gameinfo {\n position: absolute;\n text-align: right;\n display: block;\n bottom: 0;\n left: 0;\n width: 352px;\n height: 52px;\n font-size: 14px;\n line-height: 26px;\n margin: 0;\n padding-top: 0px;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n visibility: hidden;\n transform-origin: left top;\n animation: slidein 0.4s;\n bottom: 56px;\n height: 34px;\n background-color: var(--board-background);\n font-weight: normal;\n color: white;\n padding-top: 10px;\n}\ninput.chat-txt {\n font-family: var(--primary-font);\n width: 276px;\n font-size: 18px;\n height: 24px;\n font-weight: normal;\n border-style: solid;\n border-color: var(--ok-button);\n border-width: 1px;\n border-radius: 3px;\n margin-top: 1px;\n padding-top: 4px;\n padding-bottom: 3px;\n padding-left: 6px;\n padding-right: 6px;\n}\ndiv.chat-area {\n position: absolute;\n top: 6px;\n left: 6px;\n height: 402px;\n width: 336px;\n padding: 6px;\n overflow: auto;\n}\ndiv.modal-close#chat-send {\n display: inline-block;\n position: relative;\n font-size: 18px;\n line-height: 18px;\n height: 28px;\n bottom: 2px;\n right: 0;\n margin: 0 0 2px 8px;\n padding-top: 4px;\n padding-bottom: 0;\n background-color: var(--triple-letter-color);\n color: white;\n}\ndiv.twoletter {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 466px;\n background-color: var(--two-letter-background);\n overflow: hidden;\n z-index: 3;\n border-radius: 4px 4px 0 0;\n}\ndiv.twoletter-area {\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n font-size: 18px;\n line-height: 25px;\n text-align: right;\n padding-left: 14px;\n padding-right: 10px;\n margin-top: 12px;\n cursor: pointer;\n}\ndiv.twoletter-area#two-2 {\n visibility: hidden;\n}\ndiv.twoletter-group {\n display: inline-block;\n margin-right: 5px;\n}\ndiv.twoletter-word {\n display: inline-block;\n padding-right: 4px;\n}\ndiv.twoletter-word b {\n background-color: var(--ok-button);\n color: white;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 2px;\n}\nspan.statsbutton {\n display: none;\n}\ndiv#ready-toggler {\n display: none;\n}\ndiv#timed-toggler {\n display: none;\n}\ndiv.help-container img {\n /* On mobile, scale images in help text down to fit the column width */\n max-width: 100%;\n height: auto;\n object-fit: scale-down;\n display: inline;\n}\ndiv#tabs,\ndiv#main-tabs {\n border-width: 0;\n padding: 0;\n}\ndiv#tabs > div[role=tabpanel],\ndiv#main-tabs > div[role=tabpanel] {\n position: relative;\n top: -8px;\n height: 504px;\n}\ndiv#main-tabs div.header-logo {\n padding-left: 14px;\n padding-right: 8px;\n padding-top: 7px;\n}\ndiv#tabs {\n background-color: transparent;\n}\ndiv.userid {\n display: none;\n}\nspan.list-ts {\n display: none;\n width: 164px;\n max-width: 164px;\n}\nspan.list-ts-short {\n display: none;\n padding-left: 4px;\n width: 144px;\n max-width: 144px;\n}\nspan.list-chall {\n display: inline-block;\n width: 184px;\n max-width: 184px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\nspan.list-s0 {\n display: inline-block;\n width: 38px;\n max-width: 38px;\n text-align: right;\n}\nspan.list-s1 {\n display: inline-block;\n width: 38px;\n max-width: 38px;\n text-align: left;\n}\nspan.list-colon {\n display: inline-block;\n text-align: center;\n width: 8px;\n max-width: 8px;\n}\nspan.list-scorehdr {\n display: inline-block;\n width: 84px;\n /* list-s0 + list-colon + list-s1 */\n max-width: 84px;\n text-align: center;\n}\ndiv.list-elo-adj {\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 52px;\n max-width: 52px;\n text-align: center;\n text-overflow: clip;\n}\nspan.list-elo-hdr {\n display: inline-block;\n width: 104px;\n /* list-elo-adj * 2 */\n max-width: 104px;\n text-align: center;\n}\nspan.list-tc {\n display: inline-block;\n width: 84px;\n max-width: 84px;\n text-align: left;\n padding-right: 0;\n}\ndiv.tilecount {\n display: inline-block;\n vertical-align: middle;\n font-size: 12px;\n line-height: 12px;\n margin-bottom: 2px;\n width: 92px;\n min-width: 92px;\n text-align: left;\n background-color: #ffffff;\n border-radius: 6px;\n overflow: hidden;\n}\ndiv.tc {\n display: inline-block;\n text-align: left;\n background-color: var(--ok-button);\n}\ndiv.tc.losing {\n background-color: var(--cancel-button);\n}\ndiv.tc:before {\n content: \"\\A0\";\n /* Invisible space */\n}\ndiv#userlist span.list-ch,\ndiv#elolist span.list-ch,\ndiv#chall-received span.list-ch,\ndiv#chall-sent span.list-ch,\ndiv#userlist span.list-fav {\n cursor: pointer;\n}\nspan.list-ch,\nspan.list-fav,\nspan.list-icon,\nspan.list-myturn,\nspan.list-overdue {\n display: inline-block;\n font-size: 18px;\n width: 26px;\n min-width: 26px;\n overflow: hidden;\n margin-left: 2px;\n}\nspan.list-overdue,\nspan.list-fav {\n display: none;\n}\nspan.list-newbag {\n display: none;\n font-size: 18px;\n color: var(--triple-word-color);\n width: 22px;\n max-width: 22px;\n margin-left: 14px;\n}\nspan.list-manual {\n display: none;\n font-size: 18px;\n color: var(--triple-word-color);\n /* width: 26px; */\n max-width: 26px;\n margin-left: 14px;\n}\nspan.list-win {\n display: inline-block;\n font-size: 18px;\n width: 26px;\n max-width: 26px;\n margin-left: 0;\n}\nspan.list-nick {\n display: inline-block;\n width: 140px;\n min-width: 140px;\n overflow: hidden;\n}\nspan.list-nick-elo {\n display: inline-block;\n width: 150px;\n max-width: 150px;\n}\nspan.list-opp {\n display: inline-block;\n width: 150px;\n max-width: 150px;\n}\nspan.list-fullname {\n display: inline-block;\n width: 400px;\n min-width: 400px;\n overflow: hidden;\n}\nspan.list-fullname-robot {\n display: inline-block;\n font-size: 14px;\n width: 188px;\n min-width: 188px;\n font-style: italic;\n /* Robot description doesn't fit into the column on mobile */\n overflow: hidden;\n text-overflow: ellipsis;\n}\nspan.list-human-elo {\n display: inline-block;\n width: 40px;\n max-width: 40px;\n text-align: center;\n margin-right: 6px;\n}\nspan.list-duration {\n display: none;\n width: 192px;\n max-width: 192px;\n text-align: right;\n}\nspan.list-info-hdr {\n display: none;\n width: 52px;\n max-width: 52px;\n text-align: center;\n}\nspan.list-info {\n display: none;\n width: 52px;\n top: -3px;\n text-align: center;\n height: 24px;\n line-height: 20px;\n}\nspan.list-rank {\n display: inline-block;\n width: 36px;\n max-width: 36px;\n text-align: center;\n margin-right: 8px;\n}\nspan.list-rank-no-mobile {\n display: none;\n width: 32px;\n max-width: 32px;\n text-align: center;\n margin-right: 10px;\n}\nspan.list-elo {\n display: inline-block;\n width: 40px;\n max-width: 40px;\n text-align: center;\n margin-right: 10px;\n}\nspan.list-elo-no-mobile {\n display: none;\n width: 40px;\n max-width: 40px;\n text-align: center;\n margin-right: 10px;\n}\nspan.list-games {\n display: none;\n width: 48px;\n max-width: 48px;\n text-align: right;\n margin-right: 10px;\n}\nspan.list-ratio {\n display: none;\n width: 40px;\n max-width: 40px;\n text-align: right;\n margin-right: 10px;\n}\nspan.list-avgpts {\n display: none;\n width: 36px;\n max-width: 36px;\n text-align: right;\n margin-right: 16px;\n}\nspan.mobile-break {\n display: inline;\n}\n.tab-legend {\n display: none;\n font-weight: normal;\n}\ndiv.user-cat span#break {\n display: inline;\n}\ndiv.user-cat#user-headings {\n line-height: 32px;\n}\ndiv.user-cat#user-search {\n display: none;\n}\ndiv#chall-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n position: relative;\n padding-top: 8px;\n /* left: @margin-small; */\n left: auto;\n right: auto;\n margin-left: auto;\n margin-right: auto;\n top: 48px;\n width: 327px;\n height: 352px;\n font-size: 0.85em;\n}\ndiv#chall-fairplay {\n margin-top: 10px;\n padding-left: 0;\n padding-right: 0;\n font-size: 14px;\n text-align: right;\n}\ndiv#chall-oldbag {\n position: absolute;\n bottom: 16px;\n font-size: 14px;\n}\ndiv#chall-oldbag td span.glyphicon-exclamation-sign {\n color: var(--cancel-button);\n padding-right: 8px;\n}\nspan.caption.wide {\n width: 200px;\n}\ndiv#manual-toggler {\n display: inline-block;\n}\ndiv#chall-ok {\n right: 12px;\n width: 72px;\n /* Override */\n background-color: var(--ok-button);\n}\ndiv#chall-cancel {\n right: 108px;\n /* 12 + 72 + 12 + 12 */\n width: 72px;\n /* Override */\n background-color: var(--cancel-button);\n}\ndiv.user-cat#user-headings span {\n white-space: nowrap;\n}\ndiv#user-load {\n display: none;\n position: absolute;\n top: 321.5px;\n left: 175.5px;\n width: 24px;\n height: 24px;\n z-index: 10;\n background-image: url('user-loader.gif');\n background-repeat: no-repeat;\n background-size: 24px 24px;\n}\ndiv#promo-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 64px;\n left: 12px;\n width: 327px;\n height: 364px;\n line-height: 1.5em;\n}\ndiv.promo-content {\n margin-top: 16px;\n margin-left: 16px;\n margin-right: 16px;\n}\ndiv.promo-fullscreen {\n display: none;\n}\ndiv.promo-mobile {\n display: block;\n}\ndiv.btn-promo-yes {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n width: 200px;\n height: 28px;\n bottom: 48px;\n right: 232px;\n top: auto;\n background-color: var(--ok-button);\n}\ndiv.btn-promo-no {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n width: 80px;\n height: 28px;\n bottom: 24px;\n right: 24px;\n top: auto;\n background-color: var(--ok-button);\n}\ndiv #userlist,\ndiv #elolist {\n height: 396px;\n /* 11 lines @ 36px each */\n overflow-y: auto;\n overflow-x: hidden;\n}\ndiv #gamelist {\n height: 468px;\n /* 13 lines @ 36px each */\n overflow-y: auto;\n overflow-x: hidden;\n}\ndiv #recentlist {\n height: 396px;\n /* 11 lines @ 36px each */\n overflow-y: auto;\n overflow-x: hidden;\n}\ndiv #usr-recent {\n height: 432px;\n /* 12 lines @ 36px each */\n overflow-y: auto;\n overflow-x: hidden;\n}\ndiv #chall-sent,\ndiv #chall-received {\n height: 216px;\n /* 6 lines @ 36px each */\n overflow-y: auto;\n overflow-x: hidden;\n}\ndiv.games {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 442px;\n background-color: var(--tile-background);\n overflow: auto;\n z-index: 2;\n padding-top: 12px;\n padding-bottom: 12px;\n border-radius: 4px 4px 0 0;\n}\ndiv#wait-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 8px;\n left: 4px;\n width: 335px;\n height: 488px;\n}\nspan.move-indicator {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--triple-word-color);\n margin-right: 4px;\n}\nspan.move-indicator:before {\n content: \"\\E267\";\n}\ndiv.hint {\n display: none;\n position: absolute;\n top: 136px;\n font-style: italic;\n font-size: 1em;\n z-index: 10;\n color: var(--light-shadow);\n margin-left: 12px;\n margin-right: 12px;\n}\ndiv.stats-box {\n font-family: var(--number-font);\n width: 224px;\n position: absolute;\n top: 0px;\n right: -62px;\n}\ndiv.stats-fig {\n display: inline-block;\n width: 68px;\n height: 24px;\n padding: 3px;\n background-color: transparent;\n color: var(--stats-foreground);\n border-style: solid;\n border-width: 2px;\n border-radius: 4px;\n border-color: var(--stats-foreground);\n text-align: center;\n font-weight: 700;\n font-size: 16px;\n line-height: 21px;\n vertical-align: middle;\n margin-top: 4px;\n margin-right: 2px;\n margin-left: 2px;\n cursor: default;\n}\ndiv#own-toggler {\n position: absolute;\n top: 2px;\n margin-top: 0;\n margin-right: 8px;\n}\np#own-best {\n display: inline-block;\n position: absolute;\n left: auto;\n right: 174px;\n top: 26px;\n text-align: right;\n font-size: 0.85em;\n}\ndiv#own-stats {\n position: relative;\n margin-top: 2px;\n margin-bottom: 32px;\n height: 48px;\n width: 100%;\n vertical-align: top;\n}\n/* Paragraphs of help text that should be centered on screens that are wide enough */\np.help-center {\n text-align: left;\n}\ndiv.racktile {\n cursor: pointer;\n background-color: white;\n}\n@keyframes selBlink {\n 0% {\n color: white;\n background-color: var(--cancel-button);\n }\n 45% {\n color: white;\n background-color: var(--cancel-button);\n }\n 50% {\n color: black;\n background-color: white;\n }\n 95% {\n color: black;\n background-color: white;\n }\n 100% {\n color: white;\n background-color: var(--cancel-button);\n }\n}\n@-webkit-keyframes selBlink {\n 0% {\n color: white;\n background-color: var(--cancel-button);\n }\n 45% {\n color: white;\n background-color: var(--cancel-button);\n }\n 50% {\n color: black;\n background-color: white;\n }\n 95% {\n color: black;\n background-color: white;\n }\n 100% {\n color: white;\n background-color: var(--cancel-button);\n }\n}\n@keyframes selBlank {\n 0% {\n color: white;\n background-color: var(--cancel-button);\n }\n 45% {\n color: white;\n background-color: var(--cancel-button);\n }\n 50% {\n color: var(--blank-tile);\n background-color: white;\n }\n 95% {\n color: var(--blank-tile);\n background-color: white;\n }\n 100% {\n color: white;\n background-color: var(--cancel-button);\n }\n}\n@-webkit-keyframes selBlank {\n 0% {\n color: white;\n background-color: var(--cancel-button);\n }\n 45% {\n color: white;\n background-color: var(--cancel-button);\n }\n 50% {\n color: var(--blank-tile);\n background-color: white;\n }\n 95% {\n color: var(--blank-tile);\n background-color: white;\n }\n 100% {\n color: white;\n background-color: var(--cancel-button);\n }\n}\n@keyframes redBlink {\n 0% {\n opacity: 1;\n }\n 30% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n 70% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes redBlink {\n 0% {\n opacity: 1;\n }\n 30% {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n }\n 70% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes opacityBlink {\n 0% {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 80% {\n opacity: 0.1;\n }\n 100% {\n opacity: 0.1;\n }\n}\n@-webkit-keyframes opacityBlink {\n 0% {\n opacity: 1;\n }\n 25% {\n opacity: 1;\n }\n 75% {\n opacity: 1;\n }\n 80% {\n opacity: 0.1;\n }\n 100% {\n opacity: 0.1;\n }\n}\ndiv.sel {\n animation: selBlink 1.2s infinite;\n -webkit-animation: selBlink 1.2s infinite;\n}\ndiv.blanktile.sel {\n animation: selBlank 1.2s infinite;\n -webkit-animation: selBlank 1.2s infinite;\n}\ntd.sel {\n outline: var(--cancel-button) solid 3px;\n}\ndiv.xchg {\n cursor: pointer;\n}\ndiv.xchgsel {\n color: white;\n background-color: var(--ok-button);\n}\n.blanktile {\n color: var(--blank-tile);\n}\n@keyframes fresh-appear {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes fresh-appear {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\ndiv.freshtile {\n color: white;\n background-color: var(--cancel-button);\n opacity: 0;\n animation-name: fresh-appear;\n animation-duration: 100ms;\n animation-delay: 0s;\n animation-fill-mode: forwards;\n -webkit-animation-name: fresh-appear;\n -webkit-animation-duration: 100ms;\n -webkit-animation-delay: 0s;\n -webkit-animation-fill-mode: forwards;\n}\ndiv.highlight0 {\n /* Human (local) player */\n color: black;\n background-color: white;\n}\ndiv.highlight1 {\n /* Computer (remote) player */\n color: white;\n background-color: var(--cancel-button);\n}\ndiv.highlight0.blanktile {\n /* Human (local) player */\n color: var(--blank-tile);\n}\ndiv.highlight1.blanktile {\n /* Computer (remote) player */\n color: #f3d6d8;\n}\ndiv.highlight0.dim {\n background-color: #fbedee;\n}\ndiv.highlight1.dim {\n background-color: #deb3b6;\n}\n.clock {\n display: inline-block;\n position: absolute;\n top: 82px;\n width: 147px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 700;\n color: #202020;\n overflow: hidden;\n margin-top: 4px;\n margin-bottom: 4px;\n}\nh3.clockleft {\n display: inline-block;\n position: absolute;\n top: 82px;\n width: 147px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 700;\n color: #202020;\n overflow: hidden;\n margin-top: 4px;\n margin-bottom: 4px;\n left: 0;\n text-align: left;\n}\nh3.clockright {\n display: inline-block;\n position: absolute;\n top: 82px;\n width: 147px;\n font-size: 28px;\n line-height: 28px;\n font-weight: 700;\n color: #202020;\n overflow: hidden;\n margin-top: 4px;\n margin-bottom: 4px;\n right: 0;\n text-align: right;\n}\nh3.clockleft.running-out {\n color: var(--cancel-button);\n}\nh3.clockright.running-out {\n color: var(--cancel-button);\n}\ndiv.clockface {\n display: block;\n position: absolute;\n top: 84px;\n width: 100%;\n text-align: center;\n font-size: 28px;\n line-height: 28px;\n color: var(--triple-word-color);\n}\ndiv.fairplay {\n position: absolute;\n top: 10px;\n width: 100%;\n text-align: center;\n color: var(--ok-button);\n}\ndiv.games-item {\n position: relative;\n height: 24px;\n margin-left: 32px;\n margin-right: 32px;\n margin-top: 2px;\n margin-bottom: 2px;\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 7px;\n padding-bottom: 5px;\n overflow: hidden;\n vertical-align: top;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\ndiv.games-item a:link,\ndiv.games-item a:visited {\n color: black;\n text-decoration: none;\n}\ndiv.games-item a:hover {\n color: black;\n}\ndiv.games-item:hover {\n border-radius: 5px;\n background-color: rgba(86, 153, 165, 0.5);\n}\ndiv.at-top-left {\n position: absolute;\n top: 6px;\n left: 10px;\n height: 24px;\n font-size: 16px;\n line-height: 20px;\n font-weight: bold;\n}\ndiv.at-top-left div.tilecount {\n width: 276px;\n min-width: 276px;\n height: 24px;\n border-radius: 10px;\n border-width: 0;\n overflow: hidden;\n background-color: #ccd5de;\n}\ndiv.at-top-left div.tilecount.trans {\n background-color: transparent;\n}\ndiv.at-top-left div.tilecount div.tc {\n color: var(--container-bg-color);\n padding-left: 4px;\n margin-left: 0;\n overflow: hidden;\n border-radius: 10px;\n border-width: 0;\n font-size: 16px;\n line-height: 20px;\n font-weight: bold;\n padding-top: 2px;\n padding-bottom: 2px;\n}\ndiv.at-top-left div.tilecount div.oc {\n color: #202020;\n padding-left: 8px;\n margin-left: 0;\n overflow: hidden;\n font-size: 16px;\n line-height: 20px;\n font-weight: bold;\n padding-top: 2px;\n padding-bottom: 2px;\n background-color: transparent;\n}\ndiv.chat {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 466px;\n background-color: #F7F0DE;\n z-index: 1;\n border-radius: 4px 4px 0 0;\n}\ndiv.chat-area.with-clock {\n height: 310px;\n}\ndiv.chat-ts {\n clear: both;\n display: inline-block;\n color: var(--dark-shadow);\n font-size: 12px;\n line-height: 12px;\n text-align: center;\n margin-top: 12px;\n margin-bottom: 8px;\n width: 100%;\n}\ndiv.chat-msg {\n display: inline-block;\n border-radius: 8px;\n padding-top: 6px;\n padding-bottom: 6px;\n padding-left: 10px;\n padding-right: 10px;\n color: black;\n font-size: 15px;\n line-height: 20px;\n max-width: 80%;\n margin-bottom: 6px;\n}\ndiv.chat-msg.left {\n float: left;\n clear: both;\n text-align: left;\n}\ndiv.chat-msg.right {\n float: right;\n clear: both;\n text-align: right;\n}\ndiv.chat-msg.local {\n background-color: var(--board-background);\n}\ndiv.chat-msg.remote {\n background-color: #F1DBDA;\n}\ndiv.chat-msg img {\n /* Emoticon alignment to baseline */\n vertical-align: -10px;\n display: inline;\n margin-left: 2px;\n margin-right: 2px;\n}\ndiv.chat-input {\n position: absolute;\n bottom: 0px;\n left: 0px;\n height: 36px;\n padding: 6px;\n vertical-align: bottom;\n}\ndiv.movelist.noscroll {\n overflow-y: hidden;\n}\ndiv.leftmove {\n text-align: left;\n padding-left: 0px;\n height: 20px;\n line-height: 18px;\n}\ndiv.rightmove {\n text-align: right;\n padding-right: 0px;\n height: 20px;\n line-height: 18px;\n}\ndiv.reviewhdr {\n height: 18px;\n text-align: left;\n padding: 11px;\n background-color: var(--ok-button);\n color: white;\n font-weight: 400;\n font-size: 18px;\n line-height: 18px;\n}\nspan.movenumber {\n background-color: white;\n color: var(--ok-button);\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 0;\n margin-left: 0px;\n margin-right: 8px;\n padding-top: 2px;\n padding-bottom: 2px;\n padding-left: 12px;\n padding-right: 12px;\n}\ndiv.gameover {\n text-align: center;\n margin-top: 6px;\n padding: 10px;\n background-color: var(--triple-word-color);\n color: white;\n font-weight: 700;\n}\nspan.gameovermsg {\n margin-right: 6px;\n}\ndiv.gamestats {\n visibility: hidden;\n color: black;\n background-color: white;\n z-index: 20;\n position: absolute;\n width: 724px;\n height: 580px;\n left: 150px;\n top: 64px;\n padding: 12px;\n border-radius: 5px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n}\ndiv.statscol {\n display: block;\n float: left;\n width: 50%;\n padding-top: 24px;\n}\ndiv.statscol p {\n margin-top: 0.85em;\n margin-bottom: 0.8em;\n}\ndiv.gamestats p span {\n font-weight: 700;\n}\ndiv #gamestarted {\n width: 100%;\n text-align: center;\n position: relative;\n top: 42px;\n margin-bottom: 24px;\n}\n#gamestarted p {\n font-style: italic;\n margin-top: 4px;\n margin-bottom: 8px;\n}\n.humancolor {\n background-color: var(--human-color);\n}\n.autoplayercolor {\n background-color: var(--cancel-button);\n}\n/* Scores in move list */\n.humangrad_left {\n color: #208C9F;\n}\n.autoplayergrad_right {\n color: var(--cancel-button);\n}\n.humangrad_right {\n color: #208C9F;\n}\n.autoplayergrad_left {\n color: var(--cancel-button);\n}\nspan.score {\n display: inline-block;\n width: 28px;\n padding-left: 2px;\n margin-left: 2px;\n padding-right: 2px;\n margin-right: 2px;\n font-weight: 700;\n text-align: right;\n line-height: 20px;\n}\nspan.total {\n display: inline-block;\n width: 28px;\n padding-left: 3px;\n margin-left: 0px;\n padding-right: 6px;\n margin-right: 0px;\n font-weight: 700;\n text-align: right;\n color: white;\n line-height: 20px;\n}\ndiv.leftmove span.total {\n border-left-width: 0px;\n border-left-style: solid;\n border-top-right-radius: 2.5px;\n border-bottom-right-radius: 2.5px;\n margin-right: 2px;\n}\ndiv.rightmove span.total {\n border-right-width: 0px;\n border-right-style: solid;\n border-top-left-radius: 2.5px;\n border-bottom-left-radius: 2.5px;\n margin-left: 2px;\n}\nspan.total.human {\n background-color: #aad1d4;\n}\ndiv.leftmove span.total.human {\n border-left-color: #208C9F;\n}\ndiv.rightmove span.total.human {\n border-right-color: #208C9F;\n}\nspan.total.autoplayer {\n background-color: #d3c0c7;\n}\ndiv.leftmove span.total.autoplayer {\n border-left-color: var(--cancel-button);\n}\ndiv.rightmove span.total.autoplayer {\n border-right-color: var(--cancel-button);\n}\nspan.highlight {\n background-color: var(--ok-button);\n color: white;\n}\nspan.wordmove {\n text-transform: uppercase;\n padding-left: 3px;\n padding-right: 3px;\n font-size: 12px;\n}\nspan.wordmove i {\n font-weight: bold;\n padding-left: 3px;\n padding-right: 3px;\n font-size: 16px;\n}\nspan.othermove {\n text-transform: none;\n padding-left: 3px;\n font-size: 14px;\n}\ndiv.error p {\n display: inline;\n position: relative;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0;\n}\ndiv.error span.glyphicon {\n padding-right: 6px;\n}\nspan.pass-explain {\n font-weight: normal;\n font-style: italic;\n padding-left: 3px;\n padding-right: 3px;\n}\nspan.yesnobutton {\n height: 20px;\n text-align: center;\n background-color: white;\n font-size: 16px;\n font-weight: 700;\n margin-top: 0;\n margin-bottom: 0;\n margin-left: 4px;\n margin-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n padding-left: 12px;\n padding-right: 12px;\n border-radius: 5px;\n cursor: pointer;\n}\ndiv.resign span.yesnobutton {\n color: var(--cancel-button);\n}\ndiv.pass span.yesnobutton,\ndiv.pass-last span.yesnobutton {\n color: var(--triple-word-color);\n}\ndiv.exchange span.yesnobutton {\n color: var(--ok-button);\n}\ndiv.chall span.yesnobutton {\n color: var(--triple-letter-color);\n}\nspan.closebtn {\n color: var(--triple-word-color);\n}\nspan.yesnobutton#force-resign {\n display: none;\n}\ndiv.score.word-good {\n color: var(--ok-button);\n border-color: var(--ok-button);\n}\ndiv.score.manual {\n color: var(--triple-letter-color);\n border-color: var(--triple-letter-color);\n}\n@keyframes colorPulse {\n 0% {\n color: var(--ok-button);\n }\n 40% {\n color: var(--cancel-button);\n transform: scale(1.05);\n }\n 60% {\n color: var(--cancel-button);\n transform: scale(1.05);\n }\n 100% {\n color: var(--ok-button);\n }\n}\n@-webkit-keyframes colorPulse {\n 0% {\n color: var(--ok-button);\n }\n 40% {\n color: var(--cancel-button);\n transform: scale(1.05);\n }\n 60% {\n color: var(--cancel-button);\n transform: scale(1.05);\n }\n 100% {\n color: var(--ok-button);\n }\n}\ndiv.score.word-great {\n animation: colorPulse 1.5s infinite;\n -webkit-animation: colorPulse 1.5s infinite;\n border-color: var(--ok-button);\n}\ndiv.score.opponent {\n color: white;\n background-color: var(--cancel-button);\n border: none;\n}\ndiv.score.localplayer {\n color: white;\n background-color: var(--human-color);\n border: none;\n}\ndiv.channel {\n position: absolute;\n width: 32px;\n height: 32px;\n text-align: center;\n bottom: 40px;\n left: 32px;\n background-color: transparent;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n font-size: 20px;\n overflow: hidden;\n visibility: hidden;\n}\ndiv.channel:before {\n content: \"\\E051\";\n /* glyphicon-link */\n}\ndiv.word-check.word-good {\n color: var(--ok-button);\n border-color: var(--ok-button);\n visibility: visible;\n}\ndiv.word-check.word-good:before {\n content: \"\\E344\";\n /* glyphicon-thumbs-up */\n}\ndiv.word-check.word-bad {\n color: var(--cancel-button);\n border-color: var(--cancel-button);\n visibility: visible;\n}\ndiv.word-check.word-bad:before {\n content: \"\\E200\";\n /* glyphicon-ban-circle */\n}\ndiv.board-help {\n position: absolute;\n z-index: 2;\n left: 22px;\n top: 160px;\n width: 54px;\n background-color: white;\n padding: 2px;\n border-radius: 5px;\n cursor: default;\n}\ndiv.board-help-close {\n width: 50px;\n text-align: right;\n background-color: white;\n margin: 2px;\n}\ndiv.board-help-close span {\n background-color: var(--cancel-button);\n color: white;\n padding: 1px;\n padding-top: 2px;\n padding-left: 2px;\n cursor: pointer;\n}\ndiv.board-help-close span:hover {\n background-color: var(--triple-word-color);\n}\ndiv.board-colors {\n margin: 0;\n padding: 0;\n}\ndiv.board-color {\n width: 44px;\n text-align: center;\n font-size: 12px;\n line-height: 15px;\n padding-left: 3px;\n padding-right: 3px;\n padding-top: 4px;\n padding-bottom: 4px;\n font-weight: 400;\n border: solid 2px white;\n border-collapse: collapse;\n}\ndiv.board-color#triple-word {\n background-color: var(--triple-word-color);\n color: white;\n border-bottom: none;\n}\ndiv.board-color#double-word {\n background-color: var(--double-word-color);\n border-bottom: none;\n}\ndiv.board-color#triple-letter {\n background-color: var(--triple-letter-color);\n color: white;\n border-bottom: none;\n}\ndiv.board-color#double-letter {\n background-color: var(--double-letter-color);\n border-bottom: none;\n}\ndiv.board-color#single-letter {\n background-color: var(--board-background);\n color: black;\n}\ndiv.scorediff {\n position: absolute;\n width: 50px;\n height: 28px;\n text-align: center;\n vertical-align: middle;\n bottom: 272px;\n left: 643px;\n background-color: var(--cancel-button);\n font-size: 18px;\n font-weight: normal;\n color: white;\n visibility: hidden;\n padding-top: 3px;\n padding-bottom: 2px;\n font-family: 'Open Sans', 'Arial', sans-serif;\n}\ndiv.posdiff {\n background-color: var(--ok-button);\n}\ndiv.navbtn {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n top: auto;\n width: 90px;\n height: 30px;\n bottom: 136px;\n line-height: 24px;\n background-color: var(--ok-button);\n}\ndiv.navbtn#navnext {\n position: absolute;\n left: 550px;\n font-weight: normal;\n}\ndiv.navbtn#navprev {\n position: absolute;\n left: 110px;\n font-weight: normal;\n}\nspan#nav-prev-visible {\n display: inline;\n}\nspan#nav-prev-waiting {\n display: none;\n}\nspan#nav-next-visible {\n display: inline;\n}\nspan#nav-next-waiting {\n display: none;\n}\ndiv.closebtn {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 100px;\n height: 28px;\n bottom: 12px;\n background-color: var(--ok-button);\n}\n#review-close {\n position: absolute;\n right: 12px;\n}\nspan#total0,\nspan#total1 {\n font-size: 28px;\n margin-left: 8px;\n margin-right: 8px;\n}\ndiv.promo-content h2 {\n color: var(--ok-button);\n font-size: 24px;\n line-height: 30px;\n font-weight: bold;\n}\ndiv.promo-content h2 span.glyphicon-coffee-cup,\ndiv.help-container span.glyphicon-coffee-cup {\n color: var(--triple-word-color);\n}\ndiv.promo-krafla {\n background-color: var(--board-background);\n}\ndiv.btn-krafla-yes {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 80px;\n height: 28px;\n bottom: 48px;\n right: 48px;\n top: auto;\n background-color: var(--ok-button);\n}\ndiv#btn-thanks {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n width: 96px;\n height: 28px;\n bottom: 24px;\n right: 24px;\n top: auto;\n background-color: var(--ok-button);\n}\ndiv#btn-cancel-yes {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 160px;\n height: 28px;\n bottom: 24px;\n right: 24px;\n top: auto;\n background-color: var(--cancel-button);\n}\ndiv#btn-cancel-no {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 160px;\n height: 28px;\n bottom: 24px;\n right: 208px;\n top: auto;\n background-color: var(--ok-button);\n}\n.tabbed-page a:link,\n.tabbed-page a:visited {\n text-decoration: none;\n color: #5699A5;\n}\n.tabbed-page a:hover {\n text-decoration: none;\n color: var(--triple-word-color);\n}\na.ui-tabs-anchor:link,\na.ui-tabs-anchor:visited {\n color: white;\n}\n.notifier {\n display: none;\n /* Set to inline-block by the script if shown */\n background-color: var(--cancel-button);\n color: white;\n border-radius: 9px;\n height: 18px;\n font-size: 13px;\n line-height: 18px;\n font-weight: 700;\n margin-left: 6px;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 16px;\n vertical-align: top;\n}\nspan#numgames {\n display: none;\n /* Set to inline-block by the script if shown */\n background-color: var(--cancel-button);\n color: white;\n border-radius: 9px;\n height: 18px;\n font-size: 13px;\n line-height: 18px;\n font-weight: 700;\n margin-left: 6px;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 16px;\n vertical-align: top;\n}\nspan#numchallenges {\n display: none;\n /* Set to inline-block by the script if shown */\n background-color: var(--cancel-button);\n color: white;\n border-radius: 9px;\n height: 18px;\n font-size: 13px;\n line-height: 18px;\n font-weight: 700;\n margin-left: 6px;\n padding-left: 5px;\n padding-right: 5px;\n margin-top: 16px;\n vertical-align: top;\n}\ndiv.smallprint {\n font-size: 12px;\n padding-top: 6px;\n}\ndiv.userid {\n position: absolute;\n top: 22px;\n right: 26px;\n max-width: 210px;\n height: 22px;\n text-align: right;\n font-size: 16px;\n line-height: 16px;\n font-weight: 700;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n padding: 6px 10px 4px 6px;\n margin: 0;\n z-index: 5;\n color: #5699A5;\n background-color: white;\n border-radius: 5px;\n cursor: pointer;\n}\ndiv.userid:hover {\n background-color: #5699A5;\n color: white;\n}\ndiv.listitem {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: 28px;\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 4px;\n padding-bottom: 4px;\n white-space: nowrap;\n justify-items: center;\n}\n.listheader > span {\n top: 0;\n}\n.listitem a {\n cursor: pointer;\n}\n.listitem a:link,\n.listitem a:visited {\n color: black;\n text-decoration: none;\n}\n.listitem a:hover {\n color: var(--triple-word-color);\n}\ndiv.oddlist {\n background-color: var(--board-background);\n}\ndiv.evenlist {\n background-color: #F7F0DE;\n}\ndiv.listheader {\n background-color: var(--list-header-background);\n font-weight: 400;\n border-bottom-width: 2px;\n border-bottom-color: var(--list-header-bottom);\n border-bottom-style: solid;\n}\ndiv#elo-hdr span {\n cursor: default;\n}\ndiv#elo-toggler {\n display: inline-block;\n position: absolute;\n top: 38px;\n bottom: auto;\n left: auto;\n right: 6px;\n z-index: 10;\n}\nspan.bold {\n font-weight: 700;\n}\ndiv#initials {\n margin-top: 8px;\n margin-bottom: 14px;\n padding: 0;\n}\ndiv.user-cat {\n display: inline-block;\n vertical-align: middle;\n}\ndiv.user-cat#user-search {\n float: right;\n}\ndiv.user-cat span {\n font-size: 16px;\n cursor: pointer;\n padding-left: 4px;\n padding-top: 1px;\n padding-bottom: 4px;\n padding-right: 6px;\n margin: 2px;\n}\ndiv.user-cat span.shown {\n background-color: rgba(158, 213, 218, 0.3);\n border-radius: 5px;\n}\ndiv.user-cat span:hover {\n color: white;\n background-color: var(--header-hover-color);\n border-radius: 5px;\n}\ndiv.user-cat#user-search span.glyphicon-search {\n padding-top: 6px;\n padding-bottom: 6px;\n top: 0;\n}\nspan.versus-cat span {\n font-size: 16px;\n cursor: pointer;\n padding-left: 6px;\n padding-top: 1px;\n padding-bottom: 4px;\n padding-right: 6px;\n margin: 2px;\n}\nspan.versus-cat span.shown {\n background-color: rgba(158, 213, 218, 0.2);\n border-radius: 5px;\n}\nspan.versus-cat span:hover {\n color: white;\n background-color: var(--double-letter-color);\n border-radius: 5px;\n}\nspan.ready-btn {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: 15px;\n line-height: 15px;\n top: 0;\n cursor: default; /* Not a pushable button even though it looks like one */\n color: white;\n background-color: var(--triple-letter-color);\n border-radius: 5px;\n padding: 4px;\n margin: 0 4px 0 0;\n}\nspan.ready-btn:before {\n content: \"\\E344\";\n /* thumbs-up */\n}\nspan.timed-btn {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: 15px;\n line-height: 15px;\n top: 0px;\n cursor: default;\n color: white;\n background-color: #f5c862;\n border-radius: 5px;\n padding: 4px;\n margin: 0 4px 0 0;\n}\nspan.timed-btn:before {\n content: \"\\E055\";\n /* time */\n}\nspan.fairplay-btn {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: 15px;\n line-height: 15px;\n top: 0px;\n cursor: default;\n color: white;\n background-color: var(--ok-button);\n border-radius: 5px;\n padding: 4px;\n margin: 0 4px 0 0;\n}\nspan.fairplay-btn:before {\n content: \"\\E151\";\n /* edit */\n}\nspan.fairplay-btn.large {\n /* This is shown in the board header */\n top: 0;\n font-size: 16px;\n border-width: 1px;\n border-color: white;\n border-style: solid;\n padding: 2px;\n padding-bottom: 4px;\n}\nspan.manual-btn {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: 15px;\n line-height: 15px;\n top: 0px;\n cursor: default;\n color: white;\n background-color: var(--cancel-button);\n border-radius: 5px;\n padding: 4px;\n margin: 0 4px 0 0;\n}\nspan.manual-btn:before {\n content: \"\\E065\";\n /* lightbulb */\n}\nspan.elo-btn {\n display: inline-block;\n width: 30px;\n min-width: 30px;\n font-size: 15px;\n line-height: 16px;\n text-align: center;\n font-weight: bold;\n color: white;\n border-radius: 5px;\n padding: 5px 6px;\n margin: 0;\n}\nspan.elo-btn .glyphicon {\n font-size: 15px;\n line-height: 12px;\n}\nspan.elo-btn.left {\n margin-left: 6px;\n margin-right: 4px;\n}\nspan.elo-btn.right {\n margin-left: 4px;\n margin-right: 6px;\n}\nspan.elo-btn.invisible {\n visibility: hidden;\n}\nspan.elo-btn.elo-win {\n background-color: var(--ok-button);\n}\nspan.elo-btn.elo-loss {\n background-color: var(--cancel-button);\n}\nspan.elo-btn.elo-neutral {\n background-color: var(--double-letter-color);\n}\nspan.elo-hdr-left {\n background-color: var(--triple-letter-color);\n color: white;\n border-radius: 5px;\n padding: 4px;\n padding-left: 6px;\n padding-right: 6px;\n margin-left: 6px;\n margin-right: 6px;\n top: 0px;\n}\nspan.elo-hdr-right {\n background-color: var(--triple-letter-color);\n color: white;\n border-radius: 5px;\n padding: 4px;\n padding-left: 6px;\n padding-right: 6px;\n margin-left: 6px;\n margin-right: 6px;\n top: 0px;\n}\nspan.usr-info {\n position: relative;\n top: 2px;\n display: inline-block;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-size: 15px;\n line-height: 15px;\n top: 0px;\n cursor: pointer;\n color: white;\n background-color: var(--ok-button);\n border-radius: 5px;\n padding: 4px;\n margin: 0;\n}\nspan.usr-info:before {\n content: \"\\E028\";\n /* Search */\n}\nspan.usr-info:hover {\n background-color: var(--triple-word-color);\n}\n#userlist span.glyphicon.glyphicon-star {\n color: var(--triple-letter-color);\n}\n#userlist span.glyphicon.glyphicon-hand-right,\n#elolist span.glyphicon.glyphicon-hand-right,\n#chall-sent span.glyphicon.glyphicon-hand-right,\n#chall-received span.glyphicon.glyphicon-thumbs-down,\np span.glyphicon.glyphicon-flag,\n#gamelist span.glyphicon.glyphicon-flag,\n#gamelist span.glyphicon.glyphicon-hourglass {\n color: var(--triple-word-color);\n}\n#recentlist span.glyphicon.glyphicon-bookmark,\n#usr-recent span.glyphicon.glyphicon-bookmark,\n#gamelist span.glyphicon.glyphicon-bookmark {\n color: var(--ok-button);\n}\nspan.glyphicon.glyphicon-lightbulb.grayed {\n color: rgba(0, 0, 0, 0.2);\n}\n.listheader span.glyphicon.glyphicon-star-empty,\n.listheader span.glyphicon.glyphicon-hand-right.grayed,\n.listheader span.glyphicon.glyphicon-thumbs-down.grayed,\n.listheader span.glyphicon.glyphicon-flag.grayed,\n#gamelist span.glyphicon.glyphicon-flag.grayed,\n#userlist span.glyphicon.glyphicon-star-empty,\n#userlist span.glyphicon.glyphicon-hand-right.grayed,\n#elolist span.glyphicon.glyphicon-hand-right.grayed {\n color: rgba(0, 0, 0, 0.15);\n}\nspan.glyphicon.glyphicon-hourglass.grayed,\nspan.glyphicon.glyphicon-shopping-bag.grayed {\n color: rgba(0, 0, 0, 0.1);\n}\n.listheader span.glyphicon.glyphicon-bookmark.grayed,\n#recentlist span.glyphicon.glyphicon-bookmark.grayed,\n#usr-recent span.glyphicon.glyphicon-bookmark.grayed,\n#gamelist span.glyphicon.glyphicon-bookmark.grayed,\n#gamelist span.glyphicon.glyphicon-hourglass.grayed {\n color: rgba(0, 0, 0, 0.06);\n}\n#gamelist span.glyphicon.glyphicon-flag.zombie {\n color: var(--double-letter-color);\n}\ndiv#user-no-match {\n display: none;\n position: absolute;\n top: 220px;\n left: 140px;\n width: 600px;\n z-index: 10;\n text-align: center;\n}\ndiv#user-no-match span#search-prefix {\n font-weight: bold;\n}\ndiv.modal-close {\n text-align: center;\n font-size: 18px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n position: absolute;\n width: 36px;\n height: 28px;\n bottom: 12px;\n right: 12px;\n top: auto;\n}\ndiv#usr-info-close {\n width: 72px;\n /* Override */\n background-color: var(--ok-button);\n}\ndiv#load-game {\n width: 72px;\n /* Override */\n background-color: var(--ok-button);\n}\ndiv#wait-cancel {\n right: 12px;\n width: 72px;\n /* Override */\n background-color: var(--cancel-button);\n}\ndiv#accept-cancel {\n right: 12px;\n width: 72px;\n /* Override */\n background-color: var(--cancel-button);\n}\ndiv#blank-close,\ndiv#promo-close {\n background-color: var(--cancel-button);\n}\ndiv#thanks-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 212px;\n right: 224px;\n width: 460px;\n height: 248px;\n line-height: 1.62em;\n}\ndiv#cancel-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 150px;\n right: 200px;\n width: 508px;\n height: 372px;\n line-height: 1.62em;\n}\ndiv#confirm-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 236px;\n right: 224px;\n width: 460px;\n height: 200px;\n line-height: 1.62em;\n}\ndiv#conditions-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 80px;\n right: 124px;\n width: 660px;\n height: 536px;\n line-height: 1.62em;\n padding-left: 24px;\n padding-right: 24px;\n}\ndiv#usr-info-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 16px;\n right: 12px;\n width: 884px;\n height: 644px;\n}\ndiv.thanks-content,\ndiv#cancel-content,\ndiv#confirm-content {\n margin-top: 24px;\n margin-left: 24px;\n margin-right: 24px;\n}\ndiv.usr-info-hdr {\n font-size: 18px;\n margin-top: 0px;\n margin-bottom: 0px;\n}\ndiv.usr-info-hdr h1 {\n display: inline;\n font-size: 36px;\n font-weight: bold;\n}\ndiv.usr-info-hdr h2 {\n display: inline;\n font-size: 24px;\n font-weight: bold;\n}\nspan.vbar {\n color: var(--light-background);\n font-size: 2em;\n padding-left: 10px;\n padding-right: 10px;\n}\nh1.usr-info-icon {\n color: var(--light-background);\n}\nh1.usr-info-icon span.glyphicon-coffee-cup {\n color: var(--ok-button);\n}\ndiv.usr-info-fav {\n display: inline-block;\n position: absolute;\n top: 26px;\n right: 20px;\n color: var(--triple-letter-color);\n font-size: 26px;\n cursor: pointer;\n}\ndiv.usr-info-fav span.glyphicon-star-empty {\n color: rgba(0, 0, 0, 0.15);\n}\ndiv#usr-info-chall {\n display: inline-block;\n position: absolute;\n top: 68px;\n right: 20px;\n}\ndiv#usr-info-chall.chall span.glyphicon-hand-right {\n font-size: 26px;\n color: var(--triple-word-color);\n}\ndiv#usr-info-chall.no-chall span.glyphicon-hand-right {\n font-size: 26px;\n color: rgba(0, 0, 0, 0.15);\n}\nspan.best-word {\n text-transform: uppercase;\n font-weight: bold;\n font-style: italic;\n}\np#usr-best {\n display: inline-block;\n position: absolute;\n right: 16px;\n top: 50px;\n text-align: right;\n}\np#usr-best a:link,\np#usr-best a:visited {\n text-decoration: none;\n color: #5699A5;\n}\np#usr-best a:hover {\n text-decoration: none;\n color: var(--triple-word-color);\n}\ndiv#stats-toggler {\n margin-top: 7px;\n margin-right: 8px;\n}\ndiv#usr-stats {\n position: absolute;\n height: 48px;\n width: 680px;\n bottom: 12px;\n left: 12px;\n vertical-align: top;\n}\ndiv#usr-stats-human {\n display: inline-block;\n vertical-align: top;\n}\ndiv#usr-stats-all {\n display: none;\n vertical-align: top;\n}\ndiv#own-stats-human {\n display: inline-block;\n vertical-align: top;\n}\ndiv#own-stats-all {\n display: none;\n vertical-align: top;\n}\ndiv.stats-games {\n color: #ec9d07;\n border-color: #ec9d07;\n}\ndiv.stats-win-ratio {\n color: var(--ok-button);\n border-color: var(--ok-button);\n}\ndiv.stats-avg-score {\n color: #ec9d07;\n border-color: #ec9d07;\n}\ndiv.chall-hdr {\n font-size: 18px;\n margin-top: 6px;\n margin-bottom: 15px;\n overflow-x: hidden;\n}\ndiv.chall-hdr table {\n border-spacing: 0;\n margin: 0;\n padding: 0;\n vertical-align: top;\n}\ntd.l-border {\n border-left-style: solid;\n border-left-color: black;\n border-left-width: 2px;\n padding-left: 12px;\n white-space: nowrap;\n}\ndiv.chall-hdr h1 {\n display: inline-block;\n font-size: 28px;\n line-height: 30px;\n margin-left: 6px;\n margin-top: 0;\n margin-bottom: 8px;\n font-weight: bold;\n}\ndiv.chall-hdr h2 {\n display: block;\n font-size: 22px;\n line-height: 24px;\n margin-top: 6px;\n margin-bottom: 4px;\n color: #208C9F;\n}\nh1.chall-icon {\n display: block;\n color: #208C9F;\n margin-right: 12px;\n margin-top: 0;\n margin-bottom: 0;\n}\ndiv.chall-time {\n display: inline-block;\n width: 300px;\n left: 66px;\n height: 32px;\n padding-top: 8px;\n padding-bottom: 1px;\n padding-left: 12px;\n padding-right: 12px;\n margin-top: 7px;\n margin-bottom: 4px;\n text-align: center;\n font-size: 20px;\n font-weight: 700;\n line-height: 22px;\n background-color: #cccccc;\n color: white;\n cursor: pointer;\n border-radius: 4px;\n}\ndiv.chall-time.selected {\n background-color: var(--triple-word-color);\n color: black;\n}\ndiv.chall-time:hover {\n background-color: var(--double-letter-color);\n}\ndiv.chall-time.selected:hover {\n background-color: var(--double-word-color);\n}\ndiv.chall-time span.glyphicon-time {\n margin-right: 8px;\n}\nspan#chall-online {\n position: relative;\n top: 2px;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n display: inline-block;\n top: 0px;\n color: white;\n background-color: rgba(228, 234, 240, 0.65);\n border-radius: 5px;\n padding: 5px;\n margin: 0;\n}\nspan#chall-online:before {\n content: \"\\E242\";\n /* Flash */\n}\nspan#chall-online.online {\n background-color: var(--ok-button);\n}\ndiv#chall-newbag {\n margin-top: 24px;\n padding-left: 6px;\n padding-right: 152px;\n font-size: 14px;\n text-align: left;\n}\ndiv#chall-newbag td {\n vertical-align: middle;\n padding-right: 12px;\n}\ndiv#chall-manual {\n margin-top: 4px;\n font-size: 14px;\n}\ndiv#manual-toggler {\n margin-top: 12px;\n margin-bottom: 0;\n}\ndiv.wait-explain {\n padding-left: 48px;\n padding-right: 12px;\n padding-top: 24px;\n padding-bottom: 24px;\n}\ndiv#user-dialog {\n visibility: visible;\n}\ndiv#user-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 40px;\n right: 64px;\n width: 736px;\n height: 582px;\n}\ndiv#user-logout {\n left: 12px;\n width: 144px;\n /* Override */\n background-color: var(--triple-word-color);\n}\ndiv#user-friend {\n left: 180px;\n width: 280px;\n /* Override */\n background-color: var(--ok-button);\n}\ndiv#user-unfriend {\n left: 180px;\n width: 280px;\n /* Override */\n padding-top: 6px;\n border-style: solid;\n border-width: 2px;\n border-color: var(--ok-button);\n background-color: white;\n color: var(--ok-button);\n line-height: 24px;\n}\ndiv#user-unfriend span.glyphicon-coffee-cup {\n color: var(--triple-word-color);\n}\ndiv#user-cancel {\n right: 108px;\n /* 12 + 72 + 12 + 12 */\n width: 72px;\n /* Override */\n background-color: var(--cancel-button);\n}\ndiv#user-ok {\n right: 12px;\n /* 12 */\n width: 72px;\n /* Override */\n background-color: var(--ok-button);\n}\ndiv#accept-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 8px;\n left: 4px;\n width: 335px;\n height: 488px;\n}\nh1#accept-nick {\n display: inline-block;\n font-size: 28px;\n line-height: 30px;\n margin-left: 6px;\n margin-top: 0;\n margin-bottom: 8px;\n}\n.blink {\n animation: opacityBlink 1s infinite;\n -webkit-animation: opacityBlink 1s infinite;\n}\n.opp-ready {\n animation: opacityBlink 1s infinite;\n -webkit-animation: opacityBlink 1s infinite;\n}\na.opp-ready:link,\na.opp-ready:visited {\n color: var(--cancel-button);\n}\na.opp-ready:hover {\n color: var(--triple-word-color);\n}\ndiv.blank-rack {\n position: relative;\n top: 0;\n left: 0;\n}\n.blank-rack table.board {\n border-spacing: 8px;\n}\ndiv.welcome {\n font-size: 15px;\n line-height: 20px;\n font-weight: normal;\n padding-bottom: 12px;\n}\n.welcome a:link,\n.welcome a:visited {\n text-decoration: none;\n color: #5699A5;\n}\n.welcome a:hover {\n text-decoration: none;\n color: var(--triple-word-color);\n}\ndiv.dialog-spacer {\n margin-top: 2px;\n margin-bottom: 4px;\n}\nspan.caption {\n display: inline-block;\n position: relative;\n vertical-align: top;\n top: 10px;\n width: 140px;\n margin-right: 12px;\n overflow: hidden;\n text-align: right;\n}\nspan.subcaption {\n display: inline-block;\n position: relative;\n vertical-align: top;\n top: 16px;\n margin-left: 18px;\n margin-right: 6px;\n}\nspan.caption.sub {\n top: 16px;\n}\nspan.asterisk {\n color: red;\n font-size: 1.4em;\n font-weight: bold;\n margin-left: 4px;\n}\ndiv.explain {\n margin-left: 158px;\n margin-bottom: 12px;\n font-size: 14px;\n text-align: left;\n font-style: italic;\n color: var(--light-shadow);\n}\ndiv.subexplain {\n display: inline-block;\n width: 420px;\n vertical-align: top;\n margin-top: 11px;\n margin-left: 18px;\n margin-right: 6px;\n font-size: 14px;\n color: var(--light-shadow);\n}\ndiv.errinput {\n margin-left: 158px;\n margin-bottom: 10px;\n font-size: 16px;\n text-align: left;\n font-weight: bold;\n color: var(--cancel-button);\n}\ninput.text {\n font-family: var(--primary-font);\n font-size: 20px;\n font-weight: 700;\n height: 32px;\n border-style: solid;\n border-color: var(--ok-button);\n border-width: 2px;\n border-radius: 5px;\n margin-bottom: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n padding-left: 8px;\n padding-right: 8px;\n}\ninput.text:focus {\n background-color: #ffffc8;\n border-style: solid;\n border-color: var(--ok-button);\n border-width: 2px;\n border-radius: 5px;\n outline-style: none;\n}\ninput.username {\n width: 300px;\n}\ninput.fullname {\n width: 450px;\n}\ninput.email {\n width: 400px;\n}\ninput.text#search-id {\n font-weight: normal;\n height: 28px;\n font-size: 18px;\n border-color: var(--double-letter-color);\n margin-top: 0px;\n margin-bottom: 0px;\n}\nbutton[type=\"submit\"] {\n font-family: var(--primary-font);\n font-size: 20px;\n font-weight: 400;\n height: 40px;\n color: white;\n text-align: center;\n width: 322px;\n border-width: 0;\n border-radius: 5px;\n background-color: var(--ok-button);\n margin-top: 20px;\n margin-left: 0;\n margin-right: 0;\n margin-bottom: 0;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-left: 8px;\n padding-right: 8px;\n cursor: pointer;\n}\nbutton[type=\"submit\"]:focus,\nbutton[type=\"submit\"]:hover {\n outline: var(--focus-border) solid 3px;\n}\nbutton.login {\n margin-top: 24px;\n}\nbutton.logout {\n margin-top: 80px;\n background-color: var(--cancel-button);\n}\ninput[type=\"checkbox\"] {\n display: none;\n}\ndiv.toggler {\n background-color: var(--light-background);\n color: white;\n margin-top: 9px;\n margin-bottom: 3px;\n border-radius: 10px;\n cursor: pointer;\n overflow: hidden;\n border: white solid 3px;\n}\ndiv.toggler:focus, div.toggler:hover {\n outline-style: none;\n border: var(--focus-border) solid 3px;\n}\ndiv.toggler div.option {\n display: inline-block;\n width: 46px;\n height: 28px;\n line-height: 28px;\n font-size: 21px;\n padding-top: 3px;\n padding-bottom: 3px;\n text-align: center;\n border-style: none;\n}\ndiv.toggler div.option.small {\n width: 36px;\n height: 24px;\n line-height: 22px;\n font-size: 18px;\n padding-top: 3px;\n padding-bottom: 2px;\n}\ndiv.toggler div.option.x-small {\n width: 30px;\n height: 20px;\n line-height: 20px;\n font-size: 15px;\n padding-top: 1px;\n padding-bottom: 3px;\n}\ndiv.toggler div.option.selected {\n background-color: var(--triple-letter-color);\n}\ndiv#fairplay-toggler div.option.selected {\n background-color: var(--ok-button);\n}\ndiv#fairplay-toggler span.glyphicon-edit {\n top: 0;\n}\ndiv #radioset {\n padding-top: 6px;\n padding-bottom: 24px;\n}\ndiv.disabled {\n background-color: var(--board-background);\n}\na.nodecorate:link {\n text-decoration: none;\n color: black;\n}\na.nodecorate:visited {\n text-decoration: none;\n color: black;\n}\na.nodecorate:hover {\n text-decoration: none;\n color: var(--triple-letter-color);\n}\na.iconlink:link {\n text-decoration: none;\n color: var(--triple-letter-color);\n}\na.iconlink:visited {\n text-decoration: none;\n color: var(--triple-letter-color);\n}\na.iconlink:hover {\n text-decoration: none;\n color: var(--triple-word-color);\n}\na.backlink:link {\n text-decoration: none;\n color: var(--board-background);\n}\na.backlink:visited {\n text-decoration: none;\n color: var(--board-background);\n}\na.backlink:hover {\n text-decoration: none;\n color: var(--triple-word-color);\n}\ndiv#tabs-1 p {\n line-height: 1.6em;\n}\ndiv#tabs-1 p img,\ndiv#tabs-3 p img {\n margin-left: 3px;\n margin-right: 2px;\n vertical-align: -3px;\n display: inline;\n}\ndiv#tabs-3 p,\ndiv#tabs-3 ol li,\ndiv#tabs-3 ol p,\ndiv#tabs-3 ol ul li {\n line-height: 1.65em;\n}\ndiv#tabs-3 ol {\n list-style-type: decimal;\n margin: auto;\n padding-inline-start: 40px;\n}\ndiv#tabs-3 li {\n display: list-item;\n margin: auto;\n padding: auto;\n}\ndiv.help-container ol li {\n font-weight: bold;\n}\ndiv.help-container ul li {\n font-weight: normal;\n list-style-type: disc;\n}\ndiv.help-container table {\n border-spacing: 0;\n border-collapse: collapse;\n}\ndiv.help-container td {\n margin: 0;\n padding: 4px;\n padding-left: 8px;\n padding-right: 8px;\n text-align: right;\n border-width: 1px;\n border-style: solid;\n width: 80px;\n}\ndiv.help-container td.row-caption {\n text-align: left;\n font-weight: bold;\n width: 120px;\n}\ndiv.help-container span.glyphicon-hourglass {\n color: var(--cancel-button);\n}\ndiv.help-container p {\n font-weight: normal;\n}\ndiv.help-container img.browserlogo {\n height: 28px;\n width: auto;\n object-fit: scale-down;\n margin-right: 8px;\n}\ndiv.help-container b.vcenter {\n position: relative;\n top: -8px;\n}\ndiv.twolist {\n -webkit-column-count: 2;\n -moz-column-count: 2;\n column-count: 2;\n font-size: 18px;\n line-height: 30px;\n padding-bottom: 12px;\n}\nspan.twoword {\n font-weight: bold;\n padding-right: 3px;\n}\nspan.errword {\n text-transform: uppercase;\n}\ndiv#emoticons-div {\n padding-bottom: 24px;\n}\ntable#emoticons td {\n font-family: 'Courier', sans-serif;\n font-size: 20px;\n text-align: center;\n}\nimg#villi {\n float: right;\n margin-left: 12px;\n margin-top: 18px;\n margin-bottom: 12px;\n}\ndiv.signup-header {\n position: absolute;\n top: 12px;\n left: 110px;\n width: 900px;\n}\n\n/* ================= MOBILE PORTRAIT UI, LARGE ENOUGH TO BE NON-SCROLLABLE =============== */\n\n@media all and (max-width: 1023px) and (min-height: 552px) {\n /* On sufficiently large mobile screens, keep the body fixed (unscrollable) */\n div.netskrafl-container {\n /* position: fixed; */\n overflow: hidden;\n }\n}\n\n/* ================= MOBILE PORTRAIT UI, EXTRA TALL =============== */\n\n@media all and (max-width: 1023px) and (min-height: 632px) {\n /* iPhone X or taller */\n /* Tall mobile phones: use two lines to display the header */\n div.tabbed-page {\n height: 605px;\n overflow: hidden;\n }\n div#tabs > div[role=tabpanel],\n div#main-tabs > div[role=tabpanel] {\n height: 556px;\n }\n div.scoreleft {\n display: inline-block;\n position: relative;\n left: auto;\n top: -4px;\n padding-left: 10px;\n }\n div.scoreright {\n display: inline-block;\n position: relative;\n right: auto;\n top: -4px;\n padding-right: 10px;\n }\n div.player-btn {\n display: inline-block;\n position: relative;\n top: 0;\n left: 0;\n padding-top: 4px;\n width: 128px;\n }\n div.robot-btn {\n display: inline-block;\n position: relative;\n top: 0;\n left: 0;\n padding-top: 4px;\n width: 128px;\n }\n div.player-btn.left,\n div.robot-btn.left {\n padding-left: 4px;\n }\n div.player-btn.right,\n div.robot-btn.right {\n padding-right: 4px;\n }\n div.heading {\n height: auto;\n }\n div.fairplay {\n top: 21px;\n }\n span.fairplay-btn.large {\n /* This is shown in the board header */\n font-size: 18px;\n padding: 4px;\n padding-bottom: 6px;\n }\n div.right-area {\n top: 37px;\n }\n div.right-tab {\n top: -32px;\n width: 64px;\n min-width: 64px;\n padding-top: 6px;\n font-size: 18px;\n }\n div.right-tab#tab-board {\n left: 8px;\n }\n div.right-tab#tab-movelist {\n left: 78px;\n }\n div.right-tab#tab-twoletter {\n left: 148px;\n }\n div.right-tab#tab-games {\n left: 218px;\n }\n div.right-tab#tab-chat {\n left: 288px;\n }\n div.board-area {\n top: 103px;\n }\n div #userlist,\n div #elolist {\n height: 424px;\n /* 14 lines @ 36px each */\n }\n div #gamelist {\n height: 576px;\n /* 16 lines @ 36px each */\n }\n div #recentlist {\n height: 504px;\n /* 14 lines @ 36px each */\n }\n div #usr-recent {\n height: 540px;\n /* 15 lines @ 36px each */\n }\n div #chall-sent,\n div #chall-received {\n height: 288px;\n /* 8 lines @ 36px each */\n }\n div.chat,\n div.twoletter {\n height: 474px;\n }\n div.games {\n height: 450px;\n }\n div.movelist-container {\n height: 466px;\n }\n div.movelist {\n height: 358px;\n }\n div.rack-row {\n margin-top: 12px;\n }\n}\n\n/* iPhone 11 or larger: scale the UI to appear larger on the screen */\n@media all and (min-width: 414px) and (max-width: 1023px) and (min-height: 652px) {\n div.netskrafl-container {\n /*\n transform: scale(1.1);\n transform-origin: center top;\n */\n margin-top: 4px;\n height: 652px;\n }\n}\n\n/* ================= MOBILE LANDSCAPE UI ====================== */\n\n@media all and (min-width: 667px) {\n /* Mobile screen, landscape mode */\n div.netskrafl-container {\n /* Reference width */\n width: 667px;\n /* Reference height */\n height: 375px;\n overflow-y: hidden;\n }\n div.tabbed-page {\n width: 100%;\n }\n .tab-legend {\n display: inline;\n padding-left: 12px;\n }\n div.help-container {\n width: 100%;\n }\n /* Paragraphs of help text that should be centered on screens that are wide enough */\n p.help-center {\n text-align: center;\n }\n div.heading div.header-logo {\n display: none;\n }\n div.logowrapper {\n width: 0%;\n }\n div.playerwrapper {\n width: 100%;\n padding-top: 0;\n }\n div.fairplay {\n top: 8px;\n }\n div.login-btn-small {\n position: fixed;\n top: 128px;\n left: 50%;\n width: 50%;\n }\n div.board-area {\n position: absolute;\n top: 0;\n padding-top: 6px;\n }\n div.board {\n top: 8px;\n padding-top: 1px;\n background-color: transparent;\n }\n div.rightcol {\n width: 283px;\n top: 8px;\n left: 376px;\n height: 70px;\n }\n div.rack-row {\n display: none;\n }\n div.recallbtn {\n left: 376px;\n top: 158px;\n }\n div.rack-left div.recallbtn {\n display: none;\n }\n div.scramblebtn {\n left: 376px;\n top: 158px;\n }\n .bottom-btn-landscape {\n top: 158px;\n display: none;\n border-width: 0;\n color: white;\n }\n div.submitexchange {\n top: 158px;\n display: none;\n border-width: 0;\n color: white;\n left: 441px;\n background-color: var(--ok-button);\n }\n div.submitpass {\n top: 158px;\n display: none;\n border-width: 0;\n color: white;\n left: 506px;\n background-color: var(--triple-word-color);\n }\n div.submitresign {\n top: 158px;\n display: none;\n border-width: 0;\n color: white;\n left: 571px;\n background-color: var(--cancel-button);\n }\n div.submitmove {\n left: 551px;\n top: 158px;\n }\n div.submitmove#move-mobile {\n display: none;\n }\n div.waitmove {\n left: 551px;\n top: 158px;\n }\n div.submitnewgame {\n left: 551px;\n top: 158px;\n }\n div.player {\n min-height: 36px;\n }\n div.player-btn {\n width: 84px;\n padding-top: 6px;\n }\n div.robot-btn {\n width: 84px;\n padding-top: 6px;\n }\n div.scoreleft,\n div.scoreright {\n top: 3px;\n }\n div.right-tab {\n display: none;\n }\n div.opp-turn {\n display: none;\n }\n div.movelist-container {\n height: 300px;\n padding-top: 0px;\n padding-bottom: 0px;\n }\n div.movelist {\n height: 100%;\n }\n div.right-area.with-clock div.movelist-container {\n /* If in a clock game, reduce the movelist height by two lines (2 * 20px) */\n height: 260px;\n }\n div.movelist-container div.bag {\n display: none;\n }\n div#gameover {\n display: none;\n }\n div.stats-box {\n width: 448px;\n left: 90px;\n }\n div#own-stats {\n height: 16px;\n }\n p#own-best {\n left: auto;\n right: 6px;\n top: 0px;\n text-align: right;\n font-size: 0.85em;\n line-height: 1.4em;\n }\n div #chall-sent,\n div #chall-received {\n height: 108px;\n /* 3 lines @ 36px each */\n }\n div.games,\n div.twoletter,\n div.chat {\n display: none;\n }\n div.right-area {\n top: 8px;\n height: 316px;\n }\n span.list-chall {\n width: 240px;\n max-width: 240px;\n }\n span.list-fullname-robot {\n width: 320px;\n max-width: 320px;\n }\n span.list-opp {\n width: 180px;\n max-width: 180px;\n }\n div#tabs > div[role=tabpanel],\n div#main-tabs > div[role=tabpanel] {\n height: 326px;\n }\n div#tabs-1 span.list-ts-short,\n div#tabs-1 span.list-manual,\n div#tabs-4 span.list-ts-short {\n display: inline-block;\n }\n div#tabs-2 span.list-ts {\n display: inline-block;\n }\n div#tabs-3 span.list-nick {\n width: 180px;\n max-width: 180px;\n }\n div#tabs-4 span.list-nick {\n width: 220px;\n max-width: 220px;\n }\n div#blank-form {\n display: none;\n }\n}\n\n@media all and (min-width: 667px) and (max-height: 360px) {\n div.board {\n transform: scale(0.96);\n transform-origin: top left;\n }\n}\n\n/* fullscreen.css */\n\n@media all and (min-width: 1024px) {\n\n .ui-helper-reset {\n line-height: 36px;\n }\n .ui-tabs .ui-tabs-panel {\n background-color: var(--tab-background);\n padding: 1em 1.4em;\n }\n .ui-widget-content {\n border: 2px solid var(--container-bg-color);\n background-color: var(--tab-background);\n }\n .ui-widget-header {\n background-color: var(--header-background);\n }\n .ui-widget-header .ui-state-active {\n background-color: var(--tab-background);\n }\n .ui-state-default,\n .ui-widget-content .ui-state-default {\n border: 2px solid var(--container-bg-color);\n }\n .ui-state-active,\n .ui-widget-content .ui-state-active {\n border: 2px solid var(--container-bg-color);\n background-color: var(--tab-background);\n }\n .ui-state-hover,\n .ui-widget-content .ui-state-hover,\n .ui-state-focus,\n .ui-widget-content .ui-state-focus {\n border: 2px solid var(--container-bg-color);\n }\n .ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n min-width: auto;\n padding-left: 1em;\n padding-right: 1em;\n text-align: left;\n }\n .ui-tabs .ui-tabs-nav .ui-tabs-anchor.sp {\n /* Override tab width */\n min-width: 82px;\n }\n .ui-tabs .ui-tabs-nav li {\n box-shadow: none;\n }\n .ui-tabs .ui-tabs-nav li.ui-tabs-active {\n padding-bottom: 1px;\n background-color: var(--tab-background);\n }\n /* Large screen (iPad and larger) */\n div.netskrafl-container {\n width: 1024px;\n height: 768px;\n /* Was 748 */\n overflow-y: hidden;\n }\n div.game-container {\n height: 768px;\n }\n div.heading {\n height: auto;\n /* background-color: @heading-background; */\n }\n div.logo {\n display: block;\n }\n div#main-tabs div.header-logo {\n display: none;\n }\n div.circle {\n height: 38px;\n width: 38px;\n background-color: #80aede;\n border-radius: 50%;\n display: inline-block;\n position: relative;\n top: -6px;\n }\n div.circle span.glyphicon {\n top: 8px;\n }\n div.info {\n display: block;\n position: absolute;\n bottom: 148px;\n top: auto;\n left: 28px;\n width: 50px;\n height: 50px;\n font-size: 40px;\n text-align: center;\n }\n div.info:hover {\n animation: expand 0.4s;\n }\n div.login-error {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 96px;\n left: auto;\n right: 202px;\n width: 504px;\n height: 276px;\n }\n div.try-again {\n width: auto;\n }\n div.get-help {\n width: auto;\n }\n div.board-help {\n display: block;\n z-index: 2;\n }\n ul.ui-tabs-nav {\n display: block;\n }\n div.rightcol {\n position: absolute;\n width: 302px;\n top: 38px;\n right: 12px;\n height: auto;\n left: auto;\n }\n div.right-area {\n display: block;\n top: 0;\n margin-top: 12px;\n height: 420px;\n }\n div.games,\n div.twoletter,\n div.chat {\n display: block;\n border-radius: 0;\n }\n div.twoletter,\n div.chat {\n height: 420px;\n }\n div.board-area {\n margin: 0;\n /* width should not be set here */\n height: 750px;\n }\n div.board {\n position: absolute;\n top: 0;\n padding-top: 0;\n left: 93px;\n width: auto;\n height: auto;\n margin: 0;\n }\n .board td {\n min-height: 30px;\n min-width: 30px;\n height: 30px;\n width: 30px;\n border-width: 2px;\n border-radius: 3.5px;\n box-shadow: none;\n }\n table.board td.center:empty {\n font-size: 23px;\n line-height: 23px;\n }\n table.board tr {\n height: 34px;\n /* 32px + 2 * 1.0px */\n }\n .rack table.board {\n border-spacing: 4px;\n }\n .blank-rack table.board {\n border-spacing: 8px;\n }\n .rack table.board tr {\n height: 34px;\n /* 32px + 2 * 1.0px */\n }\n div.tile {\n font-size: 24px;\n line-height: 25px;\n height: 28px;\n width: 28px;\n margin: 0;\n padding-top: 2px;\n padding-right: 2px;\n }\n .rack div.tile {\n font-size: 24px;\n line-height: 25px;\n height: 28px;\n width: 28px;\n padding-top: 2px;\n margin-left: 0;\n }\n div.tile.wide,\n div.tile.extra-wide {\n /* Wide character tile */\n text-indent: -6px;\n margin-left: 0;\n padding-right: 2px;\n }\n div.tile.extra-wide {\n /* Extra wide character tile: Q */\n text-indent: -8px;\n }\n div.board div.tile.wide,\n div.board div.tile.extra-wide {\n /* Wide letter tile on the board */\n text-indent: -3.5px;\n }\n /* On large UIs, tile size doesn't change while dragging */\n div.tile.dragging {\n font-size: 30px;\n line-height: 30px;\n height: 36px;\n width: 36px;\n padding-top: 3px;\n margin-left: 0;\n }\n div.letterscore {\n bottom: 2px;\n right: 1px;\n font-size: 9px;\n line-height: 9px;\n }\n .rack div.letterscore {\n left: auto;\n right: 0px;\n bottom: 1px;\n }\n div.tile.wide div.letterscore,\n div.tile.extra-wide div.letterscore {\n /* Adjust letter score position for wide tiles */\n right: 1px;\n left: auto;\n }\n .rack div.tile.wide div.letterscore,\n .rack div.tile.extra-wide div.letterscore {\n /* Adjust letter score position for wide tiles */\n right: 1px;\n left: auto;\n }\n div.tile.dragging div.letterscore {\n bottom: 3px;\n right: 2px;\n font-size: 10px;\n line-height: 10px;\n }\n tr.colid {\n display: table-row;\n }\n td.rowid {\n display: table-cell;\n overflow: hidden;\n font-size: 14px;\n line-height: 14px;\n text-align: center;\n font-weight: 400;\n background-color: transparent;\n border-color: transparent;\n box-shadow: none;\n }\n div.bag {\n display: block;\n bottom: 108px;\n }\n div.rack-row {\n display: block;\n height: auto;\n margin: 0;\n }\n div.rack {\n position: absolute;\n display: block;\n width: auto;\n float: none;\n top: auto;\n bottom: 132px;\n left: 241px;\n padding: 6px;\n border-width: 0;\n border-radius: 5px;\n margin: 0;\n background-color: var(--board-background);\n }\n div.rack-left {\n display: none;\n }\n div.rack-right {\n display: none;\n }\n .rack td {\n min-height: 30px;\n min-width: 30px;\n max-height: 30px;\n max-width: 30px;\n height: 30px;\n width: 30px;\n border-color: white;\n background-color: white;\n box-shadow: 2px 2px 4px 0 #afb7cad0;\n }\n .rack td.opp {\n border-color: var(--cancel-button);\n background-color: var(--cancel-button);\n }\n .rack td:empty {\n border-color: #dddddd;\n background-color: #f4f4f4;\n box-shadow: none;\n }\n div.buttons {\n position: static;\n height: auto;\n }\n div.buttons div.challenge .glyphicon {\n top: 3px;\n }\n span.yesnobutton#force-resign {\n display: inline;\n background-color: var(--cancel-button);\n color: white;\n padding-bottom: 4px;\n }\n div.force-resign {\n display: none;\n }\n div.word-check {\n display: block;\n width: 50px;\n height: 46px;\n font-size: 26px;\n line-height: 46px;\n top: auto;\n bottom: 273px;\n left: 643px;\n border-radius: 5px;\n }\n div.score {\n display: block;\n width: 50px;\n height: 46px;\n font-size: 24px;\n line-height: 46px;\n top: auto;\n bottom: 211px;\n left: 643px;\n border-radius: 5px;\n font-family: 'Open Sans', 'Arial', sans-serif;\n }\n .standard-button {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n }\n .submitbutton {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n }\n div.submitnewgame {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n top: 464px;\n }\n div.fb-share {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n left: 122px;\n height: 60px;\n /* bottom: 104px; */\n }\n div.waitmove {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n float: none;\n border-style: solid;\n border-width: 1px;\n border-color: var(--ok-button);\n background-color: white;\n }\n div.submitmove {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n color: white;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n display: block;\n }\n div.submitmove span.glyphicon-play {\n top: 3px;\n left: 2px;\n }\n div.submitmove.error-shown {\n display: block;\n }\n /* To the left of the rack */\n .bottom-button {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n }\n div.submitresign {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n font-size: 22px;\n width: 40px;\n height: 30px;\n left: 101px;\n }\n div.submitresign.disabled {\n background-color: var(--board-background);\n }\n div.submitexchange {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n font-size: 22px;\n width: 40px;\n height: 30px;\n left: 167px;\n }\n div.submitexchange.disabled {\n background-color: var(--board-background);\n }\n div.recallbtn {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n background-color: var(--triple-word-color);\n font-size: 22px;\n width: 40px;\n height: 30px;\n left: 167px;\n }\n /* To the right of the rack */\n div.scramblebtn {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n font-size: 22px;\n width: 40px;\n height: 30px;\n left: 546px;\n }\n div.submitpass {\n display: block;\n position: absolute;\n top: auto;\n bottom: 136px;\n font-size: 22px;\n width: 40px;\n height: 30px;\n left: 612px;\n }\n div.submitpass.disabled {\n background-color: var(--board-background);\n }\n div.fb-share {\n position: absolute;\n top: 528px;\n text-align: center;\n font-size: 19px;\n font-weight: 700;\n margin: 0;\n padding: 6px;\n padding-top: 9px;\n border-radius: 5px;\n cursor: pointer;\n width: 78px;\n height: 30px;\n top: auto;\n bottom: 136px;\n left: 546px;\n background-color: var(--ok-button);\n font-size: 18px;\n line-height: 24px;\n font-weight: normal;\n display: block;\n left: 144px;\n height: 60px;\n /* bottom: 104px; */\n color: white;\n background-color: var(--double-letter-color);\n visibility: hidden;\n }\n div.player {\n display: inline-block;\n height: 36px;\n font-size: 16px;\n line-height: 24px;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n }\n div.gamestats div.player {\n padding: 0;\n display: inline-block;\n width: auto;\n }\n div.gamestats div.player div.robot-btn {\n display: inline;\n position: relative;\n line-height: 34px;\n top: 0px;\n }\n div.gamestats div.player div.robot-btn.left {\n padding-left: 12px;\n }\n div.gamestats div.player div.robot-btn.right {\n padding-right: 12px;\n }\n div.gamestats div.player.humancolor {\n color: white;\n }\n div.scorewrapper {\n background-color: #aad1d4;\n min-height: 32px;\n }\n div.scoreleft {\n position: relative;\n width: 144px;\n padding-left: 6px;\n height: auto;\n top: auto;\n left: auto;\n font-size: 24px;\n line-height: 32px;\n font-weight: 700;\n color: white;\n }\n div.scoreright {\n position: relative;\n width: 144px;\n height: auto;\n top: auto;\n left: auto;\n font-size: 24px;\n line-height: 32px;\n font-weight: 700;\n color: white;\n }\n div.player-btn {\n position: relative;\n margin-top: 4px;\n padding-top: 4px;\n width: auto;\n color: white;\n cursor: pointer;\n }\n div.player-btn:hover {\n background-color: white;\n color: black;\n }\n div.player-btn.left {\n padding-left: 2px;\n padding-right: 2px;\n }\n div.player-btn.right {\n padding-left: 2px;\n padding-right: 6px;\n }\n div.robot-btn {\n position: relative;\n margin-top: 4px;\n padding-top: 4px;\n width: auto;\n }\n div.robot-btn.left {\n padding-left: 6px;\n padding-right: 2px;\n }\n div.robot-btn.right {\n padding-left: 2px;\n padding-right: 4px;\n }\n div.gamestats div.robot-btn {\n width: 100%;\n }\n div.loginform-large {\n display: block;\n }\n div.loginform-small {\n display: none;\n }\n div.login-logo {\n margin-top: 16px;\n margin-left: auto;\n }\n div.login-legend {\n margin-left: 58px;\n margin-top: auto;\n height: 160px;\n }\n div.welcome {\n margin-left: 100px;\n }\n div.loginhdr {\n font-size: 34px;\n font-weight: 700;\n padding-top: 12px;\n padding-bottom: 24px;\n text-align: left;\n }\n div#board-pic {\n text-align: left;\n float: left;\n padding-right: 24px;\n padding-top: 0;\n padding-bottom: 0;\n }\n div.blurb {\n font-size: 22px;\n font-weight: bold;\n padding-bottom: 22px;\n text-align: left;\n }\n div.right-tab {\n display: block;\n height: 38px;\n min-height: 38px;\n width: 38px;\n min-width: 38px;\n top: auto;\n text-align: left;\n padding-top: 14px;\n padding-left: 10px;\n font-size: 20px;\n line-height: 20px;\n z-index: 2;\n box-shadow: none;\n }\n div.right-tab#tab-board {\n display: none;\n }\n div.right-tab#tab-movelist {\n top: 0;\n left: -40px;\n }\n div.right-tab#tab-twoletter {\n top: 58px;\n left: -40px;\n }\n div.right-tab#tab-games {\n top: 116px;\n left: -40px;\n }\n div.right-tab#tab-chat {\n top: 174px;\n left: -40px;\n }\n div.movelist-container {\n padding-top: 0;\n padding-bottom: 0;\n height: 420px;\n border-radius: 0;\n }\n div.movelist {\n height: 420px;\n }\n div.message {\n display: none;\n }\n div.right-area.with-clock {\n margin-top: 52px;\n }\n div.right-area.with-clock div.movelist-container {\n /* If in a clock game, reduce the movelist height by two lines (2 * 20px) */\n height: 380px;\n }\n div.right-area.with-clock div.movelist {\n /* If in a clock game, reduce the movelist height by two lines (2 * 20px) */\n height: 380px;\n }\n div.right-area.with-clock div.twoletter,\n div.right-area.with-clock div.chat {\n /* Timed game */\n height: 380px;\n }\n h3.clockleft,\n h3.clockright {\n margin-top: 2px;\n margin-bottom: 0;\n }\n div.movelist-container div.bag {\n display: none;\n padding: 4px 28px 0 27px;\n width: auto;\n }\n div.game-timed {\n display: block;\n }\n div#blank-form {\n display: block;\n right: 12px;\n }\n div#blank-form p {\n padding-left: 15px;\n }\n div.blank-rack {\n top: 56px;\n left: auto;\n background-color: transparent;\n }\n div.modal-dialog {\n position: absolute;\n }\n .bottom-message {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n }\n .bold-bottom-message {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.error {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.opp-turn {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n display: block;\n }\n div#congrats {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n display: block;\n }\n div.resign {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.pass {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.pass-last {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.chall {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.chall-info {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.exchange {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n font-weight: 700;\n border-radius: 0;\n }\n div.gameinfo {\n position: absolute;\n text-align: center;\n bottom: 83px;\n left: 84px;\n width: 596px;\n height: 28px;\n font-size: 16px;\n line-height: 24px;\n padding: 4px 0 0;\n margin: 0;\n }\n input.chat-txt {\n width: 218px;\n height: 22px;\n font-size: 15px;\n }\n div.chat-area {\n height: 350px;\n width: 278px;\n }\n div.modal-close#chat-send {\n height: 25px;\n bottom: 0;\n }\n span.statsbutton {\n display: inline;\n text-align: center;\n background-color: white;\n font-size: 16px;\n font-weight: 700;\n color: var(--triple-word-color);\n margin-left: 4px;\n margin-right: 4px;\n padding-top: 2px;\n padding-bottom: 4px;\n padding-left: 12px;\n padding-right: 12px;\n border-radius: 5px;\n cursor: pointer;\n }\n div.toggler {\n display: inline-block;\n }\n div.toggler div.option.small {\n width: 40px;\n height: 26px;\n line-height: 26px;\n font-size: 20px;\n padding-top: 4px;\n padding-bottom: 2px;\n }\n div.toggler div.option.x-small {\n width: 32px;\n }\n div.tabbed-page {\n overflow: hidden;\n left: 110px;\n top: 12px;\n width: 900px;\n height: 673px;\n font-size: 13px;\n line-height: 23px;\n }\n div.help-container img {\n max-width: 640px;\n height: auto;\n }\n div#tabs,\n div#main-tabs {\n padding: 0.2em;\n border: 2px solid var(--tab-background);\n }\n div#tabs {\n background-color: var(--tab-background);\n }\n div#tabs > div[role=tabpanel],\n div#main-tabs > div[role=tabpanel] {\n height: 657px;\n top: 0;\n }\n div.userid {\n display: block;\n }\n .no-mobile-block {\n display: block;\n }\n .no-mobile-inline {\n display: inline;\n }\n .no-mobile-inline-block {\n display: inline-block;\n }\n .no-mobile-list {\n display: list-item;\n }\n .tab-legend {\n font-weight: bold;\n }\n span#numgames,\n span#numchallenges {\n margin-top: 10px;\n }\n div.fairplay {\n top: 41px;\n font-size: 28px;\n line-height: 28px;\n display: block;\n text-indent: 4px;\n }\n span.list-opp {\n width: 290px;\n max-width: 290px;\n }\n span.list-nick,\n span.list-nick-elo,\n div#tabs-3 span.list-nick {\n width: 220px;\n max-width: 220px;\n }\n span.list-fullname-robot {\n width: 486px;\n /* list-fullname + list-human-elo (+6 for margin-right) + list-info-hdr */\n max-width: 486px;\n font-size: 1em;\n }\n span.list-chall {\n width: 315px;\n max-width: 315px;\n }\n span.list-ts,\n span.list-ts-short,\n span.list-info-hdr,\n span.list-info,\n span.list-games,\n span.list-ratio,\n span.list-avgpts,\n span.list-manual,\n span.list-fav,\n span.list-overdue,\n span.list-newbag,\n span.list-duration,\n span.list-rank-no-mobile,\n span.list-elo-no-mobile {\n display: inline-block;\n }\n span.list-tc {\n width: 100px;\n max-width: 100px;\n padding-right: 6px;\n }\n span.list-ch,\n span.list-fav,\n span.list-icon,\n span.list-myturn,\n span.list-overdue {\n font-size: 20px;\n width: 32px;\n max-width: 32px;\n }\n span.list-newbag {\n font-size: 20px;\n width: 32px;\n max-width: 32px;\n }\n span.list-s0 {\n width: 40px;\n max-width: 40px;\n }\n span.list-s1 {\n width: 40px;\n max-width: 40px;\n }\n span.list-scorehdr {\n width: 88px;\n /* list-s0 + list-colon + list-s1 */\n max-width: 88px;\n }\n div#elo-toggler {\n top: 64px;\n bottom: auto;\n left: 272px;\n right: auto;\n }\n div#user-ok,\n div#user-cancel,\n div#user-logout,\n div#user-friend {\n position: absolute;\n }\n div.user-cat span#break {\n display: none;\n }\n div.user-cat#user-headings {\n line-height: 32px;\n }\n div.user-cat#user-search {\n display: block;\n }\n div#chall-form {\n position: absolute;\n padding-top: 12px;\n left: auto;\n right: 300px;\n top: 48px;\n width: 428px;\n height: 618px;\n font-size: 1em;\n }\n div#chall-fairplay {\n margin-top: 15px;\n padding-left: 52px;\n padding-right: 52px;\n }\n div#ready-toggler {\n display: block;\n position: absolute;\n left: 10px;\n top: 440px;\n }\n div#timed-toggler {\n display: block;\n position: absolute;\n left: 10px;\n top: 490px;\n }\n span.caption.wide {\n width: 264px;\n }\n div#chall-ok {\n right: 66px;\n /* 12 + 54 */\n }\n div#chall-cancel {\n right: 162px;\n /* 12 + 72 + 12 + 12 + 54 */\n }\n span.mobile-break,\n span.mobile-space {\n display: none;\n }\n div#user-load {\n top: 320px;\n left: 406px;\n width: 48px;\n height: 48px;\n background-size: 48px 48px;\n }\n div#spinner-dialog div#user-load {\n top: 360px;\n left: 488px;\n width: 48px;\n height: 48px;\n background-size: 48px 48px;\n }\n div.animated-spinner {\n left: 472px;\n top: 272px;\n }\n div#promo-form {\n left: auto;\n top: 60px;\n right: 48px;\n width: 812px;\n height: 628px;\n line-height: 1.62em;\n }\n div.promo-content {\n margin-top: 32px;\n margin-left: 48px;\n margin-right: 48px;\n }\n div.promo-fullscreen {\n display: block;\n }\n div.promo-mobile {\n display: none;\n }\n div.btn-promo-no {\n width: 160px;\n height: 28px;\n bottom: 48px;\n right: 48px;\n top: auto;\n background-color: var(--light-shadow);\n }\n div.challenge {\n width: 48px;\n height: 48px;\n top: auto;\n bottom: 212px;\n left: 646px;\n text-align: center;\n font-size: 26px;\n line-height: 48px;\n font-weight: 700;\n color: white;\n background-color: var(--triple-letter-color);\n padding: 0;\n border: 0px;\n cursor: pointer;\n }\n div.over {\n outline: var(--focus-border) solid 3px;\n }\n span.over {\n outline: var(--focus-border) solid 3px;\n }\n div #userlist,\n div #gamelist,\n div #elolist {\n height: 504px;\n /* 14 lines @ 36px each */\n }\n div #recentlist {\n height: 432px;\n /* 12 lines @ 36px each */\n }\n div #usr-recent {\n height: 432px;\n /* 12 lines @ 36px each */\n }\n div #chall-sent,\n div #chall-received {\n height: 216px;\n /* 6 lines @ 36px each */\n }\n span.list-win {\n width: 32px;\n max-width: 32px;\n margin-left: 2px;\n }\n div.games {\n height: 100%;\n padding: 0px;\n }\n div.games-item {\n margin-left: 4px;\n margin-right: 4px;\n }\n div#wait-form {\n position: absolute;\n padding-left: 12px;\n padding-right: 12px;\n padding-top: 6px;\n padding-bottom: 6px;\n box-shadow: 3px 3px 5px 2px var(--dark-shadow);\n font-size: 1em;\n z-index: 20;\n background-color: var(--container-bg-color);\n top: 160px;\n padding-top: 16px;\n left: auto;\n right: 202px;\n width: 504px;\n height: 400px;\n }\n div#accept-form {\n top: 220px;\n right: 300px;\n width: 428px;\n height: 292px;\n padding-top: 12px;\n /* Override */\n }\n span.left-to-move,\n span.right-to-move {\n position: relative;\n top: 2px;\n font-family: 'Glyphicons Regular';\n font-style: normal;\n font-weight: normal;\n color: var(--triple-word-color);\n padding-right: 4px;\n }\n /* Show red flag by the id of the player whose move it is */\n div.player-btn.tomove span.left-to-move:before {\n content: \"\\E267\";\n }\n div.player-btn.tomove span.right-to-move:before {\n content: \"\\E267\";\n }\n div.hint {\n top: 180px;\n margin-left: 60px;\n margin-right: 160px;\n font-size: inherit;\n }\n div.stats-box {\n width: auto;\n position: static;\n top: auto;\n left: auto;\n }\n div.stats-fig {\n width: 80px;\n height: 27px;\n padding: 6px;\n border-radius: 5px;\n border-width: 2px;\n font-size: 20px;\n line-height: 20px;\n margin-top: 4px;\n margin-right: 8px;\n margin-left: 8px;\n }\n div#own-toggler {\n position: relative;\n margin-top: 7px;\n margin-right: 8px;\n top: auto;\n }\n p#own-best {\n left: auto;\n right: 30px;\n top: 26px;\n font-size: 1em;\n }\n div#own-stats {\n margin-top: 16px;\n margin-bottom: 24px;\n height: 48px;\n }\n div.help-container {\n width: 828px;\n height: 612px;\n overflow: auto;\n padding-right: 24px;\n }\n div.twoletter-area {\n font-size: 16px;\n line-height: 23px;\n }\n div.twoletter-area.with-clock {\n font-size: 15px;\n line-height: 24px;\n margin-top: 3px;\n }\n div.twoletter-word {\n padding-right: 3px;\n }\n}\n");const jg={projectId:"netskrafl",firebaseAPIKey:"",databaseURL:"",firebaseSenderId:"",firebaseAppId:"",measurementId:"",userEmail:"",userId:"",userNick:"",userFullname:"",locale:"is_IS",isExplo:!1,serverUrl:"",movesUrl:"",movesAccessKey:"",token:"",loginUrl:"",loginMethod:"",newUser:!1,beginner:!1,fairPlay:!0,plan:"",hasPaid:!1,ready:!1,readyTimed:!1,uiFullscreen:!0,uiLandscape:!1,runningLocal:!1},qg=G.memo((({state:e,tokenExpired:t})=>{const n=G.createRef(),i={...jg,...e},{userEmail:o}=i;return G.useEffect((()=>{var e;if(!o)return;const r=n.current;if(!r)return;const s=`netskrafl-user-${o}`;if((null===(e=r.firstElementChild)||void 0===e?void 0:e.id)!==s){try{(async(e,t)=>{const{userEmail:n}=e;if(!n)throw new Error("No user specified for Netskrafl UI");const i=`netskrafl-user-${n}`,o=document.getElementById(i);if(o)return o;const r=document.createElement("div");r.id=i,r.className="netskrafl-loading",document.body.appendChild(r);const s=await Fg(e,r);if("success"===s)return r.className="netskrafl-user",r;if("expired"===s)return r.className="netskrafl-expired",t&&t(),r;throw new Error("Failed to mount Netskrafl UI")})(i,t).then((e=>{const t=n.current;t&&(t.innerHTML="",t.appendChild(e))}))}catch(e){const t=document.getElementById("netskrafl-container");t&&(t.innerHTML="")}return()=>{const e=document.getElementById("netskrafl-container"),t=null==e?void 0:e.firstElementChild;(null==t?void 0:t.id)===s&&document.body.appendChild(t)}}}),[o]),W.jsx("div",{className:"netskrafl",children:W.jsx("div",{className:"netskrafl-container",id:"netskrafl-container",ref:n})})}));exports.Netskrafl=qg;
3046
+ //# sourceMappingURL=index.js.map