cfpilot 0.0.0-stage → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ var Br=Object.defineProperty;var k=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Ae=(e,t)=>{for(var n in t)Br(e,n,{get:t[n],enumerable:!0})};function Y(e){let t=new Uint8Array(e);crypto.getRandomValues(t);let n="";for(let r of t)n+=ne[r>>4]+ne[r&15];return n}function Ze(){let e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=[];for(let n of e)t.push(ne[n>>4]+ne[n&15]);return[t.slice(0,4).join(""),t.slice(4,6).join(""),t.slice(6,8).join(""),t.slice(8,10).join(""),t.slice(10,16).join("")].join("-")}function Jt(e){let t="abcdefghijklmnopqrstuvwxyz0123456789",n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let o of n)r+=t[o%t.length];return r}function Qt(e){let t=new TextEncoder().encode(e),n="",r=32768;for(let o=0;o<t.length;o+=r)n+=String.fromCharCode(...t.subarray(o,o+r));return btoa(n)}async function _t(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)),n=new Uint8Array(t),r="";for(let o of n)r+=ne[o>>4]+ne[o&15];return r}function Je(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e.charCodeAt(r)^t.charCodeAt(r);return n===0}var ne,re=k(()=>{"use strict";ne="0123456789abcdef"});function le(e,t){if(e==null)return t;let n=String(e).trim();if(n==="")return t;let r=Number(n);return Number.isFinite(r)?r:t}function X(e,t){if(e==null||e==="")return t;let n=String(e).trim().toLowerCase();return["1","true","yes","on"].includes(n)?!0:["0","false","no","off"].includes(n)?!1:t}function L(e,t){return e==null?t:String(e)}function Hr(e){return{uuid:L(e.UUID,""),trojanPassword:L(e.TROJAN_PASSWORD,""),wsPath:L(e.WS_PATH||e.PATH,R.wsPath),trojanPath:R.trojanPath,xhttpPath:R.xhttpPath,add:L(e.ADD,""),addApi:L(e.ADDAPI,""),addCsv:L(e.ADD_CSV,""),poolOfficial:X(e.OFFICIAL_IP,R.poolOfficial),officialCount:le(e.OFFICIAL_IP_COUNT,R.officialCount),poolDomain:X(e.PREFERRED_DOMAIN,R.poolDomain),domainCount:le(e.PREFERRED_DOMAIN_COUNT,R.domainCount),poolManual:X(e.MANUAL_IP,R.poolManual),poolCountries:L(e.POOL_COUNTRIES,R.poolCountries),dls:le(e.DLS,0),maxLatency:le(e.MAX_LATENCY,0),maxNodes:0,proxyIp:L(e.PROXYIP,""),socks5:L(e.SOCKS5,""),httpProxy:L(e.HTTP_PROXY,""),nat64:L(e.NAT64,""),concurrentDial:X(e.TCP_CONCURRENT_DIAL,!0),resolvePreferred:X(e.RESOLVE_PREFERRED,R.resolvePreferred),relayPool:L(e.RELAY_POOL,""),useBuiltinRelay:X(e.USE_BUILTIN_RELAY,R.useBuiltinRelay),enableTrojan:X(e.ENABLE_TROJAN??e.TROJAN,R.enableTrojan),enableXhttp:X(e.ENABLE_XHTTP??e.XHTTP,R.enableXhttp),subDomain:"",subProtocol:"both",subTransport:"both",subVariants:L(e.SUB_VARIANTS,R.subVariants),subName:L(e.SUB_NAME,R.subName).trim()||R.subName,subPorts:L(e.SUB_PORTS,R.subPorts),clientFingerprint:R.clientFingerprint,ech:X(e.ECH,R.ech),echHost:L(e.ECH_HOST,R.echHost),echDns:L(e.ECH_DNS,R.echDns),tlsFragment:!1,tlsFragmentSize:R.tlsFragmentSize,tlsFragmentDelay:R.tlsFragmentDelay}}function $e(e,t){let n={...e};for(let[r,o]of Object.entries(t))if(o!=null)if(r==="dls"||r==="maxLatency"||r==="maxNodes"||r==="officialCount"||r==="domainCount")n[r]=le(o,0);else if(r==="concurrentDial"||r==="resolvePreferred"||r==="useBuiltinRelay"||r==="enableTrojan"||r==="enableXhttp"||r==="tlsFragment"||r==="ech"||r==="poolOfficial"||r==="poolDomain"||r==="poolManual")n[r]=X(o,!1);else if(r==="subProtocol"){let s=String(o);n[r]=s==="vless"||s==="trojan"||s==="both"?s:"both"}else if(r==="subTransport"){let s=String(o);n[r]=s==="ws"||s==="xhttp"||s==="both"?s:"both"}else n[r]=String(o);return n}async function tn(e,t){let n=Hr(t),r=await e.get(qt),o={};if(r)try{o=JSON.parse(r)}catch{o={}}let s=$e(n,o),i=!1;return s.uuid||(s.uuid=Ze(),i=!0),s.trojanPassword||(s.trojanPassword=Ze().replace(/-/g,"").slice(0,16),i=!0),s.officialCount<1&&(s.officialCount=R.officialCount,i=!0),s.domainCount<1&&(s.domainCount=R.domainCount,i=!0),i&&await et(e,s),s}async function et(e,t){await e.put(qt,JSON.stringify(t))}async function ce(e){return await e.get(Q)??""}async function tt(e){let t=await e.get(Qe);return t?t.split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0):[]}async function nn(e,t){let n=t.map(r=>r.trim()).filter(r=>r.length>0);if(n.length===0){await e.delete(Qe);return}await e.put(Qe,n.join(`
2
+ `))}var qt,Q,_e,Qe,$t,Ee,Se,Pe,Ce,qe,en,R,ue=k(()=>{"use strict";re();qt="CONFIG",Q="LOCAL_PREFERRED_IPS",_e="SCANNER_TOKEN",Qe="POOL_DOMAIN_LIBRARY",$t="ROUTE_PROFILE",Ee="ONETIME:",Se="SESSION:",Pe="PANEL_PATH",Ce="ADMIN_PW_HASH",qe="ADMIN_PW_PLAIN",en="/cfpilot",R={uuid:"",trojanPassword:"",wsPath:"/vless",trojanPath:"/trojan",xhttpPath:"/xhttp",add:"",addApi:"",addCsv:"",poolOfficial:!0,officialCount:20,poolDomain:!0,domainCount:10,poolManual:!1,poolCountries:"",dls:0,maxLatency:0,maxNodes:0,proxyIp:"",socks5:"",httpProxy:"",nat64:"",concurrentDial:!0,resolvePreferred:!0,relayPool:"",useBuiltinRelay:!0,enableTrojan:!0,enableXhttp:!0,subDomain:"",subProtocol:"vless",subTransport:"ws",subVariants:"vless-ws",subName:"CFPilot",subPorts:"443",clientFingerprint:"chrome",ech:!1,echHost:"cloudflare-ech.com",echDns:"",tlsFragment:!1,tlsFragmentSize:"10-20",tlsFragmentDelay:"10-20"}});function v(e){let t=zr.exec(e);if(!t)return!1;for(let n=1;n<=4;n++){let r=Number(t[n]);if(!Number.isInteger(r)||r<0||r>255)return!1}return!0}function H(e){return!e.includes(":")||!/^[0-9a-fA-F:.]+$/.test(e)?!1:jr(e)!==null}function jr(e){if(!e.includes(":"))return null;let t=e,n=t.lastIndexOf(":"),r=t.slice(n+1);if(r.includes(".")){if(!v(r))return null;let u=r.split(".").map(p=>Number(p));t=`${t.slice(0,n+1)}${(u[0]<<8|u[1]).toString(16)}:${(u[2]<<8|u[3]).toString(16)}`}let o=t.indexOf("::"),s,i;if(o>=0){if(t.indexOf("::",o+1)>=0)return null;let u=t.slice(0,o),p=t.slice(o+2);s=u?u.split(":"):[],i=p?p.split(":"):[]}else s=t.split(":"),i=[];let a=s.length+i.length;if(a>8)return null;let c=[],f=u=>/^[0-9a-fA-F]{1,4}$/.test(u)?parseInt(u,16):null;for(let u of s){let p=f(u);if(p===null)return null;c.push(p)}let l=8-a;for(let u=0;u<l;u++)c.push(0);for(let u of i){let p=f(u);if(p===null)return null;c.push(p)}return c.length===8?c:null}function Kr(e){let t=e.map(c=>(c&65535).toString(16)),n=-1,r=0,o=-1,s=0;for(let c=0;c<t.length;c++)t[c]==="0"?(o<0&&(o=c),s++,s>r&&(r=s,n=o)):(o=-1,s=0);if(r<2)return t.join(":");let i=t.slice(0,n).join(":"),a=t.slice(n+r).join(":");return`${i}::${a}`}function Gr(e,t,n,r){if(t<0||t>=e.length)return null;if(n===1)return t+5>e.length?null:{hostname:`${e[t+1]}.${e[t+2]}.${e[t+3]}.${e[t+4]}`,next:t+5};if(r?n===2:n===3){if(t+2>e.length)return null;let o=e[t+1];return t+2+o>e.length?null:{hostname:new TextDecoder().decode(e.subarray(t+2,t+2+o)),next:t+2+o}}if(r?n===3:n===4){if(t+17>e.length)return null;let o=new DataView(e.buffer,e.byteOffset+t+1,16),s=[];for(let i=0;i<8;i++)s.push(o.getUint16(i*2,!1));return{hostname:Kr(s),next:t+17}}return null}async function nt(e,t){let n=await e.peekExactly(1);if(!n)return null;let r=n[0],o;if(r===1)o=5;else if(t?r===2:r===3){let a=await e.peekExactly(2);if(!a)return null;o=2+a[1]}else if(t?r===3:r===4)o=17;else return null;let s=await e.peekExactly(o);if(!s)return null;let i=Gr(s,0,r,t);return i?(e.skip(o),{hostname:i.hostname,addressType:r,consumed:o}):null}var zr,_=k(()=>{"use strict";zr=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/});function Re(e){return sn.get(e.toUpperCase())??""}function an(e){return Object.prototype.hasOwnProperty.call(rt,e.toUpperCase())}var rn,Te,fe,rt,on,sn,ln,ot=k(()=>{"use strict";rn=["104.16.0.1","104.16.32.1","104.16.64.1","104.16.128.1","104.16.192.1","104.17.0.1","104.17.32.1","104.17.64.1","104.17.128.1","104.17.192.1","104.18.0.1","104.18.64.1","104.19.0.1","104.19.64.1","104.20.0.1","104.20.64.1","104.21.0.1","104.21.64.1","104.22.0.1","104.22.64.1","104.23.0.1","104.23.64.1","104.24.0.1","104.25.0.1","104.27.19.224","172.66.0.1","172.67.0.1"],Te=["104.16.0.0/11","104.24.0.0/14","172.66.0.0/15"],fe=["cf.090227.xyz","bestcf.top","cloudflare.182682.xyz","speed.marisalnc.com","freeyx.cloudflare88.eu.org","cdn.2020111.xyz","cfip.cfcdn.vip","cf.0sm.com","cf.zhetengsha.eu.org","cloudflare.9jy.cc","cf.zerone-cdn.pp.ua","cfip.1323123.xyz","cnamefuckxxs.yuchen.icu","cloudflare-ip.mofashi.ltd","115155.xyz","cname.xirancdn.us","f3058171cad.002404.xyz","8.889288.xyz","cdn.tzpro.xyz","cf.877771.xyz","xn--b6gac.eu.org"],rt={HK:["HKG"],TW:["TPE","KHH"],JP:["NRT","KIX","CTS","FUK"],KR:["ICN","PUS"],SG:["SIN"],MY:["KUL"],TH:["BKK"],VN:["SGN","HAN"],ID:["CGK","DPS"],PH:["MNL"],IN:["BOM","MAA","DEL"],AU:["SYD","MEL","BNE","PER"],NZ:["AKL"],US:["LAX","SJC","SEA","ORD","DFW","IAD","EWR","ATL","MIA","DEN","PHX","BOS"],CA:["YYZ","YVR","YYC"],GB:["LHR","MAN"],DE:["FRA","MUC","BER"],FR:["CDG","MRS"],NL:["AMS"],IT:["MXP","FCO"],ES:["MAD","BCN"],SE:["ARN"],CH:["ZRH"],AT:["VIE"],PL:["WAW"],RU:["DME","SVO"],TR:["IST"],AE:["DXB"],IL:["TLV"],ZA:["JNB"],BR:["GRU","GIG"],AR:["EZE"],CL:["SCL"],MX:["MEX"]},on={HK:"\u9999\u6E2F",TW:"\u53F0\u6E7E",JP:"\u65E5\u672C",KR:"\u97E9\u56FD",SG:"\u65B0\u52A0\u5761",MY:"\u9A6C\u6765\u897F\u4E9A",TH:"\u6CF0\u56FD",VN:"\u8D8A\u5357",ID:"\u5370\u5C3C",PH:"\u83F2\u5F8B\u5BBE",IN:"\u5370\u5EA6",AU:"\u6FB3\u5927\u5229\u4E9A",NZ:"\u65B0\u897F\u5170",US:"\u7F8E\u56FD",CA:"\u52A0\u62FF\u5927",GB:"\u82F1\u56FD",DE:"\u5FB7\u56FD",FR:"\u6CD5\u56FD",NL:"\u8377\u5170",IT:"\u610F\u5927\u5229",ES:"\u897F\u73ED\u7259",SE:"\u745E\u5178",CH:"\u745E\u58EB",AT:"\u5965\u5730\u5229",PL:"\u6CE2\u5170",RU:"\u4FC4\u7F57\u65AF",TR:"\u571F\u8033\u5176",AE:"\u963F\u8054\u914B",IL:"\u4EE5\u8272\u5217",ZA:"\u5357\u975E",BR:"\u5DF4\u897F",AR:"\u963F\u6839\u5EF7",CL:"\u667A\u5229",MX:"\u58A8\u897F\u54E5"},sn=new Map;for(let[e,t]of Object.entries(rt))for(let n of t)sn.set(n,e);ln=Object.keys(rt)});function Wr(e){let t=[],n=[];for(let r of e.split(/\r?\n/)){let o=r.trim();if(!(!o||o.startsWith(";")||o.startsWith("#"))&&!(o.startsWith("[")&&o.endsWith("]"))){if(o.startsWith("ruleset=")){let s=o.slice(8),i=s.indexOf(",");if(i<0)continue;let a=s.slice(0,i).trim(),c=s.slice(i+1).trim();if(!a||!c)continue;t.push({group:a,value:c,inline:c.startsWith("[]")});continue}if(o.startsWith("custom_proxy_group=")){let s=Vr(o.slice(19));s&&n.push(s);continue}}}return{rules:t,groups:n}}function Vr(e){let t=e.split("`"),n=(t[0]??"").trim(),r=(t[1]??"").trim();if(!n||!r)return null;let o=i=>{let a=i.trim();return a.startsWith("[]")?a.slice(2).trim():a},s={name:n,type:r,members:[]};if(r==="select"){for(let i of t.slice(2)){let a=o(i);a&&s.members.push(a)}return s}if(r==="url-test"||r==="fallback"||r==="load-balance"){let i=2,a=(t[i]??"").trim();a&&!/^https?:\/\//i.test(a)&&(s.regex=a,i++);let c=(t[i]??"").trim();/^https?:\/\//i.test(c)&&(s.url=c,i++);let f=(t[i]??"").trim();/^\d+$/.test(f)&&(s.interval=Number(f),i++);for(let l of t.slice(i)){let u=o(l);u&&s.members.push(u)}return s.members.length===0&&s.members.push(".*"),s}for(let i of t.slice(2)){let a=o(i);a&&s.members.push(a)}return s}function Yr(e,t){let{mainGroup:n,autoGroup:r}=t,o=[],s=[],i=new Set;for(let a of e.groups){if(i.has(a.name))continue;let c=a.name.replace(/^[^\p{L}\p{N}]+/u,"").trim();if(!(c===n||c===r||a.name===n||a.name===r||a.type==="select"&&(a.members.includes(".*")||a.members.some(l=>/自动选择|auto/i.test(l)))))if(i.add(a.name),s.push(` - name: ${oe(a.name)}`),s.push(` type: ${oe(a.type)}`),a.type!=="select"&&a.url&&(s.push(` url: ${oe(a.url)}`),s.push(` interval: ${a.interval??300}`)),a.regex&&a.regex,a.type==="select"){s.push(" proxies:");let l=a.members.map(u=>Xr(u,n,r));if(l.length===0)s.push(` - ${oe(n)}`);else for(let u of l)s.push(` - ${oe(u)}`)}else s.push(" proxies:"),s.push(` - ${oe(n)}`)}for(let a of e.rules){if(!a.inline)continue;let c=a.value.slice(2).trim(),f=/直连|direct/i.test(a.group)?"DIRECT":n;/^FINAL$/i.test(c)?o.push(` - MATCH,${f}`):c&&o.push(` - ${c},${f}`)}return{rules:o,groups:s}}function cn(e){return[" - GEOSITE,category-ads-all,REJECT",` - GEOSITE,youtube,${e}`,` - GEOSITE,netflix,${e}`,` - GEOSITE,disney,${e}`,` - GEOSITE,primevideo,${e}`,` - GEOSITE,hbo,${e}`,` - GEOSITE,bahamut,${e}`,` - GEOSITE,spotify,${e}`,` - GEOSITE,tiktok,${e}`,` - GEOSITE,openai,${e}`,` - GEOSITE,anthropic,${e}`,` - GEOSITE,google-gemini,${e}`,` - GEOSITE,github,${e}`,` - GEOSITE,telegram,${e}`,` - GEOSITE,google,${e}`,` - GEOSITE,twitter,${e}`,` - GEOSITE,facebook,${e}`,` - GEOSITE,instagram,${e}`,` - GEOSITE,wikimedia,${e}`," - GEOIP,LAN,DIRECT,no-resolve"," - GEOSITE,cn,DIRECT"," - GEOIP,CN,DIRECT",` - MATCH,${e}`]}function Xr(e,t,n){let r=e.trim();return r?r==="DIRECT"||r==="REJECT"?r:r===".*"?t:/自动选择|auto/i.test(r)?n:/节点选择|proxy|main/i.test(r)?t:r:t}function oe(e){return/^[A-Za-z0-9._-]+$/.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}function un(e,t){if(!e.trim())return{rules:[],groups:[]};let n=Wr(e);return Yr(n,{...t,nodeNames:[]})}var fn=k(()=>{"use strict"});function it(e){if(!/^\d{1,5}$/.test(e))return!1;let t=Number(e);return t>0&&t<=65535}function Ue(e,t=ee){let n=e.trim();if(!n||(n=n.replace(/^["']|["']$/g,"").trim(),!n||n.startsWith("#")))return null;let r="",o=n.indexOf("#");if(o>=0&&(r=n.slice(o+1).trim(),n=n.slice(0,o).trim()),!n)return null;if(n.startsWith("[")){let i=n.indexOf("]");if(i<0)return null;let a=n.slice(1,i),c=n.slice(i+1),f=t;if(c.startsWith(":")&&it(c.slice(1)))f=Number(c.slice(1));else if(c)return null;return!H(a)&&!v(a)?null:{ip:a,port:f,remark:r}}let s=(n.match(/:/g)??[]).length;if(s>1)return H(n)?{ip:n,port:t,remark:r}:null;if(s===1){let i=n.indexOf(":"),a=n.slice(0,i),c=n.slice(i+1);return!it(c)||!v(a)&&!H(a)&&!ke(a)?null:{ip:a,port:Number(c),remark:r}}return!v(n)&&!H(n)&&!ke(n)?null:{ip:n,port:t,remark:r}}function ke(e){return/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(e)}function Zr(e){let t=e.split(/[_-]/).filter(Boolean),n="",r=0,o=0;if(t.length>=3){let s=Number(t[t.length-2]),i=Number(t[t.length-1]);Number.isFinite(s)&&Number.isFinite(i)&&(n=t.slice(0,t.length-2).join("_"),r=s,o=i)}else if(t.length===2){let s=Number(t[1]);Number.isFinite(s)&&(n=t[0]??"",r=s)}return{colo:n,latency:r,speed:o}}function at(e,t){let n=Zr(e.remark),r=n.colo.toUpperCase();return{ip:e.ip,port:e.port,remark:e.remark,colo:r,latency:n.latency,speed:n.speed,source:t,country:Re(r)}}function Jr(e){let t=[];for(let n of e.split(/\r?\n/)){let r=Ue(n);r&&t.push(at(r,"add"))}return t}function pe(e){let t=[];for(let n of e.split(/\r?\n/)){let r=Ue(n);r&&t.push(at(r,"local"))}return t}function Qr(e){let t=[];for(let n of e.split(/\r?\n/)){let r=Ue(n);r&&t.push(at(r,"addapi"))}return t}function no(e,t){let n=e.trim().toLowerCase().replace(/[((].*?[))]/g,"");for(let r of t)if(n===r||n.includes(r))return 1;return 0}function q(e,t){let n=-1,r=0;for(let o=0;o<e.length;o++){let s=no(e[o],t);s>r&&(r=s,n=o)}return n}function st(e){let t=e.replace(/[^\d.\-]/g,"");if(!t)return 0;let n=Number(t);return Number.isFinite(n)?n:0}function ro(e,t={}){let n=e.split(/\r?\n/).map(A=>A.trim()).filter(A=>A.length>0&&!A.startsWith("#")),r=[],o=0,s=!1,i=-1,a=-1,c=-1,f=-1,l=-1,u=-1,p=-1,h=-1,m=0;if(n.length===0)return{entries:r,filtered:o,hasHeader:s,tlsDropped:m};let b=hn(n[0]),y=b.some(A=>v(A.trim())||H(A.trim())),d=b.some(A=>pn.some(E=>A.toLowerCase().includes(E))||dn.some(E=>A.toLowerCase().includes(E))||mn.some(E=>A.toLowerCase().includes(E))),g=0;d&&!y&&(s=!0,i=q(b,_r),a=q(b,qr),c=q(b,pn),f=q(b,dn),l=q(b,mn),u=q(b,$r),p=q(b,eo),h=q(b,to),g=1);for(let A=g;A<n.length;A++){let E=hn(n[A]);if(E.length===0)continue;if(s&&h>=0&&E[h]){let D=E[h].trim().toLowerCase();if(D==="false"||D==="no"||D==="0"||D==="\u5426"){m++;continue}}let B="",J=ee,C=0,T=0,w="",x="",N="";if(s){if(i<0)continue;if(B=(E[i]??"").trim(),a>=0&&E[a]){let D=Number(E[a].trim());Number.isInteger(D)&&D>0&&D<=65535&&(J=D)}c>=0&&E[c]&&(C=st(E[c])),f>=0&&E[f]&&(T=st(E[f])),l>=0&&E[l]&&(w=E[l].trim()),u>=0&&E[u]&&(x=E[u].trim()),p>=0&&E[p]&&(N=E[p].trim())}else{let D=E.findIndex(z=>{let O=z.trim();return v(O)||H(O)||O.includes(".")&&ke(O)});if(D<0)continue;B=E[D].trim();let M=[];E.forEach((z,O)=>{if(O===D)return;let Xe=st(z);z.trim()&&/[\d.]/.test(z)&&M.push({index:O,value:Xe,raw:z})}),M.length===1?C=M[0].value:M.length===2?(C=M[0].value,T=M[1].value):M.length===3?(it(M[0].raw.trim())&&(J=M[0].value),C=M[1].value,T=M[2].value):(T=M[M.length-2].value,C=M[M.length-1].value);let Zt=E.find((z,O)=>O!==D&&z.trim()&&!/[\d.]/.test(z)&&/[a-zA-Z]/.test(z));if(Zt&&(w=Zt.trim()),!w){let z=E.find((O,Xe)=>Xe!==D&&O.trim()&&!/[\d.]/.test(O)&&/[\u4e00-\u9fa5]/.test(O));if(z){let O=z.trim();/[市省州区县]/.test(O)||O.length>3?N=O:x=O}}}if(!B)continue;let I=Ue(B.includes(":")&&!B.includes(" ")?B:`${B}:${J}`);if(!I)continue;let V=N||x||w,xe=x||Re(w.toUpperCase()),G={ip:I.ip,port:I.port,remark:V,colo:w.toUpperCase(),latency:T,speed:C,source:"addcsv",country:xe};r.push(G)}let P=t.dls??0,S=t.maxLatency??0,U=r.filter(A=>!(P>0&&A.speed<P||S>0&&A.latency>S));return o=r.length-U.length,{entries:U,filtered:o,hasHeader:s,tlsDropped:m}}function hn(e){let t=[],n="",r=!1;for(let o=0;o<e.length;o++){let s=e[o];r?s==='"'?e[o+1]==='"'?(n+='"',o++):r=!1:n+=s:s==='"'?r=!0:s===","||s===" "?(t.push(n.trim()),n=""):n+=s}return t.push(n.trim()),t}function Ne(e){if(e<=1)return 0;let t=new Uint32Array(1);return crypto.getRandomValues(t),t[0]%e}function oo(e){let t=e.split(".");return(Number(t[0])<<24>>>0)+(Number(t[1])<<16)+(Number(t[2])<<8)+Number(t[3])}function so(e){let t=e>>>0;return`${t>>>24&255}.${t>>>16&255}.${t>>>8&255}.${t&255}`}function io(e,t){let n=[];for(let i of e){let[a,c]=i.split("/");if(!a||!v(a))continue;let f=Number(c);!Number.isInteger(f)||f<8||f>32||n.push({base:oo(a),hostBits:32-f})}if(n.length===0||t<=0)return[];let r=new Set,o=t*24,s=0;for(;r.size<t&&s<o;){s++;let{base:i,hostBits:a}=n[Ne(n.length)],c=2**a,f=a>=2?1+Ne(c-2):Ne(c);r.add(so(i+f))}return[...r]}function ao(e,t=fe){let n=t.filter(r=>ke(r));for(let r=n.length-1;r>0;r--){let o=Ne(r+1),s=n[r];n[r]=n[o],n[o]=s}return n.slice(0,Math.max(0,Math.min(e,n.length)))}function lo(e){let t=[],n=new Set,r=[...rn];for(let o=r.length-1;o>0;o--){let s=Math.floor(Math.random()*(o+1));[r[o],r[s]]=[r[s],r[o]]}for(let o of r){if(t.length>=e)break;n.has(o)||(n.add(o),t.push(o))}if(t.length<e)for(let o of io(Te,(e-t.length)*2)){if(t.length>=e)break;n.has(o)||(n.add(o),t.push(o))}return t.map(o=>({ip:o,port:ee,remark:"",colo:"",latency:0,speed:0,source:"official",country:""}))}function co(e,t=fe){return ao(e,t).map(n=>({ip:n,port:ee,remark:"",colo:"",latency:0,speed:0,source:"domain",country:""}))}function uo(e){return[...new Set(e.split(/[,\s]+/).map(t=>t.trim().toUpperCase()).filter(t=>t.length===2&&an(t)))]}function fo(e,t){if(t.length===0)return e;let n=new Set(t);return e.filter(r=>{let o=r.country||Re(r.colo);return o!==""&&n.has(o)})}function mo(e){let t=new Set,n=[],r=0;for(let o of e)for(let s of o.entries){let i=`${s.ip}:${s.port}`;if(t.has(i)){r++;continue}t.add(i),n.push(s)}return{nodes:n,deduped:r}}async function gn(e,t){let n=await fetch(e,{signal:AbortSignal.timeout(t),headers:{"User-Agent":"CFPilot/1.1 (+https://github.com/xmwengxing/CFPilot)"}});if(!n.ok)throw new Error(`HTTP ${n.status}`);return await n.text()}function yn(e,t,n){return Number.isFinite(e)?Math.min(n,Math.max(t,Math.trunc(e))):t}function wn(e){return e.filter(t=>t.entries.length>0).map(t=>({key:t.key,name:po[t.key],entries:t.entries}))}async function Ie(e,t,n={}){let r=n.timeoutMs??6e3,o=n.budget,s=[],i=uo(e.poolCountries),a=e.poolOfficial||e.poolDomain||e.poolManual,c=a?e.poolOfficial?yn(e.officialCount,1,200):0:20,f=a?e.poolDomain?yn(e.domainCount,1,100):0:10,l=c>0?lo(c):[],u=f>0?co(f,n.domainPool):[],p=pe(t),h=Jr(e.add),m=a?e.poolManual:!1,b=m?[...p,...h]:[];m&&b.length===0&&s.push("\u624B\u52A8\u4F18\u9009 IP \u4E3A\u7A7A\uFF1A\u8BF7\u5148\u8DD1\u4E00\u6B21\u672C\u5730\u771F\u8FDE\u63A5\u4F18\u9009\uFF0C\u6216\u5728\u300C\u624B\u52A8\u4F18\u9009\u300D\u91CC\u586B\u5165 IP");let y=[],d=e.addApi.split(/[\n,]+/).map(C=>C.trim()).filter(C=>/^https?:\/\//i.test(C));if(d.length>0&&!o?.exhausted){o?.pause();let C=[];try{C.push(...await Promise.allSettled(d.map(T=>gn(T,r))))}finally{o?.resume()}for(let T of C)T.status==="fulfilled"?y=y.concat(Qr(T.value)):s.push(`ADDAPI \u62C9\u53D6\u5931\u8D25\uFF1A${String(T.reason?.message??T.reason)}`)}let g=[],P=0,S=e.addCsv.split(/[\n,]+/).map(C=>C.trim()).filter(C=>/^https?:\/\//i.test(C));if(S.length>0&&!o?.exhausted){o?.pause();let C=[];try{C.push(...await Promise.allSettled(S.map(T=>gn(T,r))))}finally{o?.resume()}for(let T of C)if(T.status==="fulfilled"){let w=ro(T.value,{dls:e.dls,maxLatency:e.maxLatency});g=g.concat(w.entries),P+=w.filtered}else s.push(`ADDCSV \u62C9\u53D6\u5931\u8D25\uFF1A${String(T.reason?.message??T.reason)}`)}if(o?.exhausted&&(d.length>0||S.length>0)){let C=[d.length>0?`ADDAPI\xD7${d.length}`:"",S.length>0?`ADDCSV\xD7${S.length}`:""].filter(Boolean).join("\u3001");s.push(`CPU \u9884\u7B97\u4E0D\u8DB3\uFF08\u5DF2\u7528 ${o.elapsedMs.toFixed(1)}ms\uFF09\uFF0C\u5DF2\u8DF3\u8FC7\u8FDC\u7A0B\u62C9\u53D6\uFF1A${C}`)}let U=[{key:"official",entries:l},{key:"domain",entries:u},{key:"manual",entries:b},{key:"api",entries:y},{key:"csv",entries:g}],A=wn(U);if(i.length>0&&A.length>0){let C=A.reduce((w,x)=>w+x.entries.length,0);A=A.map(w=>({...w,entries:fo(w.entries,i)})).filter(w=>w.entries.length>0);let T=A.reduce((w,x)=>w+x.entries.length,0);T===0?(A=wn(U),s.push(`\u56FD\u5BB6\u7B5B\u9009\uFF08${i.join("/")}\uFF09\u540E\u65E0\u53EF\u7528\u8282\u70B9\uFF1A\u968F\u673A\u4F18\u9009 IP \u7684\u673A\u623F\u672A\u77E5\uFF0C\u8BF7\u5148\u8DD1\u4E00\u6B21\u672C\u5730\u4F18\u9009\u518D\u6309\u56FD\u5BB6\u7B5B\u9009\uFF1B\u5DF2\u5FFD\u7565\u8BE5\u7B5B\u9009`)):T<C&&s.push(`\u56FD\u5BB6\u7B5B\u9009\uFF08${i.join("/")}\uFF09\u5DF2\u6392\u9664 ${C-T} \u6761\u673A\u623F\u672A\u77E5\u6216\u5730\u533A\u4E0D\u5339\u914D\u7684\u8282\u70B9`)}let{nodes:E,deduped:B}=mo(A);return{nodes:e.maxNodes>0?E.slice(0,e.maxNodes):E,groups:A,stats:{official:l.length,domain:u.length,local:m?p.length:0,add:m?h.length:0,addapi:y.length,addcsv:g.length,filtered:P,deduped:B,countries:i,errors:s}}}function lt(e,t,n=bn){let r=String(e??"").split(/[,;\s]+/).map(a=>a.trim().toLowerCase()).filter(Boolean),s=bn.filter(a=>r.includes(a)).filter(a=>n.includes(a)?a==="trojan"?t.enableTrojan!==!1:a==="vless-xhttp"?t.enableXhttp!==!1:!0:!1);if(s.length>0)return s;let i=n.includes("vless-ws")?"vless-ws":n[0];return i?[i]:["vless-ws"]}function ct(e){return e.groups&&e.groups.length>0?e.groups:[{key:"official",name:"\u8282\u70B9",entries:e.nodes}]}function de(e,t,n,r=""){let o=e.remark&&!/^[\d.]+$/.test(e.remark)?e.remark:e.ip,s=e.colo&&e.colo!==o?` ${e.colo}`:"";return`${r?`${r} `:""}${o}${s} #${n+1}${t==="trojan"?" Trojan":""}`}function En(e){return e.includes(":")?`[${e}]`:e}function Sn(e){let t=String(e.subPorts||"").split(/[\n,;\s]+/).map(r=>Number(r.trim())).filter(r=>Number.isInteger(r)&&r>0&&r<=65535),n=[...new Set(t)];return n.length>0?n:[ee]}function ut(e){return String(e||"").replace(/["\\\r\n]/g,"").trim().slice(0,64)||"CFPilot"}function ft(e,t){return e.port!==ee?[e.port]:t.ports.length>0?t.ports:[ee]}function Pn(e){if(!e.config.ech)return"";let t=e.config.echHost.trim()||"cloudflare-ech.com",n=e.config.echDns.trim(),r=n?`${t}+${n}`:t;return`&ech=${encodeURIComponent(r)}`}function xn(e,t,n,r){let o=n==="xhttp"?t.config.xhttpPath:t.config.wsPath,s=new URLSearchParams;s.set("encryption","none"),s.set("security","tls"),s.set("sni",t.domain),s.set("type",n),s.set("host",t.domain),s.set("path",o),n==="xhttp"&&s.set("mode","stream-one");let i=encodeURIComponent(r??de(e,"vless",t.nodes.indexOf(e)));return`${["vle","ss"].join("")}://${t.config.uuid}@${En(e.ip)}:${e.port}?${s.toString()}${Pn(t)}#${i}`}function ho(e,t,n){let r=new URLSearchParams;r.set("security","tls"),r.set("sni",t.domain),r.set("type","ws"),r.set("host",t.domain),r.set("path",t.config.trojanPath);let o=encodeURIComponent(n??de(e,"trojan",t.nodes.indexOf(e)));return`${["tro","jan"].join("")}://${encodeURIComponent(t.config.trojanPassword)}@${En(e.ip)}:${e.port}?${r.toString()}${Pn(t)}#${o}`}function W(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function go(e){let t=[],n=[],r=[],o=lt(e.config.subVariants,e.config,An),s=o.some(p=>p==="vless-ws"),i=o.includes("trojan"),a=e.config.ech,c=e.config.echHost.trim()||"cloudflare-ech.com",f=e.config.echDns.trim(),l=()=>{if(!a)return[];let p=[" ech-opts:"," enable: true"];return p.push(` query-server-name: ${W(c)}`),p};for(let p of ct(e))p.entries.forEach((h,m)=>{let b=`${p.name} ${de(h,"vless",m,"")}`;for(let y of ft(h,e)){let d=e.ports.length>1?`:${y}`:"",g=`${b}${d}`;if(s&&(r.push(g),n.push([` - name: ${W(g)}`," type: vless",` uuid: ${e.config.uuid}`,` server: ${h.ip}`,` port: ${y}`," network: ws"," tls: true",` servername: ${e.domain}`,` client-fingerprint: ${e.config.clientFingerprint}`,...l()," ws-opts:",` path: ${W(e.config.wsPath)}`," headers:",` Host: ${e.domain}`].join(`
3
+ `))),i){let P=`${g} Trojan`;r.push(P),n.push([` - name: ${W(P)}`," type: trojan",` password: ${W(e.config.trojanPassword)}`,` server: ${h.ip}`,` port: ${y}`," network: ws"," tls: true",` sni: ${e.domain}`,` client-fingerprint: ${e.config.clientFingerprint}`,...l()," ws-opts:",` path: ${W(e.config.trojanPath)}`," headers:",` Host: ${e.domain}`].join(`
4
+ `))}}});t.push("# CFPilot \u81EA\u52A8\u751F\u6210\u8BA2\u9605"),t.push("mixed-port: 7890"),t.push("allow-lan: false"),t.push("mode: rule"),t.push("log-level: info"),t.push("unified-delay: true"),t.push("tcp-concurrent: true"),t.push(""),t.push("dns:"),t.push(" enable: true"),t.push(" ipv6: false"),t.push(" enhanced-mode: fake-ip"),t.push(" fake-ip-range: 198.18.0.1/16"),t.push(" default-nameserver:"),t.push(" - 223.5.5.5"),t.push(" - 119.29.29.29"),t.push(" nameserver:"),t.push(" - https://223.5.5.5/dns-query"),t.push(" - https://dns.alidns.com/dns-query"),t.push(" fallback:"),t.push(" - 8.8.4.4"),t.push(" - 1.1.1.1"),t.push(" fallback-filter:"),t.push(" geoip: true"),t.push(" geoip-code: CN"),t.push(""),a&&(t.push(" nameserver-policy:"),t.push(` ${W(c)}: ${f?W(f):"https://223.5.5.5/dns-query"}`),t.push(""));let u=un(e.routeProfile??"",{mainGroup:"CFPilot",autoGroup:"\u81EA\u52A8\u9009\u62E9"});if(t.push("proxies:"),n.length===0?t.push(" []"):t.push(...n),t.push(""),t.push("proxy-groups:"),t.push(' - name: "CFPilot"'),t.push(" type: select"),t.push(" proxies:"),t.push(' - "\u81EA\u52A8\u9009\u62E9"'),t.push(' - "\u6545\u969C\u8F6C\u79FB"'),r.length===0)t.push(" []");else for(let p of r)t.push(` - ${W(p)}`);if(r.length>0){t.push(""),t.push(' - name: "\u81EA\u52A8\u9009\u62E9"'),t.push(" type: url-test"),t.push(' url: "http://www.gstatic.com/generate_204"'),t.push(" interval: 300"),t.push(" tolerance: 50"),t.push(" proxies:");for(let p of r)t.push(` - ${W(p)}`);t.push(""),t.push(' - name: "\u6545\u969C\u8F6C\u79FB"'),t.push(" type: fallback"),t.push(' url: "http://www.gstatic.com/generate_204"'),t.push(" interval: 300"),t.push(" proxies:");for(let p of r)t.push(` - ${W(p)}`)}return u.groups.length>0&&(t.push(""),t.push(...u.groups)),t.push(""),t.push("rules:"),u.rules.length>0?(t.push(...u.rules),u.rules.some(p=>p.includes("MATCH,"))||t.push(" - MATCH,CFPilot")):t.push(...cn("CFPilot")),t.push(""),t.join(`
5
+ `)}function yo(e){let t=[],n=[],r=lt(e.config.subVariants,e.config,An),o=r.some(l=>l==="vless-ws"),s=r.includes("trojan"),i=e.config.ech,a=e.config.echHost.trim()||"cloudflare-ech.com",c=()=>i?{ech:{enabled:!0,query_server_name:a}}:{};for(let l of ct(e)){let u=[];l.entries.forEach((p,h)=>{let m=`${l.name} ${de(p,"vless",h,"")}`;for(let b of ft(p,e)){let y=e.ports.length>1?`:${b}`:"",d=`${m}${y}`,g=`${d} Trojan`;o&&u.push(d),s&&u.push(g),o&&t.push({type:"vless",tag:d,server:p.ip,server_port:b,uuid:e.config.uuid,tls:{enabled:!0,server_name:e.domain,insecure:!1,utls:{enabled:!0,fingerprint:e.config.clientFingerprint},...c()},transport:{type:"ws",path:e.config.wsPath,headers:{Host:e.domain}}}),s&&t.push({type:"trojan",tag:g,server:p.ip,server_port:b,password:e.config.trojanPassword,tls:{enabled:!0,server_name:e.domain,insecure:!1,utls:{enabled:!0,fingerprint:e.config.clientFingerprint},...c()},transport:{type:"ws",path:e.config.trojanPath,headers:{Host:e.domain}}})}}),u.length>0&&n.push({tag:l.name,members:u})}t.push({type:"direct",tag:"direct"});for(let l of n)t.push({type:"selector",tag:l.tag,outbounds:l.members,default:l.members[0]});return t.push({type:"selector",tag:"CFPilot",outbounds:n.length>0?n.map(l=>l.tag):["direct"],default:n.length>0?n[0].tag:"direct"}),JSON.stringify({log:{level:"info",timestamp:!0},dns:{servers:[{tag:"dns-out",address:"https://1.1.1.1/dns-query"},{tag:"local",address:"local"}],rules:[{rule_set:[],server:"dns-out"}]},inbounds:[{type:"mixed",tag:"mixed-in",listen:"127.0.0.1",listen_port:2080}],outbounds:t,route:{rules:[{domain_suffix:[".cn"],outbound:"direct"}],final:"CFPilot",auto_detect_interface:!0}},null,2)}function wo(e){let t=[],n=lt(e.config.subVariants,e.config);for(let r of ct(e))r.entries.forEach((o,s)=>{let i=de(o,"vless",s,r.name);for(let a of ft(o,e)){let c=e.ports.length>1?`:${a}`:"",f=`${i}${c}`,l={...o,port:a};for(let u of n)u==="vless-ws"?t.push(xn(l,e,"ws",`${f} WS`)):u==="vless-xhttp"?t.push(xn(l,e,"xhttp",`${f} XHTTP`)):t.push(ho(l,e,`${f} Trojan`))}});return Qt(t.join(`
6
+ `))}function Cn(e,t){let n=ut(t.config.subName);switch(e){case"clash":return{body:go(t),contentType:"text/yaml; charset=utf-8",fileName:n};case"singbox":return{body:yo(t),contentType:"application/json; charset=utf-8",fileName:n};default:return{body:wo(t),contentType:"text/plain; charset=utf-8",fileName:n}}}var ee,_r,qr,pn,dn,mn,$r,eo,to,po,bn,An,pt=k(()=>{"use strict";_();re();ot();fn();ee=443;_r=["ip\u5730\u5740","ip \u5730\u5740","ip","\u5730\u5740","\u670D\u52A1\u5668","server","host"],qr=["\u7AEF\u53E3","port"],pn=["\u4E0B\u8F7D\u901F\u5EA6","\u901F\u5EA6","speed","download"],dn=["\u5E73\u5747\u5EF6\u8FDF","\u5EF6\u8FDF","latency","delay","\u54CD\u5E94\u65F6\u95F4","rtt"],mn=["colo","\u673A\u623F","\u6570\u636E\u4E2D\u5FC3","\u5730\u533A","region"],$r=["\u56FD\u5BB6","country","\u56FD\u522B"],eo=["\u57CE\u5E02","city"],to=["tls","\u662F\u5426\u652F\u6301tls","\u652F\u6301tls"];po={official:"\u5B98\u65B9\u4F18\u9009IP",domain:"\u4F18\u9009\u57DF\u540D",manual:"\u624B\u52A8\u4F18\u9009IP",api:"\u8FDC\u7A0BAPI",csv:"\u6D4B\u901FCSV"};bn=["vless-ws","vless-xhttp","trojan"];An=["vless-ws","trojan"]});function Nn(e){return e.KV?new mt(e.KV):new ht}var mt,ht,kn=k(()=>{"use strict";mt=class{constructor(t){this.kv=t}kv;async get(t){return await this.kv.get(t)}async put(t,n,r){r&&r>=60?await this.kv.put(t,n,{expirationTtl:r}):await this.kv.put(t,n)}async delete(t){await this.kv.delete(t)}async list(t){let n=[],r;do{let o=await this.kv.list({prefix:t,cursor:r});for(let s of o.keys)n.push(s.name);r=o.list_complete?void 0:o.cursor}while(r);return n}},ht=class{data=new Map;async get(t){let n=this.data.get(t);return n?n.expiresAt>0&&n.expiresAt<=Date.now()?(this.data.delete(t),null):n.value:null}async put(t,n,r){let o=r?Date.now()+r*1e3:0;this.data.set(t,{value:n,expiresAt:o})}async delete(t){this.data.delete(t)}async list(t){return[...this.data.keys()].filter(n=>n.startsWith(t))}}});async function gt(e,t){return await _t(`${t}:${e}`)}function Un(e){return`/${e.trim().replace(/^\/+/,"")}`}async function On(e,t,n){let r=await e.get(Pe)??"",o=n&&n.trim()?Un(n):"";o?r!==o&&(r=o,await e.put(Pe,r)):r||(r=Un(`${en}-${Jt(6)}`),await e.put(Pe,r));let s=await e.get(Ce)??"",i=null,a=t&&t.trim()?t.trim():"";if(a){let c=Y(8);s=`${c}:${await gt(a,c)}`,await e.put(Ce,s),await e.delete(qe)}else if(!s){let c=`cfp-${Y(8)}`,f=Y(8);s=`${f}:${await gt(c,f)}`,await e.put(Ce,s),i=c,await e.put(qe,c)}return{panelPath:r,passwordHash:s,generatedPassword:i}}async function vn(e,t){let[n,r]=e.passwordHash.split(":");if(!n||!r)return!1;let o=await gt(t,n);return Je(o,r)}function Dn(e){let t=e.headers.get("Cookie")??"",n={};for(let r of t.split(";")){let o=r.indexOf("=");if(o<0)continue;let s=r.slice(0,o).trim(),i=r.slice(o+1).trim();s&&(n[s]=decodeURIComponent(i))}return n}async function Ln(e){let t=Y(24);return await e.put(`${Se}${t}`,JSON.stringify({ua:"",t:Date.now()}),In),t}async function yt(e,t){let n=Dn(t)[De];return n?!!await e.get(`${Se}${n}`):!1}function Mn(e,t=In){return`${De}=${e}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=${t}`}function Fn(){return`${De}=; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=0`}async function Bn(e,t){let n=Dn(t)[De];n&&await e.delete(`${Se}${n}`)}async function Hn(e){let t=Y(20);return await e.put(`${Ee}${t}`,"1",Eo),t}async function zn(e,t){if(!t)return!1;let n=await e.get("SCANNER_TOKEN");return n&&Je(n,t)?!0:await e.get(`${Ee}${t}`)?(await e.delete(`${Ee}${t}`),!0):!1}var De,In,Eo,wt=k(()=>{"use strict";ue();re();De="cfpilot_sess",In=3600*24,Eo=600});function bt(e){return Nn(e)}async function Le(e,t){if(j.config&&Date.now()-j.configAt<So)return j.config;let n=await tn(e,t);return j.config=n,j.configAt=Date.now(),n}function jn(){j.config=null,j.configAt=0}async function xt(e,t){if(j.auth&&Date.now()-j.authAt<Po)return j.auth;let n=await On(e,t.PANEL_PASSWORD,t.PANEL_PATH);return j.auth=n,j.authAt=Date.now(),n}function At(e){switch((e??"").toLowerCase()){case"clash":case"mihomo":case"yaml":return"clash";case"singbox":case"sing-box":case"json":return"singbox";case"v2ray":return"v2ray";case"base64":return"base64";default:return"base64"}}function me(e){let t=String(e??"").trim();if(!t)return t;t=t.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//,""),t=t.replace(/[/?#].*$/,"");let n=t.lastIndexOf("@");if(n>=0&&(t=t.slice(n+1)),t.startsWith("[")){let r=t.indexOf("]");r>0&&(t=t.slice(1,r))}else{let r=t.indexOf(":");r>=0&&t.indexOf(":",r+1)<0&&(t=t.slice(0,r))}return t.trim()}function Kn(e){let t=(e??"").toLowerCase();return t?t.includes("clash")||t.includes("mihomo")||t.includes("flclash")||t.includes("clashx")||t.includes("stash")?"clash":t.includes("sing-box")||t.includes("singbox")?"singbox":t.includes("v2ray")||t.includes("v2rayng")||t.includes("shadowrocket")||t.includes("nekobox")||t.includes("surge")||t.includes("loon")||t.includes("quantumult")?"base64":null:null}var So,Po,j,Me=k(()=>{"use strict";kn();ue();wt();So=15e3,Po=6e4,j={config:null,configAt:0,auth:null,authAt:0}});async function Et(e,t,n,r=!0){let o=e.getReader(),s=t.getWriter();try{for(;!n?.exhausted;){let{done:i,value:a}=await o.read();if(i)break;!a||a.byteLength===0||await s.write(a)}}catch{}finally{if(r)try{await s.close()}catch{}else try{s.releaseLock()}catch{}try{o.releaseLock()}catch{}}}var Fe,St=k(()=>{"use strict";Fe=class{limitMs;anchor=performance.now();accumulated=0;paused=!1;constructor(t=8){this.limitMs=t}get elapsedMs(){return this.accumulated+(this.paused?0:performance.now()-this.anchor)}get exhausted(){return this.elapsedMs>this.limitMs}get remainingMs(){return this.limitMs-this.elapsedMs}pause(){this.paused||(this.accumulated+=performance.now()-this.anchor,this.paused=!0)}resume(){this.paused&&(this.anchor=performance.now(),this.paused=!1)}check(){if(this.exhausted)throw new Error(`CPU \u9884\u7B97\u8D85\u9650\uFF08${this.limitMs}ms\uFF09\uFF0C\u5DF2\u63D0\u524D\u4E2D\u6B62`)}}});var Gn={};Ae(Gn,{API_PREFIX:()=>Pt,getScannerToken:()=>Co,handleApi:()=>To});function F(e,t=200,n={}){return new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store",...n}})}function K(e,t){return F({ok:!1,error:e},t)}async function Co(e,t){let n=await e.get(_e);if(n)return n;if(typeof t.SCANNER_TOKEN=="string"&&t.SCANNER_TOKEN)return t.SCANNER_TOKEN;let r=Y(24);return await e.put(_e,r),r}async function To(e,t,n){if(!t.pathname.startsWith(Pt))return null;let{store:r,env:o,config:s,auth:i}=n,a=t.pathname.slice(Pt.length)||"/",c=e.method.toUpperCase();if(a==="/session"&&c==="GET"){let l=await yt(r,e);return F({ok:!0,authenticated:l,panelPath:i.panelPath})}if(a==="/login"&&c==="POST"){let l="";try{let h=await e.json();l=String(h.password??"")}catch{return K("\u8BF7\u6C42\u4F53\u89E3\u6790\u5931\u8D25",400)}if(!l)return K("\u8BF7\u8F93\u5165\u5BC6\u7801",400);if(!await vn(i,l))return K("\u5BC6\u7801\u9519\u8BEF",401);let p=await Ln(r);return F({ok:!0},200,{"Set-Cookie":Mn(p)})}if(a==="/logout"&&c==="POST")return await Bn(r,e),F({ok:!0},200,{"Set-Cookie":Fn()});if(a==="/preferred-ips"&&c==="POST"){let l=e.headers.get("Authorization")??"",u=l.startsWith("Bearer ")?l.slice(7).trim():l.trim();if(!await zn(r,u))return K("Token \u6821\u9A8C\u5931\u8D25",401);let h;try{h=await e.json()}catch{return K("\u8BF7\u6C42\u4F53\u89E3\u6790\u5931\u8D25",400)}let m=Array.isArray(h.ips)?h.ips.map(y=>String(y)):[],b=m.map(y=>y.trim()).filter(y=>y.length>0).join(`
7
+ `);return await r.put(Q,b),F({ok:!0,count:m.length})}if(!await yt(r,e))return K("\u672A\u767B\u5F55\u6216\u4F1A\u8BDD\u5DF2\u8FC7\u671F",401);if(a==="/status"&&c==="GET"){let l=await ce(r),u=pe(l),p=me(s.subDomain||o.DATA_HOST||t.hostname);return F({ok:!0,panelPath:i.panelPath,domain:t.hostname,nodeDomain:p,dataHost:o.DATA_HOST??"",colo:e.cf?.colo??"UNK",localIps:u.length,generatedPassword:i.generatedPassword,version:"0.1.0"})}if(a==="/config"&&c==="GET")return F({ok:!0,config:s});if(a==="/config"&&c==="PUT"){let l;try{l=await e.json()}catch{return K("\u8BF7\u6C42\u4F53\u89E3\u6790\u5931\u8D25",400)}if(!l.config||typeof l.config!="object")return K("\u7F3A\u5C11\u914D\u7F6E\u5BF9\u8C61",400);let u=$e(s,l.config);return await et(r,u),n.onConfigChanged(),F({ok:!0,config:u})}if(a==="/ips"&&c==="GET"){let l=await ce(r),u=pe(l);return F({ok:!0,raw:l,count:u.length,entries:u})}if(a==="/ips"&&c==="DELETE")return await r.delete(Q),F({ok:!0});if(a==="/ips"&&c==="PUT"){let l;try{l=await e.json()}catch{return K("\u8BF7\u6C42\u4F53\u89E3\u6790\u5931\u8D25",400)}if(typeof l.raw!="string")return K("\u7F3A\u5C11 raw \u5B57\u6BB5",400);let u=l.raw.split(/\r?\n/).map(p=>p.trim()).filter(p=>p.length>0).join(`
8
+ `);return u?await r.put(Q,u):await r.delete(Q),F({ok:!0,count:u?u.split(`
9
+ `).length:0})}if(a==="/nodes"&&c==="GET"){let l=await ce(r),u=await tt(r),p=new Fe(8),h=await Ie(s,l,{budget:p,domainPool:u.length>0?u:void 0});return F({ok:!0,count:h.nodes.length,nodes:h.nodes.slice(0,200),groups:h.groups.map(m=>({key:m.key,name:m.name,count:m.entries.length})),stats:h.stats})}if(a==="/pool/meta"&&c==="GET"){let l=await tt(r);return F({ok:!0,countries:ln.map(u=>({code:u,name:on[u]??u})),limits:{officialCount:200,domainCount:100},builtin:{cidrs:Te.length,domains:fe.length},customDomains:l})}if(a==="/pool/library"&&c==="PUT"){let l;try{l=await e.json()}catch{return K("\u8BF7\u6C42\u4F53\u89E3\u6790\u5931\u8D25",400)}let u=Array.isArray(l.domains)?l.domains.map(p=>String(p)):[];return await nn(r,u),F({ok:!0,count:u.filter(p=>p.trim()).length})}if(a==="/scanner-token"&&c==="POST"){let l=await Hn(r);return F({ok:!0,token:l,expiresIn:600})}return a==="/events"&&c==="GET"?await Ro(e,r):K("\u63A5\u53E3\u4E0D\u5B58\u5728",404)}async function Ro(e,t){let n=new TextEncoder,r="",o,s=new ReadableStream({async start(i){let a=()=>{o&&clearTimeout(o);try{i.close()}catch{}};e.signal.addEventListener("abort",a);let c=async()=>{try{let f=await ce(t);if(f!==r){r=f;let l=pe(f).length;i.enqueue(n.encode(`event: ips
10
+ data: ${JSON.stringify({count:l})}
11
+
12
+ `))}else i.enqueue(n.encode(`: keepalive
13
+
14
+ `))}catch{}e.signal.aborted||(o=setTimeout(()=>{c()},3e3))};await c()},cancel(){o&&clearTimeout(o)}});return new Response(s,{status:200,headers:{"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-store",Connection:"keep-alive","X-Accel-Buffering":"no"}})}var Pt,Wn=k(()=>{"use strict";wt();ue();pt();ot();re();St();Me();Pt="/api/v1"});function _n(e){let t=e.replace(/-/g,"").trim().toLowerCase();if(!/^[0-9a-f]{32}$/.test(t))return null;let n=new Uint8Array(16);for(let r=0;r<16;r++)n[r]=parseInt(t.slice(r*2,r*2+2),16);return n}function Zn(e){let t="";for(let n of e)t+=Xn[n>>4]+Xn[n&15];return t}async function qn(e,t){let n=await e.readExactly(1);if(!n)return null;let r=await e.readExactly(16);if(!r)return null;let o=_n(t);if(!o||Zn(r)!==Zn(o))return null;let s=await e.readExactly(1);if(!s)return null;let i=s[0],a=i>0?await e.readExactly(i):new Uint8Array(0);if(!a)return null;let c=await e.readExactly(1);if(!c)return null;let f=await e.readExactly(2);if(!f)return null;let l=await nt(e,!0);if(!l)return null;let u=f[0]<<8|f[1];return{header:{version:n[0],command:c[0],port:u,hostname:l.hostname,addressType:l.addressType,addons:a},payload:e.release()}}function $n(e,t){if(e.byteLength<18)return null;let n=_n(t);if(!n)return null;for(let f=0;f<16;f++)if(e[1+f]!==n[f])return null;let r=e[17],o=18+r;if(e.byteLength<o+4)return null;let s=e[o];o+=1;let i=e[o]<<8|e[o+1];o+=2;let a=e[o];o+=1;let c="";if(a===1){if(e.byteLength<o+4)return null;c=`${e[o]}.${e[o+1]}.${e[o+2]}.${e[o+3]}`,o+=4}else if(a===2){if(e.byteLength<o+1)return null;let f=e[o];if(o+=1,e.byteLength<o+f)return null;c=new TextDecoder().decode(e.subarray(o,o+f)),o+=f}else if(a===3){if(e.byteLength<o+16)return null;let f=[];for(let l=0;l<8;l++)f.push((e[o+l*2]<<8|e[o+l*2+1]).toString(16));c=f.join(":"),o+=16}else return null;return{header:{version:e[0],command:s,port:i,hostname:c,addressType:a,addons:e.subarray(18,18+r)},consumed:o}}var Jn,Qn,Xn,Tt=k(()=>{"use strict";_();Jn=1,Qn=2,Xn="0123456789abcdef"});function Z(e,t){return e>>>t|e<<32-t}function Io(e){let t=new Uint32Array([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]),n=e.length*8,r=Math.ceil((e.length+9)/64)*64,o=new Uint8Array(r);o.set(e),o[e.length]=128;let s=new DataView(o.buffer);s.setUint32(r-8,Math.floor(n/4294967296),!1),s.setUint32(r-4,n>>>0,!1);let i=new Uint32Array(64);for(let c=0;c<r;c+=64){for(let d=0;d<16;d++)i[d]=s.getUint32(c+d*4,!1);for(let d=16;d<64;d++){let g=Z(i[d-15],7)^Z(i[d-15],18)^i[d-15]>>>3,P=Z(i[d-2],17)^Z(i[d-2],19)^i[d-2]>>>10;i[d]=i[d-16]+g+i[d-7]+P>>>0}let f=t[0],l=t[1],u=t[2],p=t[3],h=t[4],m=t[5],b=t[6],y=t[7];for(let d=0;d<64;d++){let g=Z(h,6)^Z(h,11)^Z(h,25),P=h&m^~h&b,S=y+g+P+Uo[d]+i[d]>>>0,U=Z(f,2)^Z(f,13)^Z(f,22),A=f&l^f&u^l&u,E=U+A>>>0;y=b,b=m,m=h,h=p+S>>>0,p=u,u=l,l=f,f=S+E>>>0}t[0]=t[0]+f>>>0,t[1]=t[1]+l>>>0,t[2]=t[2]+u>>>0,t[3]=t[3]+p>>>0,t[4]=t[4]+h>>>0,t[5]=t[5]+m>>>0,t[6]=t[6]+b>>>0,t[7]=t[7]+y>>>0}let a=new Uint8Array(28);for(let c=0;c<7;c++)a[c*4]=t[c]>>>24&255,a[c*4+1]=t[c]>>>16&255,a[c*4+2]=t[c]>>>8&255,a[c*4+3]=t[c]&255;return a}function tr(e){let t=Io(e),n="";for(let r of t)n+=er[r>>4]+er[r&15];return n}var Uo,er,nr=k(()=>{"use strict";Uo=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),er="0123456789abcdef"});function Oo(e){return tr(new TextEncoder().encode(e))}function or(e,t){if(e.byteLength<58)return null;let n=Oo(t);if(new TextDecoder().decode(e.subarray(0,56)).trim().toLowerCase()!==n||e[56]!==13||e[57]!==10)return null;let o=58;if(e.byteLength<o+2)return null;let s=e[o];o+=1;let i=e[o];o+=1;let a="";if(i===1){if(e.byteLength<o+4)return null;a=`${e[o]}.${e[o+1]}.${e[o+2]}.${e[o+3]}`,o+=4}else if(i===3){if(e.byteLength<o+1)return null;let f=e[o];if(o+=1,e.byteLength<o+f)return null;a=new TextDecoder().decode(e.subarray(o,o+f)),o+=f}else if(i===4){if(e.byteLength<o+16)return null;let f=[];for(let l=0;l<8;l++)f.push((e[o+l*2]<<8|e[o+l*2+1]).toString(16));a=f.join(":"),o+=16}else return null;if(e.byteLength<o+4)return null;let c=e[o]<<8|e[o+1];return o+=2,e[o]!==13||e[o+1]!==10?null:(o+=2,{header:{command:s,port:c,hostname:a,addressType:i},consumed:o})}var rr,sr=k(()=>{"use strict";_();nr();rr=3});function Rt(e,t){if(e.byteLength===0)return t;if(t.byteLength===0)return e;let n=new Uint8Array(new ArrayBuffer(e.byteLength+t.byteLength));return n.set(e,0),n.set(t,e.byteLength),n}var $,he=k(()=>{"use strict";$=class{reader;chunks=[];size=0;done=!1;constructor(t){this.reader=t.getReader()}async readExactly(t){if(t===0)return new Uint8Array(0);for(;this.size<t;){if(this.done)return null;let{done:n,value:r}=await this.reader.read();if(n)return this.done=!0,this.size>=t?this.take(t):null;r&&r.byteLength>0&&(this.chunks.push(r),this.size+=r.byteLength)}return this.take(t)}take(t){let n=new Uint8Array(t),r=0;for(;r<t;){let o=this.chunks[0],s=t-r;o.byteLength<=s?(n.set(o,r),r+=o.byteLength,this.chunks.shift()):(n.set(o.subarray(0,s),r),this.chunks[0]=o.subarray(s),r+=s)}return this.size-=t,n}async peekExactly(t){if(t===0)return new Uint8Array(0);for(;this.size<t;){if(this.done)return null;let{done:n,value:r}=await this.reader.read();if(n)return this.done=!0,this.size>=t?this.slice(t):null;r&&r.byteLength>0&&(this.chunks.push(r),this.size+=r.byteLength)}return this.slice(t)}skip(t){return this.size<t?null:this.take(t)}slice(t){let n=new Uint8Array(t),r=0;for(let o of this.chunks){if(r>=t)break;let s=Math.min(o.byteLength,t-r);n.set(o.subarray(0,s),r),r+=s}return n}peek(){if(this.chunks.length===0)return new Uint8Array(0);let t=this.chunks.reduce((o,s)=>o+s.byteLength,0),n=new Uint8Array(t),r=0;for(let o of this.chunks)n.set(o,r),r+=o.byteLength;return n}release(){let t=this.peek();this.chunks=[],this.size=0;let n=this.reader,r=this,o=!1;return new ReadableStream({async pull(s){if(!o&&(o=!0,t.byteLength>0)){s.enqueue(t);return}if(r.done){s.close();return}try{let{done:i,value:a}=await n.read();i?(r.done=!0,s.close()):a&&a.byteLength>0&&s.enqueue(a)}catch(i){s.error(i)}},cancel(s){n.cancel(s)}})}}});async function te(e,t,n,r){let o=Date.now()+n,s=await Promise.race([e.readExactly(t),new Promise(i=>setTimeout(()=>i(null),Math.max(1,o-Date.now())))]);if(s===null)throw new Error(`${r}\u8D85\u65F6\uFF08${n}ms \u65E0\u54CD\u5E94\uFF09`);return s}async function ir(e,t,n,r,o={}){let s=new $(e),i=t.getWriter(),a=o.handshakeTimeoutMs??vo,c=async f=>{await i.write(f)};try{let f=[0];o.username&&f.push(2);let l=new Uint8Array(2+f.length);l[0]=5,l[1]=f.length,l.set(f,2),await c(l);let u=await te(s,2,a,"SOCKS5 \u63E1\u624B");if(!u||u[0]!==5)throw new Error("SOCKS5 \u63E1\u624B\u5931\u8D25\uFF1A\u975E\u6CD5\u54CD\u5E94");let p=u[1];if(p===2){let d=new TextEncoder().encode(o.username??""),g=new TextEncoder().encode(o.password??""),P=new Uint8Array(3+d.length+g.length);P[0]=1,P[1]=d.length,P.set(d,2),P[2+d.length]=g.length,P.set(g,3+d.length),await c(P);let S=await te(s,2,a,"SOCKS5 \u8BA4\u8BC1");if(!S||S[1]!==0)throw new Error("SOCKS5 \u7528\u6237\u540D/\u5BC6\u7801\u8BA4\u8BC1\u5931\u8D25")}else if(p!==0)throw new Error(`SOCKS5 \u4E0D\u652F\u6301\u7684\u8BA4\u8BC1\u65B9\u5F0F\uFF1A0x${p.toString(16)}`);let h=Do(n,r),m=new Uint8Array(3+h.length);m[0]=5,m[1]=1,m[2]=0,m.set(h,3),await c(m);let b=await te(s,4,a,"SOCKS5 CONNECT");if(!b||b[0]!==5)throw new Error("SOCKS5 CONNECT \u54CD\u5E94\u975E\u6CD5");if(b[1]!==0)throw new Error(`SOCKS5 CONNECT \u5931\u8D25\uFF1A0x${b[1].toString(16)}`);let y=b[3];if(y===1)await te(s,4,a,"SOCKS5 \u54CD\u5E94");else if(y===3){let d=await te(s,1,a,"SOCKS5 \u54CD\u5E94");if(!d)throw new Error("SOCKS5 \u54CD\u5E94\u622A\u65AD");await te(s,d[0],a,"SOCKS5 \u54CD\u5E94")}else if(y===4)await s.readExactly(16);else throw new Error("SOCKS5 \u54CD\u5E94\u5730\u5740\u7C7B\u578B\u975E\u6CD5");return await te(s,2,a,"SOCKS5 \u54CD\u5E94"),s.release()}finally{try{i.releaseLock()}catch{}}}function Do(e,t){if(v(e)){let o=e.split(".").map(i=>Number(i)),s=new Uint8Array(7);return s[0]=1,s.set(o,1),s[5]=t>>8&255,s[6]=t&255,s}if(H(e)){let o=new Uint8Array(19);o[0]=4;let s=e.split(":").filter(Boolean);for(let i=0;i<8;i++){let a=parseInt(s[i]??"0",16)||0;o[1+i*2]=a>>8&255,o[2+i*2]=a&255}return o[17]=t>>8&255,o[18]=t&255,o}let n=new TextEncoder().encode(e),r=new Uint8Array(2+n.length+2);return r[0]=3,r[1]=n.length,r.set(n,2),r[r.length-2]=t>>8&255,r[r.length-1]=t&255,r}var vo,ar=k(()=>{"use strict";he();_();vo=6e3});async function lr(e,t,n,r,o={}){let s=new $(e),i=t.getWriter(),a=`${n}:${r}`;try{let c=o.username&&o.password?`Proxy-Authorization: Basic ${btoa(`${o.username}:${o.password}`)}\r
15
+ `:"",f=[`CONNECT ${a} HTTP/1.1`,`Host: ${a}`,"Proxy-Connection: keep-alive","User-Agent: CFPilot/1.0",c,"",""].join(`\r
16
+ `);await i.write(new TextEncoder().encode(f));let l=[],u=Date.now()+Nt;for(let b=0;b<8192;b++){if(Date.now()>u)throw new Error(`HTTP \u4EE3\u7406\u63E1\u624B\u8D85\u65F6\uFF08${Nt}ms \u65E0\u54CD\u5E94\uFF09`);let y=await Promise.race([s.readExactly(1),new Promise(g=>setTimeout(()=>g(null),Math.max(1,u-Date.now())))]);if(!y){let g=await Promise.race([s.readExactly(1),new Promise(P=>setTimeout(()=>P(null),200))]);if(!g)throw new Error(`HTTP \u4EE3\u7406\u63E1\u624B\u8D85\u65F6\uFF08${Nt}ms \u65E0\u54CD\u5E94\uFF09`);l.push(g[0]);continue}l.push(y[0]);let d=l.length;if(d>=4&&l[d-4]===Be[0]&&l[d-3]===Be[1]&&l[d-2]===Be[2]&&l[d-1]===Be[3])break}let h=new TextDecoder().decode(new Uint8Array(l)).split(`\r
17
+ `)[0]??"",m=/^HTTP\/1\.[01]\s+(\d{3})/.exec(h);if(!m)throw new Error("HTTP \u4EE3\u7406\u54CD\u5E94\u975E\u6CD5");if(m[1]!=="200")throw new Error(`HTTP \u4EE3\u7406 CONNECT \u5931\u8D25\uFF1A${m[1]}`);return s.release()}finally{try{i.releaseLock()}catch{}}}var Be,Nt,cr=k(()=>{"use strict";he();Be=[13,10,13,10],Nt=6e3});function Fo(e){return/^\d{1,3}(\.\d{1,3}){3}$/.test(e)?!0:e.includes(":")&&/^[0-9a-fA-F:.]+$/.test(e)}function Bo(e,t){let n=e.trim(),r=/^\[([^\]]+)\](?::(\d+))?$/.exec(n);if(r)return{host:r[1],port:Number(r[2]??t)};if(n.includes(":")&&n.split(":").length>2)return{host:n,port:t};let o=n.lastIndexOf(":");if(o<0)return{host:n,port:t};let s=n.slice(0,o),i=Number(n.slice(o+1));return s?{host:s,port:Number.isInteger(i)&&i>0?i:t}:{host:n,port:t}}async function Ho(e,t,n,r=fr){try{let o=`${e}?name=${encodeURIComponent(t)}&type=${n}`,s=await fetch(o,{headers:{accept:"application/dns-json"},signal:AbortSignal.timeout(r)});if(!s.ok)return[];let i=await s.json();if(!i||i.Status!==0||!Array.isArray(i.Answer))return[];let a=n==="TXT"?16:n==="A"?1:28;return i.Answer.filter(c=>c.type===a).map(c=>String(c.data))}catch{return[]}}async function kt(e,t,n={}){for(let r of Lo){if(n.deadline!==void 0&&Date.now()>=n.deadline)break;let o=n.timeoutMs??fr,s=n.deadline!==void 0?n.deadline-Date.now():Number.POSITIVE_INFINITY,i=Math.max(50,Math.min(o,s)),a=await Ho(r,e,t,i);if(a.length>0)return a}return[]}function zo(e,t){let n=[],r=String(e).replace(/^"|"$/g,"").replace(/\\010/g,",").replace(/\\n/g,",").trim();if(!r||r==="@edgetunnel")return n;let o=r.split(/[,;\s]+/).filter(Boolean);if(o.length===0)return n;for(let s of o){let i=s.trim();if(!i)continue;let{host:a,port:c}=Bo(i,t);if(!v(a)&&!H(a))return[];n.push({hostname:a,port:c})}return n}async function He(e,t,n={}){let r=e.trim();if(!r)return[];if(Fo(r))return[{hostname:r,port:t}];let o=`${r}:${t}`,s=ur.get(o);if(s&&Date.now()-s.at<Mo)return s.ips;let i=[];if(!n.skipTxt){let f=await kt(r,"TXT",n);for(let l of f){let u=zo(l,t);if(u.length>0){i.push(...u);break}if(String(l).replace(/^"|"$/g,"").replace(/\\010/g,",").trim()==="@edgetunnel")break}}if(i.length===0){let f=await kt(r,"A",n);for(let l of f)v(l)&&i.push({hostname:l,port:t})}if(i.length===0){let f=await kt(r,"AAAA",n);for(let l of f)H(l)&&i.push({hostname:l,port:t})}let a=[],c=new Set;for(let f of i){let l=`${f.hostname}:${f.port}`;c.has(l)||(c.add(l),a.push(f))}return a.length>0&&ur.set(o,{at:Date.now(),ips:a}),a}var Lo,fr,Mo,ur,Ut=k(()=>{"use strict";_();Lo=["https://cloudflare-dns.com/dns-query","https://dns.alidns.com/resolve","https://doh.pub/dns-query"],fr=4e3,Mo=300*1e3,ur=new Map});var br={};Ae(br,{BUILTIN_RELAY_DOMAINS:()=>hr,BUILTIN_RELAY_REGION:()=>je,COLO_TO_COUNTRY:()=>gr,REGION_ADJACENCY:()=>dr,REGION_ORDER:()=>Ot,RELAY_BATCH_SIZE:()=>ie,RELAY_DOMAIN_LIMIT:()=>Mt,UNKNOWN_REGION:()=>pr,clearRelayCache:()=>Wo,collectRelayEndpoints:()=>ge,coloToCountry:()=>ze,rankRegions:()=>Lt,regionOfEntry:()=>It,resolveRelayEntry:()=>Dt,selectRelayDomains:()=>wr,sortEndpointsByRegion:()=>mr});function It(e){let n=e.trim().toLowerCase().replace(/:\d{1,5}$/,"");return je[n]??pr}function Lt(e){let t=(e??"").trim().toUpperCase();if(!t)return[...Ot];let n=dr[t]??[],r=Ot.filter(o=>o!==t&&!n.includes(o));return[t,...n,...r]}function mr(e,t){let n=Lt(t),r=o=>{let s=n.indexOf(o);return s>=0?s:n.length};return e.map((o,s)=>({e:o,i:s})).sort((o,s)=>{let i=r(o.e.regionCode),a=r(s.e.regionCode);return i!==a?i-a:o.i-s.i}).map(o=>o.e)}function ze(e){let t=String(e??"").toUpperCase();return t?gr[t]??(/^[A-Z]{2}$/.test(t)?t:"US"):"US"}async function Dt(e,t=443,n=yr,r={}){let o=e.trim();if(!o)return[];let s=`${o}:${t}:${n}`,i=vt.get(s);if(i&&Date.now()-i.at<Go)return i.ips;let a=o,c=t,f=(o.match(/:/g)??[]).length;if(f===1){let u=/^(.*):(\d{1,5})$/.exec(o);u&&(a=u[1],c=Number(u[2]))}else if(f>1&&o.startsWith("[")){let u=/^\[([^\]]+)\]:(\d{1,5})$/.exec(o);u&&(a=u[1],c=Number(u[2]))}let l=[];if(v(a)||H(a))l=[{ip:a,port:Number.isInteger(c)&&c>0?c:t,label:o,regionCode:It(o)}];else try{l=(await He(a,c,{skipTxt:r.skipTxt,deadline:r.deadline,timeoutMs:r.timeoutMs})).slice(0,n).map(p=>({ip:p.hostname,port:p.port,label:`${a} \u2192 ${p.hostname}`,regionCode:It(o)}))}catch{l=[]}return l.length>0&&vt.set(s,{at:Date.now(),ips:l}),l}function wr(e,t=Mt){let n=ze(e),r=Lt(n),o=s=>{let i=je[s];if(!i)return r.length+1;let a=r.indexOf(i);return a>=0?a:r.length};return hr.map((s,i)=>({d:s,i,rank:o(s)})).sort((s,i)=>s.rank!==i.rank?s.rank-i.rank:s.i-i.i).map(s=>s.d).slice(0,Math.max(0,t))}async function ge(e={}){let t=e.perDomain??yr,n=[],r=new Set,o=d=>{for(let g of d){let P=`${g.ip}:${g.port}`;r.has(P)||(r.add(P),n.push(g))}},s=(e.userEntries??"").trim(),i=s?s.split(/[\n,;]+/).map(d=>d.trim()).filter(Boolean):[],a=e.domainLimit??Mt,c=e.useBuiltin!==!1?wr(e.colo,a):[],f=d=>e.perDomain!==void 0?t:je[d]===ze(e.colo)?jo:Ko,l=await Promise.all([...i.map(d=>Dt(d,443,t,{deadline:e.deadline,timeoutMs:e.timeoutMs})),...c.map(d=>Dt(d,443,f(d),{skipTxt:!0,deadline:e.deadline,timeoutMs:e.timeoutMs}))]),u=n.length;for(let d=0;d<i.length;d++)o(l[d]);let p=n.length-u,h=l.slice(i.length),m=h.reduce((d,g)=>Math.max(d,g.length),0);for(let d=0;d<m;d++)for(let g of h)d<g.length&&o([g[d]]);let b=n.slice(0,p),y=mr(n.slice(p),ze(e.colo));return[...b,...y]}function Wo(){vt.clear()}var pr,dr,Ot,je,hr,gr,yr,ie,Mt,jo,Ko,Go,vt,Ke=k(()=>{"use strict";_();Ut();pr="??";dr={US:["SG","JP","KR"],SG:["JP","KR","US"],JP:["SG","KR","US"],KR:["JP","SG","US"],DE:["NL","GB","SE","FI"],SE:["DE","NL","FI","GB"],NL:["DE","GB","SE","FI"],FI:["SE","DE","NL","GB"],GB:["DE","NL","SE","FI"]},Ot=["US","SG","JP","KR","DE","SE","NL","FI","GB"];je={"proxyip.hk.cmliussss.net":"HK","proxyip.us.cmliussss.net":"US","proxyip.sg.cmliussss.net":"SG","proxyip.jp.cmliussss.net":"JP","proxyip.kr.cmliussss.net":"KR","proxyip.de.cmliussss.net":"DE","proxyip.se.cmliussss.net":"SE","proxyip.nl.cmliussss.net":"NL","proxyip.fi.cmliussss.net":"FI","proxyip.gb.cmliussss.net":"GB","proxyip.oracle.cmliussss.net":"Oracle","proxyip.digitalocean.cmliussss.net":"DigitalOcean","proxyip.vultr.cmliussss.net":"Vultr","proxyip.multacom.cmliussss.net":"Multacom"},hr=["proxyip.hk.cmliussss.net","proxyip.jp.cmliussss.net","proxyip.sg.cmliussss.net","proxyip.us.cmliussss.net","proxyip.de.cmliussss.net","proxyip.gb.cmliussss.net","proxyip.kr.cmliussss.net","proxyip.nl.cmliussss.net","proxyip.se.cmliussss.net","proxyip.fi.cmliussss.net","proxyip.oracle.cmliussss.net","proxyip.digitalocean.cmliussss.net","proxyip.vultr.cmliussss.net","proxyip.multacom.cmliussss.net"],gr={HKG:"HK",SYD:"AU",MEL:"AU",BNE:"AU",PER:"AU",ADL:"AU",CBR:"AU",SIN:"SG",NRT:"JP",HND:"JP",KIX:"JP",TYO:"JP",OSA:"JP",NGO:"JP",CTS:"JP",FUK:"JP",OKA:"JP",ICN:"KR",SEL:"KR",PUS:"KR",FRA:"DE",MUC:"DE",DUS:"DE",BER:"DE",HAM:"DE",STR:"DE",VIE:"DE",ZRH:"DE",CDG:"FR",MAD:"ES",MXP:"IT",FCO:"IT",PRG:"CZ",WAW:"PL",ARN:"SE",AMS:"NL",HEL:"FI",LHR:"GB",LGW:"GB",MAN:"GB",EDI:"GB",LAX:"US",SJC:"US",SFO:"US",SEA:"US",PDX:"US",SAN:"US",LAS:"US",PHX:"US",SLC:"US",DEN:"US",DFW:"US",IAH:"US",AUS:"US",ORD:"US",MSP:"US",DTW:"US",STL:"US",MCI:"US",ATL:"US",MIA:"US",MCO:"US",BNA:"US",CLT:"US",IAD:"US",BOS:"US",EWR:"US",JFK:"US",PHL:"US",YYZ:"CA",YVR:"CA",YUL:"CA",MEX:"MX",GRU:"BR",TPE:"TW",KHH:"TW",TSA:"TW",RMQ:"TW"};yr=4,ie=8,Mt=3,jo=2,Ko=1,Go=30*1e3,vt=new Map});function xr(e){let t=e.split(".");if(t.length!==4)return null;let n=0;for(let r of t){if(!/^\d{1,3}$/.test(r))return null;let o=Number(r);if(o>255)return null;n=n*256+o}return n>>>0}function ae(e){let t=xr(e);if(t===null)return!1;for(let[n,r]of Vo){let o=xr(n);if(o===null)continue;let s=r===0?0:4294967295<<32-r>>>0;if((t&s)===(o&s))return!0}return!1}function Ar(e){let t=[],n=new Set,r=l=>{let u=`${l.source}|${l.host}|${l.port}`;n.has(u)||(n.add(u),t.push(l))};for(let l of e.proxies??[])l.kind==="direct"?r({source:"proxy",host:l.host,port:l.port,label:`ProxyIP ${l.host}:${l.port}`,via:{kind:"direct",host:l.host,port:l.port}}):r({source:"proxy",host:l.host,port:l.port,label:`${l.kind.toUpperCase()} ${l.host}:${l.port}`,via:{kind:l.kind,host:l.host,port:l.port,username:l.username,password:l.password,serverName:l.serverName}});let s=ae(e.targetHost)||e.deprioritizeDirect===!0;r({source:"direct",host:e.targetHost,port:e.targetPort,label:`\u76F4\u8FDE ${e.targetHost}:${e.targetPort}`,deprioritized:s});let i=e.optimizedIps??[],a=i.filter(l=>!ae(l.ip)),c=i.filter(l=>ae(l.ip));for(let l of a)r({source:"optimized",host:l.ip,port:l.port,label:`\u4F18\u9009 ${l.ip}:${l.port}`});for(let l of c)r({source:"optimized",host:l.ip,port:l.port,label:`\u4F18\u9009 ${l.ip}:${l.port}\uFF08Cloudflare \u7F51\u6BB5\uFF0C\u53EF\u80FD\u4E0D\u53EF\u8FBE\uFF09`,deprioritized:!0});let f=e.relay??[];for(let l of f)r({source:"relay",host:l.ip,port:l.port,label:`\u53CD\u4EE3 ${l.label}`,deprioritized:!e.relayAsPrimary});return t.map((l,u)=>({candidate:l,index:u})).sort((l,u)=>{let p=+!!l.candidate.deprioritized-+!!u.candidate.deprioritized;return p!==0?p:l.index-u.index}).map(l=>l.candidate)}function Er(e){let t=e.filter(n=>!n.deprioritized);return{proxy:t.filter(n=>n.source==="proxy"),direct:t.filter(n=>n.source!=="proxy"),fallback:e.filter(n=>n.deprioritized)}}function Sr(e,t){let n=e instanceof Error?e.message:String(e);return/proxy request failed|cannot connect to the specified address|TCP Loop/i.test(n)?{kind:"blocked",message:n,candidate:t}:/timeout|超时|timed out|abort/i.test(n)?{kind:"timeout",message:n,candidate:t}:{kind:"other",message:n,candidate:t}}function Pr(e){switch(e.kind){case"blocked":return`\u51FA\u7AD9\u88AB Cloudflare \u62D2\u7EDD\uFF08${e.candidate}\uFF09\uFF1A${e.message}
18
+ \u5E38\u89C1\u539F\u56E0\uFF1A\u76EE\u6807\u5730\u5740\u5728 Cloudflare \u81EA\u5BB6\u7F51\u6BB5\uFF08Worker \u4E0D\u80FD\u4E3B\u52A8\u8FDE\u56DE CF \u81EA\u5DF1\u7684\u5165\u53E3\uFF09\u3002
19
+ \u2192 \u6362\u4E00\u4E2A\u7B2C\u4E09\u65B9 IP\uFF0C\u6216\u6539\u7528\u4EE3\u7406\u843D\u5730\u3002`;case"timeout":return`\u51FA\u7AD9\u8D85\u65F6\uFF08${e.candidate}\uFF09\uFF1A${e.message}
20
+ \u2192 \u8BE5\u5730\u5740\u5F53\u524D\u4E0D\u53EF\u8FBE\uFF0C\u53EF\u6362\u4E00\u6761\u5019\u9009\u6216\u542F\u7528\u4EE3\u7406\u843D\u5730\u3002`;default:return`\u51FA\u7AD9\u5931\u8D25\uFF08${e.candidate}\uFF09\uFF1A${e.message}`}}var Vo,Ft=k(()=>{"use strict";Vo=[["104.16.0.0",13],["104.24.0.0",14],["104.31.0.0",15],["172.64.0.0",13],["162.158.0.0",15],["188.114.96.0",20],["141.101.64.0",18],["108.162.192.0",18],["103.21.244.0",22],["103.22.200.0",22],["103.31.4.0",22],["131.0.72.0",22],["197.234.240.0",22],["198.41.128.0",17],["192.0.0.0",24],["192.0.2.0",24],["192.88.99.0",24],["199.27.128.0",21],["223.5.5.0",24],["1.0.0.0",24],["1.1.1.0",24]]});function Cr(e,t="direct"){let n=e.trim();if(!n)return null;let r=t,o=n,s=/^([a-z0-9+.-]+):\/\//i.exec(n);if(s){let h=s[1].toLowerCase();o=n.slice(s[0].length),h==="socks5"||h==="socks"||h==="socks5h"?r="socks5":h==="https"?r="https":h==="http"&&(r="http")}let i=o.lastIndexOf("@"),a={};if(i>=0){let h=o.slice(0,i);o=o.slice(i+1);let m=h.indexOf(":");m>=0?a={username:h.slice(0,m),password:h.slice(m+1)}:a={username:h}}let c,f=/#sni=([^/#]+)/i.exec(o);f&&(c=f[1].trim(),o=o.slice(0,f.index)+o.slice(f.index+f[0].length));let l=o.lastIndexOf(":");if(l<0)return null;let u=o.slice(0,l).replace(/^\[|\]$/g,""),p=Number(o.slice(l+1));return!u||!Number.isInteger(p)||p<=0||p>65535?null:(!c&&r==="https"&&!Yo(u)&&(c=u),{host:u,port:p,kind:r,...a,...c?{serverName:c}:{}})}function Yo(e){return/^\d{1,3}(\.\d{1,3}){3}$/.test(e)}function ye(e,t="direct"){let n=[];for(let r of e.split(/[\n,;]+/)){let o=r.trim();if(!o)continue;let s=Cr(o,t);s&&n.push(s)}return n}var Bt=k(()=>{"use strict"});async function Xo(){return Ht||(Ht=(async()=>(await import("cloudflare"+":sockets")).connect)()),await Ht}function Jo(e,t){if(!v(e))return null;let n=e.split(".").map(i=>Number(i)),r=(n[0]<<8|n[1]).toString(16),o=(n[2]<<8|n[3]).toString(16);return`${t.replace(/:+$/,"")}::${r}:${o}`}async function Ge(e,t,n,r,o){let i=(await Xo())({hostname:e,port:t},r?{secureTransport:r}:void 0),a=async(f,l)=>{let u,p=new Promise((h,m)=>{u=setTimeout(()=>m(new Error(`${l}\u8D85\u65F6\uFF1A${e}:${t}`)),n)});try{return await Promise.race([f,p])}finally{u&&clearTimeout(u)}},c;try{if(await a(i.opened,"\u8FDE\u63A5"),r==="starttls"){if(c=i.startTls?.(o?{expectedServerHostname:o}:void 0),!c)throw new Error("\u5F53\u524D\u8FD0\u884C\u65F6\u4E0D\u652F\u6301 startTls");return await a(c.opened,"TLS \u63E1\u624B"),c}return i}catch(f){try{await(c??i).close()}catch{}throw f}}async function Qo(e){let t=e.timeoutMs??jt;try{let n=await Ge(e.hostname,e.port,t);return{readable:n.readable,writable:n.writable,via:"direct",endpoint:`${e.hostname}:${e.port}`}}catch(n){if(e.nat64&&v(e.hostname)){let r=Jo(e.hostname,e.nat64);if(r){let o=await Ge(r,e.port,t);return{readable:o.readable,writable:o.writable,via:"nat64",endpoint:`${r}:${e.port}`}}}throw n}}async function _o(e,t){let n=e.timeoutMs??jt;if(t.kind==="direct"){let s=await Ge(t.host,t.port,n);return{readable:s.readable,writable:s.writable,via:"direct",endpoint:`${t.host}:${t.port}`}}let r=t.kind==="https"?"starttls":void 0,o=await Ge(t.host,t.port,n,r,t.kind==="https"?t.serverName:void 0);try{return t.kind==="http"||t.kind==="https"?{readable:await lr(o.readable,o.writable,e.hostname,e.port,{username:t.username,password:t.password}),writable:o.writable,via:t.kind,endpoint:`${t.host}:${t.port}`}:{readable:await ir(o.readable,o.writable,e.hostname,e.port,{username:t.username,password:t.password}),writable:o.writable,via:"socks5",endpoint:`${t.host}:${t.port}`}}catch(s){try{await o.close()}catch{}throw s}}async function zt(e,t){if(e.length===0)throw new Error("\u6CA1\u6709\u53EF\u7528\u7684\u51FA\u7AD9\u62E8\u53F7\u65B9\u5F0F");if(e.length===1||!t){let n=new Error("\u62E8\u53F7\u5931\u8D25");for(let r of e)try{return await r()}catch(o){n=o}throw n}return await new Promise((n,r)=>{let o=e.length,s=!1,i=[];for(let a of e)a().then(c=>{if(s){try{c.writable.getWriter().close()}catch{}return}s=!0,n(c)},c=>{i.push(c),o-=1,o===0&&!s&&(s=!0,r(i[0]??new Error("\u62E8\u53F7\u5931\u8D25")))})})}async function Tr(e,t){let n=[...e];if(!t)return n;try{let r=await ge(t),o=new Set(n.map(s=>`${s.ip}:${s.port}`));for(let s of r){let i=`${s.ip}:${s.port}`;o.has(i)||(o.add(i),n.push(s))}}catch{}return n}async function qo(e,t,n){if(e.length===0)return null;for(let r=0;r<e.length;r+=ie){let s=e.slice(r,r+ie).map(i=>t({source:"relay",host:i.ip,port:i.port,label:`\u53CD\u4EE3 ${i.label}`}));try{return await zt(s,n)}catch{}}return null}async function we(e){let t=e.proxies??[],n=e.concurrent??!0,r=e.budgetMs??Zo,o=Date.now()+r,s=[...e.optimizedIps??[]],i=!1;if(e.resolvePreferred)try{let S=await He(e.hostname,e.port,{deadline:o});if(S.length>0){i=!0;for(let U of S)s.push({ip:U.hostname,port:U.port})}}catch{}let a=ae(e.hostname),c=i&&s.length>0&&s.every(S=>ae(S.ip)),f=[...e.relay??[]],l=c||a;l&&e.relayPool&&(f=await Tr(f,{...e.relayPool,deadline:o}));let u=l?f.slice(0,ie):[],p=l?f.slice(ie):[],h=Ar({targetHost:e.hostname,targetPort:e.port,optimizedIps:s,proxies:t,deprioritizeDirect:a||c,relay:u,relayAsPrimary:u.length>0});if(h.length===0)throw new Error("\u6CA1\u6709\u53EF\u7528\u7684\u51FA\u7AD9\u62E8\u53F7\u65B9\u5F0F");let m=S=>async()=>{let U=o-Date.now();if(U<=0)throw new Error(`\u62E8\u53F7\u9884\u7B97\u5DF2\u7528\u5C3D\uFF08${r}ms\uFF09\uFF1A${e.hostname}:${e.port}`);let A=Math.max(200,Math.min(e.timeoutMs??jt,U)),E={...e,timeoutMs:A};try{return S.source==="proxy"&&S.via?await _o(E,{host:S.via.host,port:S.via.port,kind:S.via.kind,username:S.via.username,password:S.via.password,serverName:S.via.serverName}):await Qo({...E,hostname:S.host,port:S.port})}catch(B){let J=Sr(B,S.label);throw e.onFailure?.(J),B}},b=Er(h),{proxy:y,direct:d,fallback:g}=b;if(y.length>0){let S=y.map(m);try{return await zt(S,n)}catch(U){if(g.length===0)throw U;for(let A of g)try{return await m(A)()}catch{}throw U}}let P=d.map(m);try{return await zt(P,n)}catch(S){let U=p;U.length===0&&e.relayPool&&(U=await Tr([],{...e.relayPool,deadline:o}));let A=await qo(U,m,n);if(A)return A;if(g.length===0)throw S;for(let E of g)try{return await m(E)()}catch{}throw S}}var Ht,jt,Zo,Kt=k(()=>{"use strict";ar();cr();_();Ut();Ke();Ft();Bt();Ht=null;jt=8e3,Zo=15e3});var Or={};Ae(Or,{handleWebSocket:()=>Ve,recentDiagnostics:()=>ts,recordDiagnostics:()=>be,truncateCloseReason:()=>Ir});function Ir(e,t=123){let n=new TextEncoder;if(n.encode(e).length<=t)return e;let r=e.slice(0,t);for(;n.encode(r).length>t;)r=r.slice(0,-1);r=r.replace(/\uFFFD+$/,"");let o="\u2026";for(;r.length>0&&n.encode(r+o).length>t;)r=r.slice(0,-1);return r+o}function be(e,t,n){We.unshift({at:Date.now(),target:e,failures:t,summary:n}),We.length>Ur&&(We.length=Ur)}function ts(){return We}async function Ve(e,t,n,r,o,s){let[i,a]=Object.values(new WebSocketPair);try{a.accept({allowHalfOpen:!0})}catch{a.accept()}a.binaryType="arraybuffer";let c=new Uint8Array(0),f=!1,l=null,u=null,p=null,h=null,m=w=>{try{a.send(w)}catch{}},b=w=>{let x=new Uint8Array(2+w.byteLength);x[0]=0,x[1]=w.byteLength,x.set(w,2),m(x)},y=(w,x)=>{try{a.close(w,Ir(x))}catch{}},d=()=>{if(p&&(clearTimeout(p),p=null),g&&(clearTimeout(g),g=null),l)try{l.writable.close()}catch{}},g=null,P=new Set,S=0,U=async()=>{if(!l)return;let w=l.readable.getReader();g&&clearTimeout(g),g=setTimeout(()=>{g=null,!(A>0)&&(be(`${h.hostname}:${h.port}`,[],`\u76F4\u8FDE ${Nr}ms \u65E0\u4E0B\u884C\u6570\u636E\uFF0C\u6539\u8D70\u53CD\u4EE3\u5165\u53E3`),C())},Nr);try{for(;;){let{done:x,value:N}=await w.read();if(x)break;N&&N.byteLength>0&&(A+=N.byteLength,m(N))}}catch{}finally{try{w.releaseLock()}catch{}g&&(clearTimeout(g),g=null),y(1e3,"done")}},A=0,E=async w=>{if(u)try{await u.write(w)}catch{d()}},B=w=>{if(t==="vless"){let N=$n(w,n.uuid);return N?{command:N.header.command,port:N.header.port,hostname:N.header.hostname,headerLength:N.consumed}:null}let x=or(w,n.trojanPassword);return x?{command:x.header.command,port:x.header.port,hostname:x.header.hostname,headerLength:x.consumed}:null},J=async w=>{let x=B(c);if(!x){w||(p=setTimeout(()=>{p=null,J(!0).catch(G=>y(1011,String(G)))},ns));return}if(p&&(clearTimeout(p),p=null),f)return;f=!0,h=x;let N=t==="vless"?Qn:rr;if(x.command===N){y(1002,"UDP over WebSocket \u6682\u4E0D\u652F\u6301");return}b(new Uint8Array(0));let I=[],V=null;try{l=await we({hostname:x.hostname,port:x.port,proxies:r,timeoutMs:Rr,concurrent:n.concurrentDial,nat64:n.nat64||void 0,resolvePreferred:n.resolvePreferred,relayPool:{userEntries:n.relayPool||void 0,useBuiltin:n.useBuiltinRelay,colo:typeof e.cf?.colo=="string"?e.cf.colo:void 0},onFailure:G=>{I.push(G),s?.failures.push(G)}})}catch(G){V=G}if(!l){let G=I.length>0?I.map(D=>Pr(D)).join(`
21
+ `):`\u51FA\u7AD9\u8FDE\u63A5\u5931\u8D25\uFF1A${String(V)}`;be(`${x.hostname}:${x.port}`,I,G),y(1011,G);return}u=l.writable.getWriter();let xe=c.byteLength>x.headerLength?c.slice(x.headerLength):new Uint8Array(0);xe.byteLength>0&&await E(xe),c=new Uint8Array(0),o?.waitUntil(U())},C=async()=>{let w=h;if(!w){y(1011,"\u51FA\u7AD9\u65E0\u6570\u636E\uFF1A\u76EE\u6807\u672A\u89E3\u6790");return}if(S>=kr){y(1011,"\u51FA\u7AD9\u65E0\u6570\u636E\uFF1A\u76F4\u8FDE\u4E0E\u53CD\u4EE3\u5165\u53E3\u5747\u65E0\u54CD\u5E94");return}S++;let x=[];try{x=await ge({userEntries:n.relayPool||void 0,useBuiltin:n.useBuiltinRelay,colo:typeof e.cf?.colo=="string"?e.cf.colo:void 0})}catch{x=[]}let N=x.filter(I=>!P.has(`${I.ip}:${I.port}`));if(N.length===0){y(1011,"\u51FA\u7AD9\u65E0\u6570\u636E\uFF1A\u65E0\u53CD\u4EE3\u5165\u53E3\u53EF\u7528");return}for(let I of N.slice(0,kr)){if(P.add(`${I.ip}:${I.port}`),l)try{l.writable.close()}catch{}u=null,A=0;try{let V=await we({hostname:I.ip,port:I.port,timeoutMs:Rr,resolvePreferred:!1});if(!V)continue;l=V,u=V.writable.getWriter(),c.byteLength>0&&(await u.write(c),c=new Uint8Array(0)),be(`${w.hostname}:${w.port}`,[],`\u5DF2\u5207\u6362\u53CD\u4EE3\u5165\u53E3 ${I.ip}:${I.port}`),o?.waitUntil(U());return}catch(V){be(`${w.hostname}:${w.port}`,[],`\u53CD\u4EE3\u5165\u53E3 ${I.ip}:${I.port} \u5931\u8D25\uFF1A${String(V)}`)}}y(1011,"\u51FA\u7AD9\u65E0\u6570\u636E\uFF1A\u6240\u6709\u53CD\u4EE3\u5165\u53E3\u5747\u5931\u8D25")};a.addEventListener("message",w=>{(async()=>{let x=w.data,N=typeof x=="string"?new TextEncoder().encode(x):new Uint8Array(x);if(N.byteLength!==0){if(!f){if(c=Rt(c,N),c.byteLength>$o){y(1009,"\u63E1\u624B\u5934\u8D85\u8FC7 64KB");return}await J(!1);return}if(!u){if(c=Rt(c,N),c.byteLength>es){y(1009,"\u62E8\u53F7\u671F\u95F4\u6570\u636E\u8FC7\u591A");return}return}await E(N)}})()});let T=()=>{d()};a.addEventListener("close",T),a.addEventListener("error",T);try{return new Response(null,{status:101,webSocket:i})}catch(w){return console.error("[\u81EA\u7814\u6570\u636E\u9762] 101 \u54CD\u5E94\u6784\u9020\u5931\u8D25\uFF1A",w),new Response(null,{status:200})}}var Rr,Nr,kr,$o,es,We,Ur,ns,Gt=k(()=>{"use strict";Tt();sr();he();Kt();Ft();Ke();Rr=5e3,Nr=2500,kr=2,$o=64*1024,es=8*1024*1024;We=[],Ur=20;ns=80});var Dr={};Ae(Dr,{handleXhttp:()=>Wt,recentXhttpDiagnostics:()=>rs,recordXhttpDiagnostics:()=>vr});function vr(e,t,n){Ye.unshift({at:Date.now(),target:e,...t,summary:n}),Ye.length>20&&(Ye.length=20)}function rs(){return Ye}async function Wt(e,t,n){let r=e.body;if(!r)return new Response("\u7F3A\u5C11\u8BF7\u6C42\u4F53",{status:400});let o=new $(r),s=await qn(o,t.uuid);if(!s)return new Response("VLESS \u5934\u89E3\u6790\u5931\u8D25",{status:400});if(s.header.command!==Jn)return new Response("XHTTP \u6682\u4E0D\u652F\u6301 UDP",{status:400});let i=await we({hostname:s.header.hostname,port:s.header.port,proxies:n,nat64:t.nat64,concurrent:t.concurrentDial,resolvePreferred:t.resolvePreferred,relayPool:{userEntries:t.relayPool||void 0,useBuiltin:t.useBuiltinRelay},onFailure:m=>{vr(`${s.header.hostname}:${s.header.port}`,m,`XHTTP \u51FA\u7AD9\u5931\u8D25\uFF08${m.candidate}\uFF09\uFF1A${m.message}`)}}),{readable:a,writable:c}=new TransformStream;Et(s.payload,i.writable,void 0,!1),Et(i.readable,c);let f=s.header.addons;if(f.byteLength>255)return new Response("Addons \u957F\u5EA6\u8D85\u51FA VLESS \u534F\u8BAE\u4E0A\u9650",{status:400});let l=new Uint8Array(2+f.byteLength);l[0]=s.header.version,l[1]=f.byteLength,l.set(f,2);let u=!1,p=null,h=new ReadableStream({start(m){m.enqueue(l),u=!0},async pull(m){if(u){p||(p=a.getReader());try{let{done:b,value:y}=await p.read();if(b){m.close();return}y&&y.byteLength>0&&m.enqueue(y)}catch{try{m.close()}catch{}}}},cancel(m){a.cancel(m)}});return new Response(h,{status:200,headers:{"Content-Type":"text/event-stream","Cache-Control":"no-store","X-Accel-Buffering":"no"}})}var Ye,Vt=k(()=>{"use strict";he();Tt();St();Kt();Ye=[]});ue();pt();re();var bo=15*1024*1024,xo=2*1024*1024;async function Oe(e){let t=new URL(e.url);if(e.headers.get("Upgrade")?.toLowerCase()==="websocket"){let c=new WebSocketPair,[f,l]=Object.values(c);return l.accept(),l.addEventListener("message",u=>{let p=typeof u.data=="string"?u.data:"";if(p==="PING"||p==="ping"){l.send(JSON.stringify({pong:!0,colo:e.cf?.colo??"UNK",clientIp:e.headers.get("CF-Connecting-IP")??""}));try{l.close(1e3,"Probe complete")}catch{}}}),new Response(null,{status:101,webSocket:f})}let r=Number.parseInt(t.searchParams.get("bytes")??"",10),o=Number.isFinite(r)&&r>0?Math.min(r,bo):xo,s=new Uint8Array(64*1024);for(let c=0;c<s.length;c++)s[c]=97;let i=0,a=new ReadableStream({pull(c){if(i>=o){c.close();return}let f=Math.min(s.byteLength,o-i);c.enqueue(s.subarray(0,f)),i+=f}});return new Response(a,{status:200,headers:{"Content-Type":"application/octet-stream","Cache-Control":"no-store","Access-Control-Allow-Origin":"*","X-Probe-Bytes":String(o),"X-Probe-Nonce":Y(4)}})}var Tn="H4sIAAAAAAAC/919a1cbR7bod/+KTvsGS0NLagkkhITkw/PEZ2zHyziZzDJec1tSCTqWunW6WxgGuAu/wQZDJo7jZ2wSO/HYE3BeNsZg1jo/ZaKWxCf+wl27qh/VUksIJ3PuY2atuOmux65d+713lXreG/iw/9SfTwwyY1o+lzzQA/8wOUEaTbB/HfP1H2fhHRIyyQM9eaQJTHpMUFSkJdiilvVFWSZgfpCEPEqw4yI6V5AVjWXSsqQhSUuw58SMNpbIoHExjXz4D44RJVEThZxPTQs5lAiSYTRRy6Fk/9AJMSdrTGV1pbJ8ZefB1+UH2z0B8u1Aj6pN5lAypsiyNuXzpUZjzEE+FeRDfBz+8qlyVosxB4OhoNDREff50oKSgb8jwWxHxvjbF4I36VBXGDrlRAnFmIOhro5QOB33+TQ0ASOgKEpns3GfL1/UEAzR3SHwaWiQUgQJXnRmo6QFfoEH7UqFySv5bIw52NGZ6ejujvt85wRFijEHs6lUNtQZ9/mQosCf0a5gVzDu8ylCRiyqMSbYWZiY+cNUSp7wqeJfRWk0lpKVDFJ8KXliJiVnJqfygjIqSjE+nhLSZ0cVuShlYtBbyPlG4V8kaZ5giOcLE0wE/1fQmBD/PuML8u9zB4OpkBAOM/z73LigeABdXiYcft8bT8s5WYmRl7B8bzwrS5ovK+TF3GTMJxQKOeRTJ1UN5bm+nCidPSakh/GfQ7KkccNoVEbMR0e4E6I0OiRIo8xwP3dMTCsy7AbzZ+EDJHKqIKk+FSliNp4XJd8YEkfHtFiQ58fHyGyq+FcUwygQpmiAMHa9M/5zilCYygsThIJiwWCIL0zETYwwQlGT4wUhkwG8hSKFCSYYBTTAgEC+SPFrcmEqI6qFnDAZy+bQRFzIiaOST9RQXo2lkaQhJT4qFDAQxsC+lKxpcj6G54I+PgAjBv+Z8efkUXmKQNMZKkzEjTXhZ2PnjK0Nwitz6lFFzMQLOSGNnFNTewo0KSjUnnaEM2iUoxFC/+ELeY0tO0dA6OJ5GqldhYl4DmkaUnxqQUgDhvzhwgRZAaPmhVxuym7eTcGaysnps3EZOmmTMX807JgmzPO14wYd6GbGgtTAsCHWhtGtCiZhdxQmGJ7hHQSJ+c9LLydEgIcpkTIFuxILzqSKmiZLU+miospKrCCLBKd4G2KSLKHaLYEdNemlG8gFdp3aAzI7kRcNWYQA1AEA1WFGUwRJFTVRlmL+YFhl8N9ZWclz+E8DqQbgsTF5HClTVpsYfsoJGvqzxxcsTHiNdv6CIuYFZXLqt1GLOdromKxq9Fh42oKgIEkzkRcsTDCqnBMzDBkEprMGyAjSKFLoEQy5FooYODuYTQthIWyuMyOqQiqHMlMWUYXjxqZJsuYTcjn5HMrEbUTA3s2IUqGocSrKobTGAf4FBQkG7wV5/n164w7yKNjVwbtsWbMF7UkeQXOL6/bckJOiNIYUUYvLRQ3rFBvwWFZOF1UDfOMPcxHkzyljdhfBZ61WQXjmcaRoYlrI0WK0G+QLTGrJVX8kXM8yOSGFclNO3q5t5MZ7lpDlmQhwXlZEucyUU0Jiye0H2TblEHSWQIW/fBrKF4CoYaHFvKTGFFRAguYB6e3LihqXF6W8MOEJdfKFCS6YVbzeGT/wYFN6j/I2vUNji9yJPeDd186TL+QPr0UClOyyVoxxAfMxY6EpJ45otIYpedpM7USp4Rh/RtYM+u6yVUtXnWYJO2nfqTLxYP4xUdKmWpCoNQTURW872V1NSKlODWrAXaMaaxEVNTszhpR+F4FDD+AX0po4jn6jEIw7mI4CZMavaoLmQseh/dJxMEzRMQzK+GHfnfIS/4+P7ks8hSjxBH8YO0SmOLvXdttNx6dq7ARai0V43txKTS7EgIvPyUrGl1KQcDaG/wsCe8avyOfq6QKLUBdarzWjFPmcH0mZqU+LqiZmJ32G34AH8iEpM+PHK5hqySjAH/xIUaac2seflyV5ihbXRdEH77AVwQ0PHZMl2XcSjRZzgsIdQ1JO5vplSZVzgspZ7VwmzMq5zNR+FYvBWXjjeKfuygQ7O3gybFIt5rGurzFqrH3nTbOF1kuWCD+Y6k5Hs9l4TlQ1H3abiB1UVMFeI7oI6yjHZLGY7xxKnRU1XwZpgphTfXlBOYsUa39duqRQVlbQlLlx7EgonIoyDOuiS0jP03IBSWea9kcMw9ZMQ0wkc1+zWfLZhz0jEyedBkoMc46gHoi3gVCxRmCcWg13AT4pKMifzjv0z0E+GuSDWZpfM4I6hlq2JzD3wmKyOfmcbyKGfZdzY6KGsB2NYgUFYQ5xZbea7aWldMhJCwC/BtaWw1KyhF5OKKgoZj7U07Y2xmmZKbA/fJiNYzmU1axFdIF3ZePYlPWuaNbGGnIvZTBTAASxQirIhv2samL67GQcNsXJLsTPx7ohR1CGXURDiXVEeQrRBM37ZFUYetSifVHCOpJYTpazWZhgonWKubu727kZQatJYwU36pezWTEtCjkHvuSzNbrKCC1EIqRTRs4LouTiNdf0IhELs1dekIpCjsPPOTltPgoZp6iF4EXtQCSSYQ4kFESrq/WcVsetl2l1vB448Kqco5LoCYxaUORRBanqlLGRUadrZlr4bhi3dntMzGSQtAfKzYmSYo1ZbMcn3o8T5uGbOejd/J7GBuUO4gEZf4eKPXCaYnHsxhYNkwbNNpU9+3Jl8B9OEVFr92GgmIxo7tnB7myKRzx57ZfP1pKm8cHWueQLUhSgaVlQtSmLkbPiBMrEFTIVYRrLRGzsfLeyWJBNOH5AtzC4wFo8jIDtcRcM1ehQ0z3l464+ebQw4dhSf0iNG/rZh8aRpKlE2f7VJ0oZNBELgyVlxq46OolkAdz41TH5nOUMB2sdX6MRIJdaqK8e0YTcHVr6PTEPkVgBDNqcDFqtJoZG5KNljIyP4SjaTFrOID8RdVMuXGdh06kADFxG9hRzqlxU0mjqna3d+ugc/u5iUofrYjC0wDEh8YND4iIno2nHmOQlnzW7Mf702NnW4ol0oLJ5JKnTxQJ3Wn+O6RkcXjC0O94766uqpH1UzNgyaOJOO85CAdXDIQntETNITe/tWDjA77QdCMyfEJelPYqO+rDFjD89JhZq3Mwa9xKQ2oW95TGxYJl+YTNK46YWmlNbPZHXLKrGAq81oV0NXQDO73R2DSIKoXjDeE89fcz4QQXX84symhI8oXCQC3YHuY4I5+8IO5dCtHSw0wrEZVAkKuylHeqtyCbBAZoDCZy0qDLnxQHBSCReHyWkgDP8NMPY96UEpaVQgwvPOV3WGX9BzOUsKgEVgdfsSiX1MiTTnHRqrO0DPQGSoDrQEzCSZsBSyQM9GXGcETMJVigUWCadE1Q1wcICGCK4zSwbUsyPmlxgjX7GG4jWs8n+Ez2BjDhOPkGvYIOM2VgweaCnkOzPycVMNicoiKm+fV3ZvF16801l+Yr+dlW/crn8aJ35r1dM5f7D6vZX5RtPSpu3d2bnewIFWIA1iwkAibizSfMTCcaYX3EsmcWLTGnSSZRVkDrGJvW5V+VbL3oCpPEevY7Ko3JRY5M7s7P61Y3KnTf61hdU1wBBUfJAjyRYUEFciAyAn+wZMoIm+DQhlWDBoILEpIV5Ej9ik+VvL1S/m6sHzu5akOUcm6xeu1C58Lr84El5Y7lZa7WYYpPV1a93bl9u1kyUUkBkbFK//KTy/M7O5cXK1mqzDnJBE/PiXwHi+//Q778w96lxDyEzLkhplGGTO89vVza+o7EoCbB7KkqDYqTQ6CsIo8hCpc/CmpMKwCrD5BpK9qgFwRogI2tAGvAqWd1erq4sVK69LM+e7wmMhWroSBOMLYenotonT9hEVU92rUyob32uzy8SzJe/ulSeWzamLZitIQzKJkvr14E/bq+RpjtXF/TVr3buXC5t3q3cfFieW67cvURvtj53RV+/+OssvPl1doH+9Ovsor60Vn1xsfzFz7/OXiBMQ6/SlmRksSY+h8mH37rk0vp8+fsnpfVr5fnrrotlsChKsLToDrHJA0E/U57/XN+cZXpStZSd3N1cKC/M79yf1a+/3Zmd/3V2QV+9Xb71mlAcc+QEE2DIs/7wob68yASY8vx1/dpTq8Gvs4v/nL35z9mbOxe3SuuL+vW3pdcPS5t3q1ef6deeVt7cYUJ8e5Df3bzXk1KSB0J+Rn+8qM+9xNCYrJNkdlZ+2bm6ULl7Sb//Qn8wq69t6pef6Ktfl+deVZ6v7W7O9ecEdYwJMMOiNAopcibAjIcUYXJ3c94cu8PPlC/+VP32fPnez/r2c2tvdzcf2hio4agkU331WWl9tvyPFUssluefl5eWdjcXKm8+L391HxazfU+//OTX2YX6xf86e+GAQ4IGDE5rzHOmErBYj0idfZPEzux8+frfnVvqxgUHSuvzle8WDRJfWqtefVa5+UPlzSV9eY4QACCmduP/eeVvzq2HFzXrxwis3L20s7Khbyzpy3P665f6jTc7VzFa9G8vAPrW50vrzyzq2Jmd391csAkEsyHMH+KZ0vqzWijamSB+T0NiEG5p+0F17TyhodL6Ymnzbml9o/L3DXtHaPbEZq0hhpS0z4y8AI5xosxC/NhZNtmDLW1GmywgeIPSZ1PyBOkMe/Wh2ZkJJJkaiHsCeDjn7GBMs8nSmxsMpZ9Jx8rWZ+XVX3buLpXvb1gyCZPWBaoteceUb6/pl59Wli8ygjSZFlRtd3Nh58Gd8uz56spTffty5dLL6vbV8v2HsK3zs6U3Twh3k+H1pVtYctVresMXqKFByH3UvMJRUwtnyfIXL3auLu1uzgX/Oft5iOd3N+ft9RMcYlFo4KtfLoKgImiVivkUUlgmL0oJNsgyeWEiwYZ4HgQZKuBXAYqr3P5psr8kSPZOuztAusLeOqmu2caSNvrG5xaqy49e/Tp7obp9p7Rxz/i69Kxy82n5wZPqd9+Uv1rWr26UNm9Xf34Km1tntzFHTuxuLgwfP8IEmA9kVWNKbxYrl16Wb6+Vth5Bjz/JEKhnyND/yn0NNtxXguS9dzXYaFcbQ6BfuVzZWrWw6jZ7qijmNFEi26WyjIKEjCzlJl3Ipm4eU1k6/Rrenh+k0+rd0ut5C4Tdzbny2lJ1ZaG0PguCCr/f3bxX+eJO5e8bTIIpbW1Xbj41AIf2FM7MtD6FtqNiimVwYdCYnMsgJcGms340IeQLOeRPy/m2g0E+nkKqRr2WEJb+5mjvwBckDPxOfHGMdAW+qFMDDVmDqNsaj4PoVUDo/dmd57dLm7f1y3OVje92N+fbGcNmwzPoK8/1K3cqdy+VH6xU7q3+OnuBiPjyly9Lm3fLS8uVxxulrUf65TlLi5MZ9sUPtcRPTU1vevnByu7m3R6Il5k9SdiMTQIK4H2SCTANGsQqz9f0pW9abXdQf3y1/NNTo3ljWkpnR3szmRpCCvpD/g5/Z6yzs+Pg8H/0Y0o6HYrwkVhnF8/HYsEz+NPR3k/cqYnCjSJjh4A2QXDEg5AFTiQMa4KG6na6/MOj3c27PFN+sGKYK+/sXJ6SR0dz6CjMxSbLD59U7l9v0cHszyFBOVJQ2WR5/TLQDYax/MMj2j+y12wtCVwU24YixppTYkC4AUcWmtPSgXqs6Fcu66uvm6OUiNSkhbi6vT9gNT1SUE+hCY094KCA6vbt8o8r5fvztLlL2I4h5jqjz70Ag5b6/uvs4s7KLxYngQ0xd6ty7+fyjSf6/afV7TvgP608Zw+YqLBLkpggBLnjDJ1yZxw5d8ZOqzN2GAWHn9gDTios1KDFgfkY00nKBtnkgX8Rax7YD2uCtUlQU769VuNf6Pe+0lfADyGYN+3W9Rul9Ws7D762/Akia36dXQTtvv5Yv/dVaeO6uU+l9cfV2ctgP5t+CDF56xyPeq5tHrHJyULGYKqdq4vlWy+qa2/0pVsUa7TMr0aZojX4sDBu8mtp+4H+/e0mjLeXBlPkcwySMm4MCAH0vdZ5QkEkqkEiUztfX3INATVZyAnsnZF1gH+zcbNy82nDdew3dIK9NwIV00gmFMgazEiCiYma2Ls1JhWCoXr/SVAkOxYpKJIVi3QB3c6wwwLwX3gsSc6gU/AXfo1jnj2akuzRxpIHewLaGH4yfVHjT+LR21/vb5Tntu2vb15Wtx9af+7MPtQ3viV/BmDkgGZEVjUcWu0JaEaINYChqieg/bvfdrht39v3z7srjKuJ03KIJuiPsskDQFGpZGnrEdidr36os+9BdJS27pfWN5hTR4cZcAtK6zeYD06dOoG9A/ADZ5fBLJ29Y3jO+uoCeNZ/QqlhOX0WaUyQDzLlpZXy/PXyo5WdZwu7mwsH9KVn5fvzlfsPy99/oy+tVW4+NT3NeXCoiQAzNEVd6KP8wyNbCI111MhpXJDP41oJZ8qLNeOFN9b0ry/2BMY69oEoQ7Deeboze7e6fZWI9KRUmDClN9FX5evz+tIt0GBfPtq5P2uI2dX56jeXQQJvXSnf/0f5/sbO/dnqt+ch+nAcsqCfqkww2g64JlIddGj1m8sQSFp7oF+e0+de6Ku3K1ufldavV7e2QOUIzJiCsgl2TNMKaiwQAAb5VPXLymjgr2O+tBTIyOckkLQsownKKJyk+UsqJ0hnwV/JAUNBcRRI1oY9ewJC8sDu5px+bwtsh6U1iCPUT1zI50VFkRXwHQJ7z0Y3hxmY8vxbgiB94fLu5rxrFAX0Su02Y3XM7i1J04LEJvXNWf27643i2e42nFyY7M9D9BzHDfXPtkpvHlN9G8jMlCJmRpFlmz4rfzNb/uW6PvfCUEUrT4BM7i/q12z71JSDpBTOMulkYtEZEd4kgUBfulD+4gVsy9IaiWntvLldXX2sz27qr34sL8zrj7/TH98tf/GifPGyfuWX6ouL+pMtbMibAzkNR7M0rblB6fNp8lkkuamKJOHW0pvHlfkFSxW4RGMK2ikYo8ZpIH6sPnentL5IYnNkPFiZxUF4C4g1Qxz55raaZaqRLBVIlPtPKxde61ffQKiZIgYQJ1++NGKC37/VlwwjtDz7HVkQBCN4Rp+7svO3h2DXfjFHiLR8/bK+fZG00R/fKv90SX/xA1kLRHBvPiX+JESWLy8azfAGWkH8PWMRgPOCK8ZL2w8qX9wpP1gpf/FiL4wXakMk40KuiBJsMOwWLdkHbvU3G9XVVSbI4xgcoATDU315TX98l9iK1ZfXdr7YJpKv+vPTnatLOFp6fefO4n7QoOIohDvtWXpn5+rV8qNXeyJkGI/VACcdgAKCFN6ODL4bXkI8ICbMA2b0x8/0F0v68kWIRc+90J9skTAbvH/8HRjYq38vrc/u3H5ZXv2l8v28/nau9PryflAEJTiuCDJ9jBqc1ApXAzsnZEX7d0UuFlqI1EBOW2aNA5lGXwuTnZ0dLINjOSgDkZvOzg6Iadx4Wl1cdkQVfsskIT7cgeNC8PB7DRk1h4z+fkN2mUN2/V5DdkeMIbsjv8+QUbxjgSQDD/aQBum1Svrbl3dW3pTWb1gZNOK6gyuK6bC0Plu9+jNQ/vK3IPKp+ED5y0flL+Z+nb1A9BlQzH4YIA2hC0VEagMVtaWvvmQCDDgFCxtEfeqP7xIN2q8pucA/F24zREUQZenkF1KGY7JJvzkZy+SLOU0E6QR2ZoKNWLixi6Gx1Y77t47JA6X1RRBsCUa/DHKz/Mv16toXgJ3Z+dL69/ryDX3pmaEGsGNTXd4iwRII+ztXS0zrnpQCUgxHP6FDaXulfH4NsgJXn7la6/rni/rGTbBl7z+rrl3R556TjqDSsNQFufX189L61/rmRaIUjTmMbOhD7BiYIJBd1pfm8AoW9asb5QdPgBJe/FC+ds2S3mCvzL1gwjz/v4I8zzP6lUWycGfQYV9RZLmgHZf7hVwOKm8wkft8kuxLG28wNTwj2VeAzDA/KCHVyqbhiFKSZBr15RskM1i+ds1Y95U7+r2vmD9+jD2mC5CyXHpWvvhT+fo2xPXfbGHXae7L6gp4QpCumXvllu43oxLJPYIskKTIYPOVxFhIiq/GiK2LgRADdJ9elZU9NEd3OlauKDMOsLFJff1b0866S4ofaqwzffkGbRWaZUeAloJiBcvSecP8VtOChJddXXvVyOBz4qKgoD3BJUdoDIhNc24XTBnsrVJ7a/iJqwv2zhP3oYEvW337uX75SXnlyp5LOi4T63m/K3PzKprEtEwnoXrjlb50i84P9p44wmAQGH3pWvnBxZ07y9W1n8u3b7TiWbTiZ3ezOG5Ntrhy91J9mJhkMsFvJlEKlfnjx8ywJivCKMI1AWBErbwmwBlm+MaNeiYkoippVgpsPapu365+e75y8+nOxaeVrR/15c/0tc3dzTni5qezBah882VQISdP2rkR4OUL3xBnHpJFt9f0pW9L67OVN5csEA5U176tfnd+Z+V15d4qc3Kwd+DYIEMWZyOUtIYNfP6oeu2CLe1aRRtVbFProMOhIX/a2kbsphcUOSvmUEAoiMSvU/d03FsbBjx6s97GYOe5e/qbDcIxULNz5W/WSyvXaX21ymkwPoBJelLJ3jTW7UyAqd90JsAMZkQN9h737fQz1Z+/1ZdeVX+5VN6AEUjWmrwkxRsQTl2+YbiUpuwiINRi3V12AZn+9LR8aWl38y4hVhKIh3lMdi7fXqu8uVNPwSTSRaLxNK2Bjia0UFqHcLy+bOR7gSZnQQsfKG1dwUGYJ5DtNT+TTqDUMcr0pVv665c79644Iin18p1iU/NwSp3MixC1hnNNPaIlivoEHI4X3cK3OXnUlllH5dG64rN3iJLiYsf9x7dJ4d3nb8s3nrhXJ5WvXdPXXusbN0mcuPLjbchymHarvviTvrQGhRSkzOmLF7Ap156WZ8+T/SvffK2vLrgU65Fw/8ovOw++1l/8ADbAvZ/Lt164KfMaI7ZPUFGkc3dzDheYmYVmx/+dCTDH0VmZFJ01dOFMA8gkXVmSjb0opsjIjlIFd/sBV3am5cIk3c2IgDUyGxovyKydOyaOyXl5d3Puz73HjpLKL6vusfLm0ruuCg+/70WRXvtd056FG2Z94O7m3H8Mf3icCfqDofbfb60wPLZn97las1/r622W98IG0B4BV6MkexjYljCDkxf3BGC/6Ssw3+cXmSCPk/4YwbWlwI3SSmox9Ttmlf678kZWXff+65dxITgJIddjqXF9lkHjHx8dHB5mPvroyIBJw1RsLZ0d/agoZlyju3TNJfhfjUWHMdMpRf5UkBh97Url0Xn3yUiT32c6vDDfn4aZ6qs1/e0l9wn/pJ4QtLGaCQPjOaw7W17TXrOQVm4zacaCW5jqE5ygazbNJ2Aeus0yAR9amoSwtVmPNmfVo5EieWcekRJ7TjiGiymz7tEBR+ntdf3bC4xhedP1afuBbXmx8h3OlVhqndR3L98o335beQxhCSiy+/7LZvAdF/KoBjrjKAwOEeeQNKqNJVjQr4HWdaMRIMdyjMTGaoJS5bUlsO8gJ7owT8IKpJ2+fImQNrEAzVrzxnrFlOT4lGDje1SMk0yukV9nUAvOADYMuJDwolpM1ceD6wd5txDxb4aGBI5dwNk7lvw7zB1tMnf0Xz13V5O5u/61c3dHGs/dNIz9m+eONiK/PePdmggmQ2dnB1P9+vnO3+b0tdfl2e/01z+W51+Uv3wJ8cvrb0vr1/THV8G1IwyKfQd8dsRRSA8VFKTFzsWtyr2fd2bvGlLSGT11BokYXOL1Vt9c0q/cKW1cMUoP6srHrGrV0vaD8sJ5/cZDU6wsQFBz6UJp/YYRhH99u/zTF83quFxlVWn9ur70mXW6Rd/6ujx73im0/m+RQYbw/lhQPgb1/Ce10eYTi6bdjn//PlRYM/8nRKc2BwHr7N97etNIcp+afN2L+K0zbEQjkd0Hv3Zh3qjNJMrp7iVCEg799GbLJuz/egXhHBeUQ3niXf3ypr4KzFW+P4srFhaI+/gxUnCcJ4+dSMsrZnYubpVvrpUXzjeawEAoHrz05jLzCTjV5DQq6bi7ec/0UK3BVfOYF1QjrD6GfAocAnpUfft57Twm9vAEJAgIYYLFVfD8N2f15TXGNGOx2b27OWeUarz6kXx3sv2PKzWI/MMfSHz5D3+AU6o3XkB+x9yL3c0FKzIBB99wQ8jGvL5dWqdGJSEOggsDDpgIT0/kl/EJz2gdj6q++qm6fXWvUk8XF/H3Y95BCfyl5gSsL0PpmBPNvysLESCa8q8BA43hOo5qIYHjVgF6xHT0jKil2zHe3+5O2md49+9PXt2oPL9TWr9Rvval/uL8zs3z7+BVnlDkiUkwc6Fy3zj2wEAsIwZFDVaBEzP8Yf8fh8O0pV57IoGMVGhwKiHIR3nHuYM9vQgyI0OOsu9uzlFANXIX5PRZNdwMgKbei6lwMS0FcJnlMDW9EdFn9PnFyuZs9ZcXYFKACYIrKJmDqiQmmPLCVX31bnXtfOn1t07P64AT1g/AAwSMNQA3ykd5pjx3izHnhfsoYgVBVf+tAN1opywGVhSev+7THgevjBUf7z0V6TQW5o7a44IGLpYD1EhnLJvtTsViraFVX1osvfkGHMClb2hqsyr58bljy7KCBHqt91p/DOYkygmTuFbbFY34EEx+0qdAMwfKwCbd6xiME0mWG1teuFrZeO2OpyER7sotKDhh5DznNabI4MoGmkf/3MR6hBbrxucWbxuNU2mT5sK2X5bSRQWuxmwga3uI0DF0a/8JBsrilz6rPP9qZ/Zh+fpTnOKZO9V/4i/9Hx7v/+jkycHjp/4ycKT3qF3RcWAP2ewa9uT/O1Z/EqlybhydUFAWKQqVdnLFARa8cBcBVtfMgPwBQ053Wn7D7ubcycHhD49+PPiXEycHhwZPnhwc+H8BD33keCVmq+Y4wIrXOPdIcXZ15enu5txHw4N/6fvoyNFTR47/5eTg0d4/t7h2R6K1zrCp3FstP7paeX6ncuG1cZp27gWdJCfHqollZUTAwJK8uFXd/gpyz/R5W0h/viQw45p4XDxVebNU+cc/4NaFW6/JquCcPBTeV7f+oS99BtWEeMnVlaeltw+qv9yqPH4LFTZmJ1JbvLt5DyroLz+xCvvJROCsrS7ol5+CxYi766sXiZ23T1QQNtSXb1ArhestaGIk6DJPId/S335JVBUuVnpBiPTUJ6fM884bn5MjmaDS7n21MzvL9AZ6e3t7jWRmS/hkeskJdcZCrLVPNeedyVaBh01MZ8JKO3cWyw8aYeT/KGMMpsc+lFrgCGaw/wNGv/ZIXwOjYefucvXLpcr9h/rqV0BGLbIBttpclhptdPLQUFEwN6FA/c5TOjAMgNnlAz6UHgMl2NCQGkyPfYDTWU4NVjdAS9FgAGrg+PDu5tyA/AGUhZgQ2WWK2MRsBs0A1Eg4gDHNolCowx+G/wcykur7zyICK75Oxxb24iqiYgHU6urfbU1/7RqOG/Xn4AbID1AuJzOk1IBsqcFbxm4vkN2GgpbV7Z0vV42ilM+fWQfHjWODcGZQ1RRZGrWNitLb7+BeKfwSojwXt/Rr98Axxy6zvvSs+vPD6s/fQN4cJ5D0K3eq2/eIR4prbX4gbjWmPxA45sBQc1jvYAf9wY52252vfA/xI3JNTnn+u+rKAkg6C7b1RTI4FOuvPSEAELbVt7cqXzxp8djIfyO7Eqe0NY6tcWBr2fNfCyj2bluD0+nktmRI/KZcMjjBvZZ7SrxgctFUcy943/dI3a88NaroiF9gHq6Zb3S/0yKceHn9sHpxq3LzKTkxS9Sykex/9WPlzVL12yuVe7cqbx5YZ3L0+xvlO1BWAt03rkDt68K8VRiIr7ohwOAz0XC5TXV7S7/2qEn1iBmjxd0Y0KZwbhqnk3oHBnpPHCG5JOsCCeLOMSSP3cyb7s1kegtiA6FHOTIBsaD6tQltf761AW//8McEUPzgBFRBajGnwR2/rUHbr463AK096l4A7xm5KN+fLW3dIIfyyAFSZgAc8rljfQF1d3OBh9s51hdxIWADzTKQU12vMHFeXLInNsmFFuRMK3Os95O/HO09NXi8/88geVuE5JgwcVTQkJSe/D0AsoKTcOZn/RqeeK41KOBI5H6Q8ttibCdRXoajekS4EKos//Co5Shb3TUOo6J93Nm+D5e6gHGfwsm8dtEoizUuK6yNstVEOsgdjc7yCTr8gwE7IagqXP1u4rpg/e2802HtFSlrpAdtFNVpFfVHMZ6SNXcvNjpuYoH8gYvxZNdi1VQ71h0uh0uOjbgnfrTmU9OKWNCSnmxRwvvq8U6xRRUxqqaIaY2NjwsKk0vATwdkxdGYVMzlOHKnIHnGta/kMZ3PxFiWs06jxE6fMX6RB2XgGU7bwsuZuDkXo3mQd0pBWlGRmIycLuaRpPlHkTaYQ/DYN3kk40HeGat92oM42TsFMEkJzWOsxRuX/CDM+o3fw0Oc5MfrPo4zorgRA7dAs+0e+TDLIEVhYyzr5VSknRLzSC5q9PLrO7MzXCjK8xQgRQKIAbqckKenp2Y42Z9WUAZJ8MN7cIGDkEc+WRFhuznZT67WVBMfpj5Fac0vqKo4KnmmWANs36nJAmJjcH9pTkwLME3gU1WW2Bm7L8zi5bJIS49hAPzaGJJs2CWCGiERGIHC5JHAeHAkgInnfwT8GlIB3XEx65H8ZAsTiUQnH2xre0/wamNAvnmPl5PQOWYQjil72JFipCvUO1LsinT1jRTDQ+HwSDESCkZGip1Dwd6RYrRvYGCkGB4YCo0Uo0P9XdA+OMR64wZeJD8swFMLpuidErOe9yS/fHZ6WvTLZxOJxHtBAwR7ehFuupWV6WkWZhqC0fs7QyPFcHdHcKQYHQiFGbbdXIo1pzjj9acFQBA9HxlbZERJ1cCkkrPM8KSkCRN4qsOONYc7+2FVg92dI8Vo92AHrKqbbzRvTJzxzlCUkakhUbMc2MsJCYvE0woSNGRQuYfNiOOsNy63tXkEivZkLyfU0bVQKCAp0z8m5jIewctJfjWtyLncKbmQMJ8/wNXxNkQqxWTDmiJKox50+DDLev0KwtLOEzjd1pNkD50JjHIW0izqnmLb2BjbJuQLcZZje+A5p8FjEh5H4fEQeyjGtv1nUcbvD8H7gx3dcXbmtHyGxk3e453SPPiGXi9Z6FFR1eAHDDzmnT9eTvMYmoRuoqC8PI5cWlmC3OvHv/PloaY7SqarH61uwlqIaqezxxz0kL1FCRcIcMkFJ1ufsMjGHPce8k6lPRYhR4e6O0aK4WAkPFIM9/VHRopdUT7Icu/xJh3PADXIju0HduyLQL+uUNTJlCE+FAERQwkuoj68XNHDgiwIjAeJJGC5qTzSxuRMjD3x4fAploMazRjU7fpVTBxidtIzZerDGALqruFf75QLcKyXO+rxchMeL4cXWiMzgH9C3UOst549JUCN5M8jVRVGEeCAqx/f/u5YJYhyB/tNeLxT1JJVpKqiDLvvXAIiIgj5hSJ8gN97gzvFp/IeawNgNeMeF3hxK3rO8Zo5sWBwmzJnyl3E9YJeqxsaUwmiUTHj2EG4Ey4AvwXrPrqlehPIfp6ePn2GO+XBdF5zf59BsUBZ4WA0PFLsGooMMmw78hsNjR8+UdtZZqTYOQi6INw1MAQykh9gAo6maTGj2A2Z/iEGxgsHgWr7wixMb9/CZ87sQf50UdXkvAESAOv1fyqLkud/Hvifrsh3YoTYJY3QAd8wLuCBG/aYj14u5WkV/WMeL3eEFiuwdVgGyInTp9mRYndXJAQ6omuIxg7LwV1h0MEPuVMozjrDQfNoKBoaKXbxfd1085Hi0BAfHSlGwl38SDHSERk0Bx4a4rtZDvnBfCJYmp5GxsZMTzeaZAiG7xoKwpBdHb3Agx1DMAzcBj89zX50/I8saRrpCvUDJB08VuvRkWI3z3czR05Aa/O+M7yvka5I0OjUFeqMkq7QahwpwGVnzsRB4Vk3Tnv9oiQh5YNTx44mZH9eKDh4nrDZIdpKhWAOm6TfnGWTh9pVj3SaP+NtP0RsVvr7uPk9eMbbzhrf8X/ZGYOOWFp8D8PeaR6rYtukQ+QvFsXM9DSL6dQusba/a0ZxMpGLVEujNtpueQ6/qBurppVmvaRa2qXJdsMJ8x3Vzi4dttup5jtnO1zC62gFb6anrULeOCFl0zLwGwWE6vQ0rlz1+tVCTtQ8gdPciHqmPeD1Z8WchhRPnyznkCB5472KIkzCD/1oMjhT/qysDAoQohZyOY9l8uDg8DB2B2SlN5fzHMIu2Wln1eKZQ17OYSf6jSrZhOzHv/PyYdYjksV4kwl+xhsnhhYN/ceCIgoSXgANfbwB+MQUJaXMpv18+kzcwASsKi3nEokES8rdgflqPqRk2LC2Ng/pcwr/zqGsaPDtnNXD8drsIvgLRXXMQ8b2nVNZL+cyCClMb30c0t5rjkXDalTSN1mFOZTR0stJCcFAz2EhdtoG9cwMITKq1NBrbZdkbRe1tmSC55x9SHlRk27GUhw9Ld506WVCbXdwFFPZfZAfUR/eAw/E0aEWMrM9fg8Oizk+3AVq85eQoWWDEUd0fO4tiM4WELtztOhXx6kWECazP2dy6vS0OTUVt7Jb5K2XjoYktORohl/ZjcwSIrtNgbyhBQop8qHkCX5BtbBLa+xGY+Y7qh2pabHbSPA39d2uLbHbKOY7qp0jZ05vV1FF9Dd6h+k6EXv0NM4zUd+mp826EZMycBrSnuS995AfpcfsrzhvZ4+IyBsYpz57Z/cakFRnpwFJpVZI1YY4p05bHwZEIWfhraaWgsaJUvORRoqVtKlZH8UltJZq0BB/g3aOS9udLelPZlNLndU2JB/MZsaFyPXNyAdo5rz53Mar4/30dIi3LdLaptTb6ekgz53weMGCts2IEx7v1OnT1lQs51wu2EjGbegcvTp4b9wGzdHLOXPGVJoOW5QoZjCplLSPbUdgBEGUQKY8VQ1f1OthZQnIBYEdZOLG4aOcov1WxzUuWAMa/hDlQlgaEVFW3KEeuLgRXB7iN7BJ024Nh3p5MDu7BrD9P0B8UmK99gRIr+Qh07eix6TndNiIsm0jOmcFi0/2Q+m/t/0QMQBlP9gR3naWYamPrDWzwxq0sTLqCOPVuxWUr/xRI1fZiIy6OcqWlctYzohkOyOS5YykPTKOcpFIWucQjqr1haMs8T5SEJVz9ZtJWKvWe5bojR9zOqeSoQZc3CX8KUEcDeI1DniQlzvWsqdqTzpgk6+HGtDrV3NiGnl4LsjzXuduK1y/iS2WnETNJNl2T397EBv+Wga/caQKNGGUgc1XjF9Qs6iBemHdZkQGcBwwNtqKBW87G2PbFT9YVUA0xmQs/mw4TD7W6/jkUfw5U826fVQLCGWcn+CQLE2I4C3Zt7t6nSayh8WnZ51O1PT0IQM3TFrOwcrwtUvOC59GipEIuJiR8CBPu5s2EIcMq/n/w71xw7F11LkFFEtuKO58BxRjjeW8RNhbG84LB7uCDNvuMaI109O813a048QVsYfBtwl7ORGsLk3Q1LY244HEyfEuxkXTVHeEkvHlwywnUAsVa7bY2mAsuUNYjipeC5NwxQjEsJsESb0xoVGM1ZYMx2zJgPzwS3AFImqk2giBaEt/mq7gp+YIcYiWyB+Z6Oti2HaRYBEoAdOVgwyk6WmPlDjkdkFa483EwxzyclJ7wg2KkWK4o69vpNgd7B9gfIdgH2s2JoMyxQKIAd5rg8XVNbMUoMsrYz/b2jyNoYgMYYXRF8EsVz8EwUKA9VJQ4Hhg7Q9mOTjBIEAzaHnYfLCCQvDTrR76BwnqCJyOLXV1BYfAQhgYhPhWL4SF+yM8WAjBXrZdsAnfJpaUZbR46mM209OmUm1rM5+sKI7XrykiBHON2DuhONayVvohfWUkt8IAF4So8fF+3KTfDNR39UJoLswHu83MVzjUAZmocB8/UuyOdoUdYTpD2hiXh5gGpcyR1+T6jdq35jUV1nvTSCIy2grwkURiOxtQi6kA244ksHE+OnmkX84XZAnySMjrPr/Uzh42rjhKkS+uAFHN0vhDAwCpdqrxCcN6lhSdxAKBYKjLz/t5fzAW7A6Hulgum4AMsZ33PWJtLGTeelOygqkGsldI4eSEe2IW+QVo6fHOcEFIx8ZJIvQs4ITE3LkpyKkKuRjyk4cmJpmZnHRrkoYfsTAhkEnonLrcuCmdR6KQ1SEUbmRqBvuGmHG23SOZkdLpafYw6zIszu5jraYkWOv3n1m3MPg7gAgkH+0HEAc6+zAl841Bj3Rhyg/1Bi2m6RgcAnaBJXUO8n0m5XdFop0QxCam/2AnvBnqNMeJDgwEzSB2K+slP+7K0tbkpEUt7tFEZyjRvN3zTMzwgw55OTmBVUy962PSQltb0yim5DcLGT7E/gTRWdZuCN4pgTAHOGc4fGb8DQmEKVIj4SGzk5vsLBlmiyoOSgOPCdoYhGY8QY48ipInyPPccVwLZA1hBWm809PBsNfLkWuCqe683T+EOp39jXuA7SE6eN7r5cDCiqHDiLyO4egvVc0hc5J1kWSMDETdLGl5nZR39amH8n8Ih4KoNrQInc+oy2LYg5yj8+mfeiCNXteaExOTHi+nJE6zUmGC8U2al2f4IPsuIeXfwFRXNfaMueEK2aVDPh+MwbCH2qX2Q+whLye0tQnvJRJSW5vdpCBIKAdtBNJGbmtD9HdyPTh7qB2R72CaWJiZnn5P9lqtWcftm6yXs9/ja4zBioEHLye6mAB2Y/vKV8vuoTQ9B7FfuzFcpQ3NNLlAvzauloYv5BE+kgEY2mQrWOwHSJYTOT9eMISQ8UNcPmzUOcDtk07Bc84jg28Ya9jASokbCbHgUN9IsYMHDRwe4nHVRX8fnZjCXwdotU3LHqKznLdG1kLEstx7QWp9fR63CIBBOWRza5PmMy4OtEXpuEfCQA5X8Hg545mWaR+Q2gSrOoQyvFhi+mN0x/vqqmcsZpjCZzKBJTDnGiyODPqxGZfKBRvlWjJnUmCs3rwwU81mjNAnFlQWCydYRsEUNcggmhmTpRzKWCGsV1dsYNQxxVqpenKLtkj16lqwUC9YGn3GBWlgCcrAjX75bF2tEY6q2eVGjZUiToFbBUKsN57xWIGbcDjUCd5Ad6hRVhVs9UjUNDE7B4f6iIoFJ1D2fyqnjhghA46VQTqcNN+6RGBk71TG0wTWzkGswCmlTSxt2QrakOoJLmPXpYS7idLviOD+vdjQ7XYqd2LTOCz7wX6wcnoHMUNGoL4l2tlvmg3dXTzPUL/1QYwBAxqvya9wtaJpD+Aq/ATLv++wAk4Ck2Xb2jxZuItTRR6vYVbif2Enx5GkDePgAiZDBH+rhzH+Eu4GM9a/Xi4L3iruDq4rXPqJ09ijiOXq2Q5TZEFQVOSR/XDjnEEDoXBfhMFGnkQSrCPF7gggEsofzIqxUXBYLYMKuxU42477abIm5KwgACm3wIYTWBFuMFr3V7YGJtg1cpaR/AWkwImJhFVj3NbmabgPVvN29n3IBprkczhjhx29MQP6tjaMC7eFk3UDBUJZiYTa2QA84m6NFkgK1ltbHickJD+SNGUSqiSNPekKdgBuBb+Is1heeAT5eBiCSuQxZrwGK/Qwy5yG9/Dczp4hVaKYFRsACAvZD5E4REFftN/UYEQgmPEgySUeZLUhoiYCbnQ4GrHseKIzIyFi2fdGa4o5TLUJPjdrSJfGrIevbifVT67LxpLSuW5Nmdxj7ZEQQBvp6B/Cer53pNgdDpqCoN0mJlMCg2/eNRg2m0X7BodgN0jJFxaGU3Xj0uEFkoaIhHsHWLMXXo4sYfATdE2RLWY+JorZqtP2uiw/nRPTZ1lu0LUMsb75WTQJPyxE4UuCKuOzaBLy7oNwdIltaxvE2IaiZiGlNpu2vtxX8hN/nAhGFRd6QVH5afPX6s+QLI9AOogJAYqsezVNEVNFDXlYsx27RzWHDV0aKlAVJHGOCKJLYkpIa+I4YjklkUgIsMJ3LBdh/eYtHqx3z0mNuCOn+EXIceK7Pth2Eab3iIB0uFl3eho/4l8C97a1jXkwfZC9N27ybLYN42bbo/KoXNRa2jFHKiZH+tWblllREnK5yfqKQy932plodGQXnSnF+owi5Is8kiuYY4IEyu6E10KA9St8rS3LKneuK/EzC3BGlMMjUqAmsUDbbsQLnqkv0Kmtf8yJKQWCla0k54z6xZg042JBCUZNLl2FFx6Eylw7BUeXfVuxSmfaq6461ljSqGeK3qxYw6Q4Z29irEE6nLO3NtYgFc45EtwxyuN3S4hDAtzLUYluqoNLUhzS4F4MhBU9gbMeQiYTq6uCmeFqqhwjXdgqHcRF9HUpzhmb6MwfjmxCc2M0gZqXBO2HRmvFT14ovFulGhVecqVngguv7ZLHRz1TEJ+O1ceyrRCQo8gw5laKaDYlVYYxtxrE2tGsZvWFiGZTq8gw1qAQ0WxoVRnGGlQiUg0h9RRzLUQ0GlFViJxZdhiTjMJDjirli51uXGp22C4wi1k1Mw3qyw47qsoczWsLxA6bpWQxFoSpUybZm8rR9TGxZhVnHFUgE2tSaYbZhxwN6OodAAch2DlASrPd2YdiCONEX2v8MOqZIuVoMbdiNY4UosXcytS4TE6l5IWzSA2sVs4uQnO2q69YM5vjYrS6xo6qNWhKhMvQQD/OzfSZSaR94Mg6VN0ylowyuJhrmRxHKuBibvVxJi9Y9W+xBjVyZkNcBBdzKZAzG1gVcLEGVXJmw5rqt1izYjmurvIt1rBOzuZcszSutqYstlcdGofSppipKajjjIK5mGtBHTW1SzUdKZuLuRXVmThx1svFGlfXuTF1fXmcC0PXVcZhcu3uHcBZoN6ulgnV+hX11ogUZz+VPD53E8VD93VD8GaQx1Kkq3evVCztl1pp2SEwiynrCwcCLaNrYPDo4KlB1sX+GTfPAJEF2lC0dvoHDAI7VYicRrNYqK9esv2gtjbJrwjncPGkSP40PWkrVW3+eruZzhQ484tp8dDhYjHJHzYCNmy76PTGu9mYFcshSMYvW1wj2ehT2GMhP9y9T1Mbw4zPWeDQR0MvCGeF66aiFykcxh43+NpdXXwfXlYkDCGc6EBXF8sJ09PI46WcI/t3zFuDGTkpAgomzBx6tA8HQTsGIjVyej/jNyTSxp6BIpyLNSAJ90o+Cn6bZXG0hiYzqoAHHx/jkKdlojcXnxaahh0+sISE8TO9+6Qb10RM3POeND0dsH5gyzgvLHnhXAPdzTWr4uWO49C8RSDWb7C1BlvBog860EykB8klh/t4ljjAVg6VM3OhHJXU5Grykvvyg7Gdz3IFWEdTR7nwGwIZ7slq2ovA0aHmk8et2uCahDZOZDTrixNSjiAH/FxJa9sEhahjnt8SxDlt/UTLGbaFFddBcNyjeSS34BUMyXq9Vtadzhwct457Glwc6YeqhkgXjsLiBAmd+DDqGfCByHBfX7fjWK4kjIujggY/4p0TCylZUDJtbS4v/ecUUUMgVQ43/epB9fqTkjQ0XCTOGw5F4OT9QEcnOXPIuh6S/BAX7cY+dNye8KFde9foJLp5JwxQklkOz8lGcLggqyIMBFduTKAMa32QC0Ja1CbhlhLOGhmkruO4uuyFDpgaPN44xIuttmgCpfvlfF6QMh6WbCW3XyyQiDDpRbd3hG/syi46Um7YPaFBstczzjWQOkdzDTMfk1POM16PNw7XoZD7Mw70BMwfuxnT8rnk/wZaQYKc9rEAAA==";var ve=null;function Ao(e){let t=atob(e),n=new Uint8Array(new ArrayBuffer(t.length));for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}async function Rn(){if(ve!==null)return ve;let e=Ao(Tn),t=new Response(e).body;if(!t)throw new Error("\u9762\u677F\u6570\u636E\u635F\u574F");let n=t.pipeThrough(new DecompressionStream("gzip"));return ve=await new Response(n).text(),ve}function dt(e){let t=e===200?"Welcome":e===404?"Not Found":"Service Unavailable",n=`<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${t}</title><style>body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f7f8fa;color:#333;font-family:-apple-system,"Segoe UI","PingFang SC",sans-serif}.c{text-align:center}h1{font-size:22px;font-weight:600;margin:0 0 10px}p{color:#888;font-size:14px;margin:0}</style></head><body><div class="c"><h1>${t}</h1><p>This site is up and running.</p></div></body></html>`;return new Response(n,{status:e,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}function se(e,t){return new Response(JSON.stringify({ok:!1,error:e}),{status:t,headers:{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}})}Me();Me();var Ct=null;async function No(){return Ct||(Ct=await Promise.resolve().then(()=>(Wn(),Gn))),Ct}async function ko(e,t,n,r){let o=await Le(n,r),s=t.pathname.slice(5).split("/")[0]??"";if(!(s===o.uuid||s===o.trojanPassword||t.searchParams.get("token")===o.uuid))return se("\u8BA2\u9605\u4EE4\u724C\u65E0\u6548",403);let a=t.searchParams.get("target")??t.searchParams.get("format"),c=a?At(a):Kn(e.headers.get("User-Agent"))??At(null),f=await n.get(Q)??"",l=await Ie(o,f),u=await n.get($t)??"",p=me(o.subDomain||r.DATA_HOST||t.hostname),h={nodes:l.nodes,groups:l.groups,config:o,domain:p,port:443,ports:Sn(o),protocol:o.subProtocol,transport:o.subTransport,routeProfile:u},m=Cn(c,h);return new Response(m.body,{status:200,headers:{"Content-Type":m.contentType,"Cache-Control":"no-store","Content-Disposition":`inline; filename="${m.fileName}"`,"Profile-Title":ut(o.subName),"Subscription-Userinfo":""}})}async function Vn(e,t){let n=new URL(e.url),r=bt(t);if(e.method==="OPTIONS")return new Response(null,{status:204,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization","Access-Control-Max-Age":"86400"}});if(n.pathname==="/__edge_probe")return Oe(e);if(n.pathname.startsWith("/api/")){let{handleApi:s}=await No(),i=await s(e,n,{store:r,env:t,config:await Le(r,t),auth:await xt(r,t),onConfigChanged:jn});if(i)return i}if(n.pathname==="/sub"||n.pathname.startsWith("/sub/"))return await ko(e,n,r,t);let o=await xt(r,t);return n.pathname===o.panelPath||n.pathname===`${o.panelPath}/`?new Response(await Rn(),{status:200,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","X-Content-Type-Options":"nosniff","Referrer-Policy":"no-referrer"}}):null}async function Yn(e){let t=bt(e);return await Le(t,e)}Gt();Vt();Bt();var Yt="4144233-aaf28587",Lr="/__cfp_version";function Mr(){return new Response(JSON.stringify({build:Yt,ts:Date.now()}),{status:200,headers:{"Content-Type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"}})}function Xt(e){let t=[];return t.push(...ye(e.proxyIp,"direct")),t.push(...ye(e.socks5,"socks5")),t.push(...ye(e.httpProxy,"http")),t}async function Fr(e,t,n){let r=new URL(e.url);if(r.pathname==="/__edge_probe")return Oe(e);if(r.pathname===Lr||r.pathname==="/__version")return Mr();if(r.pathname==="/__diag"){let{recentDiagnostics:i}=await Promise.resolve().then(()=>(Gt(),Or)),{recentXhttpDiagnostics:a}=await Promise.resolve().then(()=>(Vt(),Dr));return new Response(JSON.stringify({ok:!0,impl:"self",build:Yt,recent:i(),xhttp:a()},null,2),{status:200,headers:{"Content-Type":"application/json; charset=utf-8"}})}if(r.pathname==="/region"&&e.method==="GET"){let{coloToCountry:i,rankRegions:a}=await Promise.resolve().then(()=>(Ke(),br)),c=e.cf?.colo??"",f=c?i(c):"";return new Response(JSON.stringify({ok:!0,colo:c,region:f,relayPreference:f?a(f):[],timestamp:new Date().toISOString()},null,2),{status:200,headers:{"Content-Type":"application/json; charset=utf-8"}})}let o=await Yn(t),s=e.headers.get("Upgrade")?.toLowerCase();return r.pathname===o.wsPath?s!=="websocket"?se("\u8BE5\u8DEF\u5F84\u9700\u8981 WebSocket \u5347\u7EA7",400):await Ve(e,"vless",o,Xt(o),n):o.enableTrojan&&r.pathname===o.trojanPath?s!=="websocket"?se("\u8BE5\u8DEF\u5F84\u9700\u8981 WebSocket \u5347\u7EA7",400):await Ve(e,"trojan",o,Xt(o),n):o.enableXhttp&&r.pathname===o.xhttpPath?e.method!=="POST"?se("XHTTP \u9700\u8981 POST \u8BF7\u6C42",405):await Wt(e,o,Xt(o)):null}var ji={async fetch(e,t,n){try{return await Vn(e,t)??await Fr(e,t,n)??dt(200)}catch{return dt(500)}}};export{ji as default};