tasmota-webserial-esptool 7.2.6 → 7.3.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.
Files changed (71) hide show
  1. package/dist/esp_loader.js +37 -38
  2. package/dist/stubs/esp32.json +3 -3
  3. package/dist/stubs/esp32c2.json +3 -3
  4. package/dist/stubs/esp32c3.json +4 -4
  5. package/dist/stubs/esp32c5.json +4 -4
  6. package/dist/stubs/esp32c6.json +4 -4
  7. package/dist/stubs/esp32c61.json +4 -4
  8. package/dist/stubs/esp32h2.json +4 -4
  9. package/dist/stubs/esp32p4.json +4 -4
  10. package/dist/stubs/esp32p4r3.json +4 -4
  11. package/dist/stubs/esp32s2.json +3 -3
  12. package/dist/stubs/esp32s3.json +4 -4
  13. package/dist/web/esp32-BRKoi17y.js +1 -0
  14. package/dist/web/esp32c2-Btgr_lwh.js +1 -0
  15. package/dist/web/esp32c3-BGQu6Tl5.js +1 -0
  16. package/dist/web/esp32c5-0b050IXn.js +1 -0
  17. package/dist/web/esp32c6-D9SxtU9b.js +1 -0
  18. package/dist/web/esp32c61-B2dSOrao.js +1 -0
  19. package/dist/web/esp32h2-BBdaXb2C.js +1 -0
  20. package/dist/web/esp32p4-BLGlFHot.js +1 -0
  21. package/dist/web/esp32p4r3-CEI3EOJv.js +1 -0
  22. package/dist/web/esp32s2-iX3WoDbg.js +1 -0
  23. package/dist/web/esp32s3-BUw3lf0r.js +1 -0
  24. package/dist/web/index.js +1 -1
  25. package/js/modules/esp32-BRKoi17y.js +1 -0
  26. package/js/modules/esp32c2-Btgr_lwh.js +1 -0
  27. package/js/modules/esp32c3-BGQu6Tl5.js +1 -0
  28. package/js/modules/esp32c5-0b050IXn.js +1 -0
  29. package/js/modules/esp32c6-D9SxtU9b.js +1 -0
  30. package/js/modules/esp32c61-B2dSOrao.js +1 -0
  31. package/js/modules/esp32h2-BBdaXb2C.js +1 -0
  32. package/js/modules/esp32p4-BLGlFHot.js +1 -0
  33. package/js/modules/esp32p4r3-CEI3EOJv.js +1 -0
  34. package/js/modules/esp32s2-iX3WoDbg.js +1 -0
  35. package/js/modules/esp32s3-BUw3lf0r.js +1 -0
  36. package/js/modules/esptool.js +1 -1
  37. package/package.json +1 -1
  38. package/src/esp_loader.ts +44 -44
  39. package/src/stubs/esp32.json +3 -3
  40. package/src/stubs/esp32c2.json +3 -3
  41. package/src/stubs/esp32c3.json +4 -4
  42. package/src/stubs/esp32c5.json +4 -4
  43. package/src/stubs/esp32c6.json +4 -4
  44. package/src/stubs/esp32c61.json +4 -4
  45. package/src/stubs/esp32h2.json +4 -4
  46. package/src/stubs/esp32p4.json +4 -4
  47. package/src/stubs/esp32p4r3.json +4 -4
  48. package/src/stubs/esp32s2.json +3 -3
  49. package/src/stubs/esp32s3.json +4 -4
  50. package/dist/web/esp32-CijhsJH1.js +0 -1
  51. package/dist/web/esp32c2-C17SM4gO.js +0 -1
  52. package/dist/web/esp32c3-DxRGijbg.js +0 -1
  53. package/dist/web/esp32c5-3mDOIGa4.js +0 -1
  54. package/dist/web/esp32c6-h6U0SQTm.js +0 -1
  55. package/dist/web/esp32c61-BKtexhPZ.js +0 -1
  56. package/dist/web/esp32h2-RtuWSEmP.js +0 -1
  57. package/dist/web/esp32p4-5nkIjxqJ.js +0 -1
  58. package/dist/web/esp32p4r3-CpHBYEwI.js +0 -1
  59. package/dist/web/esp32s2-IiDBtXxo.js +0 -1
  60. package/dist/web/esp32s3-6yv5yxum.js +0 -1
  61. package/js/modules/esp32-CijhsJH1.js +0 -1
  62. package/js/modules/esp32c2-C17SM4gO.js +0 -1
  63. package/js/modules/esp32c3-DxRGijbg.js +0 -1
  64. package/js/modules/esp32c5-3mDOIGa4.js +0 -1
  65. package/js/modules/esp32c6-h6U0SQTm.js +0 -1
  66. package/js/modules/esp32c61-BKtexhPZ.js +0 -1
  67. package/js/modules/esp32h2-RtuWSEmP.js +0 -1
  68. package/js/modules/esp32p4-5nkIjxqJ.js +0 -1
  69. package/js/modules/esp32p4r3-CpHBYEwI.js +0 -1
  70. package/js/modules/esp32s2-IiDBtXxo.js +0 -1
  71. package/js/modules/esp32s3-6yv5yxum.js +0 -1
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,I=100,U=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},z=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class F extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==u?s=await import("./esp32s2-IiDBtXxo.js"):t==f?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function G(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=X(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);K=new G(M,$,257,A,C),Y=new G(Z,P,0,T,C),J=new G(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:It,Z_FULL_FLUSH:Ut,Z_FINISH:zt,Z_BLOCK:Ft,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==zt||e===xt||a!==s+t.strm.avail_in))break;n=e===zt&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==zt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===zt)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===zt&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},_e=t=>{if(ce(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,qt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Yt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>Ft||e<0)return t?Yt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Kt&&e!==zt)return Yt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(s)&&e!==zt)return Yt(t,Tt);if(a.status===Kt&&0!==t.avail_in)return Yt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Gt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Kt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Kt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===It?kt(a):e!==Ft&&(vt(a,0,0,!1),e===Ut&&(qt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==zt?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(qt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ie,Z_FULL_FLUSH:Ue,Z_FINISH:ze,Z_OK:Fe,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Fe)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Fe)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ze:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===Ie||r===Ue)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Fe;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Fe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=z(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await i(I);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new F("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new F("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new F("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new F("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(I),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async connectWithResetStrategies(){var t,e;const a=this.port.getInfo(),s=4097===a.usbProductId,i=12346===a.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=a.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=a.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(s||i)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),s||i||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(I),!0;await i(I)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,I);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:U(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=U(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return z(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",z(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=z(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(I),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=a;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=5;for(;!o&&l<=d;){let a=new Uint8Array(0);try{this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const s=Ne("<IIII",n,e,4096,1024),[i]=await this.checkCommand(210,s);if(0!=i)throw new Error("Failed to read memory: "+i);for(;a.length<e;){let s;try{s=await this.readPacket(100)}catch(s){if(s instanceof F){if(this.logger.debug(`SLIP read error at ${a.length} bytes: ${s.message}`),a.length>0)try{const e=Ne("<I",a.length),s=t(e);await this.writeToStream(s)}catch(t){this.logger.debug(`ACK send error: ${t}`)}if(await this.drainInputBuffer(300),a.length>=e)break}throw s}if(s&&s.length>0){const e=new Uint8Array(s),i=new Uint8Array(a.length+e.length);i.set(a),i.set(e,a.length),a=i;const r=Ne("<I",a.length),n=t(r);await this.writeToStream(n)}}const h=new Uint8Array(r.length+a.length);h.set(r),h.set(a,r.length),r=h,o=!0}catch(t){if(l++,!(t instanceof F))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`⚠️ ${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(300),await this.flushSerialBuffers(),await i(I)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}s&&s(new Uint8Array(e),r.length,a),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
1
+ const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,I=100,U=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},z=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class F extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-BRKoi17y.js"):t==u?s=await import("./esp32s2-iX3WoDbg.js"):t==f?s=await import("./esp32s3-BUw3lf0r.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-Btgr_lwh.js"):t==_?s=await import("./esp32c3-BGQu6Tl5.js"):t==g?s=await import("./esp32c5-0b050IXn.js"):t==p?s=await import("./esp32c6-D9SxtU9b.js"):t==m?s=await import("./esp32c61-B2dSOrao.js"):t==w?s=await import("./esp32h2-BBdaXb2C.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CEI3EOJv.js"):await import("./esp32p4-BLGlFHot.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),P=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function G(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let K,Y,J;function q(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const X=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=X(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);K=new G(M,$,257,A,C),Y=new G(Z,P,0,T,C),J=new G(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new q(t.dyn_ltree,K),t.d_desc=new q(t.dyn_dtree,Y),t.bl_desc=new q(t.bl_tree,J),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*X(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:It,Z_FULL_FLUSH:Ut,Z_FINISH:zt,Z_BLOCK:Ft,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Gt=113,Kt=666,Yt=(t,e)=>(t.msg=yt[e],e),Jt=t=>2*t-(t>4?9:0),qt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Xt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Xt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==zt||e===xt||a!==s+t.strm.avail_in))break;n=e===zt&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==zt&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===zt)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===zt&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),qt(this.dyn_ltree),qt(this.dyn_dtree),qt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),qt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),qt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Gt&&e.status!==Kt?1:0},_e=t=>{if(ce(t))return Yt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Gt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,qt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Yt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>Ft||e<0)return t?Yt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Kt&&e!==zt)return Yt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&Jt(e)<=Jt(s)&&e!==zt)return Yt(t,Tt);if(a.status===Kt&&0!==t.avail_in)return Yt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Gt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Gt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Kt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===zt?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Kt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===It?kt(a):e!==Ft&&(vt(a,0,0,!1),e===Ut&&(qt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==zt?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Gt?Yt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(qt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:Ie,Z_FULL_FLUSH:Ue,Z_FINISH:ze,Z_OK:Fe,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Fe)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Fe)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?ze:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===Ie||r===Ue)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Fe;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Fe&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.connectWithResetStrategies(),await this.detectChip();const t=z(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await i(I);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.hardResetUSBJTAGSerial(),this.logger.log("USB-JTAG/Serial reset.")):(await this.hardResetClassic(),this.logger.log("Classic reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1;const n=Date.now();for(;;){if(Date.now()-n>t){throw new F("Timed out waiting for packet "+(null===e?"header":"content"))}if(0!==this._inputBuffer.length)for(;this._inputBuffer.length>0;){const t=this._inputBuffer.shift();if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+s(t)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new F("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+s(t)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new F("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}else await i(1)}}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(I),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async connectWithResetStrategies(){var t,e;const a=this.port.getInfo(),s=4097===a.usbProductId,i=12346===a.usbVendorId;this.logger.log(`Detected USB: VID=0x${(null===(t=a.usbVendorId)||void 0===t?void 0:t.toString(16))||"unknown"}, PID=0x${(null===(e=a.usbProductId)||void 0===e?void 0:e.toString(16))||"unknown"}`);const r=[];(s||i)&&r.push({name:"USB-JTAG/Serial",fn:async()=>await this.hardResetUSBJTAGSerial()}),r.push({name:"Classic",fn:async()=>await this.hardResetClassic()}),s||i||r.push({name:"USB-JTAG/Serial (fallback)",fn:async()=>await this.hardResetUSBJTAGSerial()});let n=null;for(const t of r)try{if(this.logger.log(`Trying ${t.name} reset...`),!this.connected||!this.port.writable){this.logger.log(`Port disconnected, skipping ${t.name} reset`);continue}return await t.fn(),await this.sync(),void this.logger.log(`Connected successfully with ${t.name} reset.`)}catch(e){if(n=e,this.logger.log(`${t.name} reset failed: ${e.message}`),!this.connected||!this.port.writable){this.logger.log("Port disconnected during reset attempt");break}this._inputBuffer.length=0,await this.drainInputBuffer(200),await this.flushSerialBuffers()}throw new Error(`Couldn't sync to ESP. Try resetting manually. Last error: ${null==n?void 0:n.message}`)}async hardResetUSBJTAGSerial(){await this.setRTS(!1),await this.setDTR(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),await this.sleep(200)}async hardResetClassic(){await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),await this.sleep(200)}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(I),!0;await i(I)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,I);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:U(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=U(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return z(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",z(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=z(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(I),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=a;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=15;for(;!o&&l<=d;){let a=new Uint8Array(0);try{0===l&&this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const s=Ne("<IIII",n,e,4096,1024),[h]=await this.checkCommand(210,s);if(0!=h)throw new Error("Failed to read memory: "+h);for(;a.length<e;){let s;try{s=await this.readPacket(100)}catch(t){if(t instanceof F){this.logger.debug(`SLIP read error at ${a.length} bytes: ${t.message}`);try{const t=[192,192];await this.writeToStream(t),this.logger.debug("Sent abort frame to stub"),await i(50)}catch(t){this.logger.debug(`Abort frame error: ${t}`)}if(await this.drainInputBuffer(200),a.length>=e)break}throw t}if(s&&s.length>0){const e=new Uint8Array(s),i=new Uint8Array(a.length+e.length);i.set(a),i.set(e,a.length),a=i;const r=Ne("<I",a.length),n=t(r);await this.writeToStream(n)}}const d=new Uint8Array(r.length+a.length);d.set(r),d.set(a,r.length),r=d,o=!0}catch(t){if(l++,!(t instanceof F))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(200),await this.flushSerialBuffers(),await i(I)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}s&&s(new Uint8Array(e),r.length,a),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tasmota-webserial-esptool",
3
- "version": "7.2.6",
3
+ "version": "7.3.0",
4
4
  "description": "Flash & Read ESP devices using WebSerial",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
package/src/esp_loader.ts CHANGED
@@ -649,37 +649,34 @@ export class ESPLoader extends EventTarget {
649
649
  async readPacket(timeout: number): Promise<number[]> {
650
650
  let partialPacket: number[] | null = null;
651
651
  let inEscape = false;
652
- let readBytes: number[] = [];
652
+
653
+ const startTime = Date.now();
654
+
653
655
  while (true) {
654
- const stamp = Date.now();
655
- readBytes = [];
656
- while (Date.now() - stamp < timeout) {
657
- if (this._inputBuffer.length > 0) {
658
- readBytes.push(this._inputBuffer.shift()!);
659
- break;
660
- } else {
661
- // Reduced sleep time for faster response during high-speed transfers
662
- await sleep(1);
663
- }
664
- }
665
- if (readBytes.length == 0) {
656
+ // Check timeout
657
+ if (Date.now() - startTime > timeout) {
666
658
  const waitingFor = partialPacket === null ? "header" : "content";
667
659
  throw new SlipReadError("Timed out waiting for packet " + waitingFor);
668
660
  }
669
- if (this.debug)
670
- this.logger.debug(
671
- "Read " + readBytes.length + " bytes: " + hexFormatter(readBytes),
672
- );
673
- for (const b of readBytes) {
661
+
662
+ // If no data available, wait a bit
663
+ if (this._inputBuffer.length === 0) {
664
+ await sleep(1);
665
+ continue;
666
+ }
667
+
668
+ // Process all available bytes without going back to outer loop
669
+ // This is critical for handling high-speed burst transfers
670
+ while (this._inputBuffer.length > 0) {
671
+ const b = this._inputBuffer.shift()!;
672
+
674
673
  if (partialPacket === null) {
675
674
  // waiting for packet header
676
675
  if (b == 0xc0) {
677
676
  partialPacket = [];
678
677
  } else {
679
678
  if (this.debug) {
680
- this.logger.debug(
681
- "Read invalid data: " + hexFormatter(readBytes),
682
- );
679
+ this.logger.debug("Read invalid data: " + toHex(b));
683
680
  this.logger.debug(
684
681
  "Remaining data in serial buffer: " +
685
682
  hexFormatter(this._inputBuffer),
@@ -698,9 +695,7 @@ export class ESPLoader extends EventTarget {
698
695
  partialPacket.push(0xdb);
699
696
  } else {
700
697
  if (this.debug) {
701
- this.logger.debug(
702
- "Read invalid data: " + hexFormatter(readBytes),
703
- );
698
+ this.logger.debug("Read invalid data: " + toHex(b));
704
699
  this.logger.debug(
705
700
  "Remaining data in serial buffer: " +
706
701
  hexFormatter(this._inputBuffer),
@@ -726,7 +721,6 @@ export class ESPLoader extends EventTarget {
726
721
  }
727
722
  }
728
723
  }
729
- throw new SlipReadError("Invalid state");
730
724
  }
731
725
 
732
726
  /**
@@ -1837,18 +1831,22 @@ export class ESPLoader extends EventTarget {
1837
1831
  const chunkSize = Math.min(CHUNK_SIZE, remainingSize);
1838
1832
  let chunkSuccess = false;
1839
1833
  let retryCount = 0;
1840
- const MAX_RETRIES = 5;
1834
+ const MAX_RETRIES = 15;
1841
1835
 
1842
1836
  // Retry loop for this chunk
1843
1837
  while (!chunkSuccess && retryCount <= MAX_RETRIES) {
1844
1838
  let resp = new Uint8Array(0);
1845
1839
 
1846
1840
  try {
1847
- this.logger.debug(
1848
- `Reading chunk at 0x${currentAddr.toString(16)}, size: 0x${chunkSize.toString(16)}`,
1849
- );
1841
+ // Only log on first attempt or retries
1842
+ if (retryCount === 0) {
1843
+ this.logger.debug(
1844
+ `Reading chunk at 0x${currentAddr.toString(16)}, size: 0x${chunkSize.toString(16)}`,
1845
+ );
1846
+ }
1850
1847
 
1851
1848
  // Send read flash command for this chunk
1849
+ // This must be inside the retry loop so we send a fresh command after errors
1852
1850
  const pkt = pack("<IIII", currentAddr, chunkSize, 0x1000, 1024);
1853
1851
  const [res] = await this.checkCommand(ESP_READ_FLASH, pkt);
1854
1852
 
@@ -1867,20 +1865,22 @@ export class ESPLoader extends EventTarget {
1867
1865
  `SLIP read error at ${resp.length} bytes: ${err.message}`,
1868
1866
  );
1869
1867
 
1870
- // Send final ACK for any data we did receive before the error
1871
- if (resp.length > 0) {
1872
- try {
1873
- const ackData = pack("<I", resp.length);
1874
- const slipEncodedAck = slipEncode(ackData);
1875
- await this.writeToStream(slipEncodedAck);
1876
- } catch (ackErr) {
1877
- this.logger.debug(`ACK send error: ${ackErr}`);
1878
- }
1868
+ // Send empty SLIP frame to abort the stub's read operation
1869
+ // The stub expects 4 bytes (ACK), if we send less it will break out
1870
+ try {
1871
+ // Send SLIP frame with no data (just delimiters)
1872
+ const abortFrame = [0xc0, 0xc0]; // Empty SLIP frame
1873
+ await this.writeToStream(abortFrame);
1874
+ this.logger.debug(`Sent abort frame to stub`);
1875
+
1876
+ // Give stub time to process abort
1877
+ await sleep(50);
1878
+ } catch (abortErr) {
1879
+ this.logger.debug(`Abort frame error: ${abortErr}`);
1879
1880
  }
1880
1881
 
1881
- // Drain input buffer for CP210x compatibility on Windows
1882
- // This clears any stale data that may be causing the error
1883
- await this.drainInputBuffer(300);
1882
+ // Drain input buffer to clear any stale data
1883
+ await this.drainInputBuffer(200);
1884
1884
 
1885
1885
  // If we've read all the data we need, break
1886
1886
  if (resp.length >= chunkSize) {
@@ -1920,11 +1920,11 @@ export class ESPLoader extends EventTarget {
1920
1920
  if (err instanceof SlipReadError) {
1921
1921
  if (retryCount <= MAX_RETRIES) {
1922
1922
  this.logger.log(
1923
- `⚠️ ${err.message} at 0x${currentAddr.toString(16)}. Draining buffer and retrying (attempt ${retryCount}/${MAX_RETRIES})...`,
1923
+ `${err.message} at 0x${currentAddr.toString(16)}. Draining buffer and retrying (attempt ${retryCount}/${MAX_RETRIES})...`,
1924
1924
  );
1925
1925
 
1926
1926
  try {
1927
- await this.drainInputBuffer(300);
1927
+ await this.drainInputBuffer(200);
1928
1928
 
1929
1929
  // Clear application buffer
1930
1930
  await this.flushSerialBuffers();
@@ -1932,7 +1932,7 @@ export class ESPLoader extends EventTarget {
1932
1932
  // Wait before retry to let hardware settle
1933
1933
  await sleep(SYNC_TIMEOUT);
1934
1934
 
1935
- // Continue to retry the same chunk (will send new read command)
1935
+ // Continue to retry the same chunk (will send NEW read command)
1936
1936
  } catch (drainErr) {
1937
1937
  this.logger.debug(`Buffer drain error: ${drainErr}`);
1938
1938
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "entry": 1074521688,
3
- "text": "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",
2
+ "entry": 1074521712,
3
+ "text": "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",
4
4
  "text_start": 1074520064,
5
- "data": "DMD8P1XoC0Dr6AtAd+0LQIvpC0AO6QtAi+kLQOTpC0Dr6gtAYesLQAbrC0AB6AtAl+oLQODqC0AC6gtAgusLQCzqC0CC6wtA4ugLQETpC0CL6QtA5OkLQPToC0BP7AtAO+0LQCLnC0Bb7QtAIucLQCLnC0Ai5wtAIucLQCLnC0Ai5wtAIucLQCLnC0Dj6wtAIucLQGrsC0A77QtA",
5
+ "data": "DMD8P3HoC0AH6QtAke0LQKfpC0Aq6QtAp+kLQADqC0AH6wtAfesLQCLrC0Ad6AtAs+oLQPzqC0Ae6gtAnusLQEjqC0Ce6wtA/ugLQGDpC0Cn6QtAAOoLQBDpC0Bs7AtAVu0LQIjtC0By7QtAiO0LQIjtC0CI7QtAiO0LQIjtC0CI7QtAiO0LQIjtC0D/6wtAiO0LQIfsC0BW7QtA",
6
6
  "data_start": 1073605548,
7
7
  "bss_start": 1073528832
8
8
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "entry": 1077413338,
3
- "text": "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",
2
+ "entry": 1077413350,
3
+ "text": "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",
4
4
  "text_start": 1077411840,
5
- "data": "DEDKP9IIOEA4CThAzAk4QKAKOEAICzhAtgo4QMAHOEBcCjhAnAo4QOgJOEBwBzhAEAo4QHAHOECwCDhA+Ag4QDgJOEDMCThAwgg4QO4HOEAiCDhAvgg4QAINOEA4CThAwgs4QLoMOEC+BjhA4gw4QL4GOEC+BjhAvgY4QL4GOEC+BjhAvgY4QL4GOEC+BjhAaAs4QL4GOEDYCzhAugw4QA==",
5
+ "data": "DEDKP+IIOEBICThA3Ak4QLAKOEAYCzhAxgo4QNAHOEBsCjhArAo4QPgJOECABzhAIAo4QIAHOEDACDhACAk4QEgJOEDcCThA0gg4QP4HOEAyCDhAzgg4QAoNOEBICThA1As4QM4MOEBcBzhA8Aw4QFwHOEBcBzhAXAc4QFwHOEBcBzhAXAc4QFwHOEBcBzhAegs4QFwHOEDsCzhAzgw4QA==",
6
6
  "data_start": 1070295980,
7
7
  "bss_start": 1070219264
8
8
  }
@@ -1,8 +1,8 @@
1
1
  {
2
- "entry": 1077413586,
3
- "text": "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",
2
+ "entry": 1077413608,
3
+ "text": "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",
4
4
  "text_start": 1077411840,
5
- "data": "GEDIP5IKOED8CjhAigs4QF4MOEDGDDhAdAw4QGwJOEAaDDhAWgw4QKYLOEAcCThAzgs4QBwJOEBwCjhAugo4QPwKOECKCzhAggo4QJQJOEDgCThAfgo4QMAOOED8CjhAgg04QHwOOEBeCDhAog44QF4IOEBeCDhAXgg4QF4IOEBeCDhAXgg4QF4IOEBeCDhAKA04QF4IOECaDThAfA44QA==",
6
- "data_start": 1070164920,
5
+ "data": "FEDIP6wKOEAWCzhAqAs4QHwMOEDkDDhAkgw4QIYJOEA4DDhAeAw4QMQLOEA2CThA7As4QDYJOECKCjhA1Ao4QBYLOECoCzhAnAo4QK4JOED6CThAmAo4QN4OOEAWCzhAoA04QJoOOED0CDhAwA44QPQIOED0CDhA9Ag4QPQIOED0CDhA9Ag4QPQIOED0CDhARg04QPQIOEC4DThAmg44QA==",
6
+ "data_start": 1070164916,
7
7
  "bss_start": 1070088192
8
8
  }