itwillsync 1.7.0 → 1.8.0

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.
@@ -0,0 +1 @@
1
+ *{box-sizing:border-box;margin:0;padding:0}html,body{color:#e0e0e0;-webkit-overflow-scrolling:touch;background:#1a1a2e;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;overflow-x:hidden}#header{z-index:10;background:#16213e;border-bottom:1px solid #0f3460;justify-content:space-between;align-items:center;padding:12px 16px;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:10px;display:flex}.logo{color:#e94560;letter-spacing:-.5px;font-size:16px;font-weight:700}#status-dot{background:#e74c3c;border-radius:50%;width:8px;height:8px;transition:background .3s}#status-dot.connected{background:#2ecc71}#status-dot.reconnecting{background:#f39c12;animation:1s infinite pulse}.header-right{align-items:center;gap:12px;display:flex}#session-count{color:#a0a0b0;font-size:13px}.header-icon-btn{color:#a0a0b0;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:1px solid #2a2a44;border-radius:8px;justify-content:center;align-items:center;width:32px;height:32px;transition:color .15s,border-color .15s;display:flex}.header-icon-btn:active{color:#e94560;border-color:#e94560}#session-list{flex-direction:column;gap:12px;padding:12px 12px 80px;display:flex}#empty-state{color:#606080;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:60vh;display:flex}#empty-state .empty-icon{opacity:.5;margin-bottom:8px;font-size:48px}#empty-state p{font-size:16px}#empty-state .empty-hint{color:#505070;font-size:13px}#empty-state code{color:#e94560;background:#252540;border-radius:4px;padding:2px 8px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:12px}.session-card{cursor:pointer;-webkit-tap-highlight-color:transparent;background:#16213e;border:1px solid #0f3460;border-radius:12px;padding:14px 16px;transition:transform .15s,border-color .2s}.session-card:active{transform:scale(.98)}.session-card:hover{border-color:#e94560}.session-card.attention{border-color:#e94560;animation:2s ease-in-out infinite attention-glow}@keyframes attention-glow{0%,to{box-shadow:0 0 #e9456000}50%{box-shadow:0 0 12px 2px #e945604d}}.card-header{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.card-agent{align-items:center;gap:8px;display:flex}.agent-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.agent-dot.active{background:#2ecc71}.agent-dot.idle{background:#f39c12}.agent-dot.attention{background:#e94560;animation:1s infinite pulse}.agent-name{color:#f0f0f0;font-size:15px;font-weight:600}.card-uptime{color:#707090;font-variant-numeric:tabular-nums;font-size:12px}.card-cwd{color:#808098;white-space:nowrap;text-overflow:ellipsis;margin-bottom:10px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:12px;overflow:hidden}.card-preview{background:#112;border-radius:6px;min-height:24px;max-height:90px;margin-bottom:10px;padding:8px 10px;overflow:hidden}.card-preview-text{color:#a0a0b0;white-space:pre;text-overflow:ellipsis;margin:0;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:11px;line-height:1.4;overflow:hidden}.card-preview-text.empty{color:#505070;font-style:italic}.card-status{color:#a0a0b0;align-items:center;gap:6px;font-size:12px;display:flex}.status-badge{text-transform:uppercase;letter-spacing:.5px;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:500}.status-badge.active{color:#2ecc71;background:#2ecc7126}.status-badge.idle{color:#f39c12;background:#f39c1226}.status-badge.attention{color:#e94560;background:#e9456026}.attention-badge{color:#e94560;background:#e9456033;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;animation:2s ease-in-out infinite attention-pulse}@keyframes attention-pulse{0%,to{opacity:1}50%{opacity:.6}}.card-actions{border-top:1px solid #0f3460;gap:6px;margin-top:10px;padding-top:10px;display:flex}.action-btn{color:#a0a0b0;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#1e1e36;border:1px solid #2a2a44;border-radius:6px;flex:1;padding:6px 0;font-family:inherit;font-size:12px;font-weight:500;transition:background .15s,color .15s}.action-btn:active{background:#2a2a44}.action-btn.open{color:#2ecc71;border-color:#2ecc714d}.action-btn.stop{color:#e94560;border-color:#e945604d}.action-btn.stop:active{background:#e9456026}.confirm-overlay{background:#2d1810;border:1px solid #e94560;border-radius:8px;justify-content:center;align-items:center;gap:10px;margin-top:8px;padding:10px;animation:.15s fadeIn;display:flex}.confirm-msg{color:#f0f0f0;flex:1;font-size:13px}.confirm-btn{cursor:pointer;border:none;border-radius:5px;padding:5px 14px;font-family:inherit;font-size:12px;font-weight:600}.confirm-btn.yes{color:#fff;background:#e94560}.confirm-btn.no{color:#a0a0b0;background:#2a2a44}.rename-input{color:#f0f0f0;background:#112;border:1px solid #e94560;border-radius:4px;outline:none;width:120px;padding:2px 6px;font-family:inherit;font-size:15px;font-weight:600}.card-metadata{background:#112;border-radius:6px;margin-top:8px;padding:8px 10px;animation:.2s fadeIn}.card-metadata.hidden{display:none}.meta-row{justify-content:space-between;padding:3px 0;font-size:11px;display:flex}.meta-label{color:#707090;font-weight:500}.meta-value{color:#c0c0d0;text-align:right;text-overflow:ellipsis;white-space:nowrap;max-width:200px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:11px;overflow:hidden}@media (width>=768px){#session-list{max-width:600px;margin:0 auto}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.session-card{animation:.3s fadeIn}#reconnect-overlay{z-index:100;color:#e0e0e0;background:#1a1a2ef2;flex-direction:column;justify-content:center;align-items:center;gap:12px;width:100%;height:100%;font-size:16px;display:flex;position:fixed;top:0;left:0}#reconnect-overlay .spinner{border:3px solid #0f3460;border-top-color:#e94560;border-radius:50%;width:32px;height:32px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}#fab-create{color:#fff;cursor:pointer;z-index:20;-webkit-tap-highlight-color:transparent;background:#e94560;border:none;border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;font-size:28px;font-weight:300;line-height:1;transition:transform .15s,box-shadow .15s;display:flex;position:fixed;bottom:24px;right:24px;box-shadow:0 4px 16px #e9456066}#fab-create:active{transform:scale(.92)}.modal-overlay{z-index:50;background:#0a0a14d9;justify-content:center;align-items:flex-end;animation:.15s fadeIn;display:flex;position:fixed;inset:0}.modal-overlay.hidden{display:none}.modal-content{background:#16213e;border-radius:16px 16px 0 0;width:100%;max-width:480px;max-height:85dvh;padding:20px;animation:.2s slideUp;overflow-y:auto}@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.modal-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.modal-title{color:#f0f0f0;font-size:18px;font-weight:600}.modal-close{color:#707090;cursor:pointer;background:0 0;border:none;padding:4px 8px;font-size:24px;line-height:1}.form-label{color:#a0a0b0;margin-top:16px;margin-bottom:6px;font-size:13px;font-weight:500;display:block}.form-label:first-of-type{margin-top:0}.form-input{color:#f0f0f0;background:#112;border:1px solid #2a2a44;border-radius:8px;outline:none;width:100%;padding:10px 12px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:15px;transition:border-color .15s}.form-input:focus{border-color:#e94560}.form-input.hidden{display:none}.chip-row{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.chip{color:#c0c0d0;cursor:pointer;-webkit-tap-highlight-color:transparent;white-space:nowrap;background:#1e1e36;border:1px solid #2a2a44;border-radius:16px;padding:5px 12px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:12px;transition:background .15s,border-color .15s}.chip:active,.chip.selected{color:#e94560;background:#e9456026;border-color:#e94560}.dir-display{color:#c0c0d0;white-space:nowrap;text-overflow:ellipsis;background:#112;border:1px solid #2a2a44;border-radius:8px;padding:10px 12px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:13px;overflow:hidden}.dir-actions{gap:8px;margin-top:10px;display:flex}.dir-action-btn{color:#a0a0b0;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#1e1e36;border:1px solid #2a2a44;border-radius:8px;flex:1;padding:8px 0;font-family:inherit;font-size:13px;transition:background .15s}.dir-action-btn:active{background:#2a2a44}.btn-create{color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#e94560;border:none;border-radius:10px;width:100%;margin-top:20px;padding:14px;font-family:inherit;font-size:16px;font-weight:600;transition:opacity .15s}.btn-create:disabled{opacity:.4;cursor:default}.btn-create:not(:disabled):active{opacity:.8}.create-error{color:#e94560;background:#e9456026;border-radius:6px;margin-top:12px;padding:8px 12px;font-size:13px}.create-error.hidden{display:none}.create-spinner{color:#a0a0b0;flex-direction:column;align-items:center;gap:12px;padding:32px 0;font-size:14px;display:flex}.create-spinner.hidden{display:none}.browse-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.browse-back{color:#a0a0b0;cursor:pointer;background:0 0;border:none;padding:4px 0;font-family:inherit;font-size:14px}.browse-select{color:#fff;cursor:pointer;background:#e94560;border:none;border-radius:6px;padding:6px 14px;font-family:inherit;font-size:13px;font-weight:500}.browse-breadcrumb{color:#808098;flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:12px;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:13px;display:flex}.breadcrumb-segment{cursor:pointer;color:#a0a0b0;transition:color .15s}.breadcrumb-segment:hover,.breadcrumb-segment:active{color:#e94560}.breadcrumb-sep{color:#505070}.browse-list{flex-direction:column;gap:2px;max-height:50dvh;display:flex;overflow-y:auto}.browse-item{cursor:pointer;-webkit-tap-highlight-color:transparent;background:#112;border-radius:6px;justify-content:space-between;align-items:center;padding:10px 12px;transition:background .1s;display:flex}.browse-item:active{background:#1e1e36}.browse-item-name{color:#d0d0e0;font-family:Cascadia Code,Fira Code,JetBrains Mono,monospace;font-size:14px}.browse-item-arrow{color:#505070;font-size:14px}.browse-empty{text-align:center;color:#505070;padding:24px;font-size:13px}.hidden{display:none!important}.setting-row{background:#112;border-radius:10px;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.setting-info{flex:1;align-items:center;gap:12px;min-width:0;display:flex}.setting-icon{flex-shrink:0;font-size:22px}.setting-label{color:#f0f0f0;font-size:15px;font-weight:600}.setting-sublabel{color:#707090;margin-top:2px;font-size:11px}.toggle-btn{cursor:pointer;-webkit-tap-highlight-color:transparent;background:#2a2a44;border:none;border-radius:14px;flex-shrink:0;width:48px;height:28px;transition:background .25s;position:relative}.toggle-btn[aria-checked=true]{background:#2ecc71}.toggle-btn:disabled{opacity:.4;cursor:default}.toggle-knob{background:#707090;border-radius:50%;width:22px;height:22px;transition:transform .25s,background .25s;display:block;position:absolute;top:3px;left:3px}.toggle-btn[aria-checked=true] .toggle-knob{background:#fff;transform:translate(20px)}.setting-warning{color:#f39c12;background:#f39c121a;border:1px solid #f39c1240;border-radius:8px;margin-top:12px;padding:10px 14px;font-size:12px;line-height:1.5}.setting-note{color:#505070;text-align:center;margin-top:8px;font-size:11px}.setting-tip{color:#808098;background:#0f346066;border-radius:6px;margin-top:10px;padding:8px 12px;font-size:12px;line-height:1.5}#sleep-password-section{border-top:1px solid #0f3460;margin-top:16px;padding-top:16px}#sleep-password-section .form-label{margin-top:0}.sleep-actions{gap:10px;margin-top:14px;display:flex}.sleep-actions .action-btn{flex:1;padding:12px;font-size:14px}.sleep-actions .btn-create{flex:1;margin-top:0;padding:12px;font-size:14px}
@@ -0,0 +1,2 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=(e=>typeof require<`u`?require:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof require<`u`?require:e)[t]}):e)(function(e){if(typeof require<`u`)return require.apply(this,arguments);throw Error('Calling `require` for "'+e+"\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.")});(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function u(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h ${n%60}m`}function d(e){let t=e.match(/^\/(?:Users|home)\/[^/]+/)?.[0];return t?`~`+e.slice(t.length):e}function f(e){return e<1024?`${e} KB`:`${(e/1024).toFixed(1)} MB`}function p(e,t,n){let r=document.createElement(`div`);r.className=`session-card${e.status===`attention`?` attention`:``}`,r.dataset.sessionId=e.id;let i=u(Date.now()-e.connectedAt),a=d(e.cwd),o=document.createElement(`div`);o.className=`card-header`;let s=document.createElement(`div`);s.className=`card-agent`;let c=document.createElement(`div`);c.className=`agent-dot ${e.status}`;let l=document.createElement(`span`);l.className=`agent-name`,l.textContent=e.name||e.agent,s.appendChild(c),s.appendChild(l);let f=document.createElement(`span`);f.className=`card-uptime`,f.textContent=i,o.appendChild(s),o.appendChild(f);let p=document.createElement(`div`);p.className=`card-cwd`,p.textContent=a;let g=document.createElement(`div`);g.className=`card-preview`;let _=document.createElement(`pre`);_.className=`card-preview-text`,_.textContent=`Waiting for output...`,g.appendChild(_),g.addEventListener(`click`,t=>{t.stopPropagation(),n.onOpen(e)});let v=document.createElement(`div`);v.className=`card-status`;let y=document.createElement(`span`);y.className=`status-badge ${e.status}`,y.textContent=e.status,e.status===`attention`&&(y.style.display=`none`);let b=document.createElement(`span`);b.className=`attention-badge`,b.textContent=`Needs your attention`,e.status!==`attention`&&(b.style.display=`none`),v.appendChild(y),v.appendChild(b);let x=document.createElement(`div`);x.className=`card-actions`;let S=document.createElement(`button`);S.className=`action-btn stop`,S.textContent=`Stop`,S.addEventListener(`click`,t=>{t.stopPropagation(),m(r,e.id,n.onStop)});let C=document.createElement(`button`);C.className=`action-btn rename`,C.textContent=`Rename`,C.addEventListener(`click`,t=>{t.stopPropagation(),h(r,e.id,n.onRename)});let w=document.createElement(`button`);w.className=`action-btn info`,w.textContent=`Info`,w.addEventListener(`click`,t=>{t.stopPropagation(),n.onInfo(e.id)});let T=document.createElement(`button`);T.className=`action-btn open`,T.textContent=`Open`,T.addEventListener(`click`,t=>{t.stopPropagation(),n.onOpen(e)}),x.appendChild(T),x.appendChild(C),x.appendChild(w),x.appendChild(S);let E=document.createElement(`div`);return E.className=`card-metadata hidden`,r.addEventListener(`click`,()=>{n.onOpen(e)}),r.appendChild(o),r.appendChild(p),r.appendChild(g),r.appendChild(v),r.appendChild(x),r.appendChild(E),r}function m(e,t,n){e.querySelector(`.confirm-overlay`)?.remove();let r=document.createElement(`div`);r.className=`confirm-overlay`;let i=document.createElement(`span`);i.className=`confirm-msg`,i.textContent=`Stop this session?`;let a=document.createElement(`button`);a.className=`confirm-btn yes`,a.textContent=`Yes`,a.addEventListener(`click`,e=>{e.stopPropagation(),n(t),r.remove()});let o=document.createElement(`button`);o.className=`confirm-btn no`,o.textContent=`No`,o.addEventListener(`click`,e=>{e.stopPropagation(),r.remove()}),r.addEventListener(`click`,e=>e.stopPropagation()),r.appendChild(i),r.appendChild(a),r.appendChild(o),e.appendChild(r)}function h(e,t,n){let r=e.querySelector(`.agent-name`);if(!r)return;let i=r.textContent||``,a=document.createElement(`input`);a.className=`rename-input`,a.type=`text`,a.value=i;let o=()=>{let e=a.value.trim();e&&e!==i&&n(t,e),r.textContent=e||i,r.style.display=``,a.remove()};a.addEventListener(`keydown`,e=>{e.stopPropagation(),e.key===`Enter`?o():e.key===`Escape`&&(r.textContent=i,r.style.display=``,a.remove())}),a.addEventListener(`blur`,o),a.addEventListener(`click`,e=>e.stopPropagation()),r.style.display=`none`,r.parentElement?.insertBefore(a,r.nextSibling),a.focus(),a.select()}function g(e,t){let n=e.querySelector(`.agent-dot`),r=e.querySelector(`.status-badge`),i=e.querySelector(`.card-uptime`),a=e.querySelector(`.agent-name`);n&&(n.className=`agent-dot ${t.status}`),r&&(r.className=`status-badge ${t.status}`,r.textContent=t.status),i&&(i.textContent=u(Date.now()-t.connectedAt)),a&&!a.style.display&&(a.textContent=t.name||t.agent);let o=t.status===`attention`;r&&(r.style.display=o?`none`:``);let s=e.querySelector(`.attention-badge`);s&&(s.style.display=o?``:`none`),t.status===`attention`?e.classList.add(`attention`):e.classList.remove(`attention`)}function _(e,t){let n=e.querySelector(`.card-preview-text`);n&&(t.length>0?(n.textContent=t.join(`
2
+ `),n.classList.remove(`empty`)):(n.textContent=`Waiting for output...`,n.classList.add(`empty`)))}function v(e,t){let n=e.querySelector(`.card-metadata`);if(!n)return;for(;n.firstChild;)n.removeChild(n.firstChild);let r=[[`PID`,String(t.pid)],[`Agent`,t.agent],[`Port`,String(t.port)],[`Directory`,t.cwd],[`Memory`,f(t.memoryKB)],[`Uptime`,u(t.uptimeMs)]];for(let[e,t]of r){let r=document.createElement(`div`);r.className=`meta-row`;let i=document.createElement(`span`);i.className=`meta-label`,i.textContent=e;let a=document.createElement(`span`);a.className=`meta-value`,a.textContent=t,r.appendChild(i),r.appendChild(a),n.appendChild(r)}n.classList.toggle(`hidden`)}var y=null,b=!1;function x(){if(!b){b=!0;try{y=new AudioContext,y.state===`suspended`&&y.resume()}catch{}}}function S(){if(!y)return;y.state===`suspended`&&y.resume();let e=y.currentTime,t=y.createOscillator(),n=y.createGain();t.frequency.value=587.33,t.type=`sine`,n.gain.setValueAtTime(.3,e),n.gain.exponentialRampToValueAtTime(.01,e+.3),t.connect(n),n.connect(y.destination),t.start(e),t.stop(e+.3);let r=y.createOscillator(),i=y.createGain();r.frequency.value=880,r.type=`sine`,i.gain.setValueAtTime(.3,e+.15),i.gain.exponentialRampToValueAtTime(.01,e+.45),r.connect(i),i.connect(y.destination),r.start(e+.15),r.stop(e+.45)}var C=120*1e3,w=new Map;function T(e){if(w.has(e))return;S();let t=setTimeout(function t(){S();let n=w.get(e);n&&(n.timerId=setTimeout(t,C))},C);w.set(e,{timerId:t})}function E(e){let t=w.get(e);t&&(clearTimeout(t.timerId),w.delete(e))}function D(){for(let e of w.values())clearTimeout(e.timerId);w.clear()}var O=null,k,A,j,M,N,P,F,I;function L(e){O=e;let t=document.getElementById(`btn-settings`);k=document.getElementById(`settings-modal`);let n=document.getElementById(`settings-modal-close`);A=document.getElementById(`sleep-toggle`),j=document.getElementById(`sleep-password-section`),M=document.getElementById(`sleep-password`),N=document.getElementById(`sleep-error`),P=document.getElementById(`sleep-spinner`),F=document.getElementById(`sleep-unsupported`),I=document.getElementById(`sleep-enable`);let r=document.getElementById(`sleep-cancel`);t.addEventListener(`click`,()=>{k.classList.remove(`hidden`)}),n.addEventListener(`click`,B),k.addEventListener(`click`,e=>{e.target===k&&B()}),A.addEventListener(`click`,()=>{A.disabled||(A.getAttribute(`aria-checked`)===`true`?O?.({type:`disable-sleep-prevention`}):(j.classList.remove(`hidden`),N.classList.add(`hidden`),M.value=``,M.focus()))}),I.addEventListener(`click`,z),M.addEventListener(`keydown`,e=>{e.key===`Enter`&&(e.preventDefault(),z())}),r.addEventListener(`click`,R)}function R(){j.classList.add(`hidden`),M.value=``,N.classList.add(`hidden`)}function z(){let e=M.value;if(!e){V(`Password is required`);return}M.value=``,N.classList.add(`hidden`),j.classList.add(`hidden`),P.classList.remove(`hidden`),O?.({type:`enable-sleep-prevention`,password:e})}function B(){k.classList.add(`hidden`),R()}function V(e){N.textContent=e,N.classList.remove(`hidden`)}function H(e){if(P.classList.add(`hidden`),!e.supported){A.disabled=!0,A.setAttribute(`aria-checked`,`false`),F.classList.remove(`hidden`);return}F.classList.add(`hidden`),A.disabled=!1,A.setAttribute(`aria-checked`,e.enabled?`true`:`false`),R()}function U(e){P.classList.add(`hidden`),j.classList.remove(`hidden`),V(e),A.setAttribute(`aria-checked`,`false`)}var W=o(((e,t)=>{t.exports={}})),G=c(o(((e,t)=>{(function(e){var t=function(e){var t,n=new Float64Array(16);if(e)for(t=0;t<e.length;t++)n[t]=e[t];return n},n=function(){throw Error(`no PRNG`)},r=new Uint8Array(16),i=new Uint8Array(32);i[0]=9;var a=t(),o=t([1]),s=t([56129,1]),c=t([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),u=t([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),d=t([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),f=t([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),p=t([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function m(e,t,n,r){e[t]=n>>24&255,e[t+1]=n>>16&255,e[t+2]=n>>8&255,e[t+3]=n&255,e[t+4]=r>>24&255,e[t+5]=r>>16&255,e[t+6]=r>>8&255,e[t+7]=r&255}function h(e,t,n,r,i){var a,o=0;for(a=0;a<i;a++)o|=e[t+a]^n[r+a];return(1&o-1>>>8)-1}function g(e,t,n,r){return h(e,t,n,r,16)}function _(e,t,n,r){return h(e,t,n,r,32)}function v(e,t,n,r){for(var i=r[0]&255|(r[1]&255)<<8|(r[2]&255)<<16|(r[3]&255)<<24,a=n[0]&255|(n[1]&255)<<8|(n[2]&255)<<16|(n[3]&255)<<24,o=n[4]&255|(n[5]&255)<<8|(n[6]&255)<<16|(n[7]&255)<<24,s=n[8]&255|(n[9]&255)<<8|(n[10]&255)<<16|(n[11]&255)<<24,c=n[12]&255|(n[13]&255)<<8|(n[14]&255)<<16|(n[15]&255)<<24,l=r[4]&255|(r[5]&255)<<8|(r[6]&255)<<16|(r[7]&255)<<24,u=t[0]&255|(t[1]&255)<<8|(t[2]&255)<<16|(t[3]&255)<<24,d=t[4]&255|(t[5]&255)<<8|(t[6]&255)<<16|(t[7]&255)<<24,f=t[8]&255|(t[9]&255)<<8|(t[10]&255)<<16|(t[11]&255)<<24,p=t[12]&255|(t[13]&255)<<8|(t[14]&255)<<16|(t[15]&255)<<24,m=r[8]&255|(r[9]&255)<<8|(r[10]&255)<<16|(r[11]&255)<<24,h=n[16]&255|(n[17]&255)<<8|(n[18]&255)<<16|(n[19]&255)<<24,g=n[20]&255|(n[21]&255)<<8|(n[22]&255)<<16|(n[23]&255)<<24,_=n[24]&255|(n[25]&255)<<8|(n[26]&255)<<16|(n[27]&255)<<24,v=n[28]&255|(n[29]&255)<<8|(n[30]&255)<<16|(n[31]&255)<<24,y=r[12]&255|(r[13]&255)<<8|(r[14]&255)<<16|(r[15]&255)<<24,b=i,x=a,S=o,C=s,w=c,T=l,E=u,D=d,O=f,k=p,A=m,j=h,M=g,N=_,P=v,F=y,I,L=0;L<20;L+=2)I=b+M|0,w^=I<<7|I>>>25,I=w+b|0,O^=I<<9|I>>>23,I=O+w|0,M^=I<<13|I>>>19,I=M+O|0,b^=I<<18|I>>>14,I=T+x|0,k^=I<<7|I>>>25,I=k+T|0,N^=I<<9|I>>>23,I=N+k|0,x^=I<<13|I>>>19,I=x+N|0,T^=I<<18|I>>>14,I=A+E|0,P^=I<<7|I>>>25,I=P+A|0,S^=I<<9|I>>>23,I=S+P|0,E^=I<<13|I>>>19,I=E+S|0,A^=I<<18|I>>>14,I=F+j|0,C^=I<<7|I>>>25,I=C+F|0,D^=I<<9|I>>>23,I=D+C|0,j^=I<<13|I>>>19,I=j+D|0,F^=I<<18|I>>>14,I=b+C|0,x^=I<<7|I>>>25,I=x+b|0,S^=I<<9|I>>>23,I=S+x|0,C^=I<<13|I>>>19,I=C+S|0,b^=I<<18|I>>>14,I=T+w|0,E^=I<<7|I>>>25,I=E+T|0,D^=I<<9|I>>>23,I=D+E|0,w^=I<<13|I>>>19,I=w+D|0,T^=I<<18|I>>>14,I=A+k|0,j^=I<<7|I>>>25,I=j+A|0,O^=I<<9|I>>>23,I=O+j|0,k^=I<<13|I>>>19,I=k+O|0,A^=I<<18|I>>>14,I=F+P|0,M^=I<<7|I>>>25,I=M+F|0,N^=I<<9|I>>>23,I=N+M|0,P^=I<<13|I>>>19,I=P+N|0,F^=I<<18|I>>>14;b=b+i|0,x=x+a|0,S=S+o|0,C=C+s|0,w=w+c|0,T=T+l|0,E=E+u|0,D=D+d|0,O=O+f|0,k=k+p|0,A=A+m|0,j=j+h|0,M=M+g|0,N=N+_|0,P=P+v|0,F=F+y|0,e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=x>>>0&255,e[5]=x>>>8&255,e[6]=x>>>16&255,e[7]=x>>>24&255,e[8]=S>>>0&255,e[9]=S>>>8&255,e[10]=S>>>16&255,e[11]=S>>>24&255,e[12]=C>>>0&255,e[13]=C>>>8&255,e[14]=C>>>16&255,e[15]=C>>>24&255,e[16]=w>>>0&255,e[17]=w>>>8&255,e[18]=w>>>16&255,e[19]=w>>>24&255,e[20]=T>>>0&255,e[21]=T>>>8&255,e[22]=T>>>16&255,e[23]=T>>>24&255,e[24]=E>>>0&255,e[25]=E>>>8&255,e[26]=E>>>16&255,e[27]=E>>>24&255,e[28]=D>>>0&255,e[29]=D>>>8&255,e[30]=D>>>16&255,e[31]=D>>>24&255,e[32]=O>>>0&255,e[33]=O>>>8&255,e[34]=O>>>16&255,e[35]=O>>>24&255,e[36]=k>>>0&255,e[37]=k>>>8&255,e[38]=k>>>16&255,e[39]=k>>>24&255,e[40]=A>>>0&255,e[41]=A>>>8&255,e[42]=A>>>16&255,e[43]=A>>>24&255,e[44]=j>>>0&255,e[45]=j>>>8&255,e[46]=j>>>16&255,e[47]=j>>>24&255,e[48]=M>>>0&255,e[49]=M>>>8&255,e[50]=M>>>16&255,e[51]=M>>>24&255,e[52]=N>>>0&255,e[53]=N>>>8&255,e[54]=N>>>16&255,e[55]=N>>>24&255,e[56]=P>>>0&255,e[57]=P>>>8&255,e[58]=P>>>16&255,e[59]=P>>>24&255,e[60]=F>>>0&255,e[61]=F>>>8&255,e[62]=F>>>16&255,e[63]=F>>>24&255}function y(e,t,n,r){for(var i=r[0]&255|(r[1]&255)<<8|(r[2]&255)<<16|(r[3]&255)<<24,a=n[0]&255|(n[1]&255)<<8|(n[2]&255)<<16|(n[3]&255)<<24,o=n[4]&255|(n[5]&255)<<8|(n[6]&255)<<16|(n[7]&255)<<24,s=n[8]&255|(n[9]&255)<<8|(n[10]&255)<<16|(n[11]&255)<<24,c=n[12]&255|(n[13]&255)<<8|(n[14]&255)<<16|(n[15]&255)<<24,l=r[4]&255|(r[5]&255)<<8|(r[6]&255)<<16|(r[7]&255)<<24,u=t[0]&255|(t[1]&255)<<8|(t[2]&255)<<16|(t[3]&255)<<24,d=t[4]&255|(t[5]&255)<<8|(t[6]&255)<<16|(t[7]&255)<<24,f=t[8]&255|(t[9]&255)<<8|(t[10]&255)<<16|(t[11]&255)<<24,p=t[12]&255|(t[13]&255)<<8|(t[14]&255)<<16|(t[15]&255)<<24,m=r[8]&255|(r[9]&255)<<8|(r[10]&255)<<16|(r[11]&255)<<24,h=n[16]&255|(n[17]&255)<<8|(n[18]&255)<<16|(n[19]&255)<<24,g=n[20]&255|(n[21]&255)<<8|(n[22]&255)<<16|(n[23]&255)<<24,_=n[24]&255|(n[25]&255)<<8|(n[26]&255)<<16|(n[27]&255)<<24,v=n[28]&255|(n[29]&255)<<8|(n[30]&255)<<16|(n[31]&255)<<24,y=r[12]&255|(r[13]&255)<<8|(r[14]&255)<<16|(r[15]&255)<<24,b=i,x=a,S=o,C=s,w=c,T=l,E=u,D=d,O=f,k=p,A=m,j=h,M=g,N=_,P=v,F=y,I,L=0;L<20;L+=2)I=b+M|0,w^=I<<7|I>>>25,I=w+b|0,O^=I<<9|I>>>23,I=O+w|0,M^=I<<13|I>>>19,I=M+O|0,b^=I<<18|I>>>14,I=T+x|0,k^=I<<7|I>>>25,I=k+T|0,N^=I<<9|I>>>23,I=N+k|0,x^=I<<13|I>>>19,I=x+N|0,T^=I<<18|I>>>14,I=A+E|0,P^=I<<7|I>>>25,I=P+A|0,S^=I<<9|I>>>23,I=S+P|0,E^=I<<13|I>>>19,I=E+S|0,A^=I<<18|I>>>14,I=F+j|0,C^=I<<7|I>>>25,I=C+F|0,D^=I<<9|I>>>23,I=D+C|0,j^=I<<13|I>>>19,I=j+D|0,F^=I<<18|I>>>14,I=b+C|0,x^=I<<7|I>>>25,I=x+b|0,S^=I<<9|I>>>23,I=S+x|0,C^=I<<13|I>>>19,I=C+S|0,b^=I<<18|I>>>14,I=T+w|0,E^=I<<7|I>>>25,I=E+T|0,D^=I<<9|I>>>23,I=D+E|0,w^=I<<13|I>>>19,I=w+D|0,T^=I<<18|I>>>14,I=A+k|0,j^=I<<7|I>>>25,I=j+A|0,O^=I<<9|I>>>23,I=O+j|0,k^=I<<13|I>>>19,I=k+O|0,A^=I<<18|I>>>14,I=F+P|0,M^=I<<7|I>>>25,I=M+F|0,N^=I<<9|I>>>23,I=N+M|0,P^=I<<13|I>>>19,I=P+N|0,F^=I<<18|I>>>14;e[0]=b>>>0&255,e[1]=b>>>8&255,e[2]=b>>>16&255,e[3]=b>>>24&255,e[4]=T>>>0&255,e[5]=T>>>8&255,e[6]=T>>>16&255,e[7]=T>>>24&255,e[8]=A>>>0&255,e[9]=A>>>8&255,e[10]=A>>>16&255,e[11]=A>>>24&255,e[12]=F>>>0&255,e[13]=F>>>8&255,e[14]=F>>>16&255,e[15]=F>>>24&255,e[16]=E>>>0&255,e[17]=E>>>8&255,e[18]=E>>>16&255,e[19]=E>>>24&255,e[20]=D>>>0&255,e[21]=D>>>8&255,e[22]=D>>>16&255,e[23]=D>>>24&255,e[24]=O>>>0&255,e[25]=O>>>8&255,e[26]=O>>>16&255,e[27]=O>>>24&255,e[28]=k>>>0&255,e[29]=k>>>8&255,e[30]=k>>>16&255,e[31]=k>>>24&255}function b(e,t,n,r){v(e,t,n,r)}function x(e,t,n,r){y(e,t,n,r)}var S=new Uint8Array([101,120,112,97,110,100,32,51,50,45,98,121,116,101,32,107]);function C(e,t,n,r,i,a,o){var s=new Uint8Array(16),c=new Uint8Array(64),l,u;for(u=0;u<16;u++)s[u]=0;for(u=0;u<8;u++)s[u]=a[u];for(;i>=64;){for(b(c,s,o,S),u=0;u<64;u++)e[t+u]=n[r+u]^c[u];for(l=1,u=8;u<16;u++)l=l+(s[u]&255)|0,s[u]=l&255,l>>>=8;i-=64,t+=64,r+=64}if(i>0)for(b(c,s,o,S),u=0;u<i;u++)e[t+u]=n[r+u]^c[u];return 0}function w(e,t,n,r,i){var a=new Uint8Array(16),o=new Uint8Array(64),s,c;for(c=0;c<16;c++)a[c]=0;for(c=0;c<8;c++)a[c]=r[c];for(;n>=64;){for(b(o,a,i,S),c=0;c<64;c++)e[t+c]=o[c];for(s=1,c=8;c<16;c++)s=s+(a[c]&255)|0,a[c]=s&255,s>>>=8;n-=64,t+=64}if(n>0)for(b(o,a,i,S),c=0;c<n;c++)e[t+c]=o[c];return 0}function T(e,t,n,r,i){var a=new Uint8Array(32);x(a,r,i,S);for(var o=new Uint8Array(8),s=0;s<8;s++)o[s]=r[s+16];return w(e,t,n,o,a)}function E(e,t,n,r,i,a,o){var s=new Uint8Array(32);x(s,a,o,S);for(var c=new Uint8Array(8),l=0;l<8;l++)c[l]=a[l+16];return C(e,t,n,r,i,c,s)}var D=function(e){this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.leftover=0,this.fin=0;var t=e[0]&255|(e[1]&255)<<8,n,r,i,a,o,s,c;this.r[0]=t&8191,n=e[2]&255|(e[3]&255)<<8,this.r[1]=(t>>>13|n<<3)&8191,r=e[4]&255|(e[5]&255)<<8,this.r[2]=(n>>>10|r<<6)&7939,i=e[6]&255|(e[7]&255)<<8,this.r[3]=(r>>>7|i<<9)&8191,a=e[8]&255|(e[9]&255)<<8,this.r[4]=(i>>>4|a<<12)&255,this.r[5]=a>>>1&8190,o=e[10]&255|(e[11]&255)<<8,this.r[6]=(a>>>14|o<<2)&8191,s=e[12]&255|(e[13]&255)<<8,this.r[7]=(o>>>11|s<<5)&8065,c=e[14]&255|(e[15]&255)<<8,this.r[8]=(s>>>8|c<<8)&8191,this.r[9]=c>>>5&127,this.pad[0]=e[16]&255|(e[17]&255)<<8,this.pad[1]=e[18]&255|(e[19]&255)<<8,this.pad[2]=e[20]&255|(e[21]&255)<<8,this.pad[3]=e[22]&255|(e[23]&255)<<8,this.pad[4]=e[24]&255|(e[25]&255)<<8,this.pad[5]=e[26]&255|(e[27]&255)<<8,this.pad[6]=e[28]&255|(e[29]&255)<<8,this.pad[7]=e[30]&255|(e[31]&255)<<8};D.prototype.blocks=function(e,t,n){for(var r=this.fin?0:2048,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C=this.h[0],w=this.h[1],T=this.h[2],E=this.h[3],D=this.h[4],O=this.h[5],k=this.h[6],A=this.h[7],j=this.h[8],M=this.h[9],N=this.r[0],P=this.r[1],F=this.r[2],I=this.r[3],L=this.r[4],R=this.r[5],z=this.r[6],B=this.r[7],V=this.r[8],H=this.r[9];n>=16;)i=e[t+0]&255|(e[t+1]&255)<<8,C+=i&8191,a=e[t+2]&255|(e[t+3]&255)<<8,w+=(i>>>13|a<<3)&8191,o=e[t+4]&255|(e[t+5]&255)<<8,T+=(a>>>10|o<<6)&8191,s=e[t+6]&255|(e[t+7]&255)<<8,E+=(o>>>7|s<<9)&8191,c=e[t+8]&255|(e[t+9]&255)<<8,D+=(s>>>4|c<<12)&8191,O+=c>>>1&8191,l=e[t+10]&255|(e[t+11]&255)<<8,k+=(c>>>14|l<<2)&8191,u=e[t+12]&255|(e[t+13]&255)<<8,A+=(l>>>11|u<<5)&8191,d=e[t+14]&255|(e[t+15]&255)<<8,j+=(u>>>8|d<<8)&8191,M+=d>>>5|r,f=0,p=f,p+=C*N,p+=5*H*w,p+=5*V*T,p+=5*B*E,p+=5*z*D,f=p>>>13,p&=8191,p+=5*R*O,p+=5*L*k,p+=5*I*A,p+=5*F*j,p+=5*P*M,f+=p>>>13,p&=8191,m=f,m+=C*P,m+=w*N,m+=5*H*T,m+=5*V*E,m+=5*B*D,f=m>>>13,m&=8191,m+=5*z*O,m+=5*R*k,m+=5*L*A,m+=5*I*j,m+=5*F*M,f+=m>>>13,m&=8191,h=f,h+=C*F,h+=w*P,h+=T*N,h+=5*H*E,h+=5*V*D,f=h>>>13,h&=8191,h+=5*B*O,h+=5*z*k,h+=5*R*A,h+=5*L*j,h+=5*I*M,f+=h>>>13,h&=8191,g=f,g+=C*I,g+=w*F,g+=T*P,g+=E*N,g+=5*H*D,f=g>>>13,g&=8191,g+=5*V*O,g+=5*B*k,g+=5*z*A,g+=5*R*j,g+=5*L*M,f+=g>>>13,g&=8191,_=f,_+=C*L,_+=w*I,_+=T*F,_+=E*P,_+=D*N,f=_>>>13,_&=8191,_+=5*H*O,_+=5*V*k,_+=5*B*A,_+=5*z*j,_+=5*R*M,f+=_>>>13,_&=8191,v=f,v+=C*R,v+=w*L,v+=T*I,v+=E*F,v+=D*P,f=v>>>13,v&=8191,v+=O*N,v+=5*H*k,v+=5*V*A,v+=5*B*j,v+=5*z*M,f+=v>>>13,v&=8191,y=f,y+=C*z,y+=w*R,y+=T*L,y+=E*I,y+=D*F,f=y>>>13,y&=8191,y+=O*P,y+=k*N,y+=5*H*A,y+=5*V*j,y+=5*B*M,f+=y>>>13,y&=8191,b=f,b+=C*B,b+=w*z,b+=T*R,b+=E*L,b+=D*I,f=b>>>13,b&=8191,b+=O*F,b+=k*P,b+=A*N,b+=5*H*j,b+=5*V*M,f+=b>>>13,b&=8191,x=f,x+=C*V,x+=w*B,x+=T*z,x+=E*R,x+=D*L,f=x>>>13,x&=8191,x+=O*I,x+=k*F,x+=A*P,x+=j*N,x+=5*H*M,f+=x>>>13,x&=8191,S=f,S+=C*H,S+=w*V,S+=T*B,S+=E*z,S+=D*R,f=S>>>13,S&=8191,S+=O*L,S+=k*I,S+=A*F,S+=j*P,S+=M*N,f+=S>>>13,S&=8191,f=(f<<2)+f|0,f=f+p|0,p=f&8191,f>>>=13,m+=f,C=p,w=m,T=h,E=g,D=_,O=v,k=y,A=b,j=x,M=S,t+=16,n-=16;this.h[0]=C,this.h[1]=w,this.h[2]=T,this.h[3]=E,this.h[4]=D,this.h[5]=O,this.h[6]=k,this.h[7]=A,this.h[8]=j,this.h[9]=M},D.prototype.finish=function(e,t){var n=new Uint16Array(10),r,i,a,o;if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;o<16;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,o=2;o<10;o++)this.h[o]+=r,r=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=r*5,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,n[0]=this.h[0]+5,r=n[0]>>>13,n[0]&=8191,o=1;o<10;o++)n[o]=this.h[o]+r,r=n[o]>>>13,n[o]&=8191;for(n[9]-=8192,i=(r^1)-1,o=0;o<10;o++)n[o]&=i;for(i=~i,o=0;o<10;o++)this.h[o]=this.h[o]&i|n[o];for(this.h[0]=(this.h[0]|this.h[1]<<13)&65535,this.h[1]=(this.h[1]>>>3|this.h[2]<<10)&65535,this.h[2]=(this.h[2]>>>6|this.h[3]<<7)&65535,this.h[3]=(this.h[3]>>>9|this.h[4]<<4)&65535,this.h[4]=(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14)&65535,this.h[5]=(this.h[6]>>>2|this.h[7]<<11)&65535,this.h[6]=(this.h[7]>>>5|this.h[8]<<8)&65535,this.h[7]=(this.h[8]>>>8|this.h[9]<<5)&65535,a=this.h[0]+this.pad[0],this.h[0]=a&65535,o=1;o<8;o++)a=(this.h[o]+this.pad[o]|0)+(a>>>16)|0,this.h[o]=a&65535;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},D.prototype.update=function(e,t,n){var r,i;if(this.leftover){for(i=16-this.leftover,i>n&&(i=n),r=0;r<i;r++)this.buffer[this.leftover+r]=e[t+r];if(n-=i,t+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(n>=16&&(i=n-n%16,this.blocks(e,t,i),t+=i,n-=i),n){for(r=0;r<n;r++)this.buffer[this.leftover+r]=e[t+r];this.leftover+=n}};function O(e,t,n,r,i,a){var o=new D(a);return o.update(n,r,i),o.finish(e,t),0}function k(e,t,n,r,i,a){var o=new Uint8Array(16);return O(o,0,n,r,i,a),g(e,t,o,0)}function A(e,t,n,r,i){var a;if(n<32)return-1;for(E(e,0,t,0,n,r,i),O(e,16,e,32,n-32,e),a=0;a<16;a++)e[a]=0;return 0}function j(e,t,n,r,i){var a,o=new Uint8Array(32);if(n<32||(T(o,0,32,r,i),k(t,16,t,32,n-32,o)!==0))return-1;for(E(e,0,t,0,n,r,i),a=0;a<32;a++)e[a]=0;return 0}function M(e,t){var n;for(n=0;n<16;n++)e[n]=t[n]|0}function N(e){var t,n,r=1;for(t=0;t<16;t++)n=e[t]+r+65535,r=Math.floor(n/65536),e[t]=n-r*65536;e[0]+=r-1+37*(r-1)}function P(e,t,n){for(var r,i=~(n-1),a=0;a<16;a++)r=i&(e[a]^t[a]),e[a]^=r,t[a]^=r}function F(e,n){var r,i,a,o=t(),s=t();for(r=0;r<16;r++)s[r]=n[r];for(N(s),N(s),N(s),i=0;i<2;i++){for(o[0]=s[0]-65517,r=1;r<15;r++)o[r]=s[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=s[15]-32767-(o[14]>>16&1),a=o[15]>>16&1,o[14]&=65535,P(s,o,1-a)}for(r=0;r<16;r++)e[2*r]=s[r]&255,e[2*r+1]=s[r]>>8}function I(e,t){var n=new Uint8Array(32),r=new Uint8Array(32);return F(n,e),F(r,t),_(n,0,r,0)}function L(e){var t=new Uint8Array(32);return F(t,e),t[0]&1}function R(e,t){var n;for(n=0;n<16;n++)e[n]=t[2*n]+(t[2*n+1]<<8);e[15]&=32767}function z(e,t,n){for(var r=0;r<16;r++)e[r]=t[r]+n[r]}function B(e,t,n){for(var r=0;r<16;r++)e[r]=t[r]-n[r]}function V(e,t,n){var r,i,a=0,o=0,s=0,c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y=0,b=0,x=0,S=0,C=0,w=0,T=0,E=0,D=0,O=0,k=0,A=0,j=0,M=0,N=0,P=0,F=0,I=n[0],L=n[1],R=n[2],z=n[3],B=n[4],V=n[5],H=n[6],U=n[7],W=n[8],G=n[9],K=n[10],q=n[11],J=n[12],Y=n[13],X=n[14],Z=n[15];r=t[0],a+=r*I,o+=r*L,s+=r*R,c+=r*z,l+=r*B,u+=r*V,d+=r*H,f+=r*U,p+=r*W,m+=r*G,h+=r*K,g+=r*q,_+=r*J,v+=r*Y,y+=r*X,b+=r*Z,r=t[1],o+=r*I,s+=r*L,c+=r*R,l+=r*z,u+=r*B,d+=r*V,f+=r*H,p+=r*U,m+=r*W,h+=r*G,g+=r*K,_+=r*q,v+=r*J,y+=r*Y,b+=r*X,x+=r*Z,r=t[2],s+=r*I,c+=r*L,l+=r*R,u+=r*z,d+=r*B,f+=r*V,p+=r*H,m+=r*U,h+=r*W,g+=r*G,_+=r*K,v+=r*q,y+=r*J,b+=r*Y,x+=r*X,S+=r*Z,r=t[3],c+=r*I,l+=r*L,u+=r*R,d+=r*z,f+=r*B,p+=r*V,m+=r*H,h+=r*U,g+=r*W,_+=r*G,v+=r*K,y+=r*q,b+=r*J,x+=r*Y,S+=r*X,C+=r*Z,r=t[4],l+=r*I,u+=r*L,d+=r*R,f+=r*z,p+=r*B,m+=r*V,h+=r*H,g+=r*U,_+=r*W,v+=r*G,y+=r*K,b+=r*q,x+=r*J,S+=r*Y,C+=r*X,w+=r*Z,r=t[5],u+=r*I,d+=r*L,f+=r*R,p+=r*z,m+=r*B,h+=r*V,g+=r*H,_+=r*U,v+=r*W,y+=r*G,b+=r*K,x+=r*q,S+=r*J,C+=r*Y,w+=r*X,T+=r*Z,r=t[6],d+=r*I,f+=r*L,p+=r*R,m+=r*z,h+=r*B,g+=r*V,_+=r*H,v+=r*U,y+=r*W,b+=r*G,x+=r*K,S+=r*q,C+=r*J,w+=r*Y,T+=r*X,E+=r*Z,r=t[7],f+=r*I,p+=r*L,m+=r*R,h+=r*z,g+=r*B,_+=r*V,v+=r*H,y+=r*U,b+=r*W,x+=r*G,S+=r*K,C+=r*q,w+=r*J,T+=r*Y,E+=r*X,D+=r*Z,r=t[8],p+=r*I,m+=r*L,h+=r*R,g+=r*z,_+=r*B,v+=r*V,y+=r*H,b+=r*U,x+=r*W,S+=r*G,C+=r*K,w+=r*q,T+=r*J,E+=r*Y,D+=r*X,O+=r*Z,r=t[9],m+=r*I,h+=r*L,g+=r*R,_+=r*z,v+=r*B,y+=r*V,b+=r*H,x+=r*U,S+=r*W,C+=r*G,w+=r*K,T+=r*q,E+=r*J,D+=r*Y,O+=r*X,k+=r*Z,r=t[10],h+=r*I,g+=r*L,_+=r*R,v+=r*z,y+=r*B,b+=r*V,x+=r*H,S+=r*U,C+=r*W,w+=r*G,T+=r*K,E+=r*q,D+=r*J,O+=r*Y,k+=r*X,A+=r*Z,r=t[11],g+=r*I,_+=r*L,v+=r*R,y+=r*z,b+=r*B,x+=r*V,S+=r*H,C+=r*U,w+=r*W,T+=r*G,E+=r*K,D+=r*q,O+=r*J,k+=r*Y,A+=r*X,j+=r*Z,r=t[12],_+=r*I,v+=r*L,y+=r*R,b+=r*z,x+=r*B,S+=r*V,C+=r*H,w+=r*U,T+=r*W,E+=r*G,D+=r*K,O+=r*q,k+=r*J,A+=r*Y,j+=r*X,M+=r*Z,r=t[13],v+=r*I,y+=r*L,b+=r*R,x+=r*z,S+=r*B,C+=r*V,w+=r*H,T+=r*U,E+=r*W,D+=r*G,O+=r*K,k+=r*q,A+=r*J,j+=r*Y,M+=r*X,N+=r*Z,r=t[14],y+=r*I,b+=r*L,x+=r*R,S+=r*z,C+=r*B,w+=r*V,T+=r*H,E+=r*U,D+=r*W,O+=r*G,k+=r*K,A+=r*q,j+=r*J,M+=r*Y,N+=r*X,P+=r*Z,r=t[15],b+=r*I,x+=r*L,S+=r*R,C+=r*z,w+=r*B,T+=r*V,E+=r*H,D+=r*U,O+=r*W,k+=r*G,A+=r*K,j+=r*q,M+=r*J,N+=r*Y,P+=r*X,F+=r*Z,a+=38*x,o+=38*S,s+=38*C,c+=38*w,l+=38*T,u+=38*E,d+=38*D,f+=38*O,p+=38*k,m+=38*A,h+=38*j,g+=38*M,_+=38*N,v+=38*P,y+=38*F,i=1,r=a+i+65535,i=Math.floor(r/65536),a=r-i*65536,r=o+i+65535,i=Math.floor(r/65536),o=r-i*65536,r=s+i+65535,i=Math.floor(r/65536),s=r-i*65536,r=c+i+65535,i=Math.floor(r/65536),c=r-i*65536,r=l+i+65535,i=Math.floor(r/65536),l=r-i*65536,r=u+i+65535,i=Math.floor(r/65536),u=r-i*65536,r=d+i+65535,i=Math.floor(r/65536),d=r-i*65536,r=f+i+65535,i=Math.floor(r/65536),f=r-i*65536,r=p+i+65535,i=Math.floor(r/65536),p=r-i*65536,r=m+i+65535,i=Math.floor(r/65536),m=r-i*65536,r=h+i+65535,i=Math.floor(r/65536),h=r-i*65536,r=g+i+65535,i=Math.floor(r/65536),g=r-i*65536,r=_+i+65535,i=Math.floor(r/65536),_=r-i*65536,r=v+i+65535,i=Math.floor(r/65536),v=r-i*65536,r=y+i+65535,i=Math.floor(r/65536),y=r-i*65536,r=b+i+65535,i=Math.floor(r/65536),b=r-i*65536,a+=i-1+37*(i-1),i=1,r=a+i+65535,i=Math.floor(r/65536),a=r-i*65536,r=o+i+65535,i=Math.floor(r/65536),o=r-i*65536,r=s+i+65535,i=Math.floor(r/65536),s=r-i*65536,r=c+i+65535,i=Math.floor(r/65536),c=r-i*65536,r=l+i+65535,i=Math.floor(r/65536),l=r-i*65536,r=u+i+65535,i=Math.floor(r/65536),u=r-i*65536,r=d+i+65535,i=Math.floor(r/65536),d=r-i*65536,r=f+i+65535,i=Math.floor(r/65536),f=r-i*65536,r=p+i+65535,i=Math.floor(r/65536),p=r-i*65536,r=m+i+65535,i=Math.floor(r/65536),m=r-i*65536,r=h+i+65535,i=Math.floor(r/65536),h=r-i*65536,r=g+i+65535,i=Math.floor(r/65536),g=r-i*65536,r=_+i+65535,i=Math.floor(r/65536),_=r-i*65536,r=v+i+65535,i=Math.floor(r/65536),v=r-i*65536,r=y+i+65535,i=Math.floor(r/65536),y=r-i*65536,r=b+i+65535,i=Math.floor(r/65536),b=r-i*65536,a+=i-1+37*(i-1),e[0]=a,e[1]=o,e[2]=s,e[3]=c,e[4]=l,e[5]=u,e[6]=d,e[7]=f,e[8]=p,e[9]=m,e[10]=h,e[11]=g,e[12]=_,e[13]=v,e[14]=y,e[15]=b}function H(e,t){V(e,t,t)}function U(e,n){var r=t(),i;for(i=0;i<16;i++)r[i]=n[i];for(i=253;i>=0;i--)H(r,r),i!==2&&i!==4&&V(r,r,n);for(i=0;i<16;i++)e[i]=r[i]}function G(e,n){var r=t(),i;for(i=0;i<16;i++)r[i]=n[i];for(i=250;i>=0;i--)H(r,r),i!==1&&V(r,r,n);for(i=0;i<16;i++)e[i]=r[i]}function K(e,n,r){var i=new Uint8Array(32),a=new Float64Array(80),o,c,l=t(),u=t(),d=t(),f=t(),p=t(),m=t();for(c=0;c<31;c++)i[c]=n[c];for(i[31]=n[31]&127|64,i[0]&=248,R(a,r),c=0;c<16;c++)u[c]=a[c],f[c]=l[c]=d[c]=0;for(l[0]=f[0]=1,c=254;c>=0;--c)o=i[c>>>3]>>>(c&7)&1,P(l,u,o),P(d,f,o),z(p,l,d),B(l,l,d),z(d,u,f),B(u,u,f),H(f,p),H(m,l),V(l,d,l),V(d,u,p),z(p,l,d),B(l,l,d),H(u,l),B(d,f,m),V(l,d,s),z(l,l,f),V(d,d,l),V(l,f,m),V(f,u,a),H(u,p),P(l,u,o),P(d,f,o);for(c=0;c<16;c++)a[c+16]=l[c],a[c+32]=d[c],a[c+48]=u[c],a[c+64]=f[c];var h=a.subarray(32),g=a.subarray(16);return U(h,h),V(g,g,h),F(e,g),0}function q(e,t){return K(e,t,i)}function J(e,t){return n(t,32),q(e,t)}function Y(e,t,n){var i=new Uint8Array(32);return K(i,n,t),x(e,r,i,S)}var X=A,Z=j;function ee(e,t,n,r,i,a){var o=new Uint8Array(32);return Y(o,i,a),X(e,t,n,r,o)}function te(e,t,n,r,i,a){var o=new Uint8Array(32);return Y(o,i,a),Z(e,t,n,r,o)}var ne=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function re(e,t,n,r){for(var i=new Int32Array(16),a=new Int32Array(16),o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M=e[0],N=e[1],P=e[2],F=e[3],I=e[4],L=e[5],R=e[6],z=e[7],B=t[0],V=t[1],H=t[2],U=t[3],W=t[4],G=t[5],K=t[6],q=t[7],J=0;r>=128;){for(w=0;w<16;w++)T=8*w+J,i[w]=n[T+0]<<24|n[T+1]<<16|n[T+2]<<8|n[T+3],a[w]=n[T+4]<<24|n[T+5]<<16|n[T+6]<<8|n[T+7];for(w=0;w<80;w++)if(o=M,s=N,c=P,l=F,u=I,d=L,f=R,p=z,m=B,h=V,g=H,_=U,v=W,y=G,b=K,x=q,E=z,D=q,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=(I>>>14|W<<18)^(I>>>18|W<<14)^(W>>>9|I<<23),D=(W>>>14|I<<18)^(W>>>18|I<<14)^(I>>>9|W<<23),O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,E=I&L^~I&R,D=W&G^~W&K,O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,E=ne[w*2],D=ne[w*2+1],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,E=i[w%16],D=a[w%16],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,S=A&65535|j<<16,C=O&65535|k<<16,E=S,D=C,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=(M>>>28|B<<4)^(B>>>2|M<<30)^(B>>>7|M<<25),D=(B>>>28|M<<4)^(M>>>2|B<<30)^(M>>>7|B<<25),O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,E=M&N^M&P^N&P,D=B&V^B&H^V&H,O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,p=A&65535|j<<16,x=O&65535|k<<16,E=l,D=_,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=S,D=C,O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,l=A&65535|j<<16,_=O&65535|k<<16,N=o,P=s,F=c,I=l,L=u,R=d,z=f,M=p,V=m,H=h,U=g,W=_,G=v,K=y,q=b,B=x,w%16==15)for(T=0;T<16;T++)E=i[T],D=a[T],O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=i[(T+9)%16],D=a[(T+9)%16],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,S=i[(T+1)%16],C=a[(T+1)%16],E=(S>>>1|C<<31)^(S>>>8|C<<24)^S>>>7,D=(C>>>1|S<<31)^(C>>>8|S<<24)^(C>>>7|S<<25),O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,S=i[(T+14)%16],C=a[(T+14)%16],E=(S>>>19|C<<13)^(C>>>29|S<<3)^S>>>6,D=(C>>>19|S<<13)^(S>>>29|C<<3)^(C>>>6|S<<26),O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,i[T]=A&65535|j<<16,a[T]=O&65535|k<<16;E=M,D=B,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[0],D=t[0],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[0]=M=A&65535|j<<16,t[0]=B=O&65535|k<<16,E=N,D=V,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[1],D=t[1],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[1]=N=A&65535|j<<16,t[1]=V=O&65535|k<<16,E=P,D=H,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[2],D=t[2],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[2]=P=A&65535|j<<16,t[2]=H=O&65535|k<<16,E=F,D=U,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[3],D=t[3],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[3]=F=A&65535|j<<16,t[3]=U=O&65535|k<<16,E=I,D=W,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[4],D=t[4],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[4]=I=A&65535|j<<16,t[4]=W=O&65535|k<<16,E=L,D=G,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[5],D=t[5],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[5]=L=A&65535|j<<16,t[5]=G=O&65535|k<<16,E=R,D=K,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[6],D=t[6],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[6]=R=A&65535|j<<16,t[6]=K=O&65535|k<<16,E=z,D=q,O=D&65535,k=D>>>16,A=E&65535,j=E>>>16,E=e[7],D=t[7],O+=D&65535,k+=D>>>16,A+=E&65535,j+=E>>>16,k+=O>>>16,A+=k>>>16,j+=A>>>16,e[7]=z=A&65535|j<<16,t[7]=q=O&65535|k<<16,J+=128,r-=128}return r}function Q(e,t,n){var r=new Int32Array(8),i=new Int32Array(8),a=new Uint8Array(256),o,s=n;for(r[0]=1779033703,r[1]=3144134277,r[2]=1013904242,r[3]=2773480762,r[4]=1359893119,r[5]=2600822924,r[6]=528734635,r[7]=1541459225,i[0]=4089235720,i[1]=2227873595,i[2]=4271175723,i[3]=1595750129,i[4]=2917565137,i[5]=725511199,i[6]=4215389547,i[7]=327033209,re(r,i,t,n),n%=128,o=0;o<n;o++)a[o]=t[s-n+o];for(a[n]=128,n=256-128*(n<112?1:0),a[n-9]=0,m(a,n-8,s/536870912|0,s<<3),re(r,i,a,n),o=0;o<8;o++)m(e,8*o,r[o],i[o]);return 0}function ie(e,n){var r=t(),i=t(),a=t(),o=t(),s=t(),c=t(),l=t(),d=t(),f=t();B(r,e[1],e[0]),B(f,n[1],n[0]),V(r,r,f),z(i,e[0],e[1]),z(f,n[0],n[1]),V(i,i,f),V(a,e[3],n[3]),V(a,a,u),V(o,e[2],n[2]),z(o,o,o),B(s,i,r),B(c,o,a),z(l,o,a),z(d,i,r),V(e[0],s,c),V(e[1],d,l),V(e[2],l,c),V(e[3],s,d)}function ae(e,t,n){var r;for(r=0;r<4;r++)P(e[r],t[r],n)}function oe(e,n){var r=t(),i=t(),a=t();U(a,n[2]),V(r,n[0],a),V(i,n[1],a),F(e,i),e[31]^=L(r)<<7}function se(e,t,n){var r,i;for(M(e[0],a),M(e[1],o),M(e[2],o),M(e[3],a),i=255;i>=0;--i)r=n[i/8|0]>>(i&7)&1,ae(e,t,r),ie(t,e),ie(e,e),ae(e,t,r)}function ce(e,n){var r=[t(),t(),t(),t()];M(r[0],d),M(r[1],f),M(r[2],o),V(r[3],d,f),se(e,r,n)}function le(e,r,i){var a=new Uint8Array(64),o=[t(),t(),t(),t()],s;for(i||n(r,32),Q(a,r,32),a[0]&=248,a[31]&=127,a[31]|=64,ce(o,a),oe(e,o),s=0;s<32;s++)r[s+32]=e[s];return 0}var ue=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function de(e,t){var n,r,i,a;for(r=63;r>=32;--r){for(n=0,i=r-32,a=r-12;i<a;++i)t[i]+=n-16*t[r]*ue[i-(r-32)],n=Math.floor((t[i]+128)/256),t[i]-=n*256;t[i]+=n,t[r]=0}for(n=0,i=0;i<32;i++)t[i]+=n-(t[31]>>4)*ue[i],n=t[i]>>8,t[i]&=255;for(i=0;i<32;i++)t[i]-=n*ue[i];for(r=0;r<32;r++)t[r+1]+=t[r]>>8,e[r]=t[r]&255}function fe(e){var t=new Float64Array(64),n;for(n=0;n<64;n++)t[n]=e[n];for(n=0;n<64;n++)e[n]=0;de(e,t)}function pe(e,n,r,i){var a=new Uint8Array(64),o=new Uint8Array(64),s=new Uint8Array(64),c,l,u=new Float64Array(64),d=[t(),t(),t(),t()];Q(a,i,32),a[0]&=248,a[31]&=127,a[31]|=64;var f=r+64;for(c=0;c<r;c++)e[64+c]=n[c];for(c=0;c<32;c++)e[32+c]=a[32+c];for(Q(s,e.subarray(32),r+32),fe(s),ce(d,s),oe(e,d),c=32;c<64;c++)e[c]=i[c];for(Q(o,e,r+64),fe(o),c=0;c<64;c++)u[c]=0;for(c=0;c<32;c++)u[c]=s[c];for(c=0;c<32;c++)for(l=0;l<32;l++)u[c+l]+=o[c]*a[l];return de(e.subarray(32),u),f}function me(e,n){var r=t(),i=t(),s=t(),l=t(),u=t(),d=t(),f=t();return M(e[2],o),R(e[1],n),H(s,e[1]),V(l,s,c),B(s,s,e[2]),z(l,e[2],l),H(u,l),H(d,u),V(f,d,u),V(r,f,s),V(r,r,l),G(r,r),V(r,r,s),V(r,r,l),V(r,r,l),V(e[0],r,l),H(i,e[0]),V(i,i,l),I(i,s)&&V(e[0],e[0],p),H(i,e[0]),V(i,i,l),I(i,s)?-1:(L(e[0])===n[31]>>7&&B(e[0],a,e[0]),V(e[3],e[0],e[1]),0)}function he(e,n,r,i){var a,o=new Uint8Array(32),s=new Uint8Array(64),c=[t(),t(),t(),t()],l=[t(),t(),t(),t()];if(r<64||me(l,i))return-1;for(a=0;a<r;a++)e[a]=n[a];for(a=0;a<32;a++)e[a+32]=i[a];if(Q(s,e,r),fe(s),se(c,l,s),ce(l,n.subarray(32)),ie(c,l),oe(o,c),r-=64,_(n,0,o,0)){for(a=0;a<r;a++)e[a]=0;return-1}for(a=0;a<r;a++)e[a]=n[a+64];return r}var ge=32,_e=24,ve=32,ye=16,be=32,xe=32,Se=32,Ce=32,we=32,Te=_e,Ee=ve,De=ye,Oe=64,ke=32,Ae=64,je=32,Me=64;e.lowlevel={crypto_core_hsalsa20:x,crypto_stream_xor:E,crypto_stream:T,crypto_stream_salsa20_xor:C,crypto_stream_salsa20:w,crypto_onetimeauth:O,crypto_onetimeauth_verify:k,crypto_verify_16:g,crypto_verify_32:_,crypto_secretbox:A,crypto_secretbox_open:j,crypto_scalarmult:K,crypto_scalarmult_base:q,crypto_box_beforenm:Y,crypto_box_afternm:X,crypto_box:ee,crypto_box_open:te,crypto_box_keypair:J,crypto_hash:Q,crypto_sign:pe,crypto_sign_keypair:le,crypto_sign_open:he,crypto_secretbox_KEYBYTES:ge,crypto_secretbox_NONCEBYTES:_e,crypto_secretbox_ZEROBYTES:ve,crypto_secretbox_BOXZEROBYTES:ye,crypto_scalarmult_BYTES:be,crypto_scalarmult_SCALARBYTES:xe,crypto_box_PUBLICKEYBYTES:Se,crypto_box_SECRETKEYBYTES:Ce,crypto_box_BEFORENMBYTES:we,crypto_box_NONCEBYTES:Te,crypto_box_ZEROBYTES:Ee,crypto_box_BOXZEROBYTES:De,crypto_sign_BYTES:Oe,crypto_sign_PUBLICKEYBYTES:ke,crypto_sign_SECRETKEYBYTES:Ae,crypto_sign_SEEDBYTES:je,crypto_hash_BYTES:Me,gf:t,D:c,L:ue,pack25519:F,unpack25519:R,M:V,A:z,S:H,Z:B,pow2523:G,add:ie,set25519:M,modL:de,scalarmult:se,scalarbase:ce};function Ne(e,t){if(e.length!==ge)throw Error(`bad key size`);if(t.length!==_e)throw Error(`bad nonce size`)}function Pe(e,t){if(e.length!==Se)throw Error(`bad public key size`);if(t.length!==Ce)throw Error(`bad secret key size`)}function $(){for(var e=0;e<arguments.length;e++)if(!(arguments[e]instanceof Uint8Array))throw TypeError(`unexpected type, use Uint8Array`)}function Fe(e){for(var t=0;t<e.length;t++)e[t]=0}e.randomBytes=function(e){var t=new Uint8Array(e);return n(t,e),t},e.secretbox=function(e,t,n){$(e,t,n),Ne(n,t);for(var r=new Uint8Array(ve+e.length),i=new Uint8Array(r.length),a=0;a<e.length;a++)r[a+ve]=e[a];return A(i,r,r.length,t,n),i.subarray(ye)},e.secretbox.open=function(e,t,n){$(e,t,n),Ne(n,t);for(var r=new Uint8Array(ye+e.length),i=new Uint8Array(r.length),a=0;a<e.length;a++)r[a+ye]=e[a];return r.length<32||j(i,r,r.length,t,n)!==0?null:i.subarray(ve)},e.secretbox.keyLength=ge,e.secretbox.nonceLength=_e,e.secretbox.overheadLength=ye,e.scalarMult=function(e,t){if($(e,t),e.length!==xe)throw Error(`bad n size`);if(t.length!==be)throw Error(`bad p size`);var n=new Uint8Array(be);return K(n,e,t),n},e.scalarMult.base=function(e){if($(e),e.length!==xe)throw Error(`bad n size`);var t=new Uint8Array(be);return q(t,e),t},e.scalarMult.scalarLength=xe,e.scalarMult.groupElementLength=be,e.box=function(t,n,r,i){var a=e.box.before(r,i);return e.secretbox(t,n,a)},e.box.before=function(e,t){$(e,t),Pe(e,t);var n=new Uint8Array(we);return Y(n,e,t),n},e.box.after=e.secretbox,e.box.open=function(t,n,r,i){var a=e.box.before(r,i);return e.secretbox.open(t,n,a)},e.box.open.after=e.secretbox.open,e.box.keyPair=function(){var e=new Uint8Array(Se),t=new Uint8Array(Ce);return J(e,t),{publicKey:e,secretKey:t}},e.box.keyPair.fromSecretKey=function(e){if($(e),e.length!==Ce)throw Error(`bad secret key size`);var t=new Uint8Array(Se);return q(t,e),{publicKey:t,secretKey:new Uint8Array(e)}},e.box.publicKeyLength=Se,e.box.secretKeyLength=Ce,e.box.sharedKeyLength=we,e.box.nonceLength=Te,e.box.overheadLength=e.secretbox.overheadLength,e.sign=function(e,t){if($(e,t),t.length!==Ae)throw Error(`bad secret key size`);var n=new Uint8Array(Oe+e.length);return pe(n,e,e.length,t),n},e.sign.open=function(e,t){if($(e,t),t.length!==ke)throw Error(`bad public key size`);var n=new Uint8Array(e.length),r=he(n,e,e.length,t);if(r<0)return null;for(var i=new Uint8Array(r),a=0;a<i.length;a++)i[a]=n[a];return i},e.sign.detached=function(t,n){for(var r=e.sign(t,n),i=new Uint8Array(Oe),a=0;a<i.length;a++)i[a]=r[a];return i},e.sign.detached.verify=function(e,t,n){if($(e,t,n),t.length!==Oe)throw Error(`bad signature size`);if(n.length!==ke)throw Error(`bad public key size`);var r=new Uint8Array(Oe+e.length),i=new Uint8Array(Oe+e.length),a;for(a=0;a<Oe;a++)r[a]=t[a];for(a=0;a<e.length;a++)r[a+Oe]=e[a];return he(i,r,r.length,n)>=0},e.sign.keyPair=function(){var e=new Uint8Array(ke),t=new Uint8Array(Ae);return le(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if($(e),e.length!==Ae)throw Error(`bad secret key size`);for(var t=new Uint8Array(ke),n=0;n<t.length;n++)t[n]=e[32+n];return{publicKey:t,secretKey:new Uint8Array(e)}},e.sign.keyPair.fromSeed=function(e){if($(e),e.length!==je)throw Error(`bad seed size`);for(var t=new Uint8Array(ke),n=new Uint8Array(Ae),r=0;r<32;r++)n[r]=e[r];return le(t,n,!0),{publicKey:t,secretKey:n}},e.sign.publicKeyLength=ke,e.sign.secretKeyLength=Ae,e.sign.seedLength=je,e.sign.signatureLength=Oe,e.hash=function(e){$(e);var t=new Uint8Array(Me);return Q(t,e,e.length),t},e.hash.hashLength=Me,e.verify=function(e,t){return $(e,t),e.length===0||t.length===0||e.length!==t.length?!1:h(e,0,t,0,e.length)===0},e.setPRNG=function(e){n=e},(function(){var t=typeof self<`u`?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){var n=65536;e.setPRNG(function(e,r){var i,a=new Uint8Array(r);for(i=0;i<r;i+=n)t.getRandomValues(a.subarray(i,i+Math.min(r-i,n)));for(i=0;i<r;i++)e[i]=a[i];Fe(a)})}else l!==void 0&&(t=W(),t&&t.randomBytes&&e.setPRNG(function(e,n){var r,i=t.randomBytes(n);for(r=0;r<n;r++)e[r]=i[r];Fe(i)}))})()})(t!==void 0&&t.exports?t.exports:self.nacl=self.nacl||{})}))(),1),K=new TextEncoder,q=new TextDecoder;function J(e){let t=K.encode(e);return G.default.hash(t).slice(0,32)}function Y(e,t){let n=G.default.randomBytes(G.default.secretbox.nonceLength),r=K.encode(e),i=G.default.secretbox(r,n,t),a=new Uint8Array(n.length+i.length);a.set(n),a.set(i,n.length);let o=``;for(let e=0;e<a.length;e++)o+=String.fromCharCode(a[e]);return btoa(o)}function X(e,t){let n=Uint8Array.from(atob(e),e=>e.charCodeAt(0)),r=n.subarray(0,G.default.secretbox.nonceLength),i=n.subarray(G.default.secretbox.nonceLength),a=G.default.secretbox.open(i,r,t);if(!a)throw Error(`Decryption failed`);return q.decode(a)}var Z=new URLSearchParams(window.location.search).get(`token`);if(!Z)throw document.body.textContent=`Missing authentication token.`,Error(`No token in URL`);var ee=J(Z),te=`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}?token=${Z}`,ne=window.location.hostname,re=new Map,Q=new Map,ie=document.getElementById(`session-list`),ae=document.getElementById(`empty-state`),oe=document.getElementById(`session-count`),se=document.getElementById(`status-dot`),ce=null;function le(){x(),document.removeEventListener(`click`,le),document.removeEventListener(`touchstart`,le)}document.addEventListener(`click`,le),document.addEventListener(`touchstart`,le);function ue(e){He&&He.readyState===WebSocket.OPEN&&He.send(Y(JSON.stringify(e),ee))}L(ue);var de={onOpen(e){let t=re.get(e.id)||e;t.status===`attention`&&(ue({type:`clear-attention`,sessionId:t.id}),E(t.id));let n=window.location.href,r=`http://${ne}:${t.port}?token=${t.token}&hub=${encodeURIComponent(n)}`;window.location.href=r},onStop(e){ue({type:`stop-session`,sessionId:e})},onRename(e,t){ue({type:`rename-session`,sessionId:e,name:t})},onInfo(e){ue({type:`get-metadata`,sessionId:e})}};function fe(){let e=re.size;oe.textContent=`${e} session${e===1?``:`s`}`,e===0?ae.style.display=`flex`:ae.style.display=`none`}function pe(e){re.set(e.id,e);let t=p(e,ne,de);Q.set(e.id,t),ie.insertBefore(t,ae),fe()}function me(e){re.delete(e);let t=Q.get(e);t&&(t.remove(),Q.delete(e)),fe()}function he(e){re.set(e.id,e);let t=Q.get(e.id);t&&g(t,e)}function ge(){for(let[e,t]of re){let n=Q.get(e);n&&g(n,t)}}var _e=document.getElementById(`fab-create`),ve=document.getElementById(`create-modal`),ye=document.getElementById(`modal-close`),be=document.getElementById(`tool-input`),xe=document.getElementById(`tool-chips`),Se=document.getElementById(`dir-selected`),Ce=document.getElementById(`btn-browse`),we=document.getElementById(`btn-create-session`),Te=document.getElementById(`create-error`),Ee=document.getElementById(`create-form-view`),De=document.getElementById(`browse-view`),Oe=document.getElementById(`browse-breadcrumb`),ke=document.getElementById(`browse-list`),Ae=document.getElementById(`browse-back`),je=document.getElementById(`browse-select`),Me=document.getElementById(`create-spinner`),Ne=`~`,Pe=`~`;function $(e,t,n){let r=document.createElement(e);return r.className=t,r.textContent=n,r}function Fe(){ve.classList.remove(`hidden`),Ee.classList.remove(`hidden`),De.classList.add(`hidden`),Me.classList.add(`hidden`),Te.classList.add(`hidden`),be.value=``,Ne=`~`,Se.textContent=`~`,Le(),Re(),be.focus()}function Ie(){ve.classList.add(`hidden`)}function Le(){we.disabled=!be.value.trim()}async function Re(){try{let e=await(await fetch(`/api/tool-history?token=${Z}`)).json();xe.replaceChildren();for(let t of e.tools.slice(0,6)){let e=$(`span`,`chip`,t);e.addEventListener(`click`,()=>{be.value=t,Le()}),xe.appendChild(e)}}catch{}}async function ze(e){Pe=e,ke.replaceChildren($(`div`,`browse-empty`,`Loading...`));try{let t=await(await fetch(`/api/browse?path=${encodeURIComponent(e)}&token=${Z}`)).json();if(t.error){ke.replaceChildren($(`div`,`browse-empty`,t.error));return}let n=t.path||e;Pe=n,Be(n);let r=t.entries;if(r.length===0){ke.replaceChildren($(`div`,`browse-empty`,`No subdirectories`));return}ke.replaceChildren();for(let e of r){let t=document.createElement(`div`);t.className=`browse-item`,t.appendChild($(`span`,`browse-item-name`,e)),t.appendChild($(`span`,`browse-item-arrow`,`›`)),t.addEventListener(`click`,()=>ze(`${n}/${e}`)),ke.appendChild(t)}}catch{ke.replaceChildren($(`div`,`browse-empty`,`Failed to load`))}}function Be(e){Oe.replaceChildren();let t=e.split(`/`).filter(Boolean);for(let e=0;e<t.length;e++){e>0&&Oe.appendChild($(`span`,`breadcrumb-sep`,` / `));let n=$(`span`,`breadcrumb-segment`,t[e]),r=t.slice(0,e+1).join(`/`);n.addEventListener(`click`,()=>ze(r)),Oe.appendChild(n)}}function Ve(){let e=be.value.trim();e&&(Te.classList.add(`hidden`),Ee.classList.add(`hidden`),Me.classList.remove(`hidden`),ue({type:`create-session`,tool:e,cwd:Ne}))}_e.addEventListener(`click`,Fe),ye.addEventListener(`click`,Ie),ve.addEventListener(`click`,e=>{e.target===ve&&Ie()}),be.addEventListener(`input`,Le),we.addEventListener(`click`,Ve),Ce.addEventListener(`click`,()=>{Ee.classList.add(`hidden`),De.classList.remove(`hidden`),ze(Ne)}),Ae.addEventListener(`click`,()=>{De.classList.add(`hidden`),Ee.classList.remove(`hidden`)}),je.addEventListener(`click`,()=>{Ne=Pe,Se.textContent=Ne,De.classList.add(`hidden`),Ee.classList.remove(`hidden`)});var He=null,Ue=0,We=1e4;function Ge(){He=new WebSocket(te),He.onopen=()=>{se.className=`connected`,Ue=0,ce&&clearInterval(ce),ce=setInterval(ge,1e4)},He.onmessage=e=>{try{let t=JSON.parse(X(e.data,ee));switch(t.type){case`sessions`:D();for(let e of Q.keys())me(e);for(let e of t.sessions)pe(e),e.status===`attention`&&T(e.id);break;case`session-added`:pe(t.session),ve.classList.contains(`hidden`)||Ie();break;case`session-removed`:{let e=t.sessionId;E(e),me(e);break}case`session-updated`:{let e=t.session;he(e),e.status===`attention`?T(e.id):E(e.id);break}case`preview`:{let e=Q.get(t.sessionId);e&&_(e,t.lines);break}case`metadata`:{let e=Q.get(t.sessionId);e&&v(e,t.metadata);break}case`session-creating`:break;case`session-create-error`:Me.classList.add(`hidden`),Ee.classList.remove(`hidden`),Te.textContent=t.error,Te.classList.remove(`hidden`);break;case`sleep-state`:H(t.state);break;case`sleep-error`:U(t.error);break;case`operation-error`:console.warn(`Operation "${t.operation}" failed for session ${t.sessionId}: ${t.error}`);break}}catch{}},He.onclose=()=>{se.className=`reconnecting`,D(),Ke()},He.onerror=()=>{He?.close()}}function Ke(){let e=Math.min(1e3*1.5**Ue,We);Ue++,setTimeout(Ge,e)}document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&He?.readyState!==WebSocket.OPEN&&(Ue=0,Ge())}),Ge(),document.addEventListener(`focusin`,e=>{let t=e.target;t.matches(`input, textarea`)&&(_e.style.display=`none`,setTimeout(()=>{t.scrollIntoView({block:`center`,behavior:`smooth`})},300))}),document.addEventListener(`focusout`,()=>{_e.style.display=``});
@@ -7,8 +7,8 @@
7
7
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
8
8
  <meta name="theme-color" content="#1a1a2e" />
9
9
  <title>itwillsync Dashboard</title>
10
- <script type="module" crossorigin src="/assets/index-hWUVy-IH.js"></script>
11
- <link rel="stylesheet" crossorigin href="/assets/index-CUdWjWFv.css">
10
+ <script type="module" crossorigin src="/assets/index-hmAVUiL5.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-3t8d4xww.css">
12
12
  </head>
13
13
  <body>
14
14
  <header id="header">
package/dist/index.js CHANGED
@@ -3772,19 +3772,26 @@ function validateToken(provided, expected) {
3772
3772
  import { networkInterfaces } from "os";
3773
3773
  import { createServer } from "net";
3774
3774
 
3775
- // src/tailscale.ts
3775
+ // src/exec-utils.ts
3776
3776
  import { execFile } from "child_process";
3777
- function execCommand(cmd, args) {
3777
+ function execFileAsync(cmd, args, opts) {
3778
3778
  return new Promise((resolve, reject) => {
3779
- execFile(cmd, args, { timeout: 5e3 }, (error, stdout, stderr) => {
3780
- if (error) {
3781
- reject(error);
3782
- } else {
3783
- resolve({ stdout: stdout.trim(), stderr: stderr.trim() });
3779
+ execFile(
3780
+ cmd,
3781
+ args,
3782
+ { timeout: opts?.timeout ?? 5e3 },
3783
+ (error, stdout, stderr) => {
3784
+ if (error) {
3785
+ reject(error);
3786
+ } else {
3787
+ resolve({ stdout: stdout.trim(), stderr: stderr.trim() });
3788
+ }
3784
3789
  }
3785
- });
3790
+ );
3786
3791
  });
3787
3792
  }
3793
+
3794
+ // src/tailscale.ts
3788
3795
  function getTailscalePaths() {
3789
3796
  const paths = ["tailscale"];
3790
3797
  if (process.platform === "darwin") {
@@ -3796,7 +3803,7 @@ async function tryExec(args) {
3796
3803
  let lastError = null;
3797
3804
  for (const bin of getTailscalePaths()) {
3798
3805
  try {
3799
- const result = await execCommand(bin, args);
3806
+ const result = await execFileAsync(bin, args);
3800
3807
  return { status: "success", ...result };
3801
3808
  } catch (err) {
3802
3809
  if (err.code === "ENOENT") {
@@ -3919,6 +3926,7 @@ var import_websocket = __toESM(require_websocket(), 1);
3919
3926
  var import_websocket_server = __toESM(require_websocket_server(), 1);
3920
3927
 
3921
3928
  // src/server.ts
3929
+ import { deriveEncryptionKey, encrypt, decrypt } from "@itwillsync/shared/crypto";
3922
3930
  var MIME_TYPES = {
3923
3931
  ".html": "text/html; charset=utf-8",
3924
3932
  ".js": "application/javascript; charset=utf-8",
@@ -3976,6 +3984,18 @@ function createSyncServer(options) {
3976
3984
  clientBufferLimit = DEFAULT_CLIENT_BUFFER_LIMIT,
3977
3985
  logger
3978
3986
  } = options;
3987
+ const encryptionKey = deriveEncryptionKey(token);
3988
+ function sendMsg(ws, msg) {
3989
+ ws.send(encrypt(JSON.stringify(msg), encryptionKey));
3990
+ }
3991
+ function broadcast(message) {
3992
+ const msg = encrypt(JSON.stringify(message), encryptionKey);
3993
+ for (const client of clients) {
3994
+ if (client.readyState === client.OPEN) {
3995
+ client.send(msg);
3996
+ }
3997
+ }
3998
+ }
3979
3999
  const clients = /* @__PURE__ */ new Set();
3980
4000
  const aliveMap = /* @__PURE__ */ new WeakMap();
3981
4001
  const dropCounters = /* @__PURE__ */ new WeakMap();
@@ -4020,40 +4040,42 @@ function createSyncServer(options) {
4020
4040
  let syncReceived = false;
4021
4041
  const fallbackTimer = setTimeout(() => {
4022
4042
  if (!syncReceived && scrollbackBuffer.length > 0) {
4023
- ws.send(JSON.stringify({ type: "data", data: scrollbackBuffer, seq }));
4043
+ sendMsg(ws, { type: "data", data: scrollbackBuffer, seq });
4024
4044
  }
4025
4045
  }, 150);
4026
- ws.send(JSON.stringify({ type: "resize", cols: ptyManager.cols, rows: ptyManager.rows }));
4046
+ sendMsg(ws, { type: "resize", cols: ptyManager.cols, rows: ptyManager.rows });
4027
4047
  ws.on("pong", () => {
4028
4048
  aliveMap.set(ws, true);
4029
4049
  });
4030
4050
  ws.on("message", (raw) => {
4051
+ let plaintext;
4052
+ try {
4053
+ const rawStr = typeof raw === "string" ? raw : raw.toString("utf-8");
4054
+ plaintext = decrypt(rawStr, encryptionKey);
4055
+ } catch {
4056
+ return;
4057
+ }
4031
4058
  try {
4032
- const message = JSON.parse(typeof raw === "string" ? raw : raw.toString("utf-8"));
4059
+ const message = JSON.parse(plaintext);
4033
4060
  if (message.type === "input" && typeof message.data === "string") {
4034
4061
  ptyManager.write(message.data);
4035
4062
  } else if (message.type === "resize" && typeof message.cols === "number" && typeof message.rows === "number") {
4036
4063
  if (resizePolicy === "last-writer-wins") {
4037
4064
  ptyManager.resize(message.cols, message.rows);
4038
- const resizeMsg = JSON.stringify({ type: "resize", cols: ptyManager.cols, rows: ptyManager.rows });
4039
- for (const c of clients) {
4040
- if (c.readyState === c.OPEN) {
4041
- c.send(resizeMsg);
4042
- }
4043
- }
4065
+ broadcast({ type: "resize", cols: ptyManager.cols, rows: ptyManager.rows });
4044
4066
  }
4045
4067
  } else if (message.type === "sync" && typeof message.lastSeq === "number") {
4046
4068
  syncReceived = true;
4047
4069
  clearTimeout(fallbackTimer);
4048
4070
  if (message.lastSeq === -1 || message.lastSeq < seq - scrollbackBuffer.length) {
4049
4071
  if (scrollbackBuffer.length > 0) {
4050
- ws.send(JSON.stringify({ type: "data", data: scrollbackBuffer, seq }));
4072
+ sendMsg(ws, { type: "data", data: scrollbackBuffer, seq });
4051
4073
  }
4052
4074
  } else {
4053
4075
  const missed = seq - message.lastSeq;
4054
4076
  if (missed > 0 && scrollbackBuffer.length > 0) {
4055
4077
  const delta = missed <= scrollbackBuffer.length ? scrollbackBuffer.slice(-missed) : scrollbackBuffer;
4056
- ws.send(JSON.stringify({ type: "data", data: delta, seq }));
4078
+ sendMsg(ws, { type: "data", data: delta, seq });
4057
4079
  }
4058
4080
  }
4059
4081
  } else if (message.type === "resume" && typeof message.lastSeq === "number") {
@@ -4062,7 +4084,7 @@ function createSyncServer(options) {
4062
4084
  const missed = seq - message.lastSeq;
4063
4085
  if (missed > 0 && scrollbackBuffer.length > 0) {
4064
4086
  const delta = missed <= scrollbackBuffer.length ? scrollbackBuffer.slice(-missed) : scrollbackBuffer;
4065
- ws.send(JSON.stringify({ type: "data", data: delta, seq }));
4087
+ sendMsg(ws, { type: "data", data: delta, seq });
4066
4088
  }
4067
4089
  }
4068
4090
  } catch {
@@ -4089,7 +4111,7 @@ function createSyncServer(options) {
4089
4111
  scrollbackBuffer = scrollbackBuffer.slice(trimChars);
4090
4112
  scrollbackBytes -= Buffer.byteLength(trimmed, "utf-8");
4091
4113
  }
4092
- const msg = JSON.stringify({ type: "data", data, seq });
4114
+ const msg = encrypt(JSON.stringify({ type: "data", data, seq }), encryptionKey);
4093
4115
  for (const client of clients) {
4094
4116
  if (client.readyState !== client.OPEN) continue;
4095
4117
  if (client.bufferedAmount > clientBufferLimit) {
@@ -4118,12 +4140,7 @@ function createSyncServer(options) {
4118
4140
  },
4119
4141
  resizeFromLocal(cols, rows) {
4120
4142
  ptyManager.resize(cols, rows);
4121
- const msg = JSON.stringify({ type: "resize", cols: ptyManager.cols, rows: ptyManager.rows });
4122
- for (const client of clients) {
4123
- if (client.readyState === client.OPEN) {
4124
- client.send(msg);
4125
- }
4126
- }
4143
+ broadcast({ type: "resize", cols: ptyManager.cols, rows: ptyManager.rows });
4127
4144
  }
4128
4145
  };
4129
4146
  }
@@ -4744,6 +4761,40 @@ Hub Management:
4744
4761
  `);
4745
4762
  }
4746
4763
 
4764
+ // src/resolve-command.ts
4765
+ async function resolveCommand(command) {
4766
+ if (process.platform !== "win32") {
4767
+ return command;
4768
+ }
4769
+ if (/^[a-zA-Z]:[/\\]/.test(command) || command.startsWith("\\\\")) {
4770
+ return command;
4771
+ }
4772
+ try {
4773
+ const { stdout } = await execFileAsync("where.exe", [command]);
4774
+ const firstMatch = stdout.split("\n")[0]?.trim();
4775
+ if (firstMatch) {
4776
+ return firstMatch;
4777
+ }
4778
+ throw new Error(`where.exe returned empty output for "${command}"`);
4779
+ } catch (err) {
4780
+ if (err.code === "ENOENT") {
4781
+ return command;
4782
+ }
4783
+ throw new Error(
4784
+ `Could not find "${command}" on this system.
4785
+
4786
+ To fix this:
4787
+ 1. Make sure "${command}" is installed
4788
+ 2. Open a new terminal and run: ${command} --version
4789
+ 3. If that works, try running itwillsync again
4790
+
4791
+ If "${command}" was just installed, you may need to restart your
4792
+ terminal so Windows can find it in your PATH.`,
4793
+ { cause: err }
4794
+ );
4795
+ }
4796
+ }
4797
+
4747
4798
  // src/index.ts
4748
4799
  import { fileURLToPath as fileURLToPath4 } from "url";
4749
4800
  import { join as join7, dirname as dirname4 } from "path";
@@ -4883,14 +4934,7 @@ async function main() {
4883
4934
  }
4884
4935
  const headless = options.headless;
4885
4936
  const config = loadConfig();
4886
- let networkingMode = "local";
4887
- if (options.tailscale) {
4888
- networkingMode = "tailscale";
4889
- } else if (options.local) {
4890
- networkingMode = "local";
4891
- } else {
4892
- networkingMode = config.networkingMode;
4893
- }
4937
+ const networkingMode = options.tailscale ? "tailscale" : options.local ? "local" : config.networkingMode;
4894
4938
  const [cmd, ...cmdArgs] = options.command;
4895
4939
  const isFirstSession = await ensureHub();
4896
4940
  const hubConfig = getHubConfig();
@@ -4900,7 +4944,23 @@ async function main() {
4900
4944
  const ip = await resolveSessionIP(networkingMode, options.localhost);
4901
4945
  const __dirname2 = dirname4(fileURLToPath4(import.meta.url));
4902
4946
  const webClientPath = join7(__dirname2, "web-client");
4903
- const ptyManager = new PtyManager(cmd, cmdArgs);
4947
+ const resolvedCmd = await resolveCommand(cmd);
4948
+ let ptyManager;
4949
+ try {
4950
+ ptyManager = new PtyManager(resolvedCmd, cmdArgs);
4951
+ } catch {
4952
+ console.error(
4953
+ `
4954
+ Could not start "${cmd}".
4955
+
4956
+ To fix this:
4957
+ 1. Make sure "${cmd}" is installed
4958
+ 2. Open a new terminal and run: ${cmd} --version
4959
+ 3. If that works, try running itwillsync again
4960
+ `
4961
+ );
4962
+ process.exit(1);
4963
+ }
4904
4964
  const sessionId = `${cmd}-${Date.now().toString(36)}`;
4905
4965
  const sessionLogger = new SessionLogger(sessionId);
4906
4966
  const server = createSyncServer({