UNPKG

hikvision-isapi-client

Version:

Enhanced TypeScript version of hikvision-isapi-client with modern features, type safety, and video decoding

1,024 lines (946 loc) 157 kB
"use strict";var ue=Object.create;var B=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var fe=(o,t)=>{for(var e in t)B(o,e,{get:t[e],enumerable:!0})},ee=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of de(t))!pe.call(o,i)&&i!==e&&B(o,i,{get:()=>t[i],enumerable:!(r=le(t,i))||r.enumerable});return o};var C=(o,t,e)=>(e=o!=null?ue(ce(o)):{},ee(t||!o||!o.__esModule?B(e,"default",{value:o,enumerable:!0}):e,o)),me=o=>ee(B({},"__esModule",{value:!0}),o);var Me={};fe(Me,{ApiError:()=>m,AuthenticationError:()=>O,AxiosHttpClient:()=>w,Base:()=>b,Camera:()=>I,ConnectionError:()=>A,ConsoleLogger:()=>E,DefaultConfigValidator:()=>R,DeviceNotFoundError:()=>Y,ErrorHandler:()=>g,HikvisionError:()=>_,NoOpLogger:()=>W,Nvr:()=>x,TimeoutError:()=>k,ValidationError:()=>M,XmlHandler:()=>u,default:()=>be,formatDate:()=>v,generateUUID:()=>L,isBrowser:()=>D,sleep:()=>q});module.exports=me(Me);var N=C(require("axios"));var y=class{static sessionParams(t){let e=t.SessionLoginCap;return{sessionId:e.sessionID,challenge:e.challenge,iterations:e.iterations,isIrreversible:e.isIrreversible,salt:e.salt||""}}static deviceInfo(t){let e=t.DeviceInfo;return{name:e.deviceName,id:e.deviceID,model:e.model,serialNo:e.serialNumber,mac:e.macAddress,firmwareVersion:e.firmwareVersion,firmwareReleaseDate:e.firmwareVersion,encoderVersion:e.encoderVersion,encoderReleaseDate:e.encoderReleasedDate,deviceType:e.deviceType,code:e.telecontrolID}}static channel(t){return{id:t.id,name:t.name,addressType:t.sourceInputPortDescriptor.addressingFormatType,address:t.sourceInputPortDescriptor.ipAddress,protocol:t.sourceInputPortDescriptor.proxyProtocol,managePort:t.sourceInputPortDescriptor.managePortNo,inputPort:t.sourceInputPortDescriptor.srcInputPort,userName:t.sourceInputPortDescriptor.userName,streamType:t.sourceInputPortDescriptor.streamType,deviceId:t.sourceInputPortDescriptor.deviceID,enableAnr:t.enableAnr,enableTiming:t.enableTiming}}static channelStatus(t){return{id:t.id,ip:t.sourceInputPortDescriptor.ipAddress,sourceChannel:t.sourceInputPortDescriptor.srcInputPort,online:t.online}}static fetchChannels(t){let e=t.InputProxyChannelList.InputProxyChannel;return e?Array.isArray(e)?e.map(r=>this.channel(r)):[this.channel(e)]:[]}static getChannelStatus(t){let e=t.InputProxyChannelStatusList.InputProxyChannelStatus;return e?Array.isArray(e)?e.map(r=>this.channelStatus(r)):[this.channelStatus(e)]:[]}static user(t){return{id:t.id,userName:t.userName,type:t.userLevel}}static fetchUsers(t){let e=t.UserList.User;return e?Array.isArray(e)?e.map(r=>this.user(r)):[this.user(e)]:[]}static timeStatus(t){return{mode:t.Time.timeMode,time:new Date(t.Time.localTime),timeZoneOffset:-480}}static hdd(t){return{id:t.id,name:t.hddName,path:t.hddPath,type:t.hddType,status:t.status,capacity:parseInt(t.capacity),freeSpace:parseInt(t.freeSpace),property:t.property}}static nas(t){return{id:t.id,addressingFormatType:t.addressingFormatType,ipAddress:t.ipAddress,port:t.portNo,type:t.nasType,path:t.path,status:t.status,capacity:parseInt(t.capacity),freeSpace:parseInt(t.freeSpace),property:t.property}}static getStorages(t){let e=[],r=[],i=t.storage.hddList.hdd,n=t.storage.nasList.nas;return i&&(Array.isArray(i)?e.push(...i.map(a=>this.hdd(a))):e.push(this.hdd(i))),n&&(Array.isArray(n)?r.push(...n.map(a=>this.nas(a))):r.push(this.nas(n))),{hdd:e,nas:r,mode:t.storage.workMode}}static getDailyRecordStatus(t,e){return e.trackDailyDistribution.dayList.day.map(r=>({day:new Date(t.getFullYear(),t.getMonth(),parseInt(r.dayOfMonth)),hasRecord:r.record,recordType:r.recordType}))}static searchRecord(t){return{startTime:new Date(t.timeSpan.startTime.replace(/[TZ]/g," ")),endDate:new Date(t.timeSpan.endTime.replace(/[TZ]/g," ")),sourceId:t.sourceID,trackId:t.trackID,playbackUrl:t.mediaSegmentDescriptor.playbackURI}}static searchRecords(t){let e=t.CMSearchResult.matchList&&t.CMSearchResult.matchList.searchMatchItem,r=[];return e&&(Array.isArray(e)?r=e.map(i=>this.searchRecord(i)):r=[this.searchRecord(e)]),{total:t.CMSearchResult.numOfMatches,hasMore:t.CMSearchResult.responseStatusStrg==="MORE",list:r}}},H=class{static deviceInfo(t){return{DeviceInfo:{deviceName:t.name,deviceID:t.id,model:t.model,serialNumber:t.serialNo,macAddress:t.mac,firmwareVersion:t.firmwareVersion,firmwareReleasedDate:t.firmwareReleaseDate,encoderVersion:t.encoderVersion,encoderReleasedDate:t.encoderReleaseDate,deviceType:t.deviceType,telecontrolID:t.code}}}};var z=require("perf_hooks"),V=C(require("crypto")),te=require("timers");function v(o,t="yyyy-MM-dd hh:mm:ss"){let e={"M+":o.getMonth()+1,"d+":o.getDate(),"h+":o.getHours(),"m+":o.getMinutes(),"s+":o.getSeconds(),"q+":Math.floor((o.getMonth()+3)/3),S:o.getMilliseconds()},r=t.match(/(y+)/);if(r){let i=r[1],a=o.getFullYear().toString().substring(4-i.length);t=t.replace(i,a)}for(let[i,n]of Object.entries(e)){let a=new RegExp(`(${i})`),s=t.match(a);if(s){let l=s[1],d=l.length===1?n.toString():n.toString().padStart(2,"0");t=t.replace(l,d)}}return t}function L(){if(typeof V.default<"u"&&V.default.randomUUID)return V.default.randomUUID();let o=new Date().getTime(),t=typeof z.performance<"u"&&z.performance.now&&z.performance.now()*1e3||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let r=Math.random()*16;return o>0?(r=(o+r)%16|0,o=Math.floor(o/16)):(r=(t+r)%16|0,t=Math.floor(t/16)),(e==="x"?r:r&3|8).toString(16)})}function q(o){return new Promise(t=>{(0,te.setTimeout)(()=>{t()},o)})}function D(){return typeof window<"u"}function p(o,t){let e=(65535&o)+(65535&t);return(o>>16)+(t>>16)+(e>>16)<<16|65535&e}function S(o,t){return o>>>t|o<<32-t}function he(o){let t="";for(let e=0;e<4*o.length;e++)t+="0123456789abcdef".charAt(o[e>>2]>>8*(3-e%4)+4&15)+"0123456789abcdef".charAt(o[e>>2]>>8*(3-e%4)&15);return t}function ye(o,t){let e,r,i,n,a,s,l,d,h,f,X,Q,se=[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],c=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],T=Array(64);for(o[t>>5]|=128<<24-t%32,o[15+(t+64>>9<<4)]=t,h=0;h<o.length;h+=16){for(e=c[0],r=c[1],i=c[2],n=c[3],a=c[4],s=c[5],l=c[6],d=c[7],f=0;f<64;f++)T[f]=f<16?o[f+h]:p(p(p(S(T[f-2],17)^S(T[f-2],19)^T[f-2]>>>10,T[f-7]),S(T[f-15],7)^S(T[f-15],18)^T[f-15]>>>3),T[f-16]),X=p(p(p(p(d,S(a,6)^S(a,11)^S(a,25)),a&s^~a&l),se[f]),T[f]),Q=p(S(e,2)^S(e,13)^S(e,22),e&r^e&i^r&i),d=l,l=s,s=a,a=p(n,X),n=i,i=r,r=e,e=p(X,Q);c[0]=p(e,c[0]),c[1]=p(r,c[1]),c[2]=p(i,c[2]),c[3]=p(n,c[3]),c[4]=p(a,c[4]),c[5]=p(s,c[5]),c[6]=p(l,c[6]),c[7]=p(d,c[7])}return c}function ge(o){let t=[];for(let e=0;e<8*o.length;e+=8)t[e>>5]|=(255&o.charCodeAt(e/8))<<24-e%32;return t}function _e(o){o=o.replace(/\r\n/g,` `);let t="";for(let e=0;e<o.length;e++){let r=o.charCodeAt(e);r<128?t+=String.fromCharCode(r):(r>127&&r<2048?t+=String.fromCharCode(r>>6|192):(t+=String.fromCharCode(r>>12|224),t+=String.fromCharCode(r>>6&63|128)),t+=String.fromCharCode(63&r|128))}return t}function P(o){let t=ye(ge(o=_e(o)),8*o.length);return he(t)}var Z=C(require("xml2js")),U=require("xml2js/lib/processors"),u=class{static async parser(t){return await this._parser.parseStringPromise(t)}static build(t){return this._builder.buildObject(t)}};u._parser=new Z.default.Parser({attrkey:"attr",charkey:"value",explicitArray:!1,attrValueProcessors:[U.parseNumbers,U.parseBooleans],valueProcessors:[U.parseNumbers,U.parseBooleans]}),u._builder=new Z.default.Builder({headless:!0,renderOpts:{pretty:!1}});var re=C(require("axios"));var _=class extends Error{constructor(t,e){super(t),this.name=this.constructor.name,this._cause=e,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){var t;return{name:this.name,message:this.message,code:this.code,stack:this.stack,cause:(t=this._cause)==null?void 0:t.message}}},A=class extends _{constructor(e,r){super(`Connection failed: ${e}`,r);this.code="CONNECTION_ERROR"}},O=class extends _{constructor(e,r){super(`Authentication failed: ${e}`,r);this.code="AUTHENTICATION_ERROR"}},M=class extends _{constructor(e,r){super(`Validation failed: ${e}`,r);this.code="VALIDATION_ERROR"}},m=class extends _{constructor(e,r,i,n){super(`API request failed: ${e}`,n);this._statusCode=r;this._responseData=i;this.code="API_ERROR"}},k=class extends _{constructor(e,r,i){super(`Operation timed out after ${r}ms: ${e}`,i);this.timeoutMs=r;this.code="TIMEOUT_ERROR"}},Y=class extends _{constructor(e,r){super(`Device not found: ${e}`,r);this.code="DEVICE_NOT_FOUND"}};var ne=require("timers"),g=class o{static async withErrorHandling(t,e){try{return await t()}catch(r){throw o.transformError(r,e)}}static transformError(t,e){return t instanceof _?t:re.default.isAxiosError(t)?o.handleAxiosError(t,e):t instanceof Error&&t.message.includes("timeout")?new k(`Operation timed out in ${e}`,1e4,t):t instanceof Error?new A(`Unexpected error in ${e}: ${t.message}`,t):new A(`Unknown error in ${e}`,t instanceof Error?t:void 0)}static handleAxiosError(t,e){var l,d;let{response:r,request:i,message:n}=t;if(!r&&i)return new A(`Network error in ${e}: ${n}`,t);if(!r&&!i)return new A(`Request setup error in ${e}: ${n}`,t);let a=r==null?void 0:r.status,s=r==null?void 0:r.statusText;return a===401||a===403?new O(`${s} in ${e}`,t):new m(`HTTP ${a} ${s} in ${e}`,a,(d=(l=r==null?void 0:r.data)==null?void 0:l.ResponseStatus)==null?void 0:d.subStatusCode,t)}static logError(t,e){let r={timestamp:new Date().toISOString(),context:e,error:t.toJSON()};console.error("Hikvision API Error:",JSON.stringify(r,null,2))}static isRecoverable(t){switch(t.code){case"CONNECTION_ERROR":return!0;case"AUTHENTICATION_ERROR":return!1;case"VALIDATION_ERROR":return!1;case"API_ERROR":return t instanceof m&&t._statusCode!==void 0&&t._statusCode>=500;case"DEVICE_ERROR":return!0;case"CONFIGURATION_ERROR":return!1;default:return!1}}static async withRetry(t,e,r=3,i=1e3){let n;for(let a=1;a<=r;a++)try{return await o.withErrorHandling(t,e)}catch(s){if(n=s,!o.isRecoverable(n)||a===r)throw n;await new Promise(l=>(0,ne.setTimeout)(l,i*a))}throw n||new Error("Unknown error occurred during retry")}};var b=class{constructor(t,e,r,i){this.httpClient=e;this.logger=r;this.configValidator=i;this.session="";let n=this.configValidator.validate(t,this.getConfigSchema());this.ip=n.ip,this.port=n.port??80,this.user=n.user,this.password=n.password,this.useProxy=!!n.proxy,this.version=n.version??1,this.userPassword=n.userPassword??"",this.wsPort=7681,this.logger.info("Base class initialized",{ip:this.ip,port:this.port,user:this.user,version:this.version,useProxy:this.useProxy})}get url(){return`http://${this.ip}:${this.port}`}get headers(){return this.useProxy?{proxy:this.url,Cookie:this.version===2?this.session:`WebSession=${this.session}`}:{Cookie:this.version===2?this.session:`WebSession=${this.session}`}}getConfigSchema(){return{required:["ip","user","password"],optional:["port","timeout","proxy","version","userPassword"],validators:{ip:t=>/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/.test(t),port:t=>t>0&&t<=65535,user:t=>t.length>0,password:t=>t.length>0}}}getSession(){return this.session}async getSessionParams(){let t=await this.httpClient.get(`/ISAPI/Security/sessionLogin/capabilities?username=${this.user}`,{headers:this.headers}),e=await u.parser(t.data);return y.sessionParams(e)}async deviceInfo(){let t=await this.httpClient.get("/ISAPI/System/deviceInfo",{headers:this.headers}),e=await u.parser(t.data);return y.deviceInfo(e)}async updateDeviceInfo(t){let e=await this.httpClient.put("ISAPI/System/deviceInfo",u.build(H.deviceInfo(t)),{headers:this.headers});await u.parser(e.data)}async getTime(){let t=await this.httpClient.get("ISAPI/System/time",{headers:this.headers}),e=await u.parser(t.data);return y.timeStatus(e)}async setTime(t){await this.httpClient.put("/ISAPI/System/time",u.build({Time:{timeMode:"manual",localTime:v(t.time,"yyyy-MM-ddThh:mm:ss"),timeZone:"CST-8:00:00"}}),{headers:this.headers})}async addUser(t){return g.withErrorHandling(async()=>{let e;try{e=(await this.httpClient.post("/ISAPI/Security/users",u.build({User:{id:t.id,userName:t.userName,loginPassword:this.password,password:t.password??this.userPassword,userLevel:"Operator"}}),{headers:this.headers})).data}catch(i){if(N.default.isAxiosError(i)&&i.response)e=i.response.data;else throw i}let r=await u.parser(e);if(r.ResponseStatus.statusCode!=="1")throw new m(r.ResponseStatus.subStatusCode||"Failed to add user",void 0,r.ResponseStatus.subStatusCode)},"addUser")}async updateUser(t){return g.withErrorHandling(async()=>{let e;try{e=(await this.httpClient.put(`/ISAPI/Security/users/${t.id}`,u.build({User:{id:t.id,userName:t.userName,loginPassword:this.password,password:t.password??this.userPassword,userLevel:t.type}}),{headers:this.headers})).data}catch(i){if(N.default.isAxiosError(i)&&i.response)e=i.response.data;else throw i}let r=await u.parser(e);if(r.ResponseStatus.statusCode!=="1")throw new m(r.ResponseStatus.subStatusCode||"Failed to update user",void 0,r.ResponseStatus.subStatusCode)},"updateUser")}async deleteUser(t){return g.withErrorHandling(async()=>{let e=typeof t=="number"?t:0;if(typeof t=="string"){let a=(await this.fetchUsers()).find(s=>s.userName===t);if(!a)throw new m(`User with name '${t}' not found`);e=a.id}let r;try{r=(await this.httpClient.delete(`/ISAPI/Security/users/${e}`,{headers:this.headers,params:{loginPassword:this.password}})).data}catch(n){if(N.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to delete user",void 0,i.ResponseStatus.subStatusCode)},"deleteUser")}async fetchUsers(){let t=await this.httpClient.get("/ISAPI/Security/users",{headers:this.headers}),e=await u.parser(t.data);return y.fetchUsers(e)}async getUsers(){let t=await this.httpClient.get("/ISAPI/Security/users",{headers:this.headers}),e=await u.parser(t.data);return y.fetchUsers(e)}encodePassword(t){let e;if(t.isIrreversible){e=P(this.user+t.salt+this.password),e=P(e+t.challenge);for(let r=2;r<t.iterations;r++)e=P(e)}else{e=P(this.password)+t.challenge;for(let r=1;r<t.iterations;r++)e=P(e)}return e}async reboot(){return g.withErrorHandling(async()=>{let t;try{t=(await this.httpClient.put("/ISAPI/System/reboot",null,{headers:this.headers})).data}catch(r){if(N.default.isAxiosError(r)&&r.response)t=r.response.data;else throw r}let e=await u.parser(t);if(e.ResponseStatus.statusCode!=="1")throw new m(e.ResponseStatus.subStatusCode||"Failed to reboot device",void 0,e.ResponseStatus.subStatusCode)},"reboot")}};var E=class{info(t,e){console.log(`[INFO] ${t}`,e?JSON.stringify(e):"")}error(t,e,r){console.error(`[ERROR] ${t}`,(e==null?void 0:e.message)||"",r?JSON.stringify(r):"")}debug(t,e){console.debug(`[DEBUG] ${t}`,e?JSON.stringify(e):"")}warn(t,e){console.warn(`[WARN] ${t}`,e?JSON.stringify(e):"")}},W=class{info(){}error(){}debug(){}warn(){}};var w=class{constructor(t){this.axiosInstance=t}async get(t,e){return this.axiosInstance.get(t,e)}async post(t,e,r){return this.axiosInstance.post(t,e,r)}async put(t,e,r){return this.axiosInstance.put(t,e,r)}async delete(t,e){return this.axiosInstance.delete(t,e)}};var R=class{validate(t,e){if(!t||typeof t!="object")throw new M("Configuration must be an object");let r=t,i={};for(let n of e.required){let a=n;if(!(a in r)||r[a]===void 0||r[a]===null)throw new M(`Required field '${a}' is missing`);i[a]=r[a]}if(e.optional)for(let n of e.optional){let a=n;a in r&&r[a]!==void 0&&(i[a]=r[a])}if(e.validators)for(let[n,a]of Object.entries(e.validators)){let s=n,l=i[s];if(l!==void 0&&a&&typeof a=="function"&&!a(l))throw new M(`Validation failed for field '${String(s)}'`)}return i}};var G=C(require("axios")),I=class extends b{constructor(e,r,i,n){let a=G.default.create({baseURL:e.proxy??`http://${e.ip}:${e.port??80}`,timeout:e.timeout??1e4});super(e,r??new w(a),i??new E,n??new R);this.wsPort=7681}get url(){return`http://${this.user}:${this.password}@${this.ip}:${this.port}`}get headers(){return this.useProxy?{proxy:this.url,Cookie:this.version===2?this.session:`WebSession=${this.session}`}:{Cookie:this.version===2?this.session:`WebSession=${this.session}`}}async connect(){if(this.version===2){let e=await this.getSessionParams(),r=this.encodePassword(e),i=await this.httpClient.post(`/ISAPI/Security/sessionLogin?timeStamp=${Date.now()}`,u.build({SessionLogin:{userName:this.user,password:r,sessionID:e.sessionId,isSessionIDValidLongTerm:!1,sessionIDVersion:2}}),{headers:this.headers}),n=await u.parser(i.data),a=n.SessionUserCheck??n.SessionLogin;this.session=(a==null?void 0:a.sessionID)??""}else await this.httpClient.get(`/ISAPI/Security/userCheck?timeStamp=${Date.now()}`)}async direction(e,r){await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/continuous",u.build({PTZData:{pan:e,tilt:r}}),{headers:this.headers})}async zoom(e){await this.httpClient.put("ISAPI/PTZCtrl/channels/1/continuous",u.build({PTZData:{zoom:e}}),{headers:this.headers})}async iris(e,r){await this.httpClient.put("/ISAPI/System/Video/inputs/channels/1/iris",u.build({IrisData:{iris:r}}),{headers:this.headers})}async focus(e){await this.httpClient.put("/ISAPI/System/Video/inputs/channels/1/focus",u.build({FocusData:{focus:e}}),{headers:this.headers})}async light(e){return g.withErrorHandling(async()=>{let r;try{r=(await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/auxcontrols/1",u.build({PTZAux:{id:"1",type:"LIGHT",status:e?"on":"off"}}),{headers:this.headers})).data}catch(n){if(G.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to control light",void 0,i.ResponseStatus.subStatusCode)},"light")}async wiper(e){return g.withErrorHandling(async()=>{let r;try{r=(await this.httpClient.put("/ISAPI/PTZCtrl/channels/1/auxcontrols/1",u.build({PTZAux:{id:"1",type:"WIPER",status:e?"on":"off"}}),{headers:this.headers})).data}catch(n){if(G.default.isAxiosError(n)&&n.response)r=n.response.data;else throw n}let i=await u.parser(r);if(i.ResponseStatus.statusCode!=="1")throw new m(i.ResponseStatus.subStatusCode||"Failed to control wiper",void 0,i.ResponseStatus.subStatusCode)},"wiper")}};var F=require("timers");var ae=C(require("ws"));function ie(o,t){let e=o?"postMessage":"parentPort.postMessage";return`${o?"":"const { parentPort } = require('worker_threads');"} (function(event) { const AUDIO_TYPE = 0; // \u97F3\u9891 const VIDEO_TYPE = 1; // \u89C6\u9891 const PRIVT_TYPE = 2; // \u79C1\u6709\u5E27 const PLAYM4_AUDIO_FRAME = 100; // \u97F3\u9891\u5E27 const PLAYM4_VIDEO_FRAME = 101; // \u89C6\u9891\u5E27 const HK_TRUE = 1; // true const PLAYM4_NEED_MORE_DATA = 31; // \u9700\u8981\u66F4\u591A\u6570\u636E\u624D\u80FD\u89E3\u6790 const PLAYM4_SYS_NOT_SUPPORT = 16; // \u4E0D\u652F\u6301 let Module; if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {}; let moduleOverrides = {}; for (let key in Module) { if (Module.hasOwnProperty(key)) { moduleOverrides[key] = Module[key]; } } const ENVIRONMENT_IS_WEB = typeof window === 'object'; const ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; const ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; if (ENVIRONMENT_IS_NODE) { if (!Module['print']) Module['print'] = console.log; if (!Module['printErr']) Module['printErr'] = console.warn; let nodeFS; let nodePath; Module['read'] = function shell_read(filename, binary) { if (!nodeFS) nodeFS = require('fs'); if (!nodePath) nodePath = require('path'); filename = nodePath['normalize'](filename); const ret = nodeFS['readFileSync'](filename); return binary ? ret : ret.toString(); }; Module['readBinary'] = function readBinary(filename) { let ret = Module['read'](filename, true); if (!ret.buffer) { ret = new Uint8Array(ret); } assert(ret.buffer); return ret; }; Module['load'] = function load(f) { globalEval(read(f)); }; if (!Module['thisProgram']) { if (process['argv'].length > 1) { Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/'); } else { Module['thisProgram'] = 'unknown-program'; } } Module['arguments'] = process['argv'].slice(2); if (typeof module !== 'undefined') { module['exports'] = Module; } process['on']('uncaughtException', function(ex) { if (!(ex instanceof ExitStatus)) { throw ex; } }); Module['inspect'] = function() { return '[Emscripten Module object]'; }; } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { Module['read'] = function shell_read(url) { const xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.send(null); return xhr.responseText; }; if (ENVIRONMENT_IS_WORKER) { Module['readBinary'] = function readBinary(url) { const xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.responseType = 'arraybuffer'; xhr.send(null); return new Uint8Array(xhr.response); }; } Module['readAsync'] = function readAsync(url, onload, onerror) { const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.onload = function xhr_onload() { if (xhr.status === 200 || xhr.status === 0 && xhr.response) { onload(xhr.response); } else { onerror(); } }; xhr.onerror = onerror; xhr.send(null); }; if (typeof arguments !== 'undefined') { Module['arguments'] = arguments; } if (typeof console !== 'undefined') { if (!Module['print']) Module['print'] = function shell_print(x) { console.log(x); }; if (!Module['printErr']) Module['printErr'] = function shell_printErr(x) { console.warn(x); }; } else { const TRY_USE_DUMP = false; if (!Module['print']) Module['print'] = TRY_USE_DUMP && typeof dump !== 'undefined' ? function(x) { dump(x); } : function(x) { }; } if (ENVIRONMENT_IS_WORKER) { Module['load'] = importScripts; } if (typeof Module['setWindowTitle'] === 'undefined') { Module['setWindowTitle'] = function(title) { document.title = title; }; } } else { throw 'Unknown runtime environment. Where are we?'; } function globalEval(x) { eval.call(null, x); } if (!Module['load'] && Module['read']) { Module['load'] = function load(f) { globalEval(Module['read'](f)); }; } if (!Module['print']) { Module['print'] = function() { }; } if (!Module['printErr']) { Module['printErr'] = Module['print']; } if (!Module['arguments']) { Module['arguments'] = []; } if (!Module['thisProgram']) { Module['thisProgram'] = './this.program'; } if (!Module['quit']) { Module['quit'] = function(status, toThrow) { throw toThrow; }; } Module.print = Module['print']; Module.printErr = Module['printErr']; Module['preRun'] = []; Module['postRun'] = []; for (let key in moduleOverrides) { if (moduleOverrides.hasOwnProperty(key)) { Module[key] = moduleOverrides[key]; } } moduleOverrides = undefined; const Runtime = { setTempRet0: function(value) { tempRet0 = value; return value; }, getTempRet0: function() { return tempRet0; }, stackSave: function() { return STACKTOP; }, stackRestore: function(stackTop) { STACKTOP = stackTop; }, getNativeTypeSize: function(type) { switch (type) { case 'i1': case 'i8': return 1; case 'i16': return 2; case 'i32': return 4; case 'i64': return 8; case 'float': return 4; case 'double': return 8; default: { if (type[type.length - 1] === '*') { return Runtime.QUANTUM_SIZE; } else if (type[0] === 'i') { const bits = parseInt(type.substr(1)); assert(bits % 8 === 0); return bits / 8; } else { return 0; } } } }, getNativeFieldSize: function(type) { return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); }, STACK_ALIGN: 16, prepVararg: function(ptr, type) { if (type === 'double' || type === 'i64') { if ((ptr & 7) !== 0) { assert((ptr & 7) === 4); ptr += 4; } } else { assert((ptr & 3) === 0); } return ptr; }, getAlignSize: function(type, size, vararg) { if (!vararg && (type === 'i64' || type === 'double')) return 8; if (!type) return Math.min(size, 8); return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); }, dynCall: function(sig, ptr, args) { if (args && args.length) { return Module['dynCall_' + sig].apply(null, [ptr].concat(args)); } else { return Module['dynCall_' + sig].call(null, ptr); } }, functionPointers: [], warnOnce: function(text) { if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; if (!Runtime.warnOnce.shown[text]) { Runtime.warnOnce.shown[text] = 1; Module.printErr(text); } }, funcWrappers: {}, getFuncWrapper: function(func, sig) { if (!func) return; assert(sig); if (!Runtime.funcWrappers[sig]) { Runtime.funcWrappers[sig] = {}; } var sigCache = Runtime.funcWrappers[sig]; if (!sigCache[func]) { if (sig.length === 1) { sigCache[func] = function dynCall_wrapper() { return Runtime.dynCall(sig, func); }; } else if (sig.length === 2) { sigCache[func] = function dynCall_wrapper(arg) { return Runtime.dynCall(sig, func, [arg]); }; } else { sigCache[func] = function dynCall_wrapper() { return Runtime.dynCall(sig, func, Array.prototype.slice.call(arguments)); }; } } return sigCache[func]; }, getCompilerSetting: function(name) { throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work'; }, stackAlloc: function(size) { var ret = STACKTOP; STACKTOP = STACKTOP + size | 0; STACKTOP = STACKTOP + 15 & -16; return ret; }, staticAlloc: function(size) { var ret = STATICTOP; STATICTOP = STATICTOP + size | 0; STATICTOP = STATICTOP + 15 & -16; return ret; }, dynamicAlloc: function(size) { var ret = HEAP32[DYNAMICTOP_PTR >> 2]; var end = (ret + size + 15 | 0) & -16; HEAP32[DYNAMICTOP_PTR >> 2] = end; if (end >= TOTAL_MEMORY) { var success = enlargeMemory(); if (!success) { HEAP32[DYNAMICTOP_PTR >> 2] = ret; return 0; } } return ret; }, alignMemory: function(size, quantum) { var ret = size = Math.ceil(size / (quantum || 16)) * (quantum || 16); return ret; }, makeBigInt: function(low, high, unsigned) { var ret = unsigned ? +(low >>> 0) + +(high >>> 0) * 4294967296 : +(low >>> 0) + +(high | 0) * 4294967296; return ret; }, GLOBAL_BASE: 1024, QUANTUM_SIZE: 4, __dummy__: 0 }; Module['Runtime'] = Runtime; var ABORT = 0; var EXITSTATUS = 0; function assert(condition, text) { if (!condition) { abort('Assertion failed: ' + text); } } function getCFunc(ident) { var func = Module['_' + ident]; if (!func) { try { func = eval('_' + ident); } catch (e) { } } assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); return func; } var cwrap, ccall; (function() { var JSfuncs = { 'stackSave': function() { Runtime.stackSave(); }, 'stackRestore': function() { Runtime.stackRestore(); }, 'arrayToC': function(arr) { var ret = Runtime.stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret; }, 'stringToC': function(str) { var ret = 0; if (str !== null && str !== undefined && str !== 0) { var len = (str.length << 2) + 1; ret = Runtime.stackAlloc(len); stringToUTF8(str, ret, len); } return ret; } }; var toC = { 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC'] }; ccall = function ccallFunc(ident, returnType, argTypes, args, opts) { var func = getCFunc(ident); var cArgs = []; var stack = 0; if (args) { for (let i = 0; i < args.length; i++) { var converter = toC[argTypes[i]]; if (converter) { if (stack === 0) stack = Runtime.stackSave(); cArgs[i] = converter(args[i]); } else { cArgs[i] = args[i]; } } } var ret = func.apply(null, cArgs); if (returnType === 'string') ret = Pointer_stringify(ret); if (stack !== 0) { if (opts && opts.async) { EmterpreterAsync.asyncFinalizers.push(function() { Runtime.stackRestore(stack); }); return; } Runtime.stackRestore(stack); } return ret; }; var sourceRegex = /^function\\s*[a-zA-Z$_0-9]*\\s*\\(([^)]*)\\)\\s*{\\s*([^*]*?)[\\s;]*(?:return\\s*(.*?)[;\\s]*)?}$/; function parseJSFunc(jsfunc) { var parsed = jsfunc.toString().match(sourceRegex).slice(1); return { arguments: parsed[0], body: parsed[1], returnValue: parsed[2] }; } var JSsource = null; function ensureJSsource() { if (!JSsource) { JSsource = {}; for (let fun in JSfuncs) { if (JSfuncs.hasOwnProperty(fun)) { JSsource[fun] = parseJSFunc(JSfuncs[fun]); } } } } cwrap = function cwrap(ident, returnType, argTypes) { argTypes = argTypes || []; var cfunc = getCFunc(ident); var numericArgs = argTypes.every(function(type) { return type === 'number'; }); var numericRet = returnType !== 'string'; if (numericRet && numericArgs) { return cfunc; } var argNames = argTypes.map(function(x, i) { return '$' + i; }); var funcstr = '(function(' + argNames.join(',') + ') {'; var nargs = argTypes.length; if (!numericArgs) { ensureJSsource(); funcstr += 'var stack = ' + JSsource['stackSave'].body + ';'; for (let i = 0; i < nargs; i++) { var arg = argNames[i]; var type = argTypes[i]; if (type === 'number') continue; var convertCode = JSsource[type + 'ToC']; funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';'; funcstr += convertCode.body + ';'; funcstr += arg + '=(' + convertCode.returnValue + ');'; } } var cfuncname = parseJSFunc(function() { return cfunc; }).returnValue; funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');'; if (!numericRet) { const strgfy = parseJSFunc(function() { return Pointer_stringify; }).returnValue; funcstr += 'ret = ' + strgfy + '(ret);'; } if (!numericArgs) { ensureJSsource(); funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';'; } funcstr += 'return ret})'; return eval(funcstr); }; })(); Module['ccall'] = ccall; Module['cwrap'] = cwrap; function setValue(ptr, value, type, noSafe) { type = type || 'i8'; if (type.charAt(type.length - 1) === '*') type = 'i32'; switch (type) { case 'i1': HEAP8[ptr >> 0] = value; break; case 'i8': HEAP8[ptr >> 0] = value; break; case 'i16': HEAP16[ptr >> 1] = value; break; case 'i32': HEAP32[ptr >> 2] = value; break; case 'i64': tempI64 = [value >>> 0, (tempDouble = value, +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], HEAP32[ptr >> 2] = tempI64[0], HEAP32[ptr + 4 >> 2] = tempI64[1]; break; case 'float': HEAPF32[ptr >> 2] = value; break; case 'double': HEAPF64[ptr >> 3] = value; break; default: abort('invalid type for setValue: ' + type); } } Module['setValue'] = setValue; function getValue(ptr, type, noSafe) { type = type || 'i8'; if (type.charAt(type.length - 1) === '*') type = 'i32'; switch (type) { case 'i1': return HEAP8[ptr >> 0]; case 'i8': return HEAP8[ptr >> 0]; case 'i16': return HEAP16[ptr >> 1]; case 'i32': return HEAP32[ptr >> 2]; case 'i64': return HEAP32[ptr >> 2]; case 'float': return HEAPF32[ptr >> 2]; case 'double': return HEAPF64[ptr >> 3]; default: abort('invalid type for setValue: ' + type); } return null; } Module['getValue'] = getValue; var ALLOC_NORMAL = 0; var ALLOC_STACK = 1; var ALLOC_STATIC = 2; var ALLOC_DYNAMIC = 3; var ALLOC_NONE = 4; Module['ALLOC_NORMAL'] = ALLOC_NORMAL; Module['ALLOC_STACK'] = ALLOC_STACK; Module['ALLOC_STATIC'] = ALLOC_STATIC; Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; Module['ALLOC_NONE'] = ALLOC_NONE; function allocate(slab, types, allocator, ptr) { var zeroinit, size; if (typeof slab === 'number') { zeroinit = true; size = slab; } else { zeroinit = false; size = slab.length; } var singleType = typeof types === 'string' ? types : null; var ret; if (allocator === ALLOC_NONE) { ret = ptr; } else { ret = [typeof _malloc === 'function' ? _malloc : Runtime.staticAlloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); } if (zeroinit) { var ptr = ret; var stop; assert((ret & 3) === 0); stop = ret + (size & ~3); for (; ptr < stop; ptr += 4) { HEAP32[ptr >> 2] = 0; } stop = ret + size; while (ptr < stop) { HEAP8[ptr++ >> 0] = 0; } return ret; } if (singleType === 'i8') { if (slab.subarray || slab.slice) { HEAPU8.set(slab, ret); } else { HEAPU8.set(new Uint8Array(slab), ret); } return ret; } var i = 0; var type; var typeSize; var previousType; while (i < size) { var curr = slab[i]; if (typeof curr === 'function') { curr = Runtime.getFunctionIndex(curr); } type = singleType || types[i]; if (type === 0) { i++; continue; } if (type === 'i64') type = 'i32'; setValue(ret + i, curr, type); if (previousType !== type) { typeSize = Runtime.getNativeTypeSize(type); previousType = type; } i += typeSize; } return ret; } Module['allocate'] = allocate; function getMemory(size) { if (!staticSealed) return Runtime.staticAlloc(size); if (!runtimeInitialized) return Runtime.dynamicAlloc(size); return _malloc(size); } Module['getMemory'] = getMemory; function Pointer_stringify(ptr, length) { if (length === 0 || !ptr) return ''; var hasUtf = 0; var t; var i = 0; while (1) { t = HEAPU8[ptr + i >> 0]; hasUtf |= t; if (t === 0 && !length) break; i++; if (length && i === length) break; } if (!length) length = i; var ret = ''; if (hasUtf < 128) { var MAX_CHUNK = 1024; var curr; while (length > 0) { curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); ret = ret ? ret + curr : curr; ptr += MAX_CHUNK; length -= MAX_CHUNK; } return ret; } return Module['UTF8ToString'](ptr); } Module['Pointer_stringify'] = Pointer_stringify; function AsciiToString(ptr) { var str = ''; while (1) { var ch = HEAP8[ptr++ >> 0]; if (!ch) return str; str += String.fromCharCode(ch); } } Module['AsciiToString'] = AsciiToString; function stringToAscii(str, outPtr) { return writeAsciiToMemory(str, outPtr, false); } Module['stringToAscii'] = stringToAscii; var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; function UTF8ArrayToString(u8Array, idx) { var endPtr = idx; while (u8Array[endPtr]) ++endPtr; if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)); } else { var u0, u1, u2, u3, u4, u5; var str = ''; while (1) { u0 = u8Array[idx++]; if (!u0) return str; if (!(u0 & 128)) { str += String.fromCharCode(u0); continue; } u1 = u8Array[idx++] & 63; if ((u0 & 224) === 192) { str += String.fromCharCode((u0 & 31) << 6 | u1); continue; } u2 = u8Array[idx++] & 63; if ((u0 & 240) === 224) { u0 = (u0 & 15) << 12 | u1 << 6 | u2; } else { u3 = u8Array[idx++] & 63; if ((u0 & 248) === 240) { u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u3; } else { u4 = u8Array[idx++] & 63; if ((u0 & 252) === 248) { u0 = (u0 & 3) << 24 | u1 << 18 | u2 << 12 | u3 << 6 | u4; } else { u5 = u8Array[idx++] & 63; u0 = (u0 & 1) << 30 | u1 << 24 | u2 << 18 | u3 << 12 | u4 << 6 | u5; } } } if (u0 < 65536) { str += String.fromCharCode(u0); } else { var ch = u0 - 65536; str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); } } } } Module['UTF8ArrayToString'] = UTF8ArrayToString; function UTF8ToString(ptr) { return UTF8ArrayToString(HEAPU8, ptr); } Module['UTF8ToString'] = UTF8ToString; function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { if (!(maxBytesToWrite > 0)) return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; for (let i = 0; i < str.length; ++i) { var u = str.charCodeAt(i); if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; if (u <= 127) { if (outIdx >= endIdx) break; outU8Array[outIdx++] = u; } else if (u <= 2047) { if (outIdx + 1 >= endIdx) break; outU8Array[outIdx++] = 192 | u >> 6; outU8Array[outIdx++] = 128 | u & 63; } else if (u <= 65535) { if (outIdx + 2 >= endIdx) break; outU8Array[outIdx++] = 224 | u >> 12; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } else if (u <= 2097151) { if (outIdx + 3 >= endIdx) break; outU8Array[outIdx++] = 240 | u >> 18; outU8Array[outIdx++] = 128 | u >> 12 & 63; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } else if (u <= 67108863) { if (outIdx + 4 >= endIdx) break; outU8Array[outIdx++] = 248 | u >> 24; outU8Array[outIdx++] = 128 | u >> 18 & 63; outU8Array[outIdx++] = 128 | u >> 12 & 63; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } else { if (outIdx + 5 >= endIdx) break; outU8Array[outIdx++] = 252 | u >> 30; outU8Array[outIdx++] = 128 | u >> 24 & 63; outU8Array[outIdx++] = 128 | u >> 18 & 63; outU8Array[outIdx++] = 128 | u >> 12 & 63; outU8Array[outIdx++] = 128 | u >> 6 & 63; outU8Array[outIdx++] = 128 | u & 63; } } outU8Array[outIdx] = 0; return outIdx - startIdx; } Module['stringToUTF8Array'] = stringToUTF8Array; function stringToUTF8(str, outPtr, maxBytesToWrite) { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); } Module['stringToUTF8'] = stringToUTF8; function lengthBytesUTF8(str) { var len = 0; for (let i = 0; i < str.length; ++i) { var u = str.charCodeAt(i); if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; if (u <= 127) { ++len; } else if (u <= 2047) { len += 2; } else if (u <= 65535) { len += 3; } else if (u <= 2097151) { len += 4; } else if (u <= 67108863) { len += 5; } else { len += 6; } } return len; } Module['lengthBytesUTF8'] = lengthBytesUTF8; var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; function demangle(func) { var __cxa_demangle_func = Module['___cxa_demangle'] || Module['__cxa_demangle']; if (__cxa_demangle_func) { try { var s = func.substr(1); var len = lengthBytesUTF8(s) + 1; var buf = _malloc(len); stringToUTF8(s, buf, len); var status = _malloc(4); var ret = __cxa_demangle_func(buf, 0, 0, status); if (getValue(status, 'i32') === 0 && ret) { return Pointer_stringify(ret); } } catch (e) { } finally { if (buf) _free(buf); if (status) _free(status); if (ret) _free(ret); } return func; } Runtime.warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); return func; } function demangleAll(text) { var regex = /__Z[\\w\\d_]+/g; return text.replace(regex, function(x) { var y = demangle(x); return x === y ? x : x + ' [' + y + ']'; }); } function jsStackTrace() { var err = new Error(); if (!err.stack) { try { throw new Error(0); } catch (e) { err = e; } if (!err.stack) { return '(no stack trace available)'; } } return err.stack.toString(); } function stackTrace() { var js = jsStackTrace(); if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace'](); return demangleAll(js); } Module['stackTrace'] = stackTrace; var WASM_PAGE_SIZE = 65536; var ASMJS_PAGE_SIZE = 16777216; function alignUp(x, multiple) { if (x % multiple > 0) { x += multiple - x % multiple; } return x; } let HEAP, buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; function updateGlobalBuffer(buf) { Module['buffer'] = buffer = buf; } function updateGlobalBufferViews() { Module['HEAP8'] = HEAP8 = new Int8Array(buffer); Module['HEAP16'] = HEAP16 = new Int16Array(buffer); Module['HEAP32'] = HEAP32 = new Int32Array(buffer); Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer); Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer); Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer); Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer); Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer); } let STATIC_BASE, STATICTOP, staticSealed; let STACK_BASE, STACKTOP, STACK_MAX; let DYNAMIC_BASE, DYNAMICTOP_PTR; STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0; staticSealed = false; function abortOnCannotGrowMemory() { abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 '); } function enlargeMemory() { abortOnCannotGrowMemory(); } var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728; if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); if (Module['buffer']) { buffer = Module['buffer']; } else { if (typeof WebAssembly === 'object' && typeof WebAssembly.Memory === 'function') { Module['wasmMemory'] = new WebAssembly.Memory({ 'initial': TOTAL_MEMORY / WASM_PAGE_SIZE, 'maximum': TOTAL_MEMORY / WASM_PAGE_SIZE }); buffer = Module['wasmMemory'].buffer; } else { buffer = new ArrayBuffer(TOTAL_MEMORY); } } updateGlobalBufferViews(); function getTotalMemory() { return TOTAL_MEMORY; } HEAP32[0] = 1668509029; HEAP16[1] = 25459; if (HEAPU8[2] !== 115 || HEAPU8[3] !== 99) throw 'Runtime error: expected the system to be little-endian!'; Module['HEAP'] = HEAP; Module['buffer'] = buffer; Module['HEAP8'] = HEAP8; Module['HEAP16'] = HEAP16; Module['HEAP32'] = HEAP32; Module['HEAPU8'] = HEAPU8; Module['HEAPU16'] = HEAPU16; Module['HEAPU32'] = HEAPU32; Module['HEAPF32'] = HEAPF32; Module['HEAPF64'] = HEAPF64; function callRuntimeCallbacks(callbacks) { while (callbacks.length > 0) { var callback = callbacks.shift(); if (typeof callback === 'function') { callback(); continue; } var func = callback.func; if (typeof func === 'number') { if (callback.arg === undefined) { Module['dynCall_v'](func); } else { Module['dynCall_vi'](func, callback.arg); } } else { func(callback.arg === undefined ? null : callback.arg); } } } var __ATPRERUN__ = []; var __ATINIT__ = []; var __ATMAIN__ = []; var __ATEXIT__ = []; var __ATPOSTRUN__ = []; var runtimeInitialized = false; var runtimeExited = false; function preRun() { if (Module['preRun']) { if (typeof Module['preRun'] === 'function') Module['preRun'] = [Module['preRun']]; while (Module['preRun'].length) { addOnPreRun(Module['preRun'].shift()); } } callRuntimeCallbacks(__ATPRERUN__); } function ensureInitRuntime() { if (runtimeInitialized) return; runtimeInitialized = true; callRuntimeCallbacks(__ATINIT__); } function preMain() { callRuntimeCallbacks(__ATMAIN__); } function exitRuntime() { callRuntimeCallbacks(__ATEXIT__); runtimeExited = true; } function postRun() { if (Module['postRun']) { if (typeof Module['postRun'] === 'function') Module['postRun'] = [Module['postRun']]; while (Module['postRun'].length) { addOnPostRun(Module['postRun'].shift()); } } callRuntimeCallbacks(__ATPOSTRUN__); } function addOnPreRun(cb) { __ATPRERUN__.unshift(cb); } Module['addOnPreRun'] = addOnPreRun; function addOnInit(cb) { __ATINIT__.unshift(cb); } Module['addOnInit'] = addOnInit; function addOnPreMain(cb) { __ATMAIN__.unshift(cb); } Module['addOnPreMain'] = addOnPreMain; function addOnExit(cb) { __ATEXIT__.unshift(cb); } Module['addOnExit'] = addOnExit; function addOnPostRun(cb) { __ATPOSTRUN__.unshift(cb); } Module['addOnPostRun'] = addOnPostRun; function intArrayFromString(stringy, dontAddNull, length) { var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; var u8array = new Array(len); var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); if (dontAddNull) u8array.length = numBytesWritten; return u8array; } Module['intArrayFromString'] = intArrayFromString; function intArrayToString(array) { var ret = []; for (let i = 0; i < array.length; i++) { var chr = array[i]; if (chr > 255) { chr &= 255; } ret.push(String.fromCharCode(chr)); } return ret.join(''); } Module['intArrayToString'] = intArrayToString; function writeStringToMemory(string, buffer, dontAddNull) { Runtime.warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); var lastChar, end; if (dontAddNull) { end = buffer + lengthBytesUTF8(string); lastChar = HEAP8[end]; } stringToUTF8(string, buffer, Infinity); if (dontAddNull) HEAP8[end] = lastChar; } Module['writeStringToMemory'] = writeStringToMemory; function writeArrayToMemory(array, buffer) { HEAP8.set(array, buffer); } Module['writeArrayToMemory'] = writeArrayToMemory; function writeAsciiToMemory(str, buffer, dontAddNull) { for (let i = 0; i < str.length; ++i) { HEAP8[buffer++ >> 0] = str.charCodeAt(i); } if (!dontAddNull) HEAP8[buffer >> 0] = 0; } Module['writeAsciiToMemory'] = writeAsciiToMemory; if (!Math['imul'] || Math['imul'](4294967295