From 27ae47117e59061da0894288e7b1e4880a6facca Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Fri, 1 May 2020 16:42:41 +0100 Subject: [PATCH] Leverage make -j to parallelise C++ builds We've been running each Make command in a single thread, resulting in fairly slow builds for C++ codecs. This change instead runs all `make` invocations with `-j` defaulting to number of cores (retrieved via `nproc`). On my machine Docker uses a VM configured to 4 cores out of 8 available. This change brings total build time for C++ codecs down from 10m28s to 7m5s (~3.5 minutes difference). Note (1): I've converted imagequant builds to use built-in `make` as well to leverage this parallelisation and future-proof build script. Note (2): we don't need to do the same for Rust, since Cargo parallelises builds by default. --- codecs/imagequant/build.sh | 14 ++-- codecs/imagequant/imagequant.js | 110 +++++++++++++++--------------- codecs/imagequant/imagequant.wasm | Bin 59715 -> 58576 bytes codecs/mozjpeg_enc/build.sh | 2 +- codecs/webp_dec/build.sh | 2 +- codecs/webp_enc/build.sh | 2 +- 6 files changed, 64 insertions(+), 66 deletions(-) diff --git a/codecs/imagequant/build.sh b/codecs/imagequant/build.sh index f9e7b45b..b2852655 100755 --- a/codecs/imagequant/build.sh +++ b/codecs/imagequant/build.sh @@ -11,12 +11,9 @@ echo "=============================================" echo "Compiling libimagequant" echo "=============================================" ( - emcc \ - ${OPTIMIZE} \ - -I node_modules/libimagequant \ - --std=c99 \ - -c \ - node_modules/libimagequant/{libimagequant,pam,mediancut,blur,mempool,kmeans,nearest}.c + cd node_modules/libimagequant + emconfigure ./configure --disable-sse + emmake make static -j`nproc` ) echo "=============================================" echo "Compiling wasm module" @@ -31,9 +28,10 @@ echo "=============================================" -s 'EXPORT_NAME="imagequant"' \ -I node_modules/libimagequant \ -o ./imagequant.js \ - --std=c++11 *.o \ + --std=c++11 \ -x c++ \ - imagequant.cpp + imagequant.cpp \ + node_modules/libimagequant/libimagequant.a ) echo "=============================================" echo "Compiling wasm module done" diff --git a/codecs/imagequant/imagequant.js b/codecs/imagequant/imagequant.js index 6ff3c366..c4506d11 100644 --- a/codecs/imagequant/imagequant.js +++ b/codecs/imagequant/imagequant.js @@ -11,61 +11,61 @@ if(ba)A=z?require("path").dirname(A)+"/":__dirname+"/",da=function(a,b){ea||(ea= else if(ca)"undefined"!=typeof read&&(da=function(a){return read(a)}),B=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");"object"===typeof a||C("Assertion failed: undefined");return a},"undefined"!==typeof print&&("undefined"===typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!==typeof printErr?printErr:print);else if(aa||z)z?A=self.location.href:document.currentScript&&(A=document.currentScript.src),_scriptDir&& (A=_scriptDir),0!==A.indexOf("blob:")?A=A.substr(0,A.lastIndexOf("/")+1):A="",da=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},z&&(B=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});var ia=e.print||console.log.bind(console),E=e.printErr||console.warn.bind(console);for(t in r)r.hasOwnProperty(t)&&(e[t]=r[t]);r=null;var F;e.wasmBinary&&(F=e.wasmBinary);var noExitRuntime; e.noExitRuntime&&(noExitRuntime=e.noExitRuntime);"object"!==typeof WebAssembly&&E("no native wasm support detected");var G,ja=new WebAssembly.Table({initial:49,maximum:49,element:"anyfunc"}),ka=!1,la="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0; -function ma(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}function na(a){return a?ma(H,a,void 0):""} -function oa(a,b,c){var d=H;if(0=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var pa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; -function qa(a){var b;for(b=a>>1;I[b];)++b;b<<=1;if(32>1];if(0==d)return c;++b;c+=String.fromCharCode(d)}}function ra(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-d}function sa(a){return 2*a.length} -function ta(a){for(var b=0,c="";;){var d=J[a+4*b>>2];if(0==d)return c;++b;65536<=d?(d-=65536,c+=String.fromCharCode(55296|d>>10,56320|d&1023)):c+=String.fromCharCode(d)}}function ua(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}J[b>>2]=g;b+=4;if(b+4>c)break}J[b>>2]=0;return b-d} -function va(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var K,wa,H,I,xa,J,L,ya,za;function Aa(a){K=a;e.HEAP8=wa=new Int8Array(a);e.HEAP16=I=new Int16Array(a);e.HEAP32=J=new Int32Array(a);e.HEAPU8=H=new Uint8Array(a);e.HEAPU16=xa=new Uint16Array(a);e.HEAPU32=L=new Uint32Array(a);e.HEAPF32=ya=new Float32Array(a);e.HEAPF64=za=new Float64Array(a)}var Ba=e.INITIAL_MEMORY||16777216;e.wasmMemory?G=e.wasmMemory:G=new WebAssembly.Memory({initial:Ba/65536}); -G&&(K=G.buffer);Ba=K.byteLength;Aa(K);J[1848]=5250432;function Ca(a){for(;0=b?"_"+a:a} -function Sa(a,b){a=Ra(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Ta(a){var b=Error,c=Sa(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} -var Ua=void 0;function S(a){throw new Ua(a);}var Va=void 0;function Wa(a){throw new Va(a);}function Xa(a,b,c){function d(h){h=c(h);h.length!==a.length&&Wa("Mismatched type converter count");for(var k=0;k>2])}function rb(a,b,c){if(b===c)return a;if(void 0===c.Z)return null;a=rb(a,b,c.Z);return null===a?null:c.ra(a)}var sb={}; -function tb(a,b){for(void 0===b&&S("ptr should not be undefined");a.Z;)b=a.ga(b),a=a.Z;return sb[b]}function ub(a,b){b.W&&b.U||Wa("makeClassHandle requires ptr and ptrType");!!b.Y!==!!b.X&&Wa("Both smartPtrType and smartPtr must be specified");b.count={value:1};return cb(Object.create(a,{T:{value:b}}))} -function W(a,b,c,d){this.name=a;this.V=b;this.ka=c;this.ha=d;this.ia=!1;this.da=this.ya=this.xa=this.oa=this.za=this.wa=void 0;void 0!==b.Z?this.toWireType=mb:(this.toWireType=d?lb:ob,this.aa=null)}function vb(a,b,c){e.hasOwnProperty(a)||Wa("Replacing nonexistant public symbol");void 0!==e[a].$&&void 0!==c?e[a].$[c]=b:(e[a]=b,e[a].pa=c)} -function X(a,b){a=P(a);var c=e["dynCall_"+a];for(var d=[],f=1;f>2])};case 3:return function(c){return this.fromWireType(za[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Fb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Sa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function Gb(a,b){for(var c=[],d=0;d>2)+d]);return c}function Hb(a,b,c){switch(b){case 0:return c?function(d){return wa[d]}:function(d){return H[d]};case 1:return c?function(d){return I[d>>1]}:function(d){return xa[d>>1]};case 2:return c?function(d){return J[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}for(var Ib=[null,[],[]],Jb=Array(256),Kb=0;256>Kb;++Kb)Jb[Kb]=String.fromCharCode(Kb);Pa=Jb;Ua=e.BindingError=Ta("BindingError"); -Va=e.InternalError=Ta("InternalError");U.prototype.isAliasOf=function(a){if(!(this instanceof U&&a instanceof U))return!1;var b=this.T.W.V,c=this.T.U,d=a.T.W.V;for(a=a.T.U;b.Z;)c=b.ga(c),b=b.Z;for(;d.Z;)a=d.ga(a),d=d.Z;return b===d&&c===a};U.prototype.clone=function(){this.T.U||Za(this);if(this.T.fa)return this.T.count.value+=1,this;var a=cb(Object.create(Object.getPrototypeOf(this),{T:{value:Ya(this.T)}}));a.T.count.value+=1;a.T.ea=!1;return a}; -U.prototype["delete"]=function(){this.T.U||Za(this);this.T.ea&&!this.T.fa&&S("Object already scheduled for deletion");ab(this);bb(this.T);this.T.fa||(this.T.X=void 0,this.T.U=void 0)};U.prototype.isDeleted=function(){return!this.T.U};U.prototype.deleteLater=function(){this.T.U||Za(this);this.T.ea&&!this.T.fa&&S("Object already scheduled for deletion");eb.push(this);1===eb.length&&db&&db(fb);this.T.ea=!0;return this};W.prototype.ua=function(a){this.oa&&(a=this.oa(a));return a}; -W.prototype.na=function(a){this.da&&this.da(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=pb;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; -W.prototype.fromWireType=function(a){function b(){return this.ia?ub(this.V.ba,{W:this.wa,U:c,Y:this,X:a}):ub(this.V.ba,{W:this,U:a})}var c=this.ua(a);if(!c)return this.na(a),null;var d=tb(this.V,c);if(void 0!==d){if(0===d.T.count.value)return d.T.U=c,d.T.X=a,d.clone();d=d.clone();this.na(a);return d}d=this.V.ta(c);d=gb[d];if(!d)return b.call(this);d=this.ha?d.qa:d.pointerType;var f=rb(c,this.V,d.V);return null===f?b.call(this):this.ia?ub(d.V.ba,{W:d,U:f,Y:this,X:a}):ub(d.V.ba,{W:d,U:f})}; -e.getInheritedInstanceCount=function(){return Object.keys(sb).length};e.getLiveInheritedInstances=function(){var a=[],b;for(b in sb)sb.hasOwnProperty(b)&&a.push(sb[b]);return a};e.flushPendingDeletes=fb;e.setDelayFunction=function(a){db=a;eb.length&&db&&db(fb)};wb=e.UnboundTypeError=Ta("UnboundTypeError");e.count_emval_handles=function(){for(var a=0,b=5;b>g])},aa:null})},o:function(a,b,c,d,f,g,n,h,k,l,m,q,v){m= -P(m);g=X(f,g);h&&(h=X(n,h));l&&(l=X(k,l));v=X(q,v);var u=Ra(m);ib(u,function(){zb("Cannot construct "+m+" due to unbound types",[d])});Xa([a,b,c],d?[d]:[],function(p){p=p[0];if(d){var w=p.V;var x=w.ba}else x=U.prototype;p=Sa(u,function(){if(Object.getPrototypeOf(this)!==y)throw new Ua("Use 'new' to construct "+m);if(void 0===D.ma)throw new Ua(m+" has no accessible constructor");var qb=D.ma[arguments.length];if(void 0===qb)throw new Ua("Tried to invoke ctor of "+m+" with invalid number of parameters ("+ -arguments.length+") - expected ("+Object.keys(D.ma).toString()+") parameters instead!");return qb.apply(this,arguments)});var y=Object.create(x,{constructor:{value:p}});p.prototype=y;var D=new jb(m,p,y,v,w,g,h,l);w=new W(m,D,!0,!1);x=new W(m+"*",D,!1,!1);var fa=new W(m+" const*",D,!1,!0);gb[a]={pointerType:x,qa:fa};vb(u,p);return[w,x,fa]})},e:function(a,b,c,d,f,g,n,h,k,l){b=P(b);f=X(d,f);Xa([],[a],function(m){m=m[0];var q=m.name+"."+b,v={get:function(){zb("Cannot access "+q+" due to unbound types", -[c,n])},enumerable:!0,configurable:!0};k?v.set=function(){zb("Cannot access "+q+" due to unbound types",[c,n])}:v.set=function(){S(q+" is a read-only property")};Object.defineProperty(m.V.ba,b,v);Xa([],k?[c,n]:[c],function(u){var p=u[0],w={get:function(){var y=Bb(this,m,q+" getter");return p.fromWireType(f(g,y))},enumerable:!0};if(k){k=X(h,k);var x=u[1];w.set=function(y){var D=Bb(this,m,q+" setter"),fa=[];k(l,D,x.toWireType(fa,y));Ab(fa)}}Object.defineProperty(m.V.ba,b,w);return[]});return[]})},t:function(a, -b){b=P(b);T(a,{name:b,fromWireType:function(c){var d=Z[c].value;Db(c);return d},toWireType:function(c,d){return nb(d)},argPackAdvance:8,readValueFromPointer:pb,aa:null})},j:function(a,b,c){c=Oa(c);b=P(b);T(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+V(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Eb(b,c),aa:null})},d:function(a,b,c,d,f,g){var n=Gb(b,c);a=P(a);f=X(d, -f);ib(a,function(){zb("Cannot call "+a+" due to unbound types",n)},b-1);Xa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m=f,q=k.length;2>q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==k[1]&&!1,u=!1,p=1;p>>h}}var k=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(l,m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+V(m)+'" to '+this.name);if(mf)throw new TypeError('Passing a number "'+V(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Hb(b,n,0!==d), -aa:null})},a:function(a,b,c){function d(g){g>>=2;var n=L;return new f(K,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=P(c);T(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{va:!0})},k:function(a,b){b=P(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var f=L[d>>2];if(c){var g=H[d+4+f],n=0;0!=g&&(n=g,H[d+4+f]=0);var h=d+4;for(g=0;g<=f;++g){var k=d+4+g;if(0==H[k]){h=na(h);if(void 0===l)var l=h; -else l+=String.fromCharCode(0),l+=h;h=k+1}}0!=n&&(H[d+4+f]=n)}else{l=Array(f);for(g=0;g=q&&(q=65536+((q&1023)<<10)| -f.charCodeAt(++m)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return f.length})(),h=Lb(4+n+1);L[h>>2]=n;if(c&&g)oa(f,h+4,n+1);else if(g)for(g=0;g>2],m=n(),q=m[k+4+l*b>>h],v=0;0!=q&&(v=q,m[k+4+l*b>>h]=0);var u=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==m[p>>h]){u=d(u);if(void 0===w)var w=u;else w+=String.fromCharCode(0),w+=u;u=p+b}}0!=v&&(m[k+4+l*b>>h]=v);Y(k);return w},toWireType:function(k,l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),q=Lb(4+m+b);L[q>>2]=m>>h;f(l,q+4,m+b);null!==k&&k.push(Y, -q);return q},argPackAdvance:8,readValueFromPointer:pb,aa:function(k){Y(k)}})},v:function(a,b){b=P(b);T(a,{Aa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},h:Db,n:function(a){4=c;c*=2){var d=b*(1+ -.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>16);Aa(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},m:function(){return 0},p:function(){},g:function(a,b,c,d){for(var f=0,g=0;g>2],h=J[b+(8*g+4)>>2],k=0;k>2]=f;return 0},memory:G,q:function(){},table:ja},Nb=function(){function a(f){e.asm= -f.exports;M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==Ia&&(clearInterval(Ia),Ia=null),N&&(f=N,N=null,f()))}function b(f){a(f.instance)}function c(f){return Ma().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);C(g)})}var d={a:Mb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ -f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ja()||"function"!==typeof fetch)return c(b);fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();e.asm=Nb; -var Na=e.___wasm_call_ctors=function(){return(Na=e.___wasm_call_ctors=e.asm.w).apply(null,arguments)},Lb=e._malloc=function(){return(Lb=e._malloc=e.asm.x).apply(null,arguments)},Y=e._free=function(){return(Y=e._free=e.asm.y).apply(null,arguments)},yb=e.___getTypeName=function(){return(yb=e.___getTypeName=e.asm.z).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.A).apply(null,arguments)}; -e.dynCall_ii=function(){return(e.dynCall_ii=e.asm.B).apply(null,arguments)};e.dynCall_vi=function(){return(e.dynCall_vi=e.asm.C).apply(null,arguments)};e.dynCall_vif=function(){return(e.dynCall_vif=e.asm.D).apply(null,arguments)};e.dynCall_iii=function(){return(e.dynCall_iii=e.asm.E).apply(null,arguments)};e.dynCall_viii=function(){return(e.dynCall_viii=e.asm.F).apply(null,arguments)};e.dynCall_viiiiif=function(){return(e.dynCall_viiiiif=e.asm.G).apply(null,arguments)}; -e.dynCall_viiiif=function(){return(e.dynCall_viiiif=e.asm.H).apply(null,arguments)};e.dynCall_i=function(){return(e.dynCall_i=e.asm.I).apply(null,arguments)};e.dynCall_v=function(){return(e.dynCall_v=e.asm.J).apply(null,arguments)};e.dynCall_iiiiiif=function(){return(e.dynCall_iiiiiif=e.asm.K).apply(null,arguments)};e.dynCall_iiiiif=function(){return(e.dynCall_iiiiif=e.asm.L).apply(null,arguments)};e.dynCall_iiii=function(){return(e.dynCall_iiii=e.asm.M).apply(null,arguments)}; -e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.N).apply(null,arguments)};e.dynCall_iidiiii=function(){return(e.dynCall_iidiiii=e.asm.O).apply(null,arguments)};e.dynCall_vii=function(){return(e.dynCall_vii=e.asm.P).apply(null,arguments)};e.dynCall_viiiiii=function(){return(e.dynCall_viiiiii=e.asm.Q).apply(null,arguments)};e.dynCall_viiiii=function(){return(e.dynCall_viiiii=e.asm.R).apply(null,arguments)};e.dynCall_viiii=function(){return(e.dynCall_viiii=e.asm.S).apply(null,arguments)}; -e.asm=Nb;var Ob;e.then=function(a){if(Ob)a(e);else{var b=e.onRuntimeInitialized;e.onRuntimeInitialized=function(){b&&b();a(e)}}return e};N=function Pb(){Ob||Qb();Ob||(N=Pb)}; -function Qb(){function a(){if(!Ob&&(Ob=!0,e.calledRun=!0,!ka)){Ca(Ea);Ca(Fa);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();Ga.unshift(b)}Ca(Ga)}}if(!(0=d);)++c;if(16f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d} +function na(a,b,c){var d=H;if(0=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}if(127>=g){if(b>=c)break;d[b++]=g}else{if(2047>=g){if(b+1>=c)break;d[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;d[b++]=224|g>>12}else{if(b+3>=c)break;d[b++]=240|g>>18;d[b++]=128|g>>12&63}d[b++]=128|g>>6&63}d[b++]=128|g&63}}d[b]=0}}var oa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; +function pa(a){var b;for(b=a>>1;I[b];)++b;b<<=1;if(32>1];if(0==d)return c;++b;c+=String.fromCharCode(d)}}function qa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var d=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;I[b>>1]=0;return b-d}function ra(a){return 2*a.length} +function sa(a){for(var b=0,c="";;){var d=J[a+4*b>>2];if(0==d)return c;++b;65536<=d?(d-=65536,c+=String.fromCharCode(55296|d>>10,56320|d&1023)):c+=String.fromCharCode(d)}}function ta(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var d=b;c=d+c-4;for(var f=0;f=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}J[b>>2]=g;b+=4;if(b+4>c)break}J[b>>2]=0;return b-d} +function ua(a){for(var b=0,c=0;c=d&&++c;b+=4}return b}var K,va,H,I,wa,J,L,xa,ya;function za(a){K=a;e.HEAP8=va=new Int8Array(a);e.HEAP16=I=new Int16Array(a);e.HEAP32=J=new Int32Array(a);e.HEAPU8=H=new Uint8Array(a);e.HEAPU16=wa=new Uint16Array(a);e.HEAPU32=L=new Uint32Array(a);e.HEAPF32=xa=new Float32Array(a);e.HEAPF64=ya=new Float64Array(a)}var Aa=e.INITIAL_MEMORY||16777216;e.wasmMemory?G=e.wasmMemory:G=new WebAssembly.Memory({initial:Aa/65536}); +G&&(K=G.buffer);Aa=K.byteLength;za(K);J[1660]=5249680;function Ba(a){for(;0=b?"_"+a:a} +function Ra(a,b){a=Qa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Sa(a){var b=Error,c=Ra(a,function(d){this.name=a;this.message=d;d=Error(d).stack;void 0!==d&&(this.stack=this.toString()+"\n"+d.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var Ta=void 0;function S(a){throw new Ta(a);}var Ua=void 0;function Va(a){throw new Ua(a);}function Wa(a,b,c){function d(h){h=c(h);h.length!==a.length&&Va("Mismatched type converter count");for(var k=0;k>2])}function qb(a,b,c){if(b===c)return a;if(void 0===c.Y)return null;a=qb(a,b,c.Y);return null===a?null:c.qa(a)}var rb={}; +function sb(a,b){for(void 0===b&&S("ptr should not be undefined");a.Y;)b=a.fa(b),a=a.Y;return rb[b]}function tb(a,b){b.V&&b.T||Va("makeClassHandle requires ptr and ptrType");!!b.X!==!!b.W&&Va("Both smartPtrType and smartPtr must be specified");b.count={value:1};return bb(Object.create(a,{S:{value:b}}))} +function W(a,b,c,d){this.name=a;this.U=b;this.ja=c;this.ga=d;this.ha=!1;this.ba=this.xa=this.wa=this.na=this.ya=this.va=void 0;void 0!==b.Y?this.toWireType=lb:(this.toWireType=d?kb:nb,this.$=null)}function ub(a,b,c){e.hasOwnProperty(a)||Va("Replacing nonexistant public symbol");void 0!==e[a].Z&&void 0!==c?e[a].Z[c]=b:(e[a]=b,e[a].oa=c)} +function X(a,b){a=P(a);var c=e["dynCall_"+a];for(var d=[],f=1;f>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Eb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ra(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function Fb(a,b){for(var c=[],d=0;d>2)+d]);return c}function Gb(a,b,c){switch(b){case 0:return c?function(d){return va[d]}:function(d){return H[d]};case 1:return c?function(d){return I[d>>1]}:function(d){return wa[d>>1]};case 2:return c?function(d){return J[d>>2]}:function(d){return L[d>>2]};default:throw new TypeError("Unknown integer type: "+a);}}for(var Hb=[null,[],[]],Ib=Array(256),Jb=0;256>Jb;++Jb)Ib[Jb]=String.fromCharCode(Jb);Oa=Ib;Ta=e.BindingError=Sa("BindingError"); +Ua=e.InternalError=Sa("InternalError");U.prototype.isAliasOf=function(a){if(!(this instanceof U&&a instanceof U))return!1;var b=this.S.V.U,c=this.S.T,d=a.S.V.U;for(a=a.S.T;b.Y;)c=b.fa(c),b=b.Y;for(;d.Y;)a=d.fa(a),d=d.Y;return b===d&&c===a};U.prototype.clone=function(){this.S.T||Ya(this);if(this.S.ea)return this.S.count.value+=1,this;var a=bb(Object.create(Object.getPrototypeOf(this),{S:{value:Xa(this.S)}}));a.S.count.value+=1;a.S.da=!1;return a}; +U.prototype["delete"]=function(){this.S.T||Ya(this);this.S.da&&!this.S.ea&&S("Object already scheduled for deletion");$a(this);ab(this.S);this.S.ea||(this.S.W=void 0,this.S.T=void 0)};U.prototype.isDeleted=function(){return!this.S.T};U.prototype.deleteLater=function(){this.S.T||Ya(this);this.S.da&&!this.S.ea&&S("Object already scheduled for deletion");db.push(this);1===db.length&&cb&&cb(eb);this.S.da=!0;return this};W.prototype.ta=function(a){this.na&&(a=this.na(a));return a}; +W.prototype.ma=function(a){this.ba&&this.ba(a)};W.prototype.argPackAdvance=8;W.prototype.readValueFromPointer=ob;W.prototype.deleteObject=function(a){if(null!==a)a["delete"]()}; +W.prototype.fromWireType=function(a){function b(){return this.ha?tb(this.U.aa,{V:this.va,T:c,X:this,W:a}):tb(this.U.aa,{V:this,T:a})}var c=this.ta(a);if(!c)return this.ma(a),null;var d=sb(this.U,c);if(void 0!==d){if(0===d.S.count.value)return d.S.T=c,d.S.W=a,d.clone();d=d.clone();this.ma(a);return d}d=this.U.sa(c);d=fb[d];if(!d)return b.call(this);d=this.ga?d.pa:d.pointerType;var f=qb(c,this.U,d.U);return null===f?b.call(this):this.ha?tb(d.U.aa,{V:d,T:f,X:this,W:a}):tb(d.U.aa,{V:d,T:f})}; +e.getInheritedInstanceCount=function(){return Object.keys(rb).length};e.getLiveInheritedInstances=function(){var a=[],b;for(b in rb)rb.hasOwnProperty(b)&&a.push(rb[b]);return a};e.flushPendingDeletes=eb;e.setDelayFunction=function(a){cb=a;db.length&&cb&&cb(eb)};vb=e.UnboundTypeError=Sa("UnboundTypeError");e.count_emval_handles=function(){for(var a=0,b=5;b>g])},$:null})},p:function(a,b,c,d,f,g,n,h,k,l,m,q,v){m=P(m);g=X(f,g);h&&(h=X(n,h));l&&(l=X(k,l));v=X(q,v);var u=Qa(m);hb(u,function(){yb("Cannot construct "+m+" due to unbound types", +[d])});Wa([a,b,c],d?[d]:[],function(p){p=p[0];if(d){var w=p.U;var x=w.aa}else x=U.prototype;p=Ra(u,function(){if(Object.getPrototypeOf(this)!==y)throw new Ta("Use 'new' to construct "+m);if(void 0===D.la)throw new Ta(m+" has no accessible constructor");var pb=D.la[arguments.length];if(void 0===pb)throw new Ta("Tried to invoke ctor of "+m+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(D.la).toString()+") parameters instead!");return pb.apply(this,arguments)}); +var y=Object.create(x,{constructor:{value:p}});p.prototype=y;var D=new ib(m,p,y,v,w,g,h,l);w=new W(m,D,!0,!1);x=new W(m+"*",D,!1,!1);var fa=new W(m+" const*",D,!1,!0);fb[a]={pointerType:x,pa:fa};ub(u,p);return[w,x,fa]})},d:function(a,b,c,d,f,g,n,h,k,l){b=P(b);f=X(d,f);Wa([],[a],function(m){m=m[0];var q=m.name+"."+b,v={get:function(){yb("Cannot access "+q+" due to unbound types",[c,n])},enumerable:!0,configurable:!0};k?v.set=function(){yb("Cannot access "+q+" due to unbound types",[c,n])}:v.set=function(){S(q+ +" is a read-only property")};Object.defineProperty(m.U.aa,b,v);Wa([],k?[c,n]:[c],function(u){var p=u[0],w={get:function(){var y=Ab(this,m,q+" getter");return p.fromWireType(f(g,y))},enumerable:!0};if(k){k=X(h,k);var x=u[1];w.set=function(y){var D=Ab(this,m,q+" setter"),fa=[];k(l,D,x.toWireType(fa,y));zb(fa)}}Object.defineProperty(m.U.aa,b,w);return[]});return[]})},t:function(a,b){b=P(b);T(a,{name:b,fromWireType:function(c){var d=Z[c].value;Cb(c);return d},toWireType:function(c,d){return mb(d)},argPackAdvance:8, +readValueFromPointer:ob,$:null})},h:function(a,b,c){c=Na(c);b=P(b);T(a,{name:b,fromWireType:function(d){return d},toWireType:function(d,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+V(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Db(b,c),$:null})},c:function(a,b,c,d,f,g){var n=Fb(b,c);a=P(a);f=X(d,f);hb(a,function(){yb("Cannot call "+a+" due to unbound types",n)},b-1);Wa([],n,function(h){var k=[h[0],null].concat(h.slice(1)),l=h=a,m= +f,q=k.length;2>q&&S("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var v=null!==k[1]&&!1,u=!1,p=1;p>>h}}var k=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(l, +m){if("number"!==typeof m&&"boolean"!==typeof m)throw new TypeError('Cannot convert "'+V(m)+'" to '+this.name);if(mf)throw new TypeError('Passing a number "'+V(m)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+d+", "+f+"]!");return k?m>>>0:m|0},argPackAdvance:8,readValueFromPointer:Gb(b,n,0!==d),$:null})},a:function(a,b,c){function d(g){g>>=2;var n=L;return new f(K,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array, +Float32Array,Float64Array][b];c=P(c);T(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},i:function(a,b){b=P(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(d){var f=L[d>>2];if(c){var g=H[d+4+f],n=0;0!=g&&(n=g,H[d+4+f]=0);var h=d+4;for(g=0;g<=f;++g){var k=d+4+g;if(0==H[k]){h=h?ma(H,h,void 0):"";if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;h=k+1}}0!=n&&(H[d+4+f]=n)}else{l=Array(f);for(g=0;g=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++m)&1023);127>=q?++l:l=2047>=q?l+2:65535>=q?l+3:l+4}return l}:function(){return f.length})(),h=Kb(4+n+1);L[h>>2]=n;if(c&&g)na(f,h+ +4,n+1);else if(g)for(g=0;g>2],m=n(),q=m[k+4+l*b>>h],v= +0;0!=q&&(v=q,m[k+4+l*b>>h]=0);var u=k+4;for(q=0;q<=l;++q){var p=k+4+q*b;if(0==m[p>>h]){u=d(u);if(void 0===w)var w=u;else w+=String.fromCharCode(0),w+=u;u=p+b}}0!=v&&(m[k+4+l*b>>h]=v);Y(k);return w},toWireType:function(k,l){"string"!==typeof l&&S("Cannot pass non-string to C++ string type "+c);var m=g(l),q=Kb(4+m+b);L[q>>2]=m>>h;f(l,q+4,m+b);null!==k&&k.push(Y,q);return q},argPackAdvance:8,readValueFromPointer:ob,$:function(k){Y(k)}})},l:function(a,b){b=P(b);T(a,{za:!0,name:b,argPackAdvance:0,fromWireType:function(){}, +toWireType:function(){}})},j:Cb,n:function(a){4=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(16777216,a,d);0>16);za(G.buffer); +var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},m:function(){return 0},o:function(){},f:function(a,b,c,d){for(var f=0,g=0;g>2],h=J[b+(8*g+4)>>2],k=0;k>2]=f;return 0},memory:G,q:function(){},table:ja},Mb=function(){function a(f){e.asm=f.exports;M--;e.monitorRunDependencies&&e.monitorRunDependencies(M);0==M&&(null!==Ha&&(clearInterval(Ha),Ha=null),N&&(f=N,N=null,f()))} +function b(f){a(f.instance)}function c(f){return La().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);C(g)})}var d={a:Lb};M++;e.monitorRunDependencies&&e.monitorRunDependencies(M);if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+f),!1}(function(){if(F||"function"!==typeof WebAssembly.instantiateStreaming||Ia()||"function"!==typeof fetch)return c(b); +fetch(O,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");c(b)})})})();return{}}();e.asm=Mb; +var Ma=e.___wasm_call_ctors=function(){return(Ma=e.___wasm_call_ctors=e.asm.v).apply(null,arguments)},Kb=e._malloc=function(){return(Kb=e._malloc=e.asm.w).apply(null,arguments)},Y=e._free=function(){return(Y=e._free=e.asm.x).apply(null,arguments)},xb=e.___getTypeName=function(){return(xb=e.___getTypeName=e.asm.y).apply(null,arguments)};e.___embind_register_native_and_builtin_types=function(){return(e.___embind_register_native_and_builtin_types=e.asm.z).apply(null,arguments)}; +e.dynCall_ii=function(){return(e.dynCall_ii=e.asm.A).apply(null,arguments)};e.dynCall_vi=function(){return(e.dynCall_vi=e.asm.B).apply(null,arguments)};e.dynCall_iii=function(){return(e.dynCall_iii=e.asm.C).apply(null,arguments)};e.dynCall_viii=function(){return(e.dynCall_viii=e.asm.D).apply(null,arguments)};e.dynCall_viiiiif=function(){return(e.dynCall_viiiiif=e.asm.E).apply(null,arguments)};e.dynCall_viiiif=function(){return(e.dynCall_viiiif=e.asm.F).apply(null,arguments)}; +e.dynCall_i=function(){return(e.dynCall_i=e.asm.G).apply(null,arguments)};e.dynCall_v=function(){return(e.dynCall_v=e.asm.H).apply(null,arguments)};e.dynCall_iiiiiif=function(){return(e.dynCall_iiiiiif=e.asm.I).apply(null,arguments)};e.dynCall_iiiiif=function(){return(e.dynCall_iiiiif=e.asm.J).apply(null,arguments)};e.dynCall_vif=function(){return(e.dynCall_vif=e.asm.K).apply(null,arguments)};e.dynCall_iiii=function(){return(e.dynCall_iiii=e.asm.L).apply(null,arguments)}; +e.dynCall_jiji=function(){return(e.dynCall_jiji=e.asm.M).apply(null,arguments)};e.dynCall_iidiiii=function(){return(e.dynCall_iidiiii=e.asm.N).apply(null,arguments)};e.dynCall_vii=function(){return(e.dynCall_vii=e.asm.O).apply(null,arguments)};e.dynCall_viiiiii=function(){return(e.dynCall_viiiiii=e.asm.P).apply(null,arguments)};e.dynCall_viiiii=function(){return(e.dynCall_viiiii=e.asm.Q).apply(null,arguments)};e.dynCall_viiii=function(){return(e.dynCall_viiii=e.asm.R).apply(null,arguments)}; +e.asm=Mb;var Nb;e.then=function(a){if(Nb)a(e);else{var b=e.onRuntimeInitialized;e.onRuntimeInitialized=function(){b&&b();a(e)}}return e};N=function Ob(){Nb||Pb();Nb||(N=Ob)}; +function Pb(){function a(){if(!Nb&&(Nb=!0,e.calledRun=!0,!ka)){Ba(Da);Ba(Ea);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;){var b=e.postRun.shift();Fa.unshift(b)}Ba(Fa)}}if(!(0$A2}eZOzcO$hq_egBB(%zX3BH#6US`?)W^ zW$k^{+Wrcky`JaunS3U*@tnnic+O@aJm;`(c+NHO3t1Z4^O%L_MFujT`Ot1;9M2{u z@N71a1&pD+(7-Qd4%(NnGTl?Sda5W$tQ0GR2n6h)2yj-wnU56;o23PMa7?rP{y@-| z?GrxEb9fr#4hz|Sn++Jkg8nMIpnC}hd_3LP*Y3#%`YL>WKXNA-6bc3{97Xu;F!ml0g4z8C<=VL-;LGe&C`2(%=@SuOonX<*8k;3- zpH-e?1$+UVIV0Wjhj@akqsd*u30#uTm$178U&>1PGFHMbXYX@<1-q0h_B`jq*)Gmc zWzTUwf<4RmNcIfpqu5iNk7mE+d<<*iW7(6Ok7G}8KAt_!`2@C;^NDOb=ablDoKI#u zIG>VWNzSLT-*A2!yP1d1<4kdyUh^UUnE#pAe8fNHpYxhO^55~a zPui^&Vm#-G?o7$1m?&qu(M}g_VSR-i4Sy%A1apO4E~H=IZ`bm#lKbpcobT2%{ex@r zi(Ed^Zm=3$=K55tkOi(#t=BZhg!++>k1)rf0ZcE@yZu8&TY=_*vTV!(v@yy=gKN9s zoXktc18LU88|$%H%pM!zKoCH1EwzeZqwNL|{*h0_+o}@5n2oNr1j|@0s=dB(bP)() zARObP><0B+Z~W6Yr9EG=wQpn01_3~6sR1|(k8pLYH~#5)PK#)**B>~enpe{*G<9{o zYXM8O)#D#vE^CZ2nr6AUg-ZtrtdrVP#8R#GiUt8N?+gcAFdHUPt5T$Z)Y_GlR_Qr< zQ@D32HXaM$Xv&^hAK(68!ujIHdL4|^(rZBE=6`>fk0O^l9ydcIBV1c7I%3cCgUzY>>Z>?`6Qd|YSOXhTCmTS{h#ZpIf{puQ5EM0`T zVeWthdQj#Nx{j92wq6|sXdVdx&9gk#bj*wSkI$^kI-`uv%01>sg-8I6yLL;=?l|p+ ztavVNBtX~I>fKB@?2s6Inl(>s?W-qbHxr|Oo4r~9I3ed20FwuEY)*rp#$DfJbJaMnk!Jv)LrM}9%LrO-RlWW`uQn|uBy>4_^6ScscoBi|Ky9mc z%}kO|$RPgdtMdns+8YO53?HC3vFTuZcw!(>_Qi*{wzuNXrrzGT>!@&}x@3_$@ZkOj zeT#|8;kYN8JL39Sez#%UiA2l-v8|>Rgo4FFZg8R-a;@=~M$#O$BVNatvKK{cBM(L= z%#0`E`pkmCVqaYAg8pHT5^Za1T<(pu&rMJK~_Aw-l;@TjSm$uD?TG)HYg_ zPP#4blFB$Kp*vxb(xS?QX9JjmqPlEyG0EzUU=B@DV6l2S?$XVxC*lSO!8G!xHr9g; zScArPdq=k#ptDvBt^@J}gJGly<7jRJfb^V{8hcdkXc#NH1^q%%Oo02J6_xqc)~iEt zomN~!fC0tbe8wo~vx+PFnjvpBTnlVihv_=LU6)5~jDQDGf!*ru#r*_cpB1kj1|wtS z@MlIQK>Hyh6SjzGS5uM_T#}w0CDZb878pItg=&Rk;<(i)EA@;XjG-}lmf@D`?=*VH zO1JzUcH!A>PnD8g5Te5-SkNU{4o{b$9P7$jMO(dozNlNkYzyo;+3n!hOm{$^UGZwc z1_}vIKjAfluovhB8|i+2dWXB?`W5%0|8rXfdS!W$PDEFj?eWg-kzr#kF@J~2s)&7> z(k{4}i7-{TSG1a9Cumo-&vMkZ-um?JZZWwD;+V0nav&r#^r-CzFy+Sw+u6ZI9j zWIaY#yiC1}%6#foRqhIsc`}yZXk{*$$v}^I6z0e#cBIS^-8dOc2g)oP%ORWkDj6*b zqv0}G!b}bkz}dG3jkkvr#&9@hLDk@aSWl}!R(ngH6eBGZGC?wK5t{4rW@WdSUBc4` zX`A}Ks#<=zezVHO^JrCZRyOuadduJs8B9u%N^YtSbNdvmtFP!e&_)1Y>6d%f^%%W# z5Eza7qllqZkPg=JgB$VM8#^Z->Ru9yp@w3B%GW0$OtRy+_KK> zS-}%}V9#hMgkhXmhLT0KBYARCuK`?7>UF!W?|YBFpzc(Dine-Kh|V>E6i&yM8%V*Y=rxRyMc_xp&zjY$fROrX`m;y}AZU0B;J*T*EgbGEDt39sH_* zD>ql@ECxET9`~@AoQi$_3Y(dhr=J9q}swHZDz~nj-BD&q(jn>#z|z1V+}6L z^u%ce@~8MZIzW}42?D-qD>zUDy%y9D5S)m~yLDnfN&a1YuvL%vghb15w@Ta?l(Y4F zeJgpNHSyW}emy5Xp8r~Jk6)O55^c!_r2shMZ*nbplCJJI0-RgeZxTOAKhv+0=j+4$ znq@jRj?Ec<&vu-op4xwFj&~rAE%$MPK#+AVOWK3mc(63ap^!&=Csz;oUSu83Ypj7+ zin!w0m;;x6C{N#Y@@L{mUhwQ8hctSmg$C{8U7>wGM2m6!^7R{ z+n$SMAgI`$mwbCfHW$0{l1E0C3;wc>j5$j{vo9L+8egj8W1mbL3$$RP61eJb#}4V+ zkK`G0XKvgEN90&iK8hVZL@wb$2#Kb-0U6h`#tr2C^qu44@ntc;?C&C|3`U8){>BbG zkdK3BG@=4Jv?| zu@#0$Z@$;{(x~G$?%DZm&LEgk&>_pC+Z#*EergY#b(~uXm4$Hl2veE*s|8cUrm${U z7|&jZ{W!Ih68wp_Vo3NF^%l2tJz!DIS&!3({8!;9l+}UXxOFlBw(_;WLDq=yQ!bwJ zsaV>5?a=`42)*D_F7@gg+5AcU|q@C9MK zgLsn-3*k)`$WJ~(A35VD9@UGdUykRO)64P9I`blamcH`Lxw*MG5coVVWrj!}k&pav z`T%~i?texTKTqF#MqSZRT!v4cOAam=O~;vBlA(y3zA1UlS?OH6=U;hhE=iKPKc=dh zNz7z^k+VhcK*B}n4CzWVM$_=Jnxa84hipioxiRL4my3mz)$E4!pXLnbAzeGS#2-`^ zB3>=$7VG(QOA3R=y@6?BEJ*p?v_{MV3xfLYx!s0^8e=}?UpR!p?vg)5hU?)6s26Z8 z({u8%JDAnmaFGLpiRtPZ!aK4QJXMK0zJlP#MuW|V*cgA~~@9DZ~E0RSiy@wMZGZ0jX#fv

cZ0Hi%2(T83Nd9vl(N0>9!yB-f!54oVho&-m)*Ip1!&}1?gs-#gN1`9&b zY1Ob7YW)-{2g9b|wqzM*{LJ7^6DSZ~-CJe`W=k%4g+@X$bX9fMZKkAv)VzDZ=&P$_U(n(7O}Xy9*5F+Talk z=7(nJ#yO`&dXxLWAq>;?!a?09ot;tw<4?@Bd$Bo;&3X|N*fA0TLDoXvE}#r(%5?$; z=y~rBM2e$=?7}cze_`S9Y+!ShHL94L>OQyF$slV(0UKOGCd$S)lkk%i5K!JJj2y^H z!yWZzSPs-zUN}MAA@r*ko*f*94Px=r^sr3>b?XBo6O^Ig1PQXh>OHo&2};(-AW<+_ z8e^d2r7ubXFJlpMM=BE}U_c3>&IlC4)|2|h&YYlibp`kiaK^ZWEaujvMNS(um$cp_0W zX$TmXhST6&bTRkBgdxrXlZ_(B7!4v5YR7|`@*eI+Iy^=esuW0#AeXomJkBrHYVm$6 zLypshEi)=An1aBJ$HN|fsksr5A_2MpZ;HSyd4Z!JeIpkJ@ufE=@E>&6n-}xybF{vXZ-M1Lpqh0Rl9_Oy3o($gtvdic_01ZzP6k`xFSTIl%J%*Mxx3Co3~{D zW?i+rcfpVo?gc3=6b~nuuRq$|U8mpOU5l5h^o{pSOLIJ-Vwn;BpZ5&UKGmD&HpP6f zHwf|7G&3M8;3(jeK0rYGz^oDpOVP|`+dls4kWM*QAJ^y}>p@|X0|dzbU# zb4bmr!Qw10LdFTScq1@y<8%F^C9 z-NV(&Pu<{`Q5t=^T7R@DI`B=?SzE23hMpJ4M*~VIDTp|}%vZF`F-NUUQxO&NmI=OJ zMuax^(0w*XGr#CYoz@aVMg?Vnc9Qv-fqnz62XWLc0{W}X1>+7F=#dU6%ymM7litGp zx-Jah+XneyCo&aDmnljc1CkqZFB^=#of!X?+zSSIcPH|R)zN9DV55*^v|Iths+6S9;L>SL3crmah;L+`cDG*s?}op6pk9Bv^{&Y$^6tH$@~iD>YOkXl6_7ZWCpzsm z;)#y4fqKW;e!lEi4=lpoW<2-|@2k5#Gz!nT4-LR`<3mI7Jn&Gty|z#mt=Sgq4kC(s zbuZ`uQe+4!MHLpcEJbK~Kn33J}?X5L`E%rVCW>d$=dhU-QUilMWLOxe=Gwv7jngq}XT&!7U1! z%xN}aX2hst%f@q$@FXQ1g+als#9(y|yhXqGNJXNBNDUw!B6oo>;nN^&suv94Yz+B6 zWhZ|Y+@G>O0hm!P&yI4nx=x;MJ`$<5b!1r$*;^=^!4T#`p3cA!c@NWLuQt{}U+_`Pk)<@-e?V}SS#=#lpV^>;jpPqNr*bZOJLS8GE&~;;PBlRQOYZ1i0zuo0alE=3Hk!OBO zTm|3Nwci1wNq(dM`kQ@v;ma}P%fEU#KUfC^p`#?fPr{6y@mLJgFMq6m;BTm0GUrwO z*kgT5kLHk0*qtS-EcG{nsBd%B*E!nWIjlDolBo7X)uxrX>egKNYu^&8Wm&~)d9J!4 z*R_fv4t!RzvhZPg(ar*Xb#mp-13une&v|-!QC9*KJBMjGQ?AncpB@4v`OKt#1z@{P zd3icMFgUK4O6Xk0WdYUi`54?>Wb&mE4habKhqMJz3|sR|996lOpSb`;DxV#V_QGfL zOFCwe|4&D;HReYl4Ef8rV(jkTXKT9ChO$vX%WjedlyEtwV1mk-UxgY~2sc-#zj}5B zh%S3>nK+cA|N7ir=hLK!>!gZqT~C355crG@(hI>(3dcgolj&wO#jM6A_#&?)mw~Iq ziI{RbIALmX`paECX{Dm)$96|_0ttdJG|KtT3c*AJD#9q7!y8SEaDlIvwfges4^o+P z`U}IXbU8+^e_^TR!#nH6Ci8B6ad9D;Lg)>X4V3XBL;}f^WZ0?JKfIWixdIWK+0<32 z_>+|Aw-e`!ccqTEKEfyHPg*~1*e}()5+cM$6_Z53;^BWkU=Dq?hrU2}L1Z1iO34bG zh@^A^n1TG2q;W#hcO4?f70HI>r*OVmx3(3FR<1X;mF4FEH(0E4+^kfz&e)t{d5(Uo ztpeHZcWrm!x$c+O`j2IxfLWnSub+U(w(lp$HG7u?h% zkdI1OHge((H$7BMKW<1vO*s@z!^Q)2(`dMPGCvxj66rYLGTdmnzIY{aXMM-YRbr(` z_E?o=^P$NhtN+ezN*;I8WFC^zn1DA6WxkSjnaob1$?#Nsl0Ii`Z?Q_~RcpUW?BQMG zJaAPV38^;lhhj{wZl{)cJRPLqR>%yxVO%_+z7(Y5&&D)`s2o}=W7KU=qafCFrGcZG zM#!%R)$U?KM(7Q53uJUB0viFo=^N}Ig|EPVt1EUmg`GmCuC(MQTpr-^_guaLH8BQG zUw&JhkJ6{yR;BmfmXT^j)={f;-2&dGSFS79JJ+d#8;!rM1#?XU&ILi0gjA;AK1AFg z^tjvqYOl?ZQ*^`n+58;6dHvFp+Q847Ma*;7brM8)g*> z@pJ~tGZj#ZGClo{3a5+=ES8hk3w^^KgEO~zpQlt#BQYC!nEt~Z{fpM)iwsY8tnW$&mDQvXu|L`rxCjky~t#0sugZWzqh=$AJ15vb1meZvUx5Z5PfjAzY4 zd;`t2;NVHJsUUXU#&SMOZ`~M=d8mF_T96 z5F1&hl;PFmC*0L5^LfK_PQU43>J}F~UwKzF|91j~IDU<2pc9z9S}jjUrQ^)Imy5^4 z`h&Ym;i$jA``qEHIT=#5HeF7^hHf>fy^E@uYj>?Ak-=44fdgOT%!YcU>N@7Dz$xwd z_T~tPpWWVf(DP_01YTQ0qAj7vw0PTQW=Rs&HAjynZ=kSCH|4g)p@DEjlI{4Ns*(LsijX1-6WfCp)Ase=h zejiW*5MJR_co)PK$X@{F!_m5+6?kaDPBa*bUw9oabgPk_;iQdl@`RW%8#cX5%%}_Y z45hg6^gZ3_b;X|IG86H^`hy{GP63>Y>~I|u;1@-bJN67rm?-pr3mJ>)d+Hcd=gq|j zQp;;*OB@Xn=jL~bCxcKD1C=L+ltElDX|*4}5?CK}((%z+sBiE~gG_wQcbpAwA+yx- zpuX$<^?rN-X4lzz=)qWmn(a1YgHD^dbnJqe^X4+f2=)qKQ@Q|;0(KBE`rAiiO)Y$y_YzbR3pUtNRJ&?&c_j8)|gpaY^k>mf1Zz8(v^8)?t!PBPFvNvFSE#71B zravONJ=F#!{9Oo1cAT$$Kc)5!sHPCi3UeY%-}26EJ?`CM`tZ9)b@6*2=Yv>5E@O2) zUDvHYvwj(?T6kG=bG81>2cyNunfm(=Dx3{j4i7VRf0mQ0_kNg{ruGAn&eX?Qdi;ll zp+0{9P+v{%$Ob4 z15@1wuRAZ*y#(DkVSW3d8Z)=u8{KoLZx)f-XGXnEPK)S_kB21)Tnnbz7+Qjn0<>q~ z{}Btlb~Dir3+83tUN70^>Y9B+J{`!S=;FC(xny!0)GR~atOdO>jjzND1)Ah;}ct;oT z+HmsoPZnBPBwR(Q+wz1z9&9!*xVt1_LkI*y0s({!@_va52x^TX36RYTl7Nq@2?Z4p z1sPCOP^`3~rPelRi`W(w6$L9OKdTlkRodGAZEIWFYNh4>J##k^^wV~gduQgHIdkT` z=FGV{_KNF;H(XC1=5-J9Ft6pc%#G(_=Ebv)`SGl00X!R6e>|5M=u(!1_A9-_u#UxVZrs!(AK2 z1|fVtw_o^p7&JV>oz0RMXTCwq?Gql4-|NZna4%0{R;D{Vknw=q>t>Z>nBN=YERS>d zs1mOyG_ugkJXJhdFz)q$fZ&PWBA4)ZId{2Pl9#1e`GR>soqI+wuW)nA>vN~OMY`MV zEl(dZOeA|sMWkr3o4Gv&nLdw?`TdqZDUjhFnk0)^(Dr$KQIBA5me07(cV%@6FfP1a zug{0kiqZXeKf!#SwBgwz*N2rnT(B(Z!p|+-f-{#Z)gyu_d92I|370p(ySO^F|DdpZ zE3)`?>>oKIpea6Xwm&-oPg9OqNnPceNO`w8dM z*^fD&!Pap;lReA%EOvnN+3Xq4=dd2mFJb#RpUZy4`K9cKoL|PC=KONDj|Z;hOmVC1 z@BFVke;0p<-@_jicZdq5~{kqK^37!tc z1ha+g7Shr?+(Y;udR}pFc&ir61_^W$CJ7GxB~y{tF2DoClxlssIE!rum5HZ40TsJ z*s8nIb^)NyRN#L-G#D;FODs%HcBxM)6wSf<=ACL`I|fK=pRI7_0qGN(7t))8qbtE< z)HfAivyU9h7Ph;OQ;=1+*!;Q`AQ}_|OQ7n11&4@FD|AWno&S9&Cz5Zl66|qWc410Y zK9+!TPuYBJ=5gM?(6M z)cY#dRjPF)9Mu(%()MkZ%+!-r5f>B+(X%L1{&>Vi!xk`A7jP_HHYlRoWvRfD56e*% z+biRQ$_bTp%wxhIb=hu30!m24_CgxMkp{OQF`b+?MqpRd)7B2{B|!7Y256qkk!0_@ zsF&pE%=|oU!2l8jcN7#6q6=u;c6UbIy`os2UfvH{^I;ZbXS5d#T4W$UN?$6rkJgcl zX41l@jLiark<7a=*z^5NHz(i^`&~}F1w;8pQ=#iiKQW@@w&xOK4%n}=Rol}9HAou8 zGJ=+a1s@9yNlF+JY0jHfI^aw%ftf%(Q(=QtQG^`fbE*uo}6T<-BqQGDffzGw=o#wC}zfRV>&jAtCcUPScN&f}TH4 zn)$HLqdR}C`;g|REOYx6&M!kv1rvDlFFyUu7Z)PKs!Ozh8lAjF` zJ1X?xfp#vPBP2f)wIRXtP7>WP@TLFB(t+&0U`qlaRy@6|CRFP3w(eWGxhBEqK3-7cd(x!bR5vMloNV zs?tq^21IvMs4|+A*P-Ge<8F$2z!~CFQ`80i z+!Pao5Uxk@xS4wsWdk@-VqzgZ=B2r@8@JhwRAcS3jFc>>=qR2YWuuJgg5@H1lJ+x^hn}N+A@euDD7it2cY& zau}rfP?|cCriQ7{(ny%Ga>eKAczN!{+p&4uQ|$7O5@Dxh;)D^3yq8zG%3vmB)>aNE zJ0w-OIgW!4A_yywoUJEbHkJ?3w_G;mqVM3ux80>I3|7mczA z^G|v%8Gn^q9L&>uC+3S?c|AuaW^nOjUeBqE3j}{fd!{U+Aa(7OSNV;)Wa|E;S?~~l zTnT9Vk5k8tsHDTl2p>u(-;uK@GMG4H5V=GeOGwnSeX>GdIc*fL)LW*Nmw!F#m7{DV z(Ef-A)4lOtJdmgCkRZy3gu?GE%CYFD(}pKi_I4|D`SgPPO51BiNTC#uf{atm#->hfPj*5>$dd2LOJV*a__9XEQu7}JSk51E^lI(AAh&LFI25mmW z+#-C+9k(sqLY|mo1LyTQYe3`jOWLfzglwJ*@dH z-_eNreMo&2!Z=?MP00;!XkrNwY%$7V6qd zTPILpOS4mCHjJbUlJyh$Zg+}ymjZ_JbmABsEP@AYJmrCC(l>WSyodtm`48CC^IGMNDt!e!`qLyA8$9_0Sfhc^rA{WPPZ*;;#cWkEGo?z z1MPSu4yh8CKav7L*>vD0+bNIek}EdwsDAp28}KY!Sb*pJh0FK?{gZ_a$ve4lb-8Z_ zSs@qepDfwZGw{k}uIDbDnOPF?!7FhYM79=(Z-RV@{@&6*^N4dluROIYz%6&(~#FeZ6oqDl0fmqV9-S zK=JAm1T~__O*o^Lkfl1%)X?uSkoCe%FNLx7q3ShF)j0~jYW1Tzh7+b@&FUD7%W#f< zxhc{`B*~~$UR*J?){k*w7&ml`@-L6dOCWSuu#8~FS4?-FKrQ5E1mNFcsa|FiAfwZpsLd?g-}&eYd$MVbcb61730`Ow!)%G>Vqh2H=QNMCE+kXAWt0r>49)5Km z59m2pkLwDU^aY2g3pZ8xeNr6AyQ*tTyI$`HpFa==@7*kyGAVoD$E;SldIv_`w zL=DQ;-(E3EJjM0LE3V{ob=tgqzEqdZD-15hB94)vwza$_Bu)<1*VYt?eM9v+yfzNi zPu3KC8l>sJd$3)C=1hP8f-yt2dtY=WRJ7KFc z17$z;v8_HEsBl>0Fvyg@;PPEA-{JCYE`QGDTU`DhmnXPkFg>r?ut4Jw1M#4$UId{{So=7R8TZZSUo9XAlVa_hmxbi*sd;O)s=a*vXeS|0B)upg z#l+Rdd!go-xYibF9tzuE4INqJgSS%5Awip%LAk!=VNm1uYG?2~{m!0|a7WkO^XH1+ z`t=+0%iU{m7t)W^4?-4vq<%1;qyJvN7|%rwv+;bi;X2->2P{!yHP^LEW?5&sRS3bU zpq!?Ec8%hH(z3=5`M`Oai&;Y`^E82vcCW(=hKc)xp1xpkJOs#jyE91~9D%kB+ujBq zsF+2k7cN$AYcSS0{|2!u6K;i+kIQ?6G>NJ(CYneQ%p{_O6t?Hw)kC@1DfF;wrs-dF zopAY(UjLx`T0N?B4NkNJopicYtiN1bn&hFtsA$y zymEHWim!9dxAk<~lrH#qecLS)`A+@HEd%)u{fArn<6I1OHOwDxC&693opD5%0CF}v z#SS#t8Ft#kay z-V=O+{^pY(R&PsH_ogDi^C`K=YZZ&Q@Xw1e3*w?ULCHH;Z>8XXDIf<$)_s4L)?gu>+IDb%A@5|+j^w;(c$Z`YIpR3$T~6Mt@jn;_};&7C!SY4 zwc7h^3X;15{r*$4c!@4~dU20_db2C-i=#aNs}0DQ9{J25Ul*OvI5vmM1S;3p%tNf z6CGs_a~*!QD(w^JUZ^rDH`-Ry}c>%1Q4ddHwC@LJcd5KFtEq9aTr~pKtBTT`^Wvz7THcrt%RI7F6q&tSUss4gd ziYX>In*-LwZRm(G*&hcac7hNQjLYwuqZnKik;czo8yT;Zdyy5$O|(Vlj9aIVAIS=T zm9#L%wB=|auh)Z)R`CyY?a|@9PH#OrN$e2%-J|8{o5`V(_qwXFM>?t(>jAG7h|OG2 zdaXQpO%hTXxS}JEwXcoHX@|=qCn{xc*u*@g1?DZA^s(16-6mvy^xDw0TLX^GqYlp0 zT{a{>=x33!V;LDcOqN!q&B7=k+B7dRMD=)pvboPa>ivL3f}#Ft`eze;owhnB*kI=1 z)01qlbkh2QL8(S$eN?O$1u}eoi>Ssr^zjP{J8Q`iy5?tV?9Yu6xF-#1$o^nq)_W7G zT&PM=3Jng|5r^XSt5f1;&YeLy96N8+t*__$9!3XAxt_m%zJ7Xr^*~gbdO4?*jHLyc zRYwQ0Q?M{1*!6mrdnYY?;Pnx{XV6giHZyxeZhy;}%+heC1*pv^nM$;nKDgm=epol% zv4-dM{OOJ|p3woDNmLWZV+}ZYyPnfNDks)=xG>y&nEHJ&vT=2GnDXgo?;PMiV!9`W z>AUZY_}?2uu)V|dGj~Rkerh^vhbcE9CLJjx*jD6C)J;2CK;2IwM&-&c1A4`s;k38R z=;_3$8>4@^E8Op}8GXBV6jJPxLg#G?=f7YeNBbaj`MVyay>sV$z@WKL8;pZ}7+=i& zfr0GngIqZG(oNy4M-0ZE1ct!6C>nxp_oi_6P6OM~2kY*>1yBy?_cw(@n+$Yq0*Wk8 z84wX&V?dkxK;2#H9K$q%{d*t@!NK_@NC&uiRbQZWAQw-t-!sOQd0jtQJ$qs?&_(vkwfuX{fL&Fb8l82 zt!*xtxRdx%H6pM%eS-4WdiA{-(+m@I1N|yOXT(JxfXo>Sx>!%`?oZ^X-Md=vs6Kgb z2~to0_LXx^5Rwz!XwmQr#im+FzbRX`nvHoF_4o2^V(wJuejKEu2i}ek4aO|wDt%;o zAz!8cygigPyw^G|oT=}>e~|TsmZs{X_viM@Lg5`b5!i6vhIM`R{vlwp_<_05#f=Zl z(kC8R5c;FBR8N$O?(zmxiE$w-uHG>ODSFEeo8QoL*N$KFv@^sI-85H!ihQg|{zb2S z@I*z0iAX5h<3_69VI8;#QVE~0aK5_!If(-LuU%@RMFE{O*(CFO?te(~=`)Cru5kp1cKLpdqcT2 z13A4!C7CI^cgIfAw0ds|5pLN#J+xjhft?|=aKzQw$z0$w`Uw5b-jh^{{^57WyHe#$ z{pokF!<}WOZhxZ5yiYyRF%m~3oN$~Be(631FGN(vqOaj=4k9^|-5g(=z#KBUUF*tH zS}(lEP3@?~my+Y_LgIF=KUz0X4_zO-aa7fv z98QJQXPK&>N|P@A%S|EqGa5V@QfD$%rjm)l=QET?9So@xA(f$0oxzIz8Op0R_ft=X zRJux$6az^LmPw8vJcds+l&4Y&hJ?weB&V-wjV{exQOu_J@_7mz7n4=cGbxl4U3 zgUTXjGgT5s-Emn&-R^#htckjkBBC370bA|OQ2Qc;Olk+0Mbrgya-wUHv6mnr|KNON zq}1mlQ&+m>9dm@-Amn->*HI)lGD~7=V>#Wq@~zzgk=?~_f|^dTrl=pPvogK%O(O3nL#mBQzB#JqwT5^RDi4 z+2#D<%Gz=`#pZH^hIF}%`0J)k;VaU5ZoYkpPK7lvMCf@KB4<)-3CZ@;4P+&KDFE;1 zp@khZe;*oDu+r%`rOQQ3QYx(FH)^05v}`D$A@VuXWau7dwo|>-5|c+1KP_D|Xz@N@(;h z7(Yhf+%zojX=O z<=C6qx5{udMj_`5@$R}Whs68reYx~{=f2zlj+6sNkZwDvPs+W5%(%Z~c78%VUlAoj zzIDC?eIyLuSH$OY{KpGZ+wRwocC0R#@yIt5^_WG~kLJ<7DMzsr01jWg4&zra2&GC7>;r6we!xGsZ zxJv>}{9zF)i2u5McUL+}gZR{s?*{N!Jg&*b_cpmjsMGky4z2 z#v2>#@pc(&ZL4pnX=$rp+1$`EthsSZeH0ww2n15uBf3V>uj%W z?O5K{(b&4QW_Z0bwxqqGffaVxD?9XaZ!KI{SKHjYxVEn8zmdIQkp%sQ>l^A;b`s&0 z9S!X@ePlWtT9((ew_T^hKc8?_nSIekb}SZK+1T2-ytBQgvl!1}yT~41QEa%ZZEjrJ z+E8E90xsI>Slf~%9SxndOS`DZPV~lIWDl>r0Gqa;7ySIsQ!bx%$rW~e!{U`o?Ydrg%A?GL(0W=4`V%W6An+Ltb_ty$i9eM56ctg&UO!>j|Yt8Jw%J1E#_2LnRs_}+aR zMjgzh4V@$jgLxj(5*qw6S{Lw^ut;M^Yi(c2eV}JFeCN*pN)HyY?)#Wq)$5JiJ+uEA3 z5dPSkS~Yd;4Yi#OtgfxOt-YgHpNZZ$yRxF9yz)Zc3ofv+Vasb3tGpVI^Ia42| z>t{}E_cA!f2LWC7VSd-L$&(qQK1*V3^kuczO($1Cm&Rfkn|t2iDU6N782v^PY~~k0 zf-S@tPrw=**($cGku_3-9!OcNM>$OkTa4|K=AX|rPD?%agRstc>#{g4`&;0w#d{Cl z^dpiIbLa<3_$|Q+9I{q_nHoC{stE)`cpm!xFk_`9wr!U!EW4h?T30qV7ZW8t;hm}C zc$QxGPT}l3!WIuQb#K_}hrgd-^hXqo1?BN;F^Jy;-xo(xZb&H+O* zbw{@T=R45}&u3dH>42rD(-Xe{Q-962xCO*)tDo7Kc?6t|;R(=pa||E*bM#g3UXr;t z*W$TMy_suy%qM%MzMZFk@@{`|Bu~HpZnsh6{uEvRi=w0$#B~gO98S?&6J3_d*qIc4 zDA6r*x@QvIYtfyTstZmIHgh*S(1j;Qq!Xz_2I??AN$MRZ$9K_i9>jSDtE>XVkM>;r zo7C#GuSR=uVtg6eb%}N-+RGB{ZnSF??Tu)6B--22?o70IqurQjKZ$nSX^&;kqSKrJ z97ek((LRCpl0^Fy+VzR{$7s{9AXRUDuShIU)6c#)!|ZMvwo-r{((h=R4!`dV?>=vM zZE8>F`>n2YGQ*^P4yt2@de#SdT7EFtfa<>tnqh{Y{qk_We({6S5D^Q9&L>7~azm@G z*9|*E=tqrecTh9m>gWX>3hC|y=wk=e*bBc$G diff --git a/codecs/mozjpeg_enc/build.sh b/codecs/mozjpeg_enc/build.sh index 3388aaa0..702a85aa 100755 --- a/codecs/mozjpeg_enc/build.sh +++ b/codecs/mozjpeg_enc/build.sh @@ -17,7 +17,7 @@ echo "=============================================" cd node_modules/mozjpeg autoreconf -fiv emconfigure ./configure --without-simd - emmake make libjpeg.la + emmake make libjpeg.la -j`nproc` ) echo "=============================================" echo "Compiling mozjpeg done" diff --git a/codecs/webp_dec/build.sh b/codecs/webp_dec/build.sh index f9d4ab1d..ca4e7e57 100755 --- a/codecs/webp_dec/build.sh +++ b/codecs/webp_dec/build.sh @@ -31,7 +31,7 @@ test -n "$SKIP_LIBWEBP" || ( --disable-neon \ --disable-sse2 \ --disable-sse4.1 - emmake make + emmake make -j`nproc` ) echo "=============================================" echo "Compiling wasm bindings" diff --git a/codecs/webp_enc/build.sh b/codecs/webp_enc/build.sh index 01f78913..b76afe53 100755 --- a/codecs/webp_enc/build.sh +++ b/codecs/webp_enc/build.sh @@ -32,7 +32,7 @@ test -n "$SKIP_LIBWEBP" || ( --disable-neon \ --disable-sse2 \ --disable-sse4.1 - emmake make + emmake make -j`nproc` ) echo "=============================================" echo "Compiling wasm bindings"