From bac4023fb70e16cbac6df2f51a5437eaa16f7cf5 Mon Sep 17 00:00:00 2001 From: William Moore Date: Fri, 26 Jan 2024 11:54:33 +0000 Subject: [PATCH 1/5] Add vizarr_or_iviewer to views.py --- README.rst | 25 ++++++++++++++++++++- omero_web_zarr/utils.py | 49 +++++++++++++++++++++++++++++++++++++++++ omero_web_zarr/views.py | 22 +++++++++++++++++- 3 files changed, 94 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 79a5bfc..4da5248 100644 --- a/README.rst +++ b/README.rst @@ -29,6 +29,7 @@ Install with:: $ pip install -e . Configuration +------------- :: @@ -67,6 +68,28 @@ In the webclient UI you can use the context menu to `Open With > Vizarr`, or use [omero-server]/zarr/vizarr/?source=[omero-server]/zarr/v0.4/image/[ID].zarr +Viewing s3 data +--------------- + +If you have imported OME-Zarr images into OMERO and the data is publicly accessible, e.g. hosted +on s3, then you can use this app to view that s3 data directly (instead of using the OMERO server). +This relies on the public data source being set as the `clientPath` location (shown in the webclient +as "Imported From"). At least 1 `clientPath` for an Image or Plate should be in the form: +`http....zarr/.zattrs`. +For data that matches this criteria, we can replace the image-viewer with `vizarr`` (images that do not +have such a clientPath will default to using iviewer): + +:: + + $ omero config set omero.web.viewer.view omero_web_zarr.views.vizarr_or_iviewer + +If you want to remove the Preview panel + +:: + + $ omero config set omero.web.ui.right_plugins '[["Acquisition", "webclient/data/includes/right_plugin.acquisition.js.html", "metadata_tab"]]' + + Testing ------- @@ -84,5 +107,5 @@ The application is released under the AGPL. Copyright --------- -2022-2023, The Open Microscopy Environment +2022-2024, The Open Microscopy Environment diff --git a/omero_web_zarr/utils.py b/omero_web_zarr/utils.py index 13242e5..5cb4e12 100644 --- a/omero_web_zarr/utils.py +++ b/omero_web_zarr/utils.py @@ -17,6 +17,8 @@ # from django.http import Http404 +from omero.sys import ParametersI +from omero.rtypes import rstring def marshal_pixel_sizes(image): @@ -96,3 +98,50 @@ def generate_coordinate_transformations(shapes): transformations.append([{"type": "scale", "scale": scale}]) return transformations + + +def get_zarr_s3_path(conn, image_id): + """ + Check Fileset clientPaths for path ending zarr/.zattrs + + If Image is in a Plate/Well, add eg. /A/1/0/ to path. + """ + query_service = conn.getQueryService() + params = ParametersI() + params.addId(image_id) + params.add("zarr", rstring("%%%s" % "zarr/.zattrs")) + query = """ select u.clientPath from Fileset fs + join fs.usedFiles u + left outer join fs.images as image + where image.id=:id + and u.clientPath like :zarr""" + + result = query_service.projection(query, params, conn.SERVICE_OPTS) + if len(result) == 0: + return None + + # We also need clientPath to be a publicly-accessible URL + client_path = result[0][0].val + zarr_path = client_path.replace("/.zattrs", "") + + # Check if Image is in a Well - need to add /row/col/field/ e.g. /A/1/0 + query_service = conn.getQueryService() + wsparams = ParametersI() + wsparams.addId(image_id) + wsquery = """select well.plate.id, well.row, well.column, index(ws) from Well well + join well.wellSamples ws where ws.image.id=:id""" + ws = query_service.projection(wsquery, wsparams, conn.SERVICE_OPTS) + if len(ws) > 0: + plate_id = ws[0][0].val + plate = conn.getObject("Plate", plate_id) + row = plate.getRowLabels()[ws[0][1].val] + column = plate.getColumnLabels()[ws[0][2].val] + ws_index = ws[0][3].val + row_col_field = f"/{row}/{column}/{ws_index}/" + zarr_path += row_col_field + else: + # assumes bioformats2raw image!! + # TODO: need to handle this case - NOT true for all Images + zarr_path += "/0/" + + return zarr_path \ No newline at end of file diff --git a/omero_web_zarr/views.py b/omero_web_zarr/views.py index 977edad..9dd3314 100644 --- a/omero_web_zarr/views.py +++ b/omero_web_zarr/views.py @@ -27,7 +27,7 @@ from django.urls import reverse from django.shortcuts import redirect -from .utils import marshal_axes, marshal_axes_v3 +from .utils import marshal_axes, marshal_axes_v3, get_zarr_s3_path from .utils import generate_coordinate_transformations from omero.model.enums import PixelsTypeint8, PixelsTypeuint8, PixelsTypeint16 @@ -312,3 +312,23 @@ def apps(request, app, url): rsp['content-type'] = "application/javascript" return rsp + + +@login_required() +def vizarr_or_iviewer(request, iid=None, conn=None, **kwargs): + + s3_url = get_zarr_s3_path(conn, iid) + + if s3_url is not None: + url = f"https://hms-dbmi.github.io/vizarr/?source={s3_url}" + return redirect(url) + + else: + try: + # Default to iviewer (if installed)... + from omero_iviewer.views import index as iviewer_index + return iviewer_index(request, iid, **kwargs) + except ImportError: + # ...otherwise revert to original image viewer + from omeroweb.webclient.views import image_viewer + return image_viewer(request, iid, **kwargs) From df2edd362e9ce13c96fe56dbe40806c5e334f37c Mon Sep 17 00:00:00 2001 From: William Moore Date: Fri, 26 Jan 2024 12:07:10 +0000 Subject: [PATCH 2/5] Add assets copied from vizarr v0.3.0 build --- .../omero_web_zarr/vizarr/blosc.0f249b18.js | 1 + .../static/omero_web_zarr/vizarr/favicon.ico | Bin 0 -> 359318 bytes .../static/omero_web_zarr/vizarr/favicon.png | Bin 0 -> 67325 bytes .../omero_web_zarr/vizarr/gzip.2d512667.js | 1 + .../omero_web_zarr/vizarr/index.709bf6a3.js | 1 + .../omero_web_zarr/vizarr/index.8a48b24e.js | 1 + .../omero_web_zarr/vizarr/index.ccefb928.js | 1 + .../static/omero_web_zarr/vizarr/index.html | 24 +++++++++++ .../omero_web_zarr/vizarr/lz4.90bd37fe.js | 1 + .../vizarr/pako.esm-9240ff4b.6c52ac68.js | 2 + .../static/omero_web_zarr/vizarr/robots.txt | 3 ++ .../vizarr/utils-6b0080f1.f4680ab2.js | 1 + .../omero_web_zarr/vizarr/vendor.32c7a866.js | 40 ++++++++++++++++++ .../omero_web_zarr/vizarr/zlib.3b3d5619.js | 1 + .../omero_web_zarr/vizarr/zstd.73353642.js | 1 + 15 files changed, 78 insertions(+) create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/blosc.0f249b18.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/favicon.ico create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/favicon.png create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/gzip.2d512667.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/index.709bf6a3.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/index.8a48b24e.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/index.ccefb928.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/index.html create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/lz4.90bd37fe.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/pako.esm-9240ff4b.6c52ac68.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/robots.txt create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/utils-6b0080f1.f4680ab2.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/vendor.32c7a866.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/zlib.3b3d5619.js create mode 100644 omero_web_zarr/static/omero_web_zarr/vizarr/zstd.73353642.js diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/blosc.0f249b18.js b/omero_web_zarr/static/omero_web_zarr/vizarr/blosc.0f249b18.js new file mode 100644 index 0000000..197a4bb --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/blosc.0f249b18.js @@ -0,0 +1 @@ +import{i as A}from"./utils-6b0080f1.f4680ab2.js";var I,g,B,Q=("undefined"!=typeof document&&document.currentScript&&document.currentScript.src,function(A){var I,g,B;A=A||{},I||(I=void 0!==A?A:{}),I.ready=new Promise((function(A,I){g=A,B=I}));var Q,C={};for(Q in I)I.hasOwnProperty(Q)&&(C[Q]=I[Q]);var E,i="./this.program",D=I.print||console.log.bind(console),o=I.printErr||console.warn.bind(console);for(Q in C)C.hasOwnProperty(Q)&&(I[Q]=C[Q]);C=null,I.thisProgram&&(i=I.thisProgram),I.wasmBinary&&(E=I.wasmBinary),I.noExitRuntime&&I.noExitRuntime,"object"!=typeof WebAssembly&&p("no native wasm support detected");var F,G=!1,a="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function y(A,I,g){var B=I+g;for(g=I;A[g]&&!(g>=B);)++g;if(16(Q=224==(240&Q)?(15&Q)<<12|C<<6|E:(7&Q)<<18|C<<12|E<<6|63&A[I++])?B+=String.fromCharCode(Q):(Q-=65536,B+=String.fromCharCode(55296|Q>>10,56320|1023&Q))}}else B+=String.fromCharCode(Q)}return B}var h,S,N,w,R,s,U,J,k,q="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function L(A,I){for(var g=A>>1,B=g+I/2;!(g>=B)&&R[g];)++g;if(32<(g<<=1)-A&&q)return q.decode(N.subarray(A,g));for(g=0,B="";;){var Q=w[A+2*g>>1];if(0==Q||g==I/2)return B;++g,B+=String.fromCharCode(Q)}}function K(A,I,g){if(void 0===g&&(g=2147483647),2>g)return 0;var B=I;g=(g-=2)<2*A.length?g/2:A.length;for(var Q=0;Q>1]=A.charCodeAt(Q),I+=2;return w[I>>1]=0,I-B}function M(A){return 2*A.length}function H(A,I){for(var g=0,B="";!(g>=I/4);){var Q=s[A+4*g>>2];if(0==Q)break;++g,65536<=Q?(Q-=65536,B+=String.fromCharCode(55296|Q>>10,56320|1023&Q)):B+=String.fromCharCode(Q)}return B}function Y(A,I,g){if(void 0===g&&(g=2147483647),4>g)return 0;var B=I;g=B+g-4;for(var Q=0;Q=C&&(C=65536+((1023&C)<<10)|1023&A.charCodeAt(++Q)),s[I>>2]=C,(I+=4)+4>g)break}return s[I>>2]=0,I-B}function c(A){for(var I=0,g=0;g=B&&++g,I+=4}return I}function t(A){h=A,I.HEAP8=S=new Int8Array(A),I.HEAP16=w=new Int16Array(A),I.HEAP32=s=new Int32Array(A),I.HEAPU8=N=new Uint8Array(A),I.HEAPU16=R=new Uint16Array(A),I.HEAPU32=U=new Uint32Array(A),I.HEAPF32=J=new Float32Array(A),I.HEAPF64=k=new Float64Array(A)}var d=I.INITIAL_MEMORY||16777216;(F=I.wasmMemory?I.wasmMemory:new WebAssembly.Memory({initial:d/65536,maximum:32768}))&&(h=F.buffer),d=h.byteLength,t(h);var f,r=[],n=[],W=[],T=[];function x(){var A=I.preRun.shift();r.unshift(A)}var X=0,Z=null;function p(A){throw I.onAbort&&I.onAbort(A),o(A),G=!0,A=new WebAssembly.RuntimeError("abort("+A+"). Build with -s ASSERTIONS=1 for more info."),B(A),A}function V(A){var I=l;return String.prototype.startsWith?I.startsWith(A):0===I.indexOf(A)}function b(){return V("data:application/octet-stream;base64,")}I.preloadedImages={},I.preloadedAudios={};var l="blosc_codec.wasm";if(!b()){var m=l;l=I.locateFile?I.locateFile(m,""):""+m}function e(){try{if(E)return new Uint8Array(E);throw"both async and sync fetching of the wasm failed"}catch(A){p(A)}}function O(A){for(;0>2]=A},this.X=function(A){s[this.N+0>>2]=A},this.Y=function(){s[this.N+4>>2]=0},this.W=function(){S[this.N+12>>0]=0},this.Z=function(){S[this.N+13>>0]=0},this.V=function(A,I){this.$(A),this.X(I),this.Y(),this.W(),this.Z()}}function j(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var u=void 0;function z(A){for(var I="";N[A];)I+=u[N[A++]];return I}var v={},_={},$={};function AA(A){if(void 0===A)return"_unknown";var I=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return 48<=I&&57>=I?"_"+A:A}function IA(A,I){return A=AA(A),new Function("body","return function "+A+'() {\n "use strict"; return body.apply(this, arguments);\n};\n')(I)}function gA(A){var I=Error,g=IA(A,(function(I){this.name=A,this.message=I,void 0!==(I=Error(I).stack)&&(this.stack=this.toString()+"\n"+I.replace(/^Error(:[^\n]*)?\n/,""))}));return g.prototype=Object.create(I.prototype),g.prototype.constructor=g,g.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},g}var BA=void 0;function QA(A){throw new BA(A)}var CA=void 0;function EA(A,I,g){if(g=g||{},!("argPackAdvance"in I))throw new TypeError("registerType registeredInstance requires argPackAdvance");var B=I.name;if(A||QA('type "'+B+'" must have a positive integer typeid pointer'),_.hasOwnProperty(A)){if(g.U)return;QA("Cannot register type '"+B+"' twice")}_[A]=I,delete $[A],v.hasOwnProperty(A)&&(I=v[A],delete v[A],I.forEach((function(A){A()})))}var iA=[],DA=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function oA(A){4>2])}function aA(A){if(null===A)return"null";var I=typeof A;return"object"===I||"array"===I||"function"===I?A.toString():""+A}function yA(A,I){switch(I){case 2:return function(A){return this.fromWireType(J[A>>2])};case 3:return function(A){return this.fromWireType(k[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function hA(A){for(;A.length;){var I=A.pop();A.pop()(I)}}function SA(A,g,B){I.hasOwnProperty(A)?((void 0===B||void 0!==I[A].L&&void 0!==I[A].L[B])&&QA("Cannot register public name '"+A+"' twice"),function(A,g){var B=I;if(void 0===B[A].L){var Q=B[A];B[A]=function(){return B[A].L.hasOwnProperty(arguments.length)||QA("Function '"+g+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+B[A].L+")!"),B[A].L[arguments.length].apply(this,arguments)},B[A].L=[],B[A].L[Q.S]=Q}}(A,A),I.hasOwnProperty(B)&&QA("Cannot register multiple overloads of a function with the same number of arguments ("+B+")!"),I[A].L[B]=g):(I[A]=g,void 0!==B&&(I[A].ba=B))}function NA(A,g){var B=-1!=(A=z(A)).indexOf("j")?function(A,g){0<=A.indexOf("j")||p("Assertion failed: getDynCaller should only be called with i64 sigs");var B=[];return function(){B.length=arguments.length;for(var Q=0;Q>1]}:function(A){return R[A>>1]};case 2:return g?function(A){return s[A>>2]}:function(A){return U[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}var UA={};function JA(){if(!kA){var A,I={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:i||"./this.program"};for(A in UA)I[A]=UA[A];var g=[];for(A in I)g.push(A+"="+I[A]);kA=g}return kA}for(var kA,qA=[null,[],[]],LA=Array(256),KA=0;256>KA;++KA)LA[KA]=String.fromCharCode(KA);u=LA,BA=I.BindingError=gA("BindingError"),CA=I.InternalError=gA("InternalError"),I.count_emval_handles=function(){for(var A=0,I=5;I>C])},M:null})},y:function(A,I){EA(A,{name:I=z(I),fromWireType:function(A){var I=DA[A].value;return oA(A),I},toWireType:function(A,I){return FA(I)},argPackAdvance:8,readValueFromPointer:GA,M:null})},h:function(A,I,g){g=j(g),EA(A,{name:I=z(I),fromWireType:function(A){return A},toWireType:function(A,I){if("number"!=typeof I&&"boolean"!=typeof I)throw new TypeError('Cannot convert "'+aA(I)+'" to '+this.name);return I},argPackAdvance:8,readValueFromPointer:yA(I,g),M:null})},e:function(A,g,B,Q,C,E){var i=function(A,I){for(var g=[],B=0;B>2)+B]);return g}(g,B);A=z(A),C=NA(Q,C),SA(A,(function(){!function(A,I){var g=[],B={};throw I.forEach((function A(I){B[I]||_[I]||($[I]?$[I].forEach(A):(g.push(I),B[I]=!0))})),new wA(A+": "+g.map(RA).join([", "]))}("Cannot call "+A+" due to unbound types",i)}),g-1),function(A,I){function g(A){if((A=I(A)).length!==B.length)throw new CA("Mismatched type converter count");for(var g=0;go&&QA("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var F=null!==B[1]&&!1,G=!1,a=1;a>>i}}var D=-1!=I.indexOf("unsigned");EA(A,{name:I,fromWireType:C,toWireType:function(A,g){if("number"!=typeof g&&"boolean"!=typeof g)throw new TypeError('Cannot convert "'+aA(g)+'" to '+this.name);if(gQ)throw new TypeError('Passing a number "'+aA(g)+'" from JS side to C/C++ side to an argument of type "'+I+'", which is outside the valid range ['+B+", "+Q+"]!");return D?g>>>0:0|g},argPackAdvance:8,readValueFromPointer:sA(I,E,0!==B),M:null})},b:function(A,I,g){function B(A){var I=U;return new Q(h,I[1+(A>>=2)],I[A])}var Q=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][I];EA(A,{name:g=z(g),fromWireType:B,argPackAdvance:8,readValueFromPointer:B},{U:!0})},i:function(A,I){var g="std::string"===(I=z(I));EA(A,{name:I,fromWireType:function(A){var I=U[A>>2];if(g)for(var B=A+4,Q=0;Q<=I;++Q){var C=A+4+Q;if(Q==I||0==N[C]){if(B=B?y(N,B,C-B):"",void 0===E)var E=B;else E+=String.fromCharCode(0),E+=B;B=C+1}}else{for(E=Array(I),Q=0;Q=B&&(B=65536+((1023&B)<<10)|1023&I.charCodeAt(++g)),127>=B?++A:A=2047>=B?A+2:65535>=B?A+3:A+4}return A}:function(){return I.length})(),C=cA(4+Q+1);if(U[C>>2]=Q,g&&B)!function(A,I,g){var B=N;if(0=C&&(C=65536+((1023&C)<<10)|1023&A.charCodeAt(++Q)),127>=C){if(I>=g)break;B[I++]=C}else{if(2047>=C){if(I+1>=g)break;B[I++]=192|C>>6}else{if(65535>=C){if(I+2>=g)break;B[I++]=224|C>>12}else{if(I+3>=g)break;B[I++]=240|C>>18,B[I++]=128|C>>12&63}B[I++]=128|C>>6&63}B[I++]=128|63&C}}B[I]=0}}(I,C+4,Q+1);else if(B)for(B=0;B>2],C=E(),D=A+4,o=0;o<=Q;++o){var F=A+4+o*I;o!=Q&&0!=C[F>>i]||(D=B(D,F-D),void 0===g?g=D:(g+=String.fromCharCode(0),g+=D),D=F+I)}return tA(A),g},toWireType:function(A,B){"string"!=typeof B&&QA("Cannot pass non-string to C++ string type "+g);var E=C(B),D=cA(4+E+I);return U[D>>2]=E>>i,Q(B,D+4,E+I),null!==A&&A.push(tA,D),D},argPackAdvance:8,readValueFromPointer:GA,M:function(A){tA(A)}})},A:function(A,I){EA(A,{aa:!0,name:I=z(I),argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},n:oA,x:function(A){4>>=0;var I=N.length;if(2147483648=g;g*=2){var B=I*(1+.2/g);B=Math.min(B,A+100663296),0<(B=Math.max(16777216,A,B))%65536&&(B+=65536-B%65536);A:{try{F.grow(Math.min(2147483648,B)-h.byteLength+65535>>>16),t(F.buffer);var Q=1;break A}catch(C){}Q=void 0}if(Q)return!0}return!1},u:function(A,I){var g=0;return JA().forEach((function(B,Q){var C=I+g;for(Q=s[A+4*Q>>2]=C,C=0;C>0]=B.charCodeAt(C);S[Q>>0]=0,g+=B.length+1})),0},v:function(A,I){var g=JA();s[A>>2]=g.length;var B=0;return g.forEach((function(A){B+=A.length+1})),s[I>>2]=B,0},w:function(){return 0},q:function(){},g:function(A,I,g,B){for(var Q=0,C=0;C>2],i=s[I+(8*C+4)>>2],F=0;F>2]=Q,0},a:F,l:function(){return 0},k:function(){return 0},j:function(){},B:function(){return 6},m:function(){},f:function(){}};!function(){function A(A){I.asm=A.exports,f=I.asm.D,X--,I.monitorRunDependencies&&I.monitorRunDependencies(X),0==X&&Z&&(A=Z,Z=null,A())}function g(I){A(I.instance)}function Q(A){return Promise.resolve().then(e).then((function(A){return WebAssembly.instantiate(A,C)})).then(A,(function(A){o("failed to asynchronously prepare wasm: "+A),p(A)}))}var C={a:MA};if(X++,I.monitorRunDependencies&&I.monitorRunDependencies(X),I.instantiateWasm)try{return I.instantiateWasm(C,A)}catch(i){return o("Module.instantiateWasm callback failed with error: "+i),!1}(E||"function"!=typeof WebAssembly.instantiateStreaming||b()||V("file://")||"function"!=typeof fetch?Q(g):fetch(l,{credentials:"same-origin"}).then((function(A){return WebAssembly.instantiateStreaming(A,C).then(g,(function(A){return o("wasm streaming compile failed: "+A),o("falling back to ArrayBuffer instantiation"),Q(g)}))}))).catch(B)}();var HA,YA=I.___wasm_call_ctors=function(){return(YA=I.___wasm_call_ctors=I.asm.E).apply(null,arguments)},cA=I._malloc=function(){return(cA=I._malloc=I.asm.F).apply(null,arguments)},tA=I._free=function(){return(tA=I._free=I.asm.G).apply(null,arguments)},dA=I.___getTypeName=function(){return(dA=I.___getTypeName=I.asm.H).apply(null,arguments)};function fA(){function A(){if(!HA&&(HA=!0,I.calledRun=!0,!G)){if(O(n),O(W),g(I),I.onRuntimeInitialized&&I.onRuntimeInitialized(),I.postRun)for("function"==typeof I.postRun&&(I.postRun=[I.postRun]);I.postRun.length;){var A=I.postRun.shift();T.unshift(A)}O(T)}}if(!(09)throw new Error(`Invalid compression level: '${A}'. It should be between 0 and 9`);if(!E.has(I))throw new Error(`Invalid compressor '${I}'. Valid compressors include\n 'blosclz', 'lz4', 'lz4hc','snappy', 'zlib', 'zstd'.`);if(B<-1||B>2)throw new Error(`Invalid shuffle ${B}. Must be one of 0 (NOSHUFFLE),\n 1 (SHUFFLE), 2 (BITSHUFFLE), -1 (AUTOSHUFFLE).`);this.blocksize=Q,this.clevel=A,this.cname=I,this.shuffle=B}static fromConfig({blocksize:A,clevel:g,cname:B,shuffle:Q}){return new I(g,B,Q,A)}async encode(I){i||(i=A(Q,C));const g=await i,B=g.compress(I,this.cname,this.clevel,this.shuffle,this.blocksize),E=new Uint8Array(B);return g.free_result(),E}async decode(I,g){i||(i=A(Q,C));const B=await i,E=B.decompress(I),D=new Uint8Array(E);return B.free_result(),void 0!==g?(g.set(D),g):D}}).codecId="blosc",I.COMPRESSORS=[...E],I.NOSHUFFLE=g.NOSHUFFLE,I.SHUFFLE=g.SHUFFLE,I.BITSHUFFLE=g.BITSHUFFLE,I.AUTOSHUFFLE=g.AUTOSHUFFLE,I);export default D; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/favicon.ico b/omero_web_zarr/static/omero_web_zarr/vizarr/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..02a653ce42efadccf844ed76512b0a9942cc6db3 GIT binary patch literal 359318 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%0ANQp% zbo9>X75D~M05P$9M6aMMW4Ej@(JwDO$whlaeY6GPV$V%c zvO9L?I8$nn#TOY-j-QoCfmYK#NlN z0bCQveSvkVT-4)7fr}o3|2z+!^*{5K!8HH^tke1S2;DAjk9hv;`ERrZSe`UCHjzrD z!M=tt%wqMVh!Ah#hjc;r_af)dz5GVq&w3x+2menD8u@<`y8pyLEgkRELHDcaaI=(# z^qFLk2a#S1-JgYhh^Qwj%*8BnX$Iw3Rb!@ot(rN{ z_B8YLCu&IC@V;&#Mlr*wo=6Zn5*A~|9>GHgsfnh!Lmdz_Y?h2S@1WZ7`nsaGhOh#(7%a!aTuixdT`h6nLj}iNAIIdq~vi0kQ zt~c?XXIhwM*K+-h8G`SkKDQikd2qg=gt}qt8)|Z?Lz7N5h2f;euD*;=?4!rd-VnEK zw?aJj|5v!T<*NzdF8y(l?(+CZ&+I%&lz&lrjDsvU#pana1BR>59lreLD~IUm!)n+7 zC5VqJ041QNAz%>bZ$pg@`vHgrwAYu4oFdQgjg5)G{ElQ%@6Y__eEql4|9_4DdVRg% zzDlhTyH@P2Ezrvtik_on=zV-1%b}mVh0j0#{5PJ(_I1CH(Z~LMuK?Tob#?NIsK;5PC`!#M%na{Jj#SGs3^yFx- zoQ!zO0fS-LvHt$q7cQKbarx5e;;WZW483{n7+pG6MQ3_tbfiNLDCtNi_}__mIp*T< zY#g=$dQ7oEjsft@pQs4T_KlB)jjj?pyT0BS2OQ@0-?0CMy#PHw{Mr$^pZU+S1ih2k z)s#Z^mixfPXio{d&y%mJ004%M73b z`1FC;UvIzXDYD$T@>6d&s|#U4UMfjyl7CK4+C|SE)5+9hC0zBi@Esh3-mxH zwP98;?*@!U9v~_#K7Px5iI5w%QQkI1@z5Vd}XVfUMTelzz4|KanWfX#or6LPF67rDM<#QMESlkG)v z?D{P)L@fmBC@XoFSVbZ7t321B1hY{}kzXyvQD#CJ@~?$r&sizz6(qKJ>N4lG&HlVv1*kxD?B|n)xRev+2^MPsew0&GQ&uPy_PzT z?F*gHc|64R5YuPgx9WL61@_U1UN+`E@1B9JjXHd`w+-maV|%{~yyw_nBX;&GvqP~9 z+l7K%cag9Cw$GfcHofg?xATOXBK{2ydH z05X8%fgA_meF52+F_0P`CibJ0m6lQ!YIXF`+uR3e4?8FmHAji`}REpo0p^ZUDeT|vw$oe?G^agB!(!l($pyQa0aSS-p zg_>EjF8~{WWdO$`)TI){(c-W-(T{jXiVQNq%wuCr@SE|UU(2=w>;1;2W-2Ky!M^1v za#COy{m8Tk4Cm6PCgqckh>mKt@k zI*#qb-sjq#X6TcaTIhPV^P%hS@SgWgFyLPU+zdxWY$OE{*%!8!B0K))G5psxrV(We^|J1 z;nlTk*Y+Xjw(uuE`N;$PO|k5H^@SH^TzmQX*w?Nc{rRge4AAq(D(O6W0#0={tQhu)vv8gdHh-@ogsQXL5EJ#JGQ?apm>t6NgL!YL*dZWdFW^0L zErRo~#hPG?wbrWyTJ%b4#_c8?8xWV_J;RmgsmMnRCpFIV)94V#cbn=pfya*zZ28an z)sOyf+0W-(aE&H!iApB1kmbkKr^mUyl@{&tDbMEMo%Yp;@9RbF9`DjX53Nb(^Q>C) zE;{CY&oGR=w;W^Z=DeOByC<=uN00g)Swjd{k;OB zqQZ9bXJLT%58Bz;Jz;5S>5biERdeUg{W<1{{m&16a2L-J{|#ioi?Ok>2Y5CiUMu{7 zH{Q5B>H75-ZC<@{{POk7hyHx!w2qz`Qo#l&6MQ-W{vQYbkE3ty82V<-zJQ1Yz)xwz zt`H^cfSmMr>`KJkA?!phN8GLwv3uq-+x>dR*YMwHBN+Pz6cq~e`W8`WZ~$tH9LW>= zLzw$KZ+uAD{MB?A^SZc}?QzTkTd@zg?}2!K z0A?hlik?ZH9l$e8xo3iHG2?z<{%&~Jw@RS3K|L%3+8Q+2DWrxBP@!)cwNH=%vVu5D zPw>4R9c=$GVuWRg_4=?KWxk%H?D+S;0zB_`XsCUOqA;bpKoW8`KG>4-Qv5NK2lFWq zPp(5=uK}^7Cf51jeH-)&@1@~cH9W6^_fZ+RZyh$RfYANmKe*4m_?^h*H>QL?0}EZv)_T8f=>LK#WyAPqT=?0*RGtYx%T48tFK;azj^tDmd^Ib z=u}SyprTW#pF06?9UaSnBbb*fVuHvG_Q4-8z)z`$Zd71rS0-ct_9;_Nb~cq^#(xF+ zcdOyg*P)+ZudfsK0NVr%o(;nDzq7DIop&kO+hQNcfgRWr=z&=WshI15{G+h>Io6L_ z9`x{>1piON*FPgrE4Y8US3@UI!+f+chx(PF)P%h~sx(KE=W*|J66vtFjQ5vu|02&o z=h;DAPifo}$~(h&A24I#6mp;$-y_c-hPq*U zH5}77#rAkN1^CXhD!Q?Uj(u4M=hV2qmS=DDa89olzfT2b`s9RDW{f+zSZyTBU8}y> zvTo`BSnS@ax3fBsVrOT$!r$NjG1m8(ojWc&J9{Q(3A$jeXai;jo_+L@N8Xz>apK40 z$3H;hu}@(9xch1R1NYN?_ufPIj=AR+c8$Cbzn~Vn`2b=99KRAW;M&#aT`}ugdi}ZX zPhL7(PtP8yKuwSw{8tFu`V``743-1OU<(`-Gc+oV`9ahP@eI*6^dD%^zfe(4+MKq7#>N!X*Bh?rpvg#`K|zVAgIt_~FF>w>;QFU&8(-Yx7K@I)ds7uP;XBpBCMiSR zW>Sp%XQ}Z%KW)S^)wZ_!x$vh(YlHqx*k-MEN>7WO|2^oh5!`P9_c^{_lTU4x*ms#9MOks~ z6za8~wys%3YnIRZe8rMQ@47fSq++KA&lA6ov(??*UAkt?>X)B* z;_=^37(f0tbDwt#K7<_u6M+XOJV0abyO;Sd_KGZ7vSbi;xfjb1^VjvptFLZ+{gr3^ zuV3za|LTRN8!w!wq;q}cbf!m6r~5Pj^S>JLb<_%@m+p8EcnRHnnEi6Z1_#=?XArSX zClDWtnj!2?=iSLc{=S&$;f!5j_Sltq~l$8{U zI_FaO`)cTWp3}p6A2oa&+XLtCa36XfvA)y2@KcbhV7=d`j-;-#0Mev6Q3dLt6wuMt zsyyWO(4S=DKF=@^wbZDg7QBbvzq1n@dxOAnLu)nmhZw=P4K3B!C1wQ6ffm>YdemrE z%Cjg1b;4=!KEG8d^Sc@wm8-5@yEa-MZ2m$0n;msJnT4V>JuxZ5;U~$F4u62&zf}Q0 zzY1|Bkk-@6Vr~~~RVjQ3 ze;3Tu-MI?;Lg&zgarZ)h|LC)6)26@e?CR>@(bKbfU|?Vd_JM5*2?_B#aA050=FOX) zn?G;vr?Y0xxQV@jx2I2k6u$lx>=vAa-GUDh?;2q_a1VA2n0AWYL>#ai|D4!{Fn>+Z zT|fHCwaas^Upd}&?ULcmSI*bd#i0ti&@V?$pn}f!R{~n_t{Qq*2O!pt+InMOE%Y?x zz#-J-aJ?Y^-*}d2GiC;{E>~j)Nl_m5gJxnUcw#vEhe9b6bIH+XPjcw{CiE+FuhC)n z6-Tj;;~3`hbFaRz^;ypYXISSW&Ua>@8lQn{m7w=qrF66*gZh*q$nm+5TH-_s=zUEw z#|>bMY0;a+JI%4zxD|Te*gs*6zZ!RjFz1bX1G-zVGYC4ryB*vIdIV~4+lVg6f=-~L zxtdxK7pRB-Aj?mnTuIoi*f8ghblQ@H7hZUF8^?ys*L3vwuYCo04pe)4?Nr2!_GTpd zR;R_dpGKVj!~B$h8(b5@zP=v$VeZorem-=57i@i_p1-qyQq-$+%{utcxwAgR_j?iJ zYvtH}g@nqpkwXu%Cx6$yv||Hyg+4KhW;`|#e)|~u(S2iXVn@)2^XJbuJh^hEV%4gr za#ycjrCqaX)gkcsXSn|!{C!%uU@k3~H=E|nnMr0DVB9VIAl;9hV&m?=|MQ0)obZPg zPd#AGh$oK)VI`gGEeH2im=&ZE zGT^M>pbjzk8j*85$vPVL0Q&_;kS92Vd?D}D=riRqc)wsHb`RBS3XluUp<19$m4hB- z@SB2&yiXoTKp8N|KI9o#c1;xH!p%sChI5VCycePKOq*c$@9-_xPP zOaU`$aNCHUHXUB4BSX6mazHEM0lW)Eh8%Bvq{~ftNk(&{UYl_4oM9ZUrHHNmYybNH zb3Z-4Ke5l}L|^li=6cyWttw9)A7=OKm_Q54O$k6=AG@@WOKQ|2j)c51*YKEQ`aF+L z%%c{1ANy#qlcL{LJIDJa`@xBxhEmx3$U~RLQyFS`;)3kRcHes14(`vLIhh`wggwAx zVXxnNFLnZrLG12_yeI6>*cbf4ym|9}J%8T3Kh2vvm#|xqmSeZ@lh`r5Y}pgEWbq;kq2%(6h_ z3^{Me=tey*zb0cgQ)xv^Xy+%ujr|OqShs z?%a__aBWBTgn#wN^)Gb4zrX)MLyLY9>cq?Q(t-zLf-L`-mlSZbG%Jd9s0*)04vBMm z=3Ksr>5KTDN$2A?#kFdJ_uNM>=4oKIRx|c%)nbRe9JBhN^P~K&$je~|ZCUp?Eu8x( z&6qZcprhftj~BeX|NgPq2YMgj($SbPV{TzT=&i+zAHTU_{kq$GcI~2V+qTi>O`B-- zs+IKAlgnwvieXpC=Fs$MkBGScL*vJNx_sHvpS!y{=SUa2xQ)7MKI(Dqz z?c&9=i~fav?xP>obOl%^VkYN!e4i_d(!*Wy(?gD64)^t>2uIA_N9`!)?KdFC*M#^F z@0~X4e2(cEb-vlx=N=VNFVEcP9$L)R>p@P(dHVE`SU;4;gSCGT=O9z_1*^ZO+LH2##~S z0Dz4k_>Sk;W;i2kd}9vp9CW-9d>+UY*cj)*`*Z#9Igp1u(N>5!Up8X=(bQV(cUza` zd|Q#?C~EsE3qq-(B9)poS@5Y4N3AKuE_2L7Ku)4l>^3saG#52iu*-T`=d+A9?+Fxp zLNPxW{2u`S2f%*;@P1$z;6J#}VE*?29f$`sBd^Olkus74Zzaci|4&C-t)#oVWg~t| zqdvgj`=R}R_B_wyJ%9e#n*5C5f`m}p>v6%hHzdfzsfs1Y`*Qxs$a{|MbNooy`r`Lg zCG`CrozMJ7|GY`>_cg-*RcFB7Po(r{cd?(>V%JJqx^NoJn>B@|K0J}8U_Uta0~7Xu zf&UYr_s5D@J#&A?j2X0h_bzg9uqVX(3Gse%u(v1F_|Tp`duZ#H&9q^|I$E=OCC!-) z?j!#9@T7@fSRUMe!qd}T-rU^z1m`cl&E@86arx;(q0gV~tbP`KK^F&Qbg{pf&Krv9 zLQfg&0ger-=>p`y)6mfu1Xvc-80~dox104ij<_#i;yK&(!}k3UzlYz8^MLc`2Vh?y z-f#|e$Y-GQPc|X1kKA6DEP!gVoJgK*e=|SU{zj?9n^d{M)T&HGA7m=EX(ZHvJW6L> z5%Q6xsH5WC3S=*Qu3p&t+&e7#2f2>`eMG}M1DN+bKUe_Vhu-JCfdkkX$QbO_1NFEK z80x8y(N#~~unD@_YEUOwf!#z=l#vqfnXEM9*@}wXkoVqu@BXjzvA)fBF#6hm-W51` zr2omzCXG#Iy!U`4#_h*xF>W7~<;UITdAB@oQ}pXV=W~CKi0_$r-z#=c@NbEKQ*862 zW(B+-!2H}^^yqi!&}$+~q|8`P?Bcd1%iU{e!|Fx!#DeKGd*-7wbH=04>(d1HCr+A7 z_d(~60q5@n7A%-gYuBzJ>;t2qpdc}C8@Ye-^7JGZXJ@jt#raHjz>+14Y2Ms9w`a|m z_Q{jWm%eCaWuf!)^4f{w;Kj`SZ(ET>IvW$6IPI465Ef-&g+mxlYUu z?UK^@u0lGG8lm&pA8-M2fu|u0o@QA9?ix`=&w$U*fY%qk3dHd)m?7c`s5$Oc!@od$ zp<6CEf4a4R4vCo^(bOdMq1s%JKiA}X{kpj#zOJb;#grai$!;QbJI zKh&egoPl~A0kaI~ZlHdEb@E~?@b?B9L$Qh-8_rH+DdHg9S$xrl~bG;Ya`et9>fVwc=Gs|%!F^7U@Q3x3M zKZrc|0MF4zZm$jfdU_@HaG_>A%-e$8Y_`(6l?!R{!WlGc`Vzx_vq8XnrXaRc~mK~Ygrgt}ddLCs8HU?6#Wdy^Y>V>&oE5OxX^YJX_)6N|op z?*C-ooLO&g*}SnMK0ZFIqM~9d@=;vp_nrS;JURH-Gbei@&JI*wI@_ms_e`hs^D`X< zx6XFt)49$f*aIby0URGt2%A920h3+u4Dxi(K%YN70<7N!@Z5RS6`Vsn{~YHR!TYma zWpuhtN++Q24`XIWw=#m-WP!JIna&?oX1e~OGTZaH&KhadfT7ME^_R}&(zq8D(y0Hg zEs4Mk6yyS`)2O>9n|d%Cp|`OZ-+>%47oKSj{L33G?)e!PCzZ@&4_%-!684-;a9z=FOW3yFsC^7m6L2(c-Yywy&=r zVLu@B@Lb8k(NXw+6%`d)v~WJx0N&(Y0QAz@XJlk-!d_9)-}~=gyh%>vcjwL=);N89 zz!Uu5Q=_dJ?+zgsAFYd~@wyl~)DTBUf!kxPsfgK8E5KecabOqNHZW&!9DRg*jvdIx z_rN9MIY-;l=x|F4;`?|Ssg9(ficspvb*K7NJ1RpTUqPhN*M%|Wf2+v}>FB6Rw}#$_ zJTyW6#C@3DyU^Xu18u&_ zMxROjs=t^AaI(|{ z$G3~*(Z{!T z+knu}FbWC^7I6UQ0LJkB%mt$7_cQSSFTf7u>+9?Lqpxor?-{?@SMBMiA6s2CJiJh)+!vjnu}_Xnm~k;p2_*sMRG*JMpj?ad=KN zo*PNM*uT|X5=8BJUeuiJMhzLx6E!K0A6F(jyjhlH|5QnWLu*NrV|I03m{E5_@#+(! zqu9wUsatZ~1|Pewt|DiDernK(@(jO^YI6OluOIC-tyYSduM}3`jhyjoX;IyMRfMglRsbNRk+NwA5ZnvBLUd;TyfA0$LZl~N_zx$FRy+Wdc>>I)JT}udcqD<`6u7MT| zYj3uQxqR-~mGH$9t_au{u_MpF@L``{K>aPqGixxbi+H~<$rru*mgH=qNxOHgr|p}U z(WBt_7B89ye-9h5VmW$rme5@IedhO3*CY1*D_5=%@xDLr)QL|Jd+%6VJ0T&FVxnUR zy}uL@5dr-B!#lpYil8CH zn4dgDtRpJ+1!H#@?+@eCU5ir(>|Z|v_;{eZo(6jAVGAUu7j~c%b%7T21?6W&G5)`Z z3Uhm_qoYpy$tO?E)B?Zn4g3#(5B}qJXviwomL|vgI_v&9(0$*hY0!G**&WvCXvTa# z&*?GlS!0&ZzxaG{{}iKFm9Y=4eE68QvIO*=cu``gz3Ac72FJI3<1+AZb5M($i{8AY z0^iG*FXuU2y8G_CMXb+$pE-Y3RTbga+1Kahf zV@Es7n}=EpM%pS8UTG~3|3_0n(8moq{$JK-`+i-M={ZrA=61Cr#qCOIlG7I@iO!!E zC%SxClI;FcS*p*Ox`L9Lht}hCIZ~(mJFlHUT?-sdqY4~@K zJ$86eR$5R^PKy6CwfO;8yAX?vx28b*4>};Q0fVs7gTVhF;hW=dumMs#&;u@@6ZHVm7n~M05gy|FSyfe0 zd`Cx<@%R1xGvE8qTmg<7&z&p3qoc8SS$;;COICv4fe;Vl&m!Tg3%IV2neZlP@k#l8 z-YI{*J_Mea`6Bp!?rmki&wDbY{C+v=dOQc@>tsNB8ZsomeHE=ky#MIpd7>6Cd_Ma1 z79!@q|Ni?4eLTYVFIXV*c2UzyOiU#3byQGTC~QDxW)`KTr2+dXA|CMa_99z5+X;EO zogZV?=i;`lTgSi)I>XZna= z#_o|J)Z&iU3niQ+_s9OdoCm!7?z?y8W=2HkW`=f^X83&BULHQd_#bXer6KGz zkmwmR{!4&=DfYh`|GYzNWD5Th%ro|fdhu~@y*P~jLD&H){y7HVdI0wWzR4p&vOMBBf}jv4`UWTIWEZlw2!?O;(b3V#y+bi%FMO- z<0End#QI-t+p_tro}Nx3=KXj5(&|f$MeNC$%`xwjrw?x*8}3#e>TA*L?W!^E?W#8% z=xxv)891PP6yb8JXturPvpbz`hj!1F!{s z-3^4-DEb0RQ8P-454e(-8-KDeKRE~22)C9?-G6bi1j(Y=b2WXJx8p_hxIN7+prS@_Yvp$)wyAm1>Cd0 zw>MQ2dH#kqi)iJtd5HBF(dw1U1@@OLc~tQGcVPzqjyrA_Jm2cot3}P8>v=i3x!7-4 zJc<1h@iBj12<;rkzn7;6nVXq%JzxU8J||J{YuLZvNDFpj4Y2l$)Su;heE|6ZY|}kQ zkD`ydqvHYW&3L$_rTn4M(T)dtdTQ@Gb?VgJJS)q+#%z~=`a665CxQRF+S&@17Ujk_ zl;?%NREwUVLkBX1o*~Bo!)@3FfY@!AXNoaj$n(XlDZixieD0Xc%2e=q~oe=7R9lNp6<;fQDekb~OdocgeD{8{14GDgT zXW1lY81wA|&Df2}{66~lauYl$0)2euhKi)Ewv9HgTTIK4=W{>L$`wlqbNKN4Yk~dw zn8SSt{N8Wj`~M(f0It^|XD4WL3a#8~Xy%uemQzttDNYGufD(}haL#XGZgy33kNTHO zmo9nF(9ob7@qRG0^cGB?+x?GS$p3-=sJ1ruzJ{8Tn9}UX1jZ_wm5z z_rl+^*3=;K!(rfl1T$;kx5a(a-+@E?#mqf(`_SZ|-Kx9Mw`UE#s{-u8trEJI70}4!xWBZtY)Tt5D=U*+ z(CeqHs5l|JUFNS!3cF6Cm&Y?GC};`S^k?G8@4k;Xo_O-fC)ed=Mr5SNdHtimCH?9c zY``JbG{-)G;kG=XUpB(C%8Y;Z`{Ka&bI#9a((g+jN8$fR5$g-=_W}QWq;WuBBaPq; z;RqW5{P&_h(26R%ATAt)rWNOita;7)_x%l-)LDhO^&DtF zLz^Sq(^S;+)pl)wKF4BOwG{YYx{y|_T!w=g{1q!iyf4l59{|_47@VKFni_Fkk2yZ6 z?rjb9@7NCTo(%pP_y*@eA$Iwfa87nG}giR&k-}o68uAB?4mJ zt^Ix9fd;eU?AY``*L~Q*<1@i~w%akQ(S>-w7k-~Pea1d>L3~f}Z2IT{=v^aM9BM{x zP!>nE0{eF4V!ns=Ys-_&rblV@GQ|1|9tQT2>#tabx!Vnb<6F3Jk>L2arq73Mf(m+b zxqpXu-!wNj3!Q7$!{*O~wU*dLaf9Qt;BeQ85&ZTYHS+I6~B|DFrzxjH)3 zu_-Fh=3sQ7?W;*)u2fx!m>(K2J(&HH)bUuyk}+QnoondYbwWR$cV0DSP)B(zRc8l5 zhtCo-JNn@Ex1*lFl-936|K7q`v;w$it&I&E)(d{0`}djK=UAV4z9mZ*i<&<7>||v@ zBcws1Z_k>yHNZOWx!|u=*Hlwhb{5&%Sd-k&onLL*xba@zroKIDV20V9a(h7sQl3mY(*{|oMqeZGYA7mrfh z!}pKz0p`W&NBlo^5dXvf4M1I+6o))!hdcpQgM7)3A7 za8nk1ehgKl`%^l0bh}yYB@4{#>=O0-1wx}^>5}<^<6DP$yH%@J5j6J2Y(CHF^WlE} zUAuOXogH?~qMk4D`z=%t%-6!-3mbq(-fx|poJ7IFLD%$jbw0xk|M@MOHXT8Z?}j;_ z9n6o<5u&>T;JQP3X@Dqa$-6#%llbsq#HC~xCfkj_E@71J|Fz=ICQKJVNc}2&O#bTUf5j~ zFLvpsgxZpiy$3&1LFM_?6zqV`90$vHG9GiE-EiCqhvfsMNxsaZ`<-2`gxxB@$vG- zbJV%N?#I5?ndg1`6=009wsA&kbUAjDoTw@Y!488gI*A?U!`N@my#SIN06PVM|FM6` z`z3aO0oQVm#JB&|Ghh98uYl05dhW?}1({)KDKYMUDaj1JT2~Y+`aW5=o_9kY>MjB9 zi|F8iJnV-}qi)QLS7)N?ducxix_f{^MgMOa5v}(l?aQmyFv9}g^ z{xX^~XO8IM<#?Za`S@$5rlw*}7dgAwc_Vh%vdeuLO?#Wo-&CW@@BEivb#ctu-N z^Mt;xZY{!neeCag6#T&bxCS%5V*l=qfS+fL^!oZL*OJ2I(v%oy+ym)!Vi3EG+OkCs zFdhG+-~oA;=qPrINppTl%rC+Jcz->O1NVHs4gX`4c7X9e(%%dlAc+AQu;-<`EOR0y zIqY(Id49;?V3*2_eZL8B?sxo(H!$n|?71^4rMZ#S>2YpfG?vCp9H>PP7>us_Y z5BKoiamO7Z-sk>(1qB5P2?-Ioep6G^6xNyJ=fnH$nB!;L;OgRZZLg-r=Ns0qeOq5& zx6<0$IhIRCC`w6;4za!3hkd}u2cQ|wdks6VClGlb z*8oNQKZSp(@0Z5>KL-CzunA3w0~q_0_{SsjfKAW^se~?kN^AbeA3Js!zmw4Lu3gm4JSn(2Q=$qTXu6`S~GKnuH!6==ym9_XZl< zNFJIzo8j}9EuKY77fW!zVf`A~2z}iR>(^s8cL92N9;V+yi}y}o|8DHpV*Nef7cn08 zL?X7I;`f1h_WS%fW52SZoE#nONk?1j+J?1j-ow04UtnM$N`n6LP}jR*ZJwX+3f?-u z89Bgjo_Xe(yy42XpL)e$FZULvwf>{(l_)f4q-(iA!St zam4=O!2gd8aNN%ac>j(wimwa*j~HM8F+e-C1Z$uTotPMme6T$C@ZnKw#Q)!^y?X0h z{r}D@c^>-p7hZTG`Rwrnr%w(;D;`=DA-ACs^n+yE@s%7x|t5CyRA@q6fz4tzF{Me;+&ppuPS}x}Fxu(xE zdtA?B{PW?spC38@FGVk3I(AyRI6IQAmgYOE%1Rd%6%JP1bsYnX}R$E z=;K?tnAWddDXHl%T`I88wLOmad0zL?N0*Scjy44&-sj!6jPrUNwgG%N$LFur)zxDM zW(>KzxlC-`yy@#5GTWYjR(Csg?<%7vF#qSf3Nyc1dIdPwPJ@#yDB=~0@ z@Brok>#;8k{2zQmWm|7=cO>_vNdLZ>$D4ZvUVH7_y{}w+BIK!4?MF_JV3$i3_VeTf zLwnO4bNOntAO2oVVZG4f*|K2?bol0@muDXEj~ss`_Gv&ndmZ|BmoH=7OY}Jy_qW}4 zo6zl$mzSH$^J{7_>ph8iwgdI`4ZwXPHNf|$fZKO=bRe0nTd-?O=C6*^3JNlo78hq_B}Tivl^*9J@&EsVf5ZUTH^h6zx&LQ6{>MZdP)Fa3 z|3Sn7gTVgOX`#`<78*tl&;#v|7VH(uMjt?Rb>3)mb451ybbR06JM+Dteg!UGJazZ0 z7tT6AHeNe44xPE${7}kE@E|Yj*)Z0YqrIw|Nls=3ZQb}N@x0z@#y@m;SFhlBf4S)4 zXD*-nd020s{XJ{+uqHRp?J&omnURit*4P7EUn@90#=h|Tum#msm6Va5Mt(ltSBwk{ zKHsuw!^Lef+s1wU{k`H+QdUjQwa@VTKm9Gf;hzNOx~QU}C@MP4;f;hyd-(nw)PD0& z56Ff8=N=I3Ec!|KM+_ja{~h>89MB8=^DICvW`Qay@($P4l^4$7|AybfAN>Q&|6h3i ztP->zYwMu{lNfAG0j~QSs^ zx6io8e=2HxtkJpO#Dr3z!%>bs_O-RZIeK@?%fRhor#)l8rKN?6!R;p}C6StnGVPSz z{=s&cZ7+f!@JdflSO3v3VCIQ8{R$x0npIy@X%*ySc_AGAoI~yDGzLz1q#gZUypxRk zLB5H9aDYTvx3{rDeY{G)fM4IE%WVKQ>X{FCSdu0UP#9_A))`U{=; zh5wJaw6|Y<^^vjeQlFms^d}MnO~3MY)Fxex9i)IBz8#yE5y$;oHY}sf8&}Z=?8;gV zzrSeF0-?8k&!jFF@895F9@f`qy>0gCT)Qg+{>#AWRiJ;Ts;UCqPOY#BaWT;Ze-G@d ze5IkG{FJ5t zohaZPxQD+l1^!E*&%tp(WkrRE0kShQ$lb+xLQ!7+(@h&T{0(zE^^T5?4w&~|&ivEQ z^Ga{dZ{;2t%o+SCFwo_p?Ci9Sg@rlWl9G}Z<>uzHZpSTQ1MoWTZEtT@^l>*o6X0R? zWouOw^qbHV!uW@-1MeIk0scog|DV&Pi1#o4qVJ2Fb9epse#_IR#^;_q*s&`s-s4b+=l)9?N*ihO+C_->7tk&_ z?B9`<5j!*I%$W`S?Ry2kcRObFu_GJ%cD4)s?HKsHi zLVV8#eSF$ld#|osvEpN0UA;PIXV*}?xAR$}o@0^!-WB-a|C#ZPI_2h^oJ{@DV80Su z3!_t3Ci+kNc)GMkM}*lyuV&t@U<1a+#{P8V$dQe1E@p>3T}?l%%=br6Si&U!3xR*k z1F{ytbpCHL{+IgygWUTkIDbjpFZ{n0|NO}QAAXTTv)KuH`xT=!uOIx>Yy1Eu| z{}RmTu?{cS_L$?tPHoz@WeaxeSW`$adIHl^DK9sN^7C@VDK07$IeuPFHbr1Bhl8EX zgw|focd?7}C1`b2VMmuK^m$}a|Ks@ihOrN<-N_nJ(C&X^XlQ6Q<^<-VFK`YY{uo%D z_szp!=flrGapJ_o9K-kZ_1(>X!?*bueC;>v57B$DHYmtX+ibsa=6+*?#{I_H&+IqU z_=ky}+WUq&Y8P$HjqAcgLL9+s@Vv_ZbiWE;Q`X;dbG8`ra4~(mFvD}AwGulDg#Sk! za60~{`G1l3Pxk*D3H+CrWj|Y9metYHl01ub zX#bu2d*)|<_zK{@y^VMKG*srU&d7*23Jvy8b#k<8UcF}Zmx%8tILBvw9^SJzd)6${ z)KC}xJS91ivNF>#x0NNh{%q*+@El(W@LyDrM^TYs1l(MO4(As;cgmi{{>?^Ua5wJ^ z|KY#tTc2^8i;K%0z~&>E6<&ncVJG(YDBvhbPjYgy3baF1`Cuo=ZhS5d_Y&Y|6blOr z<$-w__UHILE6|HPA2Y-cnwXgU0iWN=ew=+yCSv{E^z_x?A%V6&p6=zE8p?m&ts?iS zs?v7S->X1|S_-7RV*?pz?S9qW)wu`1cm4nR{)$VNF8%KH*I!@c?rhQH;k^H?ta#^Z zjU^Gle=g#G3I2ut1NQ(!|A*%QBsDMN%LCh4tfO7#lp%<^8RTuHKm&IAR@@43X zNIu4MR;^icVdct|=QnKF@Z6?No1WgXWy^8w0v=RRQEK+`@(RPw5C_7k2H~^6_pZxvP6r6|U**QK9|%>SSuD0qiT&Zl#@<<#ufQXLxvc0ql_@ z+tQ!(2K)kkh~t;fKmUA=o2ym3o0I8l3E?)^s`7%M<(i3^P-r~yP5{<_nT~(V0gE1B zo&lVk1C;Q7;Qj`|{fRS)ePIKx*o6?v^c^q0P0MyxiR>CNhE&<6|i?Ar|wy@tE02 z6gfazY7)gpM>6&=8|dp|ZfE_g^78U+@UOn`sY?-G-Y~xpn{hj8gMR=%mtcNi7j}3i z$jHbXUB7<)1=JfqLha#G=nCL0`Im$5eFivgA`f`26FgOP79#zU22| z3;wcZ&FYKLCOM~}q0y|Xt6N}cY3Au@Yn^CoWl^G~srIsplKejvZr^elS_Gr`8`C+*;QZu&@rIegzq4h#tAojFaUqu1Dslp- zzj+e>*x5XE0QiR%sB{jHdw{{7c7{N+bK(KE{+uF=L77AQ&e~;MdHLpM^JJ?JY}Y(2zwCV z>q9C^3M4DD?OoX&+g}16{1IP&?@p>8dVQ>ojrsIto}TV0T3UO1&|h?o^AVmcVC_Ke zJ$mRNJ`eq$!@Wp6ha@@Izt8)ES#OZ-+CBH&Jyp-R=bpQ+tz5DEv-Rs%UE92AEh+Al zA&uS2q^Gl&wD;~I107AWGSMMtD+6+|HXsWVJ<`?IK);g`IMU76l$8`OfCq5G9Mha1 zdR@Q7?=$}2d+)uuj*ey>4t7SbNBWyyE6wyp4IrI*u@|fldx04L*j*yA0iyqR`t1MY z4A3`g|583+(*JYrKRy2+NB%#E`hOSpikFwAVGgY1WNT}6MN`vE{r^9CpK$#bGr4;? zCf=}N-K&WAuW9X3CkI<=^7VG706%XE3Gk=TkU$C#3#RzkXo?KQo=tBL(%hp)s>+I= zLW}ch3p2B5^zfQvZf_Cr|C4rBun*-N-PqXJLrzYv2|UDWvu4eD4~OQ?oh!71xc89v z0`Xb6aN*S9egyb=ap3dC{t)riOkl`Z=m_WvnyCrH8RD#W_Dpan7@cd{}E3vA)nC122F_)*oIj>;v~N@b6pzTe1{3VH-4y z_9D(V(A`7E270tlPa7X=lBuyiS(+M>y*1{bolMEs#f*HM&B)%$gbWS!NglceataEU z)ipHU4Ga$SU{cj5Y$O#1g+sn}}l1k0>#fJ{GRTs?k|NaE@{DdFj`xN-M zwlp`-z<%uaRFxDiYip{LyOSMxAntd^@pN?}Zx0vb0NxY|{09a2kjXv+Qc{q+vVPr~ zkI~0d9S{%{fSH|nKXq;gf5&gw2O(}Sx3#s6hkt$@`XL{o?s%1BdG`H`SBc+WAn-56 zK5Gjy?s+Cbig)Dp*fFpMS|sZ*qqtEV@CL#b@bl(P#u2=0PQ(ok0-XFK?H`~Bo> zYeJ^`_LA8?ZL%=dgN-vHJ1b+dvowa^Hzf~8GYauRT;yhfpD`tEJv~xYSEo&zw@ert z8$RLe?9ebiK0X&Q!1wOt{0VQ@&-No+4@G@+n~~Ap1Koc&Nx|{Nm z0~8AlXx{tHJ3vRU^HdT*=qdoorA8Ff}r~wnu&Ud+Mqx_!-q&FE2lX=;#C)_92Yp z8~n3x<32j@e9M4)bMW$w!0<`r_n#uqzry)GYX`BP=Ggz+@Gr$a`+KRcXWS!pAaMNx z`}{HQ7-U-^Vu!_x@cAl%eKQkXas=jsz3j*ve%;N^n5<0o5dRpEwYd>;AX9uF`%J7& z@VK8`>`f`q)0zUktPvmCkg1t5>A(i;klRJdDysj$K7yyRGcrsoDk@go;I;U#Jsq`~ z`=G<3VxYhK34I;KFGIXdi1FW2m4cmb`9cqR06uzfa{sp!|I_1t5d(Y+{w3J|2L53K zxCe;mf%~ybtOL6wOA6zttFyNG@OXdd%>3`qb1N`DxyH?0bwWa%Szus5rNS<`PgIn4 zk(tRpaCqUcapiV1QdUuRQtx7`P?=#7;9BsMm-6nlyPXLPJ^Pdrpr zRc@fGrSzP(ru@|~Z!^kE_JbaD3iP1!sT+GB`WgSo|9Kzy$mH%%N!^b*00|EuW&pm~ z2RM}jT=)OullUJ6{`;UU+TL75MfuUJ2U33a@nh~Y`X4_9Q9t}MHN`ax(v#A+J2|;j zT3TA1-M`=XV+UKS2`5Kea&>kfCwm+CIBT-UJ@10AdAK@~jg>iJR)=qE<+-DyqYr?0TnC)CAa_55n#1Ra_pfoT&-^@d{LIg>|L6Fh zZGbcfU>`1x|D}08`T(YU{^re_cps?n{hSjpH!v6Z18Ws+-?kZXy$*ReSyGt4EAa10 z!T#>#?S@##*%rAEu7wM(g^Lq8IJ=OOGce9ybA%m$4RAoLzX@S`L znmUF5zBb`s8+#izqe$@U)FcZ)VyVBN>Po;&i z*b7>jdgAD?F>BQR@ZCJ~j30Xic*X|z;RF8O{u=Hsn8a~%K4E8T^H*E+=6kt2BfobR zSa)^+{_U+{2W-h1wt(Y-{ly}sx=U{7tHwr#rA|%`fx!Jz)C=zUvH$BVI8FHU7*Y{XElnkQ_I6H*#@vCnq-#a&mPcXYe3y&WMNX5f302 zZ~|B0?P`e_z>Xq9oGHl90UC#9q^7Aw@=Ci&X2*`N4Gi>#)6$Z?p>y;I_t$;fHTb1` zEh{T&QFeBE^q$?@-%wNDL{UMuRFED_jTLEPA4E6yKKHc(|ESZk4UpoW_kQycdBBgv zKj;4<_MgOmH}vLPf&cQN_=&#u>e$DQjB3yH{@&a>gR$S)*{Nl1Z82nOYW$j$gYC5d zUoVP{3PoMd5B$C->iiCpydVC~2fV+nr8#O~dnc3?72eZOS9=ou@B!$hU3{}_Gxl|A zxw^VmAm0CkvCkUe?DrY_e55u0Z^J*=0oeaDt~u_P`hJf2`EU-fbSZ0;NVvi^t5=a0 zxP5o{@IW7Dyk>9m!|Qj)?4q-~H#vKFlbe?>xqI{RBX=J^a`W*gS3ElL_uW0PkJt%( zs12@>CE3{+!xor=8?~h95EqKV@$+#Y6H^n?)X}BQGCN68S>=87EIossN_p(Gn0IsE z(VP3*0t3BPVb-BRLsjN&4du-gALfkR&tbrSI`Cfz4zQSd#STab{)alNX;{PnjQ`2~ zAConJsXD+^|F6XNj|1;h{2y$<82G>uJm&yv3oZ3|6V;_jU-cZQ^gDZcOzxLH6MA#6 z{?GT@fcxJbIy52^9UWnVn%-#>BfWQREKI))4fLbPFzoJ%45pAkUkV1NALNG`AC8Zg zJ8E8rWT>zEww{jGSqD42VD$c(AXlG{^Kb9gWe$R8a5ObEePnmYJ_YTtuNnWG?@RG7 z#r}8sf5tz@^vwOO#SU@K?>8gQ=Y8TUR;&~`{!-Wm)G|qXk1F_lUGj2;UGs3o>vIE^ zUC9;4*%f{s*mw2v0p0`1%{NdSci&(<@(CeVe9gt%AJ6k74|l`|$P-)~5C;JNj_3pM z^R}TNe|rjt4RCU@B6G|Aq^!1wWaSkvZiPahwj(wLYSckZ!a&g18Mw|~-aW-jwbXWeVz5`1QldPmG&`Ca(UafVRD}G$1o$rp2T)1OX`y{f^PmKF#p(z=)kYwtb9VmaDc_rULuX5g`;E9!z1u{uCC(#}74ruL;!p zt{Lm=eyp#f^|Y>zPBXN5cEgUWyjjDAC3(+pgH!I~>6bL^e3BU))S9+aqW&%=hte)z{Ea zdQD4x$Ct*s3X~S(P31W;Vh6OqKlu4xAvu^+Y=FaFXlQ5&e%1^#eG7qoF&lTY{&40D zp$De36};cQsPX*)eE*-2_fN+^`+def^Z$%}DgNio;r_q*BKGIK!Hju6tVhcEzygl< z5gW+MZbOg$Uh;CbreMVRLFirZLR{mHI;I=)c{gZ{yW%)wm#~W~YyjeW7ca#8zCq;f z7lIQ;?g8QC5r~6FwgoPT4_rNwCwO?E9>TRzOTh)&S)*=(zCexx0(|WdU)a)q)KE3G zbVy!N6*YnFmz7mj&)3yedt$%IFKWL%`v=VZ??F#TcYH&NyF*eFNO%BhevVMjY#7=7%_^nyuU}Lq9Y+(aj9I@LBbwO`;Yv?1GlEFShQq|C+tvhzoP6fsH?drxQ-eC9a95Yq$&1`zrjgbnb=924_?KAwoDKYaM(8~r`f=QGZL z{|6i#Y-$V*_MYCbdOkT?Xi>P24HYBzuYn#{3-I63SVEo9=k7uL-;4Oak81$n|JVjF z{)aIOG>keR_X0Df*#?YH`G3~`f-Qjmm)HQw3?S$JL+Bakfv#{(aSYX$CH(c+SbP4_ z(T-)(zi;O8rd@&CP=oqYe}Dg4Gt+$?=xcvPTSN7l#eUW~+D6@&c2ZAL^vgCvGxqGEAkC^{1JN)h4UI+*Va5H^5$01rH$;{dh; z&d38?-Mz@o(^rxQ_#+Ph=Gp&Cj~i@)hyzd~aPvSuf&K_b)C6tO8)%B20(0&gG}k9v zTO;VB?W280`lPD4m*iDcX~X8N*U%?;2D8i!&?}n%)?07=sJ(X$!P^ zW$|9gV~5gK@F=UfkAlDdjZ6K5pP~nBaejWj)~1c?E^ghp>JxSBdtV< zJPZE6;5+d@0Q?XB3;yeY{|4Y6`+pGI^A3=4?D!LL|70ydvKI(@0P*<%e1BJK0aX=7 zQe8>hE9cG}@nB85AN<2-o^ZogfNOTBK|k!`HVM0hk}#{7fX8@fltxno=9a=Rx9IQZ3l7AS zygaxTfH(j)z}bcK0Pp~)_qqC@4!}GB@_xYqOxggB0bG$AICDJ!wL>@bPB=SQfCt=9 zrkD?gMi?Ho$;wKf%*^zGe?3y)yO)%9tI?)yJ9tju4P8CGR@$e1b z+%rG$qptvV|E)iE?3j9Xc4i8=J!j0>?)o|X{Wt$G)&K*y;Eh`U=gj;45q-W=-j6xI zZ}NVOefIT_F2#%w@IQCnT+s)}^SUcnE~g#H^)1XS$i>MGx&(<7AD0bnl6>fr6yWe< zE+waAQc`jT_DiNvY)l+QM@0+m!a&3czL;zDKpoJXIRJ2h90NF`@5hy60B;Eo-~k?h zIY5uVNbms>4snb6FJ!G^`llEbbXs?zg zsqfiCyHqeEv~?S8k&*c%CMv27^Ok$Rd3~gxbH5OBge|Nq1l+e^hw72#%a;8O{m&nx zSL*Xwk390_yg73|U9x!b2ePuV=b(!;g#L^e{LBvEe?Hp}>F@gHBYzLG{&!p1Sh?!! z>z-P%boN)yb|sQEN@wL_=BJ$IX?A$1YuZZp(`=zIfL+|K6F;Z{8JP z&Cio3Pu|acJea$ggZ%Mc&MR-;|M30433EOk@L83p_kG2E{#^6FA94Q!4@&hsB>le9 zUSIa{9Ouu&p0QbTX3>I$hyyUgzg~dk z!zrcoj6zDwD4^8z9N2+0N=QtmDA<6|kWlEA`GcO$12X<25CepfGq?aJJcs)O9WW{n7!DnX8*fcN%WdyaVC8#CMv z3JS8FE0!(%NNMM)2}8~8$onlRJ28lgvtmW;-&`%he>?Jj<^UQ0J#CefF+de~KuHWR zgdAX~t8U5$h<@Nn9)Rt@bpJ1n0fxX89B9r(j1hOWvo8I`?#8S-^hiB)vwF+E|1O;Q z?tkM7Fjs{*H5xr}edzbO%=j0aA7g(~$LD&TZ;t5oXZ&-&FZ=yjvuBAofct$k)HTS$ z+=hI7LMS0V2YZK#pg~xPQ;kzYIoVa>WM^a7ST^iHHg*hWu?@&VJdlpuAdV1+P%!ii z{SX7N4R8Y&!1VxO1Gq1U^8oPuZrlqX@Q*qmurF+Ye>k{6NetkKc)uPwEh;) z13&sE`X3+19JLejovpa$%rQ*G0{l5jFAE$TY_nu!)}LLx@FCJs-$J(gRVXgRf$~$s zs4O=g_|K*({5MR)e=G3MHh}v8CSw2z{y7Ga)B+^)01_Thf`1ABC$0Z+Trh+k;vEfH zR9_N(rMEHrv4OV2Jmy0XoBYRo(SHL2zt;bg?K=8QW9}qyOIreL?Qv?okKe zJiv+L0G<2lboV5ZP>JpWaZ@F)zHvsA-F*m z@P|`;F6OP!3l8MA>O7U?=Q(ppvrx2s{I^LokbSa*D7sssg&P)zFTHesonGP6Jio zl$JM8aaki3mNrpAaUz`mpw5Jrxk{;&bwWb5EW=4Sh8KR7=v#QThYB}HI= z*LG5pmw_HK_AAND(N4Ktm=BNz53u8ltuiw2=xC|c8|v*THPX{4-?DM-vn!S@{u_AF z3HJSW-+dRfO2C1j?#VL^ymv(odSi(3VN(!O;6SsDwr<^m>$F1jOCevFKu+)(Y{f~; zRHtLV+M~!ZX4h3ztku=to2jfQKfGkotS@(NSvFy$B}3T#0^jdQImz(-c}eK|NuxU8 zzY+Lv2L9U`im4s_{~g>1ByxZX^a3#tSOpuv9Kdz_vkl?i%VWOrW==0+v&9P6N8r=75z`?KeHS&%O#GZ!e(RuDZ=n6~c{2rQ|?~}y+ zz&-2$AMOEQj*q!Nd3nUpd-Tv_=Z$%#RLV$0&8V^#J4NdVHL$5uU*AY|IJI?6R9)Lh z71d2tTG>KHWv#FSt(0HVM0tfA4^&ZlZUH5yXH#5aDn)_|2n!EKO~6mY0PdUzI5|q< z0Imt3CdgcXq(3-R;NHy__!l++Tp)Nt2M>R;1qW$vWkvhJ>WWL z(JJ&hZQ8hj6rnQ)Z4uJd)q(DqA-KhT;!#^$i!?OUv9C#1%t3K&gzGA(p?m;6glDmv zQ9T#+!kqMU+l}j2Keg=91)r{6Hk-6}Zz6Apy#o8G(LPj|5l7|usZ?E@PPG*|Q}}PK zFM01_J@$pJV9km7%kdB7?BOM3xO4*&-s4)8w$&EO%-`*+l3P*YjV)w+V9 ze?E4w+y27SPwf1)V&m8Fy16z5&M_9)euM8#=KUD^9J4asx!xycei09FKCpb*a$rS) zbaeLvlOgC+PN1^FQtD{MzSy2l8tCsM>=L2Q1D({?+9pnWdk3|3bWm%1J2f=7Qe8tU z>_97(Rkgwnv{6xc8x@o_Q(h@zfdbA2iYX;Cm*NtVC>nKv(2x+=03Xx^;qy5L5L^Iy zghfrj12ckt5*vWJpsO#}0WllEkKhNKyn@Kq)rTzY9m&kvnhf-HXb*FKiaUV&&Cm(o zL^4}9(AG`sXbbd(w{6(~+^?ry+t-ou&NUN?J627AgP)l75cG}jmS~^MpFbCxq^k(K zlSoew8bywdh*5k9bCV)o2@Vb-KHyXd^92MA6=5HcV~N@*t}E*$f4Onvh7()1Y&@}g z)v`;EE}ZrGs-?3hOmt+)!%mB$u!x_Ah`}t8)`+I=q za=j0+?#`XNNMGLsKG=tn5>hEYCm-=A`b!47=-_A{jgJk}@ZbRT!3K1}2CyCI?Che> zu5RkUX=!Vx#^yG}0&P@L(+(TZPQ{fSlQy7*@``Jb3zQ2kAOSUj*!V=~8b^p8LGBOa zz96;%&O9T)^#JgJ&h9?o12F^Ojd?&|o^j8|1so*D0CwO3tQ=g(+{RAy{_fROgC;uS z{T-WW$F_~Y{5q1s*}iox<`XuMviwHkor`;LROHss#?=d86Ys$s^dDgpAHpotGT6ZF zg!&))iEYro>L&N!ci*)oOBTPe zZ0V9eKe~ACC+k|c_TNEHRCRLTCoEE^mEVt^`e z0JVjv0|Nhzz`w8o!2e_(z&v0NVt`)g0#4x{wLtC(;C^842NaL|G4MZ#-C_L)N~xhZ zlG-Zc{@mM?KKjJT?iEDu&eZ*GQT%iNnu&$QCOv)q!G~te`rr@f_viecanEtS@cXC% z%t5TX8M_6QRn*8AzBN4!_h5Amv?dzp2xiC69POsFCx+;WlcV(b@q={o@E9E(AAud{ zqrrhb>hJ5LzJUSi?H{17-d<{hO=xWGpql!2s;cXt@|sR6t?HzbssoZZ05%{SHXtoC zkCIa}MGO#vnqVOOt2g?4-O(4|0{lB67jOa}=)`;=W&mA0{RG~fy@MyQ&vgLK0RqSx zJfMZW3mKW2leVrd_)2A9e+zKGfn+wXhOb{w>WUj_AL?ypdU9mFPm%WP?j%iUZY*B# z2;!o<=`QFW0kZ@RA+cjMA~KTV;^Wc3kVq*h$&`*g>%40Xy?c1f$LHzzI`%N&``p_Q z92AUrK_7il+i5=LCGJ3d;19pQgXYh^kF-@clZ}xQa(-iq3ACrgNH5As38VbY05Y~T6M#_VQx{V+>$Q~d;9(fzG~+#1%;Ed z=g$7i+2c@eB~ScLeqw!AaUP{$0Gu!pVd7p*G37z-p?Bq%60EcJJCuy6Q4y zW}rY;M#^MoszNp<&{#KAATlRRqmJ^ghOloWRJ~gk-kwpa&j$SX}Eh%jc81p%QsI z=um{O4aGt8FeTOx_zwsEqp2u6o=WqQsSF%IRY@k*l)(l}@_;Oh_rw4xT!Ci(%& zkO!1gS6c;g0f`+DTmbg?4Rj(0n9KtPf%zfi18fflak`rFgr;y^p5N62H3?nMof$KG z?ztQ9UA`rOa*MtwaO;0kRaFITz4P>(xpO||ejmpF!;d@+e(MpzZ^?oav$3|I;=&y4 zf@!2@pBSeL=f>#Or-$j{nO-`7x`&=S-bK&C9y|*h@a)L}diumLJ$Y<|P8}Ym69;SuU(8_?4SKA?-5S~?L2T*rS&bte^8v{5c<1Y8ry$S$TN!~iid@u&$# zg9kuP?S*;(&jqsocXS{J2iO2;1~?)YaB@fA5BLBlIE&Fc-i*0f_HAQ4e7JPaY}u2f+Kc*JnagIB}u@ynk11Qq_eQ9#?+j zjqCNvTNDDn>X*g+h1lh>8T&yFp`Z7k-19SUF8X(uJ&L$^lbEATNs6S$jt$daE}f(I z-+GSTfAb8z{qiyT%k$&(>e)Ve-y1t95YP+bcu7}tL6jZiTUP(RW6rv`8 zz5wO|V&al0BrF^}TOhbV%=1ZmDA+&UC_bZdLg*tiJ>yW3NHo4jCMGUS?#@ahcOLZfyUA}-8&znVe z{poJRK`T)okVP)#YZ7dVX$c^Kct_TOP#Bn<{L;lZzKE z{A4cbdfT>cLa)3o^u|2t0Q~*2qr>#~KfgpD{{1ET=Bjr@#w5eq@M_9~!2k2S@1O_!y1i42_LZPyZln zKtDAj4ybGHqMF7oQqm{_d2|r)!GBh#-_pe2Uddi5kRS@UzCQn-}@S#h-dDWFTq}eIgeltig&GI7m3CmVjhCA&v`!jrr`5mrK?x3 z0xIAAkH7!g>#x%jXU|eWK_SJ(#pCby!)`JKS__S&S%|lE_9&90l|IFWxeNTKVAdxy zDU`C21LPqGC`A8HA$UNx0cGF;$_vw}8eBj%a)Dap0(Ia6>Z|gp8FrvW*a6f9(H9^z z0$>BWC;5OL@PU1>0n7>ZV_!JW`gAoHP<=rN)#mtpHqx5kez3E2|D@K(RDa?vjf7v> zi^H9I8*=|Uke9AQPp!3@n(C`-*R1?<-I^7&-^2iOI#D#x*Fo>T^B4N!v-gNDzek_G zbCEuL>sk88rBn2`3rFZJ`2RPb9;DZw>_-gHMHhkp3pnS&37kLK4O;*kaB2Xtz#yGF zHbkd64mb=>;NTb?0{+L47jq2IgIs{QfW}sd4XCQ`K@8AMCEx-Ixh`1Rj2NJr(y|MM z4dC9uaP$Xrt<4j2zRUwSGXBxyXKQ0iHh8qQb0QmiH!?#{l8L1)>0xJ>o|Y0B>;QD|s5bcnQBj~Fu+50W~1 z5v@$LfPW84g#S;9@uQ4{P|8X|43HX0xfwB(ml;Pzxd|c`DB)ND^?=IaOsaw%5U~Jq zf_lye1Sc>V3xF5s;MySa0p)H zm;aSP;#c)@x#y>#pkTAPxoMM*w&rPY;8$#{%_c%a0_gbB!}L1x*v}EOUc2@MUA_Df zefGf{!2S#L?i)|j-(NmSe>;B^_&-Q*K08EjJl#*PJ<&t2oav;CkHZEa7dVeN;QYxR zdg)Xzy?Cmho;w8_a2&Y+Vu|C2M(D_)Q95*RT;u{nBcq4|22c~|q2{)3szVG=gi=y20Sjx|er@}nM0+M$E9$p`X9eSrIfTk8v{4Y5EwdW1M1kkkmv@iD&EfLcOPI5p%4 ze9}}9aN)Vf`c+?k_Vl;TC;h5Gatpp#&i8Tu-4_`dvdzuS!A?(C=W$&ftvB_tLpwPs zj_T_w>D5cG&_^GAh+7(Y?6uG7%2yxKr|-Q=@Big_dgqO&fPeV^^T+6~FCLo2{{X%A zWG}sXri(5C|5I_m$u8i(2l(%$7Z3+LeSC<{0sqVi9tZvp9|Hcz57IFBfIid)I=aCJ z!UoheArENiqDtVu6m`Mkst(FSZ%{UPfQ-CSN{XVgd97 z=D`l|$>-c4H<60aBV39;f%0PX3YBIcCy?-i&BzDZ5C@2SfMWq1)(z}vgl(un9+Bfu z&4rumS1F1=3*$QWC-_5nqc60~Z;>``_K6 zr|3q(IN>3@J0d_lrvQC}93wQ;qE`^L!FJ%DXNKAv!3{KkC#cP&`qDTmNwlZ#nxygZ z&f>f==u!RZfpQC80Mw{9Z>m&`Rl9j z`(M+M{&w*s{S`UDU!EJKKR-K+9AJQ6Ki5mI z!v55xtI=DX4Fqd*q$|Av~|Xs_}{ zQj}dy%N}J7v&FP)mmGEuT0)!9L->Ej@A>oRZy5hyfBiK*`^+;0-B-l_QP3f@Bz5&Y zn5Uda3UcuO+Nu=dYfoVT&e(tEg58In6onHR?1}vdc0$+K3>u31+8VTHw-Tu+%8}A8 zS+P5b_b18AVU}^%PV_d)({2?-%sXq4iIEO84=sePNJ|Vyj)3`L*aP0{RaYEK)p@}a zr3nsK2AZ-{&K&KX+3$6WVSh5_|2=wC^fNQlL(MJC{^IWG_IX@3ylA9`U}SZ!2cVJ|0jWejsZ?{ z3;_It2N0a#WFGM1sXlu41oMG|bo%fh9RvQ4fDb%)=n(RNF&gBWV0SOIw1Wp|J^=h5 z01t40iqIFBUyhz2%nWAaRZ?4x#o@&DN;o*-yDp?@d>dkL|d6#9d+(OaM-za6oQ z8U=aVVRxA$e7O_$7rJ8qp)>iogVQuOAQJ;EQsuto?OSQ{M$8#wMrkb{=q7R%J-hJ~adi&Dj^!JO$>8%$Ji#p&N z&mabPst>0J^+2`(UBU)jgbldBHeiwuJU>|%eCGH7xPSpVc?fku^amY=4d8mf2y8$v z`h*Wm_6Bl)aAj>f`hq(sU-SgEAP13K^t}Iupvw67V7O)r7auR(6S|qXc2S<7A;yR zbe30R{%F&tjhHXqin-;T_#5TXm%IxxfIRvXcA#Fl1@>T#n9*Lm2>aO3x4dG-QV|>2 zKo^yr=&I!!@-~WvBea^iT4bSs>B824RaQ1%pUTf{OJuH{WKF76R zW=1*Y6s7nLx_R>^cgD8-`VGATX=!PlQ`6Je`1^Y`28ZnZzVTR%+`e-evHuO;uk2sR zUF&22=V$T%_<=k|{QvwddV>d7!2bakymeCUT{$9mF4W2`-~j9at`P@3N*o|l;{sR% z)FA$W1+oS>!#)7#6!1WD0@MZ^El-D5I71E=XG&FJrqTuE=j94~2qYsrTawb!fdwW> zcw`)K0LFhTdVpBe0Q<$+D_kt?J!SKD3o*hDR6}_AE}A_?OqPt7O)IoJpZC3!`Eqfx zSc$U=J9Abe2dosE?JJN2mdWld$N^^9KVmXR-txbpaB6lx3U&;=o{*H}l9LsGt-Lf{e*Wn;!X5bj&tC!J{|*QD zJ!^h-(Dy$Dr}gAp)c;>;@&6s-|EsI=-M#a`0nf+-;DBGS2Dktm;1p_r6UB0+F;C+H zm;(-_DlAZ|0TSe_>I35CbUAVWv;ile4?I>5op5;?G{RaAD9xunFbA`Pxsrt(keZn( z3DDF=M8|;(z>IKk3^c*}F&`X*yFXMu-(`#4AmI0Bej*EIj)snBEc*O8V)OYzaj{q~ zu9mCC)yhO%t=EYQj%DvRklE8e#SZhCvSj`=#O4UWPAJS^V%HMquP}Sb zeaY}0l=0(%am<>j<__1u9*-e>~zp9`T=q8UQ+B z)B#60FI1c+)dlI870Of^;T+Zg-~&@q(|`lSOJodY1jA#+4ZdMEPQKXlw^o+G&vOCl zeUl~Q(C5P&ck6uI_r@yjJ?zZH+i@$rGPjF2_T+jweJ<|yo5jg$gE&~2immxd*|WnK zSOB?{xasncjdizd!g_C2;L#%#BkAk zHG{kr{)E1JeK6k~uQY()e)}DCfaFb{{rc(WpXKX^57j&nG#AkRp>DyBg9QfY`-cyc zS3AKsvFj`HF+9lTPX9~{;7dH9UvKI9YA0w8Ur=$%ohrl8e~{Ot&%o!HfwBMx$+&V z_*%R3Q4c)jVgLVF7ytSm;HxVN2lxs&!2KJ?F$Zv1;Q+Uw2e^J5H2~uOGU8uhfpy>m zp$R&V9^hOx;=dB{j~t-IKV}7h2OLK)aHK2+GXkk{pfFv^^3$axH(hcuN0){8=d5s? zniG!0Y;d?(+q=p3omSxa=E)L+39@wdNZGP-vg}$v3$bq`ZhK6`!)~Max^5Rgw_Whc z+>MWSiI2+;@o?BGt~MKy1JnXV0CL!omXaM(kTzS^&d0lF8#gMQ_mu`l8PA)|=fik1!IL{wUo0AIa<8Ud6rN zR>fw|H+!P@_&{b%p8@}~HR_({`~YVO;Z4{S_xhP*ef;y$)5{C_#!Jm7F;4&oR$c_u zNPY^hqQ379Q1gfFI(GVI(BQ%K3l=Xn#OJ*aez>IvXjT#am!B;2IX&wSROZ^&RpsQJ zJCyqK&C^Bl)s_^&HUm5TgSDa}pA?)fy#3TL7Q01l9vArZL$?H!#Fa|>m`oQbkv+E7`&=wsOq zoX>vyVsYNRTs-YINdV$K$a@d`aWET${a8W3xC6WppB|Q|19oDTZWDHAq6V-uRXMTqEMV)JIbyZ~afX=yV`zctyE}i{NSO`o;Af+-#{_ru$Cw$OZ!i}%zyh_? zguTGV^`?kxeDA=05{o;YJ&eLKkjJ8;A|xQdPyIPRZzX0G$6+7JyV!r+9(8@6x8KB0 z#P_fhaXdUo-iCkrEA$D4?|N(aDZeh0Crw73Z;1QeQfY=6=kD(G7I=2QW8aW)4w3bM zI{27(zKbqDFb7~)3A|T*#Rref1?&?H4VTCO-~!!yye|LapZ=LxLH^pcYu&+3w!(X+ zg#-A@Vb!eulsTZWp=v~9ZRzqOl_@vQH)Q>A=WG#r`FeSHvr!&BxP%zLEl(bOsrvq> zD*nj4kNoh3JpT5E{Pge|`i4vBABY8>02X){n&5h1fz`kQOSL`#eBh-+m3Z%mRM~ zTyPwG0Y=O83B!TWfghMLMHVf@UK8*Ryvw<-nEMLN5Z_zPHezq%cI-FXh6BG6`hP() zK-}=NPsYG+aFFx>e$UerGnSv>z8^nsIJm#}r4u-S7hiZmd9J<3sEFdw+MU>6JO2+ko- z!uMe>(51_(Uv}%(;{o7Ee<<;nilSK#*T+ucu}I5g%^d0NAnx{Q0*Pvpp# zm#XBe>-F;ey|d^8ZlK@4i}*(!&=miu0gwZp{CH0ue|H=44;TE9xo(`o9f~e=K@|k>D75NvoG%!rp-YseDyO zjT#L-vr&`32xFHsN4(b=*B0pi8UK9b|2v`v(BlBC4cHqv;d2@LJj@IH`}`blZ*O(@ zdDu6iazH=eg7hMJxmBA7n>KC1U)eLNW#7kN4XI}J3DB(lOCxmMM-SJoZ#e^xX;odpa_*YQx-&1!!@qc0fD*n+MJOK{y1U14VZ~@cm`fP;V8w;g`<}aRf-u__49|;T zXx#lJ2Du;-bwC)rGDG|v;hVKb)c`)g13VnIpbx-ot>rr8fYqo2v>dR9yZ|r(OK^kc z&V1Xpb;+ya?XHvu0s#dMb7c zVW-%~V`L<__z(K`lfKaB5aa8LJqg`j?X3L9c;~a1nFgIQ@BUUVYkQXIF){%&fvd2$ z#0K{>W0r^aH{*TVwrwhAS?Bxv`zyW_JEN4Qm|i2~7x_s4p+kob33it#tugb5l@;@b zCH5{ksan9>+eh^gHnz613?6E|vAYHSMnAv%ZoiA;$4|6|zVS`ejV)L}vx@S+{A7s( zoH%-PaAQrr!?Ei0)0d8B{dD70zI+K!k8kgsKn^&Id;TW+0Mr4{|ET&O*x(c30OSIg z1AhAE2Kc}$^8J?=HBHdXlkx>L0n`Oj6L9TB3HZPQ#RaGypf**f1&Y(fe>CDhN{$sp z$x+1rkpkp^f*2{nENU7w=}uPI3vRMlmd+n9OTfn)gOl5Y89f`sC%L>J#Bx-St0dyC zPl*eLcSQ)i>q4>nDinDj6tk`Y(6;)jIrwn&1Y!FyAB!3wz!M%??iN}ffWE=i2J^M( z0~{^ZiXC!*-7a`;u^-sJ9QA;)I#zhJq+VdN5puyI*}Qf>c5+O^oc=V$(=A;z2ethi zXoC>@(=lT_8GhemMgc4Q5I&+G$ou`_DctWJ@CR?nkb!-n@g1NvzU=o6=TDK*AAJCR zzbEefKS0;>8g{4m1IBNRINy%@+o{PvP+#k_o~M3*_-I{Sor-nxkMtb+`s=UdA-D!U z(til`p89jn8vxT&nnU6M*lno3uIdNiMd0G<20xQs%G&_^;L}c>Uio_1u#fiR&*vfc zw9Eqh<&bK2e~O&`AC2{;vyapi#htE6et7Y4`jaotmjMenBoA*L0~K%uSimjR0H_0W zIp7I<0N{Y^1IQOVdU(AF3w%gEKw*J(YBqp40Be9thx5<_X#OD70-dfz{Fn3okCx-b zkjX`8N0&%Q~IIj{{*|!cI?=xVw5-??|I_(*cqmJdB$ulJVdBFqOZ^|`NhwB z@Zf<|R#qw>GFw|a_4Qd(cqpF08-0O?7$NUWgr4Yy7ha-Hpbp+}?(jHlhwss{_p8}O z`Cop**yq^g_>ub24duzT#}B05x_&H6zBpeY_sI#|IfeWEvdRG}=6Uxs{`vSwuL)!y za9zG976>fhfle35KHw%a0oPBK$>qjEx!8~;=k@*|6=}vEZc_;chL?z%K0Pi_@(}lV>D*fzgPm2_SDT8R zb<6>X|I|d*03qy$-Zr}`gTyPxGci3C36YCwA0oaT?8vD4-))>h8m2+k7vRSfx@pLg>G*yfi zOc5j8?MvrR6=TC`vV7?bS-X6$n68{B>sHN|^{W?%F+O+p)K64TKtJ&g@E4c@y&mV7 zi0?5r`N(>oSpDwZy9K+U1@)W!03Q*(X8V`KKR<{1BhDU>mn^`%Wgz?u=v%DE1bpC4 zNKc}5>(*n3+1tH@P?`ZzWWlIpxe|0 z9fd9snjp*uTn8U`88yKFU;G~}43oO7eUct*FX8UnF{d{leq3W^9<+B$;lZ;Go?JVj z&2zKfAim)4_TwH;j}KCNtP8QLt}rVa2l0Xan0J2nd+aE?irQmZW@cueX7>hfdBT776(GI~jAtTxf!z&d zv5&4C&3tsx|wh2@+?5j^=n8FsGj?dvM<2ZaumExb-p)AS20a}<$Btd(184<3fDgFi zc-U#VfjNLRfD7`1Gme9$mIo}it%6s_N-;++*oB&4=cZ+{gU8HBwr|8STc*x7JU%<{ zCNr3bp82O!r)t_9J6tyG zXl-Ha>DrXL=P|>3=Uj<=d8GzkpN*LN!JN=H*Ky|q`)3_MEf8w}eEc(V0KGwegeKry zVuA1nd;pKoFQ5y&1x?V^ljVqi_=F$I#yk+_|H1jy=fY>&-&&lZ!KLPY@vJdQYe(Ph zt-#ocv-zMd5BIf^q(~3ROWr3%X~9yO6)vSYh<}_?H>%fk{k4OWj(M{%Lh)(2ha{XQZKL# zd0?y34!PN|PhcL{Bu@Gq0PJv&`C9Y@Yrq|>QinM~pBHvx#*W8a9ps6vD=~AhOkn~2 z-|daNzm4Mil&>ImiSQ2QA>PNmr@Z$uzolZIH9UX)ckX}n1@Ir@0h~whg(iskg*AsK z;@=J0qK)uX`G!MpKL#Fr(=ngBT=n1K zeu(`Dcge*b>f+2$#D18R10O8QiBN~}U!sry%xEb<4Zz*i8XgE7kbMC70Oo)M_+2sw z#DXV`MjsG~J|YY?Kqxpt_5%C7Y-FD&_7|cSpk~+?XD>Cw=sB1JJQ4pMh<{=P>=Cp+ zVKZs~)ak$oSO?gvnS!;@5x}<-d4Rb<Y^kmdXsw_HnMbUAy*} z>FcGmc;x07hs6A##aDMfeFiYQtq)uE_-n*Ju>kfG^dX=oh~Ja%t@K8m{p^Jx-A74M2D|auJ zW8VJ=X8uk>7l1hdaR00W9vA+}KUfFC%5y}$^)b+v#8bVHmWU@hQkyIIu$%mGfo zCx{6+SnzPha2>dUXUE3e1YW-24tA~;%N=WFH@tnftX~4X|0sDKbAR2sy{6{(xjU4# zxL&8v+TR?QUjya~uV2636!*VI?DLE9>(Gmgm?FK5$T7HqTVNkxYwsZQ<}Z-G{oZ>r zc-V($MvNXE1>CV+iyo+X#q}?Jws<@IGdScw9Ih=|a^zsH%c+A&UtT4% z65zHC8k)J7ubYT^e-!+7C(2fnxu~a2#NTC$#O||^%otb6OYo4g)V)%X?kANQ{!*0{ zB$YT7$N}Zqp{fojXC0v8pE)2BH~_f-;sC4zqEH8b6I6U4Yk&}y0~8+s9AG~~k{0P+BE0axTJ7hnR;=mnhjpdYYC zJ;3=w)&rIs#Ey9Y$5wZ2%;Dv^%M^8iiHiS;@cQqLIiH?Aq5mH?OyPXQ`&o-K_8E`F z=cwoT>MP7?>tgoTihq7RatNGX&Vlb5F#ygBxI+`@i08mvDuaf6_;kRa!PkckACU&k zum_&YfBw?yR` zXn@fB|3q(4eEcJ7fFHmGd;^d0uTcYhh1o!2fR~P!Np_+iwE0$IYCH}1{s`r-xyEq3 znz{3^+aR$)dn7f|QHqj1q&&?NaqlTr8GCVjagYNt1EeA|5b+<36ROn#Ia)8EVF8iA z0ivXUHGnP$iLO$S<}Q`#9#Vx&>H>SKjmQC7U0}O=y=>jM4Dmk_xL;Qp2=A{6&@PJK3yyEBSYy`S-Da&Mh1sIccae$=FFBBflj$kd z8OQ_71-cwism}rW_(u&;nT=jRR|k}%24Ekc;Q;6Xzzr6vgFXOyfZVhQU;*d@Py=x1 zZ7OtudMtqR0n`WY4+SR>iuezKM?UmH8ZOA$VPJ!(1A=_GXA3+b@Ii8gd%+R#aE5@K zq3Q?N6XD+vUK26n zs9}Hl_$MaEouR)b=cmsj`bWn9UF;*`ep2R}KaYQS6ONxE?+qOEaL}-p_-~fM{9k<1 zcz^tBT~*<%LkIF=Pgci%d#)C9LW&cp1}|8zW`8*Y{5^VsN6-fRgqeUx$N?8l)kqC? zeK|olV}d=lvnCD(wm$;{w#!UG(jSRG=4k;nlNzyl)`Cy>E9 zfZ9OC39uIcCxAUTahM<2uX+LS0;mC~5sE-B5RMayT{m0d}YZc7X$!IdvTH|DN#m8H$~R zlbh!J82_yQsmGzl|CjC-)5rAR^2qq-+`zG8$J9KKvx~DhIXkI5ux70Z_L59|`u^a- zUkx2TyritGtUqQ5{`6mbOSSy9X7mc+J@ikf4j<@tqM>s9p|Zr<#>#}7-~`YM6kzW! zI04KGe*484`4Mvh_ks6aKHmWU&P4c1ZX~X29O_&04AWc zLcj(&KOE%8eYj50r0M@_& z7D4|rcdBl zdOB?6$m?T1`6TVi*()vhUo(o~|L#)--vfQ{k)Aar$;pRG6B^GRjC*>uF$dayU;&rv zzza6YSLg-KpRSSG>Kq9Tbe2u)sB0e&uZ-cc3BI}>j+@}=6)A_|0dnKK`{Dz*EZsr~`-xRsjpp$A1$RpwkBEdx2tL016L89l-b} zCrE9eem;QuU}}Ssun(8}@Zx|8#)2EO6(~ z!4a@0@MaDGHmHw(KI;1ccW4LPkOy3V6*32?_}{Zx^#Dc-XUK?Q@2kBXlO~Rr-O&3G z|Kn^fW^UA6Zen8MpY{KLOKks=&n5nM<;oSc$Bf^bo&h{|;2{jL=Wxh}A3lM{@P*Gl z{VeXgy1L2lGR3!EjV4#M-JB3zD? z1mXS@c&k3*> zKn+lWL!EFDYXI&HAJpdpPv{2Rd6)x$4Z5-)!2QoUfEdBLRSRVbcKr+) zgxSEcqp(w86XtzvfxkJaT);fQIbYW2#in+H*vIcSQ4vkDiu&XrG6`?0U?B9hJ2(f?rQiWVRnkpv`#Axwf8Z3v4*#8Hh z2iOZ;ptlYO@X*CSa{#dbKo@U-;sHt@#5n=x0O*5M4nQqHolrD%Li7^TdI5TgX}v%&_yP6; z`)~q)3#d8(IbbhyfWijNQ4e6gn7zPr@y{HfkAHsrIXHkt^CrXl?*kcwdEs>?YcTHv zU9>a&eXK0S4*VbedC1REtNUyJV(tID{zo7G%mLfLKd>k1-Rq5?7A=~ef}MxE@csW4 zr$ztwt3+1w`XUt-1zoEuigrc??76tlbu0Ai3&nULW_BhHl{wgzVZ3Mp?zpW|QIa8N zPt`*ca1VUIP5JizIp~1Ppaag6vxl$`9PxjmDgvILp{fQrT(nOPL@G#IRG_4Wk!I~2BnEJ$5el*))>T7Rry`p)&V_Tl>ulWi@1qQwn5f-#@&eXBz zCVn#b=``%dSPXyM4QplrAG3qrHbgF8JSN{_Pv9eP0pEXp8Q1_k!LC%x)zk0Usbj76=Zo8ux!yQy-wu0q6tJ3#d8(`XH4D zs13@5J}@g-%2@|sR-lxyOUkRMFiAEa^s zF@gPIm>JMv0^|t8z!8S>AP4Ai!2oiE&<^{dA0RKF>4o4oj9S1GxPS+^0e5w{w|kp9 zZis(J^Z^#TOrQf8g;>L$PTaR!(F54*K^=}5Wc+gmC^7>5Oi|Ha-7oUD<_Bv3iTl$F zl)XRWp2r3{z?svh%J3lrANP5)#{+v?OQVd8Ew?HJ?}D5;UJ)E_QF*TJ3O| zHevYH31dHa%Glqse!jTcn@K+AaO!IcYjDQyZK~3?mYJjHr*Yv^4FMzW`%mL&Ca58}lQX`m7eE@g?g$W}5sTGc+hZu4| z4CV$^F92>p%?^SiWE~I;&2SJffqm2qdTTkr--9#7*1|f#M~4e~kPl!T;Jgc1AZh^O z0f>JW^Z>S2X4qLeUM5W#3m@RI*eiy;-R3*R8NI(PX8$cM!7+dbOvW8e-;Q5P2gscy z_;*#>f7bid{t@@Hx3?4XT{~qQ?*5MkzyIx^0qWs9d?UAFMEA6H{X#y+22lARGGjYo>)>-$&bd+7hTC-l1q7cm0>FR<%} zA1ie_5lhD)cOE& zg2VtS)Y0bva)Q7Ds0{=sP=Q{cf*N690eX!v`vBGeC72l|7DzsT^TI`_0eI*gl!G~e z?35_UKrPVZA4YC4UNIy)9e8?ri22SPVzPRryz^!^88vj^d80-1QYP&K2k6A-ZC-$M3ze2RIuojc7I{^;j!_B1*KJHyK&2o96$^p7d1e->I0YqP9BU#9RMx>Twp`- zKB+?wP?zVUGyy6HWO-`3Ak_o>c@EI90OEn*1XK<{9iYzvzyivF36`N3C?OW0s{`m8 zqIm{zURaj{kOx=?WT~0K2#pue)dER6TriHa!}Je8Ef579R@o2q!1N_b5yEowznT5K0 zA$ANi4()9Ah^vc}>I3vxAm@PL+4NuT1?UZW^VTiN$jA`*`-?qdpZ7lxbw^7VFMuv_ zti16`hsR?+8j|kg<8BlX5bzT3foAl!ZF#D{(kp;}`+xKEvzh7cyxGp)d>MQ) zl9LVK^Us#ZJ>2sTZZ~S@Rs&}L4{Hat|Ccuo;m_;j&gBDg>tY3P0PF=imL->tq|2E@ zNph+-PEH(%Qd*$H#oz+K1ri6~smTQ&NIZ~yU=t3Y=LFdU;GhPmKp#*6PM`uQ;Pb>gAK*hg?1?cC6nFH7Zs98b8KYatTaaaeWp%+ki0R2O#7X~H}5C4F8otIz? zYJq6f0#U#O=q(;WesCYOg6Id>3#d8(xS&7#0Wa!=_NZRK8?}J9n?+PxESfCAZ0XaEhb<6?u_vQRPF}%O_i#R{; ze11N)KJ*bHujqz)pBRIt`*jBPXaP@x@iJn_2Tyu;f90#sMvn+6D99Ow+P`Jy?^lYa z=JsV6|LF-KlaivHE#rf>Bfi|Ep~O#4)y2s9BT1;~Gv&tFV!3sp47EPA!QlGt-(pTU ztRBC-QI8tnpuz!fU4SR>8T0|*0xlkbA9#HtumJ4;K`(H$JWRs^p$Rxt=%?y{T5y6j z)COh%3-~jAurB_o2~hfA_5r#%A#ef};07ynH2^(BI48uz_u~98dhdGjM?|W-DdR?5Xe%o*;{{TWEtR`~ob@RSs|gC&(PYD#gLE!T0RftB3S_rNg&tj16P9 zZZMriulVNno^5%)zuqfA&!^(t~55&IzBp>?Si^JSWeYMp`TAs*xq&A z?YD8q-@96ay1!o40L1_9-$V@n9N>$q2NV`~19OB|;VE$WSf-pmj2uvhec%Vd306mf z4*(vBI-sG5x*&}ctj(q_=+ChLO&g@~0g4OI>x1=t0CNDafO3@sI47v(0Qv>!-_Xav{~>;)#^qw57cfem`7S^&EUkPqCD53DWCut#LR%$qv{XO1k#oGpon>x()= zN2N8`zIBV*Uxs^MKIr?_-9dfdI<|fL)@9DNwtZXb{$DSan&Vf(zyCi$_tm<#IDTYF zns<3o!k({660Oj$`+&m>LJuE_yF3LsAXDLdcdr~k4yb+B2cRDy4sh>Utquz;gC|fi z>IU!u&=H;oC#Yco-~^}(q%H_^K@Ek(0``IvBqsnI0P}&Y1FD*O0pfx>E&!eZYDR$C zAe}x?s{w!qG6&@7a{y)q=^K<2g%b^IfLLIRmILsZhn^sZcmR31GrNF z++aL)g6suU9iU-?5n<>9&`8FmEbLqkj~AWi9l z&eUQTa5Z)Tm9Y;9mIllQ)GJ+(kA?;0Fb4n&ARa({u$mRr*8o}`(C`4x3Q`-yLtce&A4MMl z<^k>+n9OO`B=RV$W@$r^YDZr+4`-9j9o5oXQqj60l|ode?89vA_!JO{-aaCZO? zaeeLgm^WNqIosm|ZqY&Mj7-;{-1CS56&OYEI_5(Je4*(~~KH%hmXlX3tY=DjvWDYl}v>c$-0VTPJe|-)hCJ4Q74s!rG0ptLB z2&o!?bpY^yWaS}%-6E_5s1Klz0CtRU=O{5j_5z9%Kn@5&4hTX&un+v;KJ)_tdmXeo zz{gJfFhjW4%LcUoe76zz>Yz5T!)%~AJVTdacL+H_?igktuzJM`@Pekm3Ac&WZp;Zm z8{hzaussg-LVI|ux#w5+vF?$2V&(?s3`gVxeh&FW#=gO<>GJW2VNc)f)#HBOUay}W z^U=`g6-Gv*fib><`l1EzZ>F*O_k7y*Wod>r1<`JK(Yt;qPk}bIzyo)7kQ}cHlXHiN z1!Rea1(abQ-~m_2|C!>D15*f7y;`79w*cQPOJft1NH#h-;O?F`BFof zhu&h~d+*9yJzkUUo!kFxFl$CWY795v18)NF`NQAy{nPTboA)blyuPCA!II>UN;5o4 zN|GI}mnK;QulIqDCjj?%q?|jPEEkVusQdl)rE|0e7GaB4`LB$CG4?z5vBL1~r0P&x*UmaqC&Nr zkoo}TfLP>!{mcQ>2O$0<;VBfsS^)EdDhCh`zzI~f0Q7>0e}C2jIDRF!G{Chupz{>wwTbB1~WlnHVagyWF!dUaib$RZ%t9>!o6NX+sLC#~& zkMlmn0(jTo*Y^Od0TBP}3;6qYz!%)Yo)O{(m!S_nPfqXAGGZg>`_6f7AfL1Y@BOU=Cm(5EBl40Pp}6|G)$p|DoUoLJChJ-85aymW+`_li!!gV+SJ#j08?M z7q!4*^aD#}<#J-<>{wm$NW5M_^_Wo z=-21FK5xBo|D9fM-W)M(P$_zScV}mZg)uQPZCiN0zjx&PcE0}cNAH$uvh1DFRG|0Rh362yN|_Ol$I_YzgTKr%H#h<{*$$-o4Y zpciHi(DwpLD+qs4YJ}JeC{6&FfYuARqYeNrh&-?l*kAzifFJSzu>e1B&J1ubIrodK z6Pq1NWDC5}R~SxGI}#SbH+dfXQ^$@Ps%8ZzO`IgNXU`JD#fuR4%N{K^HhQ$gaPg0` zX3cmyZQ2yf6MXvg(@#ErG-mY3hvP<%ygKpIPmV8|Z;-mx%*@i-(sG5hx%oTJmX_^t z-?!*`e>H_kRa? zpN0hh3q%dTqiKVo3%bNUpcH)o`~p}5;O{a1Pu1*KHGuL8Y2pMqCrDiYIDu>(FR0@K zv^jxioL~h!1BeG|{=w`6;2VTpqm?<&azG{HU-bdN0(5misV@GD5&wnQEyy}R^#RY- z0mK4Qlfen-a{#%)cxO}p#TJVWX{&)a(g})`ed-sz5@Aa3#gNDe65hIZY zW`DhC(W1*{W*gF$EnAj^j}sTnpBrm1XI9wknKOK$C$u)0Gkvp>;leo<7CS$}zOTMG ztuXi3qV4&=5;4EcZ*uZzNuS1pSxfWwTV5%Qv;3hZ+ZlJYpB%$nA3eU<2V6dxgZM5{ z+8^oy6c@l808UWT1=J|MkiEiHV1cR!Kn=hifH~kK^ub3eu+-RbV9MVU+zt&kgc4#M^I(6c1K6$l! zkEf$XjlDa4`mCCekPs73H@ErjE-o{$Ltsi!P|(M~@`qqCzxt`z z2b7n`x2r9Ra<9zt%`4cy3o+@6THQxZV7~WkZ7lfxRLuY8%Z+oz3iD&#&$uTSKrDb7 z0dj?`18!oT;0km>m%s;{Wgoy*ADW(DBMh%`XTw0OP-&bAoC<;CauWXYsH14`lo|X@sE*Q2wFR1}Wb# z?h*)Tssk#)2a*#kLoGl~K-B{12MTctkO%S^|I`Q~2e1yv04A8mUI2W6(gq>^6A}N+ z0kNzD$O}Lp5CvQ?616}Wbb=wk1A{Ox#J=ALIsi}be~f)M=m4But;F65T3<(V%m~9L z*kYwvn9Y?bpA44agZd)&yGf63-K9r&?Yxeip>Oo=D{u7a_jth253g_CzB34M--n)! zzuk9S%TM-?^a`-1#C%EXgQd}<^OIa_iW96JmM2mlyjO<>M5>wqL+_B9K#D3{ryeweXIlYHGqCbNX-dC8+7|3^uhEBIEfh{&IrIW zNO6Mj4LeqW8i0Nwzyin#&^L@T0?&H|5C>Gc0NpMT)dT3`AM=6=4@`rPxZ(q_M*um1 zUgF#_T!lWMQegqW1M;GzJP$b_F9vmh#t9UnA7C$#kCTIWp)BG7%mF%mKq`6xg#~~Y zNI)*o=YVM3{}Ipz@$P5e&)VM`+F!=L3*z1xcfT8I06%X_33S~ke)g-x3?3^pCVnIz z4Co8I518LuZ(&!+JJ=QYuDsi~ANTUgfPsT$;II+Wf5bQ$Hg3wpg+?n6Zrrkccx7c} z%Z{$!Zn*tJ{$!_5SH5uJ%;AAWiH=!?3AWcNQ*58q=DH$Y{p2M2_cN&DFQKj{A8_k@ zDRv2J+CY8$QzM|&0N?|l8@h%a1I!nf$O)1Ys84{t0Gfbu%`-@OhM*Uqe>lAYo_Pkb z4tQ>tkir4L1*D)4Na4INIKebsAE0u8KK_vd6dtH?g8KL`*T+9{Kr!k8>Vt>{qc%Lgg0o)P)UeNvq zdhZf{`_GywgYeBj)?}e_#3!_(0wV_K%)lhK?K~?+^b> zJ{&jozR_ya-1XbG4aDqU%e?+SWR(22pA<2s#@g%!hsxs|oAkl?9*Ef>aCs4`2Do%A zOX>cp4OE=qHTVT^K1lTdm=lIp;Es+HymqEQE>RnZKHz)<@Bn%SA(v2RL{8vvv9?2i zHNgMwAKa7!82`^jp%02eFMt{V++ZT~L5d3i1`vrk;V|I;)c^VI1@4F1pO~Mgr!D4jZ6w6U zTtYpzNU+^f*#xf7aQ0a21O?aE|2=u{z4zq(4+hFW#QPB3^&gEKDT>1K}IWUf~+O0#G+x#2#{LgHD4F zIE6VOZB`hZpxPmz%?YVlVf~B{IKe9J5>>IU%K@AfU>(3d06Cyap98X}4PqU@9ze?h zst+I@sB%Cw9*GB{4`3ajs{!(<4bWi$ndwoIj{9HZ1jAJQ9|sI@KjJ?E@lOsg7&Acu z%mJ7Q^xccy-aeKR?7dS$T};H^cDYz>oQs`c6J_$GaWZ(wFc~;_s0_m6u;C-Ihiim5 z%mJJcV()MPT;iE}9VhtQe86G&g=koSP7^>pke)$0ZD2(z_6(=+Fc0YT!N>ts&<9qL z6QDK-+5m+EsQ7i}YbjDPk3`dQ(GxKQAK`uL|F7+OHo z0Kw4y1VaB8O z{&XVZex^*FyI7{rH^NyeqsEO_I6(KVoqu}!t=Ai{D|iAl{H=f6@35Ai?jQXXApdmk zL|y;VG;hbkIQvWGDSLiC06g$W31)<aF)!Pk6E3?%Vn z=oiE~K<^m_K9GJP^bS>=ApWjiAKb(Vsy+bvV6{sOb3&>H;G7^e!7k4o)&Puu)&ZOm zKp%h^A@Tvw;vYFc#ebMC{>ce42Rw^^y)KA3fPA2y5700G)&b$#Y=FuE@Ck^)p7C%u zi4NE;(R;T_gyS;t*)<`nWZu$MGG~#o%$&bOW-Ty6 z>@P>`o62m%3SbFw&Rob=s!{d*J4nFbexUu1w;b})M=C}V2YxxPA!z*y< zOygUp4wuc(iLtzvA8YyOK!yXfJHP@ICm0P~0R2O=zz0AZNKTMg0CNEG0QiV1-_T2# z5yE`HP0R`FXM|KA0Bw-U0hkfeyaIp)f)A|E0~V0$t9b_#3qTK04NU-#mIw4$fQ}Pj zAE0o6y;98_031LaRRcg5kc%9U7l9KgmEZ)K1IoYyY8qkPoRFRqL>|ZlCy<#IBk8OK zpbbh%f-ZRfUP+8}mBfJU66b0xQFaT&#cYb=_~y@@A~WXBM~p8K!xg4tymphUFvXny zy3b{q$!1x)W}_JMV;m#Xt@7#k@oHaKuWs$7OS?Zwo0tCcCj*1o87o$;ut45z;ryFJ zVEj&=ZD0Js zWX&2k?C>!BoxH7De#~a{3Q!+hTN=N*BFoP|FJ{+|RT+*?YvC7gv@}q0d1ry=UBcYo z70d|G7m)h`|BMp=7H}8y0e4Ub+&TyUaP|Sf0$2lRUIFwBii9?hzG2V?QXdQ)fV;$M z;2Fq$Vh6zmunzdM_*Yn_gVkUgeTWb2A4vT!~;e&@}Rx%1}BB11zl zTxujsSFCD^|FxUV#dN#1tlwoXMr$_99MlIxKIkX!^ymnG?pE^VYwe|Lr#4T!v~Tm> zwym3Y`uqD&ZANd4mZ$nVc?DRLa#pyiC}vD)x=%$h{DVsqpbth3z&?PwfC~+n6^71- zeqhuF(i=$W1Fw-6#2zu!1k?)Lfo6ajVse7i1u+MZ6XXto6V>1Z)lOkxf!rsC9Kbyy z)CMTeAb5ry&|?AQ0+OG{0`>Y}FT}qt2V?~_^#O_#L=8Z%fJ$8ssL09Q5F)W{f~K1-Fy z=aMB$@q6(8U2Q6>OgD+yZbx! z)BBBEd+h9Hz~B4b-^p95<;QGhuK;quf1IdJd!x26W_xkG?TO+z>u(Qay5OG1i~weZ z&q5o>9B>8q`c2FUsyQLt`6>tKW&_kNLDUAE5#s0knSVHU3S&NiI|UoDQIF2Jq@yA*Sosi^=+pvf6ZmtXjPm zo_;Ig`M*?*;qhsVkJoJ2ENjiS$;u6%%iM*AG7i4n{d>PIeR_0}x4O2Kx4UPG%?%m_Z|8)2IrT2=HTr!Ii?5}|ngnuyg z!SoG;e{fx_()v^Lr*r|R_qAOjnl9)ba6#gM^cH8IaP<^-h+sYdeBf!~0Ln8=(*<#l z2ypity2jGD=D35qxxK!sy;Y3O` zJ}$@SlwqczFxE-30=G)4kBNj^&k^s>r--fT1ler5Sj;x87PB4JvUS%U`FxkPY}~v} z)@?A8wI-(U_B58|%a_Z_)oa9b^L8=Wyh98YEs-%JN65Rt_9Kb%H7Jfm`_J}|ir0M`&4$$j@bY20PCV<|7-~=%zOkGg5!U2NhKyENjXw#`e zjZh99VL`O51A7GS;GX{iH9z%0P5NNe0NOs$a>W^3KAx*-0?puxRe9J5?&3EDc zfBE;oKuaT@ZH&&?|sG0m?gAVS&&D6u~P1e4sWbtluG`;{&M)AQsRR z|9V{zX9vg!Xjnis^ugo=50Do`ULaRk66Yv+;kzZ>-%Mg04JE{Cj<{_6RII@5?cTUR zZ0#Mz%{M}PqjJPQ1}8d8e8Q5%ZC?~}L73Qk1d5|ih&cO($}VdMg$axqj=1mE346F+ zk~g}vLF^OjL);_gwFBM{vHwQbcJf-6c27rsG&li!d}q?{r+K{#TAuCi`4u>KF8e=oxuVc>x$zzH_0ox<27qU!_b8+s6)fyzIe^8wHXSEXqBKy5zY87Dv= z;Yw(O^oM%kvLrVtim{V?VEd{5n&4&1SMpPt8a+x*kvgbKN~9_4IUtGcI|+;Z!52NZYw%<)4QP8gOOGlnE9WE?npe&HukPv$sIY)BT;l0>rB>p04Y4vaZCS zFv0plQG&JFDcVrD7oI`bDX4afC!)5;USZS# zk{@m<8H{_6)e`NzOuV*F7pG0r#Ad?`+3T=fLiRdKYFesfWM@l8PL3p}W=ec&w#269 zNo+=$#OEH6jOvq;QglFK@cSFqnaKE$N8-+JkGOwXUTxP(x^-zMJ-T#I=k-@m3!nz* z$sB;gI)K=JC*+7O?O*yHzTUY@VD#PM_4hjuq-Ol%e|6^KDc&2`hXPW7s4GOoCjvzPfakr#8nQUHW-}XP3VTM(Kir119O1#4Fn%> z0)8P!i3K1BG=LLOoFH;QO%`SZbv*#%zaqt1Dw3R~Jkbfq5wUMC#W6Ng7-=Qh!8;{A zV5`J>tdYPy3uUkQTyfhvOT2a)Nq~cyBw)5TH7-I53i2espg{5p@{tE}BrPXjQge$X zyQEe!OAbnMZizU#y2;k9TV%{fLj*fF<<<7BpyO{1KEI8;*15ep-SF6>OM6i{Kwk&w z@<8V{f0C{pT79$5WOdl~ty`xMPie+)ftIKKJAVbJ4?a?vzVbkBkT3MXKUYH^toDhO z>_hBEh|&k62H=bU_k^$pAO}bcKs%@dzzMKFP&EL(0gtLGJKo|Th{&D9c_DkX&qy({F5NRpdp*tnnXM@Bc_CrwbyM8_cySb)``_9D@ z=JvUyM|fc#AXzF3v!uMFP)bXRr35Fhs8I5XOQoQ+LP`%DlH8JV2@MN@zXv>fh7OPp zt^OqKTfG4Nek*ykV+VP)6HZ5HdONmL=e5r5q&wU5d&TJ?PEL^8U}yu6pblUSpfmxD z|4hVx8si^#KWhI{#C`F8J1Io$=Y#>gN1i^a#>Kq)5cmFb@lWq?U<8~YxTf1DsyIRDf=&PnJf^%u!|*i&v9H))X@b=KkNBrQ zP*J{SObh1^0pW+!rZWl;ddTBKFNMTp$0my&z8C0 zmN;tGufWav`afPid#ra+yi!st+I*z3RTdK0xmq2u_gtV9p0rgAb^PkfXZ&0kyyY4x;|A2G2*lk9|M!{k#YZ$wI%s-*dI> z+p|dAw#@*xKS#WFEkWFyOLdB$9L6lbu_DwIMZgz}W2F%}ps_4j8Y?-MTmc@kQfiA+ zB>?+8md~Gp8or}+X!DY^e)&Ze>zzAvK&B<8&Qx0L%y;$Nm5<{sW;o@v^L6ght&O)k}COId1&B!#%j zYWR75GGY*B^j=jpeMjE+=;)^pgc9KNxPcy5fQOhgvTX+S|969(= zLuLB1{FvR>p$qtdzJU$U1yL8E>4ULT6nG%(eC`S1&LC=o^zly|kU8K6cL_oh&=mii z4S*hi`@|0yhkyt4NBmRE=ZU)C8Fjy%qy=tAy}wF=;KS{*K!-;~u9qV!zePt>lFlUqqg0BYk?lCcCi**bVyt{elC<$jn@( z7@5gO(~ZSo)#e5}S1+Ia`_nojf3|3VehUHcJO3G2%hr~}cdRRmb1zMGsV|B($DS|E zGl<@SoD)>OVQRN{0cHV95${zB|0g$a2iPF>Lc|H^8AvYhOg;Ar0|%^(LHvg!{zIV! zf{vdW{$x+d!0b-^-c90bxe%Nlus$mzN%S*UabFLu|IvalUEHJYNBkcvghmmuf1xs7 zuGXZ;sgfuui}x1WP0M67rT%<6XOEM0IqcLINp|L=$z;Q9D(*N!zn zI~D)`^M#j$hgjf*F~ek+nX!aLM~iP*w5-`_r@VhZojONGO`ap4%vkvS6ocj0!}rI} zh40^h-}zgo<;VYxyaM(08Gk%_AZJQ>x@REp!0VN%c8?EYxA;-c3S*}zcYy~`a)Qy{v(Cp%Q87G*RNP0(X?%@y<*{-sKSBC7NXCyE zg4pjST@c^xap$wn@6uU|eHH)sxKrnjS`O#{OrX711GGhN&>HpsOSt#jp(c3k)mLQF z*bl|bbcOir^%T#rII;7KkQJM)WX_V+GSy&-d^T;KjGb!m_~U8wA8y{h+uzF8Y3<#+ zcmG6fXwB@C*VUz?~qM zv0L~S^ntgb0i=g0A8%o=z;)<`ubg20pN0D$7+`G*FoZ%SZQJ9WYla;g&bd_{tsEJNRbzjM3<^?q@LoWaLu%dpQ7ryO^Fr29@W znDnuX81$aBYYp5Ey*&H+SGz#Z%h-SJbXM_?9-vbv^Z@JwkOPn-82hbIFTC(_Yw7hy zHyQRpU$NSBnXcIDNFT*Rk5HIYkL}=ZX_;zNt>L2iHb@a3Ju!C`}s# zozE5Q5g;#c<4iH)9{ymbusiSs@BTdGi5%<^&w`#f4Y41CxOb7vFiQz@SuJ6%rV{D3 zMG6z(`IU{m1hv_69vI$*I^>K4$Qjk}6sQ7rh`atw1^h{>kq?R@q&_1+{Gjz;y>J@# za=$0tUq!65&PRX$D(d`KU+JuBetrBi?s-@P=uhX4om8G^jktfg6>5b}U1U)IKC;Pp zwz%wCE3t9W5)hLlcEQQA!NOJ6Y`2l+8+OQ2lP$7%^(HY`vPP!OTPmMTpC_Xy%y=|$ z=KKrp-rkOGZf-66zkW-B@H_rlE?zv=;l$C3!Ntk0d8Nq?XSi3qKFC@=P0QxU zwHe1t3po_&;%gj`G@TuSwrNy=CsC z(c*;I55iv1=)@H93jbg2U3XMfce;I(nMu>AF*=DxL6qJR5G<%DDqutGqJkn_dasIr z2#Q!JDk@?@L`9S?pa@E_0g4S9mK3`aTa3~D_V1Wv&3kLsTl2@{Ifj$9e(S>ZhI`L< z&;I(izdeXty$uT)_q&k`*x5H+;sAH>2!I`ZfGM+`Fn;PB470Ss7@KML{X@bIghWJG z#Ky+HGfDgoJ$G4Jv>F=ooT3T{HY&u>#udXa(P3hKP_T9uwd;v{| zH!z>Sg>!y8arsmpbAqhDoni0)Sx*&w%1PD`8`(d2ivGh<`VEKqcPhv$#=WD|9c`xyaqA@KimP{_Y{G!~<8ZT=^Sg0+AQ^5G< zuj@*)ERGhW7FFfOJUFs@2~HhcgJ#b33EuCE^}Eq}oI2n%dw%KbUp`sDew-XBzh9oc z40-E9Y4gKTw1c*uy*lSl9Au54nZ3j3@aUTh+&_4RJ;Y7S8#G8d;MBpb@_EE(D#J}(X-kx5+Jc`=i-$dL`+-quR zV2t??xXhY}jA$3+BnP4-do^4-Oq_mTzWemTh5Skv3t%ghU@7 zA5Zdx53H=L>?ivJ?HE+=*`-ql{JEhfPxW|Z&Wg(1m@9{JqF$URUWvx?H0JZUPwZGW z{eWG##2nv+`aI_O_s~bkz@c57$=w)^+_XUK+r->nVJ5DgV}0<(Sv-4q6Ho77$KUT< z#-m#;cyObc^@9`4AChCZmGgubs&J|P0J#FTB59Eye4Xcze_tP}%1Y=%d#~14k-2^) zsPlJar9S9K{P$55K0z<~1ifhMnG+C)F~P6(zpsdYp%WAp`@n4A0L+^@4om&!p*TGh z72Fe0o}Y>A10~p)SHXOL4uY33?)UbCvzs@Z7y8i$h=Qws1owf2!NJW(+7l*xfT{EW zY-T!O^teeFY&H}F1`K#@WN2`Y`@?S;7#Lh0G-%KX>V!kHX3g46u0Z>kn3xgC$;n-) z1LU58_Y4c|_2Y^;_e+eSUxt$~le(rvHzlYHIp zmjpyTKyX|iugo4_e=yVgSi#!Ly291xIm2`3cyY@8hT_ya#}2G%=ncnjhpeBn5I z3M_^Wg02?%dFbNYLg(LqlD9&)&Uz^Zk2C z^+wTW*ts)j5We{0*_U5^b!Xtffd!K$P4dmm%+#0tfcFav?fKI_eE6_)+r?(3v$X}G zCn~mVV-Ig#UBQ}@NB6I)JG3jYs9;OfwW7?Z2i18i-!vWG%08iD+`o2$K7KQPxO0g< z|267>Hsb#VUjA?!ubzB^S3l4fxO<6nJJrZqmxP!Ie^?A30z*9=;#x_N099rB2XA#iU+MsXc?IH6Y9oXqDOLd9MjJzRvcs%q@3I*#1R6WBn$z~$?P17-;w)4y&3-p zz?nIKd2YV2qwSwyI|ZYytYKn8+pn!n{8L|PYC=m(OZr_^RTX{vvQEJq+KW?9|WRK8MJi6UXJAWBJK5oOCAHT=XPrt#7 z`&V(ix)}R*Zi0`86FIqtV~}xw;#`ZnHnm`=t4%%d%i+%kJo>s?#Iy!$cIwj6p}o~o zSA!aDd>lDGpaxp`fxBd&_FECBF)5v+}qzAcNfC;SxXaeC`Qy;NCEMM_29&X71n49^)oV z!Vohvn3|eEUtdqM|BU%zWMqW?{riKyKGfCKp{%S-U!b=Xi+sTzrH?=P1blp?qN;i> zF)?v6Wvc&v+yU~ZlqK+10@tq}{`gVj;V$RSo$Jb4SC?AWxEkw^Sf6Pq_ia41{q}{U zJD*=Wz8kk%I5T{yiuiBDvwN5D;=xrs;rZ@*6E2*p!nTd8k+38TlP6j;$7ew7Yw&1F z*dL&;3uAp97}FOpq8<=O=mP^u2WUc%uhk;{H6{EjLrqN;n#>gpF*SlM>xAxeCu3ze zdBfs-k)IlY(u^f2&y2;iUN6fUJ58?BV8f^(v6H^!y@A~@sFf=rjuy1T^{2Tt&i2r`S z;9v9}idf*&jvYB;*yZJyU-h`>=;#;`9v(hf^b5#!0U2HIvjnaKAD=&eTCwR^an70Q zoJ;49Y{AW@1NiP@Ii7Hr;PboZ@WZ!f(Og%C>`iMC>bDRh7~@MhKKk+k-zEln7-*y? z<@-$y`Pg3{CjIrKV{AZuz+*(6(4Vi>qi?TH|5{ar*k>MK_z>pztjxLlX93p51tKq< zd?J|%%S$|{>03A7F_?N$a_*&nqCQSOOwGXl`!q zaG|Mwbjz{)RK^B3T5EUye6D5(YFPioAwEt;)PUcW&u1 zr>C!>##mp2J9pon{*3hv80+it=>B@BD|GofedY#-nf8}@0T<3CFJP1pHm@LG!1gsb zl)H|c!WlTamydhWaWpptwYyVLw|gy4kVoWnK?a)1CDKd|k;cP&QD0Sxipp{n9V|!A z{xa?kC`Kyl0MYR)xhH55oM`{2PMw1B1w<%)YbU0zm~?!{#xoU4Ybu>8EElns{O2|rT)g4 zF~DHf2B%sNgY%4WND6nuz6{#>UEDj&`r)avY@8-XSVQ3!)F0T4x_#?Wm&be`v44_t zgN=n7(aiY2xgwjK$Gg$M9N?jfGL(`>I5)opnK=bmyJ;^XW0t|6`vL9e&XKS`YSbwD z_=b{w7q(wuUtnJ71fc^=O-*4ye?VJDM~eNG`u1Z^LW%fSllP=+`8yXlI^?=I&dYbSw<~d&J>%e1+X+V|jTaZpAhE_o657vA-D&}4wv9?Wf^ww z+mE!2EG&sjhMSuweg3(yuowwrV47yTR~CE0e<~;Z}uR5O&!2EfPD#n{_sO|>e}_b&7{fs(`V1tlkwk@!&#L&QDhwidk!@!8aG{xvStL`N)ss zR%@*^Q+V}MDRsa;oZ$>|Gr2@0%nR%nXHXApMic7*A`ei0U>EW@`@3{$60sjlyYB$= z;pWWo51=ov#+tsSgnxl=VdvT3&peiYjZ9 z^a0p=+>3rdm`RCp6>8BmvsH&;mGBGtRK6dQb!20@nnM?3rx?AKI{lO(5IJKoC zYGUFDZXN1~KMNhf^YMj-iZ3oS6scZ4Rgv0yys)CBY8$a$N)Cc*auS~5o-&@B&C*=a zZO#^6Yhp}Lzn|P9dpW~QKcI|Ugv9^Za_%VQ&(#OEAvHM((NWQ`V{PBcYOG}6Mg2~N zy#*S?zpk#1l?>#&`LYFODHc{+i5jyY>{=LeVCrjYpA_1WXE?=(i z#J)i{#`>vetF}M5db04<&9fE6e-j?wZeh6OZc0?Tj~!>u%?ee%ngcKpq{<~G&HrP+JD#X ze|xQ@)c4^iOUrFLb91L`-MY0yd;8Ah>y;(&?~;Is2`*o*?tbY^mDRapxfK^{cYo8? zRQBf1)p}z8Jm(8r@$kD#xXW1Jd-9BYPu*~bGlu6+l;Lo3Hlia#;KJIziOE2y(AJBY z0Wmu)W(fPSk67gVL_9C*elupwkZ|tf}@@eae&AHYHRB~G&DA8o#*Hn?4t2n{7jU0`z`a{%xySG{d;SZsGb;`A>>2CR z-|xphot`}fKX`YEH?$Au2-MWnB_yE?{)|?3(@hkq{^ix*($;4#P#ZhA{E4FOeGJ!sSzxMcD$=57P;P;RK{eTZ{ zUuhoE)>7j^&ft5OPvrk}`+ODtPJRI~Z}{fbV?6o$U3~k^b>!~aj^IE)Sa9A*k$fUO zdWanWU0ILkjv)5v3+#*eJ(1%VxjkXi{rvo~WXTdRSBI4=laaJ?B~~OQAvP|KdLSCX z!68_<&{K*B#Oo(dp3EG9wdDV^AL!}eAw$o4dwaWZ?tcj9e&t^O-{U5b|7N?Ez_;IC zRk+boH~3s#Udfe{2ik729`M7xRy?|U4L7d0qO7Cf^YHAwRu1&$JRh(T)T#mS<@ra0s0_*qi zq<`SRT!1a{KWfzI*JH+5UbD2csu?$KTtrAni1ERL2YbqS{&szv$`}7TO5i$Y5-*>v zS#<4mN%i&91#j+udkHtLokwX|8G?d?Fk|Kn#`*nd=f7eNzKgW?r@Pn@#(rE;pHpSO zj==udv16sazu@3tL`O#x>#LBSp3Xgh>#~?L2#hl`)6%(;|3Bhi=mGJ2Dt&_0 z)B%a~0YbteUU~caJ)bpe_7xWww{7w9@y?~Cr9A|9+V6SI^52#vAWPt_1VnG(f#Tv3 zV{L4<=;-Oc>`WiOLx&Fd z7g14>Se}@OWa6JZU6S7~?7p!7;z&Axzo(|ABAU5DUvJ-s3q2NITDo+pAF*#Nei#T`0!eADr>ju5AF=T5)jzbAJ9_3g_XKe>Vik}GH!IY_K6 z+1E4G7PIYUz}=1b_wzwySQz4k|4$vTmU+MQ^fdbX>ySz8GlwtffP};ZVn6zspRf11 z$jHc;xVX5vD^{#f6rbb&_sZpWlO-TafN^#g+TRe)=~eydgAdS&JUis!W}c7xK{;

U+w}|LKrB$Yel&j5Hq#%h4k+X@WIo&6ooFIWytmO8onHu^%`XaWPAf5Wf_wlj#Gb zrZDf9j?J|B8|nLt9AIp0%#(0@DLFYgdh#A%`972-@NOh9cdo}5?8i-G z&uwF8;$HA<^dt|r;NTcEbU4OXkHak1=k4sK!*1pz%$PP2Gp0_&tZBBGJ8L>PU(9|$ z2Y9)=Ai&2PQIVmDiH^dG#CW8xVGSThmCM?ZawK6d(B_&0bae%x7 z{M~%*^1I3skR&j3=FDym4)Zq{8XBGXiZwnJH5KTRo7dc8G!~G<-^VWqKK_2>^Q4+qZX;?Y?{y$`W|D5)k-j4{nC(K$9~{jPVW0CqA6LK8~*LNMPSyO8R=l z#6}~~-v=&^_HdYM2M5}G@#ttj2MZkRCH%X&EP$uGD*}AIq+Y>A5n%`k^nVrP=kqKm z(61#jGCX}%QquJ0%a_aZJMZ=@m)~8Mz;6;rX8fNJAHT?QlzEN1suFoQ%s8hz9^T$w z%;$$=34QsHKwtQIdl28wa3{{)ogLxoG@obQ+r!_*^CA!6CjO1{K~9bi)EU0DQ4!(U z%>7w2_pioWLr1=`T+{ze`tlF51m3L#)~s36X?=RS+c@hn#X6cQKU<76!z7!r@bYwH zK2P}aL5$md5a8#@dYuRNj<~|h!v!9U2i#m2K-hgZ=U)%?fRp2o)B%rOT^w730)5k? zqap&!%F5JhYHB`zw^u5^yDR}&0{>eAVpr+evuBN_O_`W7*wpX`^P#41##x%vueW17 z?}9+?9Eb?@=LzHqVvmnMXL$Ws@AHB;b%f9b!uFGol>g7%*9+ZUZU*@I9LdVcblgf_Ve*{aB`eiJan+}^HJtQ;OsaDfxe#f0sIlW zI0|t~7GY`3B1A8a#G zAYoY?bNbPUp)Oby8HVuCpqHV+0ndX20`5eHhn6SA$1N)=Dl$5G@}$B)eIxlvSpu>I z{v#z&QBm>b=FJ-h+1gkix0zt|{q)Hbn9KLXV%GB$<71JuJRZqOiCCG${(f;*BqBXE z<@~1g>&tiT+Uc}s=T0N$_dXRhJ)uwjBQH|^P_hJM3H(zD&}M(ScklLI3*DVpI?S0_ zGTv&`8+YgV^Z~qS|D&;Tc>+?_ta`J4UCM*?>(Z`o+_1hZD|6GLZCP0hN=iy}IY-p} zpZ;O_Nm&B21l|h?a901XyK{C-3=a*A9y4Bs`0vFxEPqH@0{^!J1ix-#T%3ON;)u-)U7T-ty16`I z5C7Sn+1q!Q6cj8jC@2_SSXih{d*6vZ!(U}z|NoY!{I9YE-X{r&dO&JwQty;C$v%O; zUIhU@UNxIGZQQyiH#huHdHH1S-BA?#h2E!Yl0T~~0a*h7x&){L{w($cuy$`$US2+g z96`PA-n}b&_vHU%3CI#?2NDoEfcWnycI*j`AbD2jU4QB5{9peCxvu)IzXtjJWeL0! K37{MCum0a)Lusr4 literal 0 HcmV?d00001 diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/favicon.png b/omero_web_zarr/static/omero_web_zarr/vizarr/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e793a23cb92a86fd64c29080731e6637942362a GIT binary patch literal 67325 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≪4tcDW<65 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 literal 0 HcmV?d00001 diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/gzip.2d512667.js b/omero_web_zarr/static/omero_web_zarr/vizarr/gzip.2d512667.js new file mode 100644 index 0000000..7b5a812 --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/gzip.2d512667.js @@ -0,0 +1 @@ +import{p as e}from"./pako.esm-9240ff4b.6c52ac68.js";var o;const r=((o=class o{constructor(e=1){if(e<0||e>9)throw new Error("Invalid gzip compression level, it should be between 0 and 9");this.level=e}static fromConfig({level:e}){return new o(e)}encode(o){return e.gzip(o,{level:this.level})}decode(o,r){const t=e.ungzip(o);return void 0!==r?(r.set(t),r):t}}).codecId="gzip",o);export default r; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/index.709bf6a3.js b/omero_web_zarr/static/omero_web_zarr/vizarr/index.709bf6a3.js new file mode 100644 index 0000000..7d7455b --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/index.709bf6a3.js @@ -0,0 +1 @@ +var t=Object.defineProperty,r=Object.defineProperties,e=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,i=(r,e,n)=>e in r?t(r,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[e]=n,a=(t,r)=>{for(var e in r||(r={}))o.call(r,e)&&i(t,e,r[e]);if(n)for(var e of n(r))s.call(r,e)&&i(t,e,r[e]);return t},c=(t,n)=>r(t,e(n));function f(t,r=/{{(.*?)}}/){let e=r.exec(t);const n=[];let o;for(;e;)o=e.index,0!==o&&(n.push({match:!1,str:t.substring(0,o)}),t=t.slice(o)),n.push({match:!0,str:e[0]}),t=t.slice(e[0].length),e=r.exec(t);return t&&n.push({match:!1,str:t}),n}const u="abcdefghijklmnopqrstuvwxyz",l=new Set(u+u.toUpperCase()+"01234569789()*/+- ");function h(t,r){return f(t).map((t=>{if(!t.match)return t.str;let e=t.str.split(/{{|}}/).filter(Boolean)[0].trim();if(e in r)return r[e];const n=function(t){const r=t.match(/(?[A-Z_][A-Z_1-9]*)\((?[^)]+)\)/i);if(!(null==r?void 0:r.groups))return;const{fname:e,args:n}=r.groups;return{fname:e,ctx:Object.fromEntries(n.split(",").map((t=>{var r,e;const{key:n,num:o,str:s}=null!=(e=null==(r=t.match(/(?[a-z_0-9]*)\s*=\s*((?[0-9.]+)|('|")(?.*)('|"))/i))?void 0:r.groups)?e:{};if(!n||!o&&!s)throw Error(`Failed to match fn kwarg: ${t}`);return[n,o?Number(o):s]})))}}(e);if(n){const{fname:t,ctx:e}=n,o=r[t];if("function"==typeof o)return o(e);throw Error(`Cannot find function named ${t} in rendering context.`)}const o=function(t){for(let r=0;r{if(!t.match)return t.str;const e=r[t.str];if(null==e)throw Error(`Cannot find number named ${t.str} in rendering context.`);if("number"!=typeof e)throw Error(`The provided value for ${t.str} must be a number.`);return e}));return Function('"use strict";return ('+t.join("")+")")()}throw new Error(`Unable to match ${t.str}`)})).join("")}function p(t,r=h){return"version"in t?function(t,r){var e;const n={};for(const[i,a]of Object.entries(t.templates))a.includes("{{")?n[i]=t=>r(a,t):n[i]=a;const o=(t,e)=>r(t,a(a({},n),e)),s=new Map;for(const[i,a]of Object.entries(t.refs))if("string"==typeof a)s.set(i,a);else{const t=(null==(e=a[0])?void 0:e.includes("{{"))?o(a[0]):a[0];s.set(i,1===a.length?[t]:[t,a[1],a[2]])}for(const i of t.gen)for(const t of m(i.dimensions)){const r=o(i.key,t),e=o(i.url,t),n=o(i.offset,t),a=o(i.length,t);s.set(r,[e,parseInt(n),parseInt(a)])}return s}(t,r):function(t){return new Map(Object.entries(t))}(t)}function*m(t){const r=Object.keys(t),e=Object.values(t).map((t=>Array.isArray(t)?t:[...d(t)]));for(const n of function*(...t){if(0===t.length)return;const r=t.map((t=>t[Symbol.iterator]())),e=r.map((t=>t.next()));if(e.some((t=>t.done)))throw new Error("Input contains an empty iterator.");for(let n=0;;){if(e[n].done){if(r[n]=t[n][Symbol.iterator](),e[n]=r[n].next(),++n>=r.length)return}else yield e.map((({value:t})=>t)),n=0;e[n]=r[n].next()}}(...e))yield Object.fromEntries(r.map(((t,r)=>[t,n[r]])))}function*d({stop:t,start:r=0,step:e=1}){for(let n=r;n{for(var t=new Uint8Array(128),r=0;r<64;r++)t[r<26?r+65:r<52?r+71:r<62?r-4:4*r-205]=r;return r=>{for(var e=r.length,n=new Uint8Array(3*(e-("="==r[e-1])-("="==r[e-2]))/4|0),o=0,s=0;o>4,n[s++]=a<<4|c>>2,n[s++]=c<<6|f}return n}})(),w=new TextEncoder;export{g as ReferenceStore,p as parse}; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/index.8a48b24e.js b/omero_web_zarr/static/omero_web_zarr/vizarr/index.8a48b24e.js new file mode 100644 index 0000000..cd0335e --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/index.8a48b24e.js @@ -0,0 +1 @@ +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,l=(t,n,a)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[n]=a,i=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&l(e,n,t[n]);if(a)for(var n of a(t))o.call(t,n)&&l(e,n,t[n]);return e},s=(e,a)=>t(e,n(a));import{X as c,C as m,p as u,S as d,T as p,o as h,a as f,b as g,Z as y,M as w,H as x,c as E,G as b,D as v,d as _,I as P,e as A,s as S,w as I,f as C,u as O,R as k,g as z,r as F,h as j,O as M,i as $,V as L,j as V,k as R,A as N,l as T,m as B,N as D,n as q,P as W,q as U,t as G,v as H,x as J,y as Z,z as X,L as Y,B as K,E as Q,F as ee,J as te,K as ne,Q as ae,U as re,W as oe,Y as le,_ as ie,$ as se,a0 as ce}from"./vendor.32c7a866.js";let me;const ue={},de=function(e,t){if(!t||0===t.length)return e();if(void 0===me){const e=document.createElement("link").relList;me=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if((e=`./${e}`)in ue)return;ue[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const a=document.createElement("link");return a.rel=t?"stylesheet":me,t||(a.as="script",a.crossOrigin=""),a.href=e,document.head.appendChild(a),t?new Promise(((e,t)=>{a.addEventListener("load",e),a.addEventListener("error",t)})):void 0}))).then((()=>e()))},pe=s(i({},c.defaultProps),{loaders:{type:"array",value:[],compare:!0},spacer:{type:"number",value:5,compare:!0},rows:{type:"number",value:0,compare:!0},columns:{type:"number",value:0,compare:!0},concurrency:{type:"number",value:10,compare:!1},text:{type:"boolean",value:!1,compare:!0},onClick:{type:"function",value:null,compare:!0},onHover:{type:"function",value:null,compare:!0}});function he(e,t,n=[0,0],a=1){const[r,o]=n;return[r,t*a+o,e*a+r,o]}function fe(e){const{loaders:t,loaderSelection:n=[]}=e;let{concurrency:a}=e;a&&n.length>0&&(a=Math.ceil(a/n.length));return u(t,(async e=>{const t=n.map((t=>e.loader.getRaster({selection:t}))),a=await Promise.all(t);return s(i({},e),{data:{data:a.map((e=>e.data)),width:a[0].width,height:a[0].height}})}),{concurrency:a})}class ge extends m{initializeState(){this.state={gridData:[],width:0,height:0},fe(this.props).then((e=>{const{width:t,height:n}=function(e){const[t]=e,{width:n,height:a}=t.data;return e.forEach((({data:e})=>{if((null==e?void 0:e.width)!==n||(null==e?void 0:e.height)!==a)throw new Error("Grid data is not same shape.")})),{width:n,height:a}}(e);this.setState({gridData:e,width:t,height:n})}))}updateState({props:e,oldProps:t,changeFlags:n}){const{propsChanged:a}=n,r="string"==typeof a&&a.includes("props.loaders"),o=e.loaderSelection!==t.loaderSelection;(r||o)&&fe(this.props).then((e=>{this.setState({gridData:e})}))}getPickingInfo({info:e}){if(!e.coordinate)return e;const t=this.props.spacer||0,{width:n,height:a}=this.state,[r,o]=e.coordinate,l=Math.floor(o/(a+t)),i=Math.floor(r/(n+t));return e.gridCoord={row:l,column:i},e}renderLayers(){const{gridData:e,width:t,height:n}=this.state;if(0===t||0===n)return null;const{rows:a,columns:r,spacer:o=0,id:l=""}=this.props,s=e.map((e=>{const a=e.row*(n+o),r=e.col*(t+o),s={channelData:e.data,bounds:he(t,n,[r,a]),id:`${l}-GridLayer-${e.row}-${e.col}`,dtype:e.loader.dtype||"Uint16",pickable:!1};return new c(i(i({},this.props),s))}));if(this.props.pickable){const[e,c]=[0,0],m=a*(n+o),u=r*(t+o),p={data:[{polygon:[[c,e],[u,e],[u,m],[c,m]]}],getPolygon:e=>e.polygon,getFillColor:[0,0,0,0],getLineColor:[0,0,0,0],pickable:!0,id:`${l}-GridLayer-picking`},h=new d(i(i({},this.props),p));s.push(h)}if(this.props.text){const a=new p({id:`${l}-GridLayer-text`,data:e,getPosition:e=>[e.col*(t+o),e.row*(n+o)],getText:e=>e.name,getColor:[255,255,255,255],getSize:16,getAngle:0,getTextAnchor:"start",getAlignmentBaseline:"top"});s.push(a)}return s}}ge.layerName="GridLayer",ge.defaultProps=pe;const ye={cyan:"#00FFFF",yellow:"#FFFF00",magenta:"#FF00FF",red:"#FF0000",green:"#00FF00",blue:"#0000FF",white:"#FFFFFF"},we=[ye.magenta,ye.green],xe=[ye.red,ye.green,ye.blue],Ee=Object.values(ye).slice(0,-2);async function be(e){const t=await async function(e){if("string"==typeof e){let t;if(e.endsWith(".json")){const[{ReferenceStore:n},a]=await Promise.all([de((()=>import("./index.709bf6a3.js")),[]),fetch(e).then((e=>e.json()))]);t=n.fromJSON(a)}else t=new x(e);return t}return e}(e);return h(t).catch((e=>{if(e instanceof f)return g({store:t});throw e}))}async function ve(e,t){const{datasets:n}=t[0]||[{path:"0"}],a=await Promise.all(n.map((({path:t})=>e.getItem(t))));if(a.every((e=>e instanceof y)))return a;throw Error("Multiscales metadata included a path to a group.")}function _e(e){e.startsWith("#")&&(e=e.slice(1));return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]}function Pe(e){return Array.from({length:e},((e,t)=>t))}function Ae(...e){return e.filter(Boolean).map((e=>function(e,t=" "){for(;e.length>0&&t.includes(e.charAt(e.length-1));)e=e.substr(0,e.length-1);return e}(e,"/"))).join("/")}function Se(e){const t=e[e.length-1];return 3===t||4===t}function Ie(e){const t=Se(e.shape),[n,a]=e.chunks.slice(t?-3:-2),r=Math.min(n,a);return 2**Math.floor(Math.log2(r))}function Ce(e){if(!e)return new w;const t=new w;try{const a="string"==typeof e?JSON.parse(e):e;if(n=a,!Array.isArray(n)||16!==n.length||!n.every((e=>"number"==typeof e)))throw Error("Invalid modelMatrix size. Must be 16.");t.setRowMajor(...a)}catch{const t=`Failed to parse modelMatrix. Got ${JSON.stringify(e)}, using identity.`;console.warn(t)}var n;return t}async function Oe(e,t,n){var a,r;if(!("columns"in n)||!("rows"in n))throw Error("Plate .zattrs missing columns or rows");const o=n.rows.map((e=>e.name)),l=n.columns.map((e=>e.name)),c=n.wells.map((e=>e.path)),m=await t.getItem(c[0]).then((e=>e.attrs.asObject()));if(!("well"in m))throw Error("Path for image is not valid, not a well.");const d=m.well.images[0].path,p=await t.getItem(Ae(c[0],d)).then((e=>e.attrs.asObject()));if(!("omero"in p))throw Error("Path for image is not valid.");const{datasets:h}=p.multiscales[0],f=h[h.length-1].path,g=await u(c.map((e=>[e,Ae(e,d,f)])),(([e,n])=>t.getItem(n).then((t=>[e,t]))),{concurrency:10}),y=await Promise.all(g),w=ze(p.multiscales),b=ke(p.omero,w),v=Ie(y[0][1]),_=y.map((e=>{const[t,n]=e[0].split("/");return{name:`${t}${n}`,row:o.indexOf(t),col:l.indexOf(n),loader:new E(e[1],w,v)}})),P=s(i({loaders:_},b),{axis_labels:w,loader:[_[0].loader],model_matrix:Ce(e.model_matrix),defaults:{selection:b.defaultSelection,colormap:null!=(a=e.colormap)?a:"",opacity:null!=(r=e.opacity)?r:1},name:n.name||"Plate",rows:o.length,columns:l.length});return P.onClick=n=>{let a=n.gridCoord;if(!a)return;const{row:r,column:i}=a;let s;t.store instanceof x&&!isNaN(r)&&!isNaN(i)&&(s=Ae(t.store.url,o[r],l[i])),e.onClick?(delete n.layer,n.imageSource=s,e.onClick(n)):s&&window.open(window.location.origin+window.location.pathname+"?source="+s)},P}function ke({rdefs:e,channels:t,name:n},a){var r,o;const l=null!=(r=e.defaultT)?r:0,i=null!=(o=e.defaultZ)?o:0,s=[],c=[],m=[],u=[];t.forEach((e=>{s.push(e.color),c.push([e.window.start,e.window.end]),m.push(e.active),u.push(e.label)}));const d=a.map((e=>"t"==e?l:"z"==e?i:0));return{name:n,names:u,colors:s,contrast_limits:c,visibilities:m,channel_axis:a.includes("c")?a.indexOf("c"):null,defaultSelection:d}}function ze(e){return e[0].axes||["t","c","z","y","x"]}function Fe(e){const{loader:t,channel_axis:n,colors:a,visibilities:r,contrast_limits:o,model_matrix:l,defaults:i,loaders:s,rows:c,columns:m,onClick:u}=e,{selection:d,opacity:p,colormap:h}=i,f=function(e){return e.loaders?ge:e.loader.length>1?_:P}(e),g=[],y=[],w=[],x=[],E=r.flatMap(((e,t)=>e?t:[]));for(const v of E){if(Number.isInteger(n)){const e=[...d];e[n]=v,g.push(e)}else g.push(d);y.push(_e(a[v])),w.push(o[v]),x.push(!0)}const b=[...w];if(!(t[0].dtype in v))throw Error(`Dtype not supported, must be ${JSON.stringify(Object.keys(v))}`);return{Layer:f,layerProps:{loader:1===t.length?t[0]:t,loaders:s,rows:c,columns:m,loaderSelection:g,colorValues:y,sliderValues:b,contrastLimits:w,channelIsOn:x,opacity:p,colormap:h,modelMatrix:l,onClick:u},on:!0}}var je=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",createSourceData:async function(e){var t;const n=await be(e.source);let a;if(n instanceof b){const t=await n.attrs.asObject();if("plate"in t)return Oe(e,n,t.plate);if("well"in t)return async function(e,t,n){var a,r,o,l;const c=e.acquisition?parseInt(e.acquisition):void 0;let m=[];if(!(null==n?void 0:n.images))throw Error("Well .zattrs missing images");if(!(t.store instanceof x))throw Error("Store must be an HTTPStore to open well.");const[u,d]=t.store.url.split("/").filter(Boolean).slice(-2);let{images:p}=n;const f=p.flatMap((e=>e.acquisition?[e.acquisition]:[]));if(f.length>1){const e=t.store.url.replace(`${u}/${d}`,""),n=await h(new x(e)),o=await n.attrs.asObject();m=null!=(r=null==(a=null==o?void 0:o.plate)?void 0:a.acquisitions)?r:[],c&&f.includes(c)&&(p=p.filter((e=>e.acquisition===c)))}const g=p.map((e=>e.path)),y=Math.ceil(Math.sqrt(g.length)),w=Math.ceil(g.length/y),b=await t.getItem(g[0]).then((e=>e.attrs.asObject()));if(!("omero"in b))throw Error("Path for image is not valid.");let v=b.multiscales[0].datasets[0].path;const _=g.map((e=>t.getItem(Ae(e,v)))),P=await Promise.all(_),A=ze(b.multiscales),S=ke(b.omero,A),I=Ie(P[0]),C=Pe(w).flatMap((e=>Pe(y).map((t=>{const n=t+e*y;return{name:String(n),row:e,col:t,loader:new E(P[n],A,I)}})))),O=s(i({loaders:C},S),{axis_labels:A,loader:[C[0].loader],model_matrix:Ce(e.model_matrix),defaults:{selection:S.defaultSelection,colormap:null!=(o=e.colormap)?o:"",opacity:null!=(l=e.opacity)?l:1},name:`Well ${u}${d}`});return m.length>0&&(O.acquisitions=m,O.acquisitionId=c||-1),O.rows=w,O.columns=y,O.onClick=n=>{let a=n.gridCoord;if(!a)return;const{row:r,column:o}=a;let l;if(t.store instanceof x&&!isNaN(r)&&!isNaN(o)){const e=r*y+o;l=Ae(t.store.url,g[e])}e.onClick?(delete n.layer,n.imageSource=l,e.onClick(n)):l&&window.open(window.location.origin+window.location.pathname+"?source="+l)},O}(e,n,t.well);if("omero"in t)return async function(e,t,n){var a;const{name:r,opacity:o=1,colormap:l=""}=e,s=await ve(t,n.multiscales),c=ze(n.multiscales),m=ke(n.omero,c),u=Ie(s[0]),d=s.map((e=>new E(e,c,u)));return i({loader:d,axis_labels:c,name:null!=(a=m.name)?a:r,model_matrix:Ce(e.model_matrix),defaults:{selection:m.defaultSelection,colormap:l,opacity:o}},m)}(e,n,t);if(0===Object.keys(t).length&&n.store instanceof x){const t=n.store.url.slice(0,n.store.url.lastIndexOf("/")),a=await h(new x(t)),r=await a.attrs.asObject();if("plate"in r)return Oe(e,a,r.plate)}if(!("multiscales"in t))throw Error("Group is missing multiscales specification.");a=await ve(n,t.multiscales),e.axis_labels||(e.axis_labels=t.multiscales[0].axes)}else a=[n];const r=function(e,t){t&&t.length==e.shape.length||(t=e.shape.slice(0,-2).map(((e,t)=>""+t)).concat(["y","x"]));return t}(a[0],e.axis_labels),o=Ie(a[0]),l=a.map((e=>new E(e,r,o))),[c]=l,m="Float32"===c.dtype?1:v[c.dtype].max;if("channel_axis"in e||r.includes("c"))return(e=e).channel_axis=null!=(t=e.channel_axis)?t:r.indexOf("c"),function(e,t,n){const{names:a,channel_axis:r,name:o,model_matrix:l,opacity:i=1,colormap:s=""}=e;let{contrast_limits:c,visibilities:m,colors:u}=e;const d=t[0].shape[r];for(const p of[c,m,a,u])if(p&&p.length!==d){const e=Object.keys({channelProp:p})[0];throw Error(`channel_axis is length ${d} and provided channel_axis property ${e} is different size.`)}if(m||(m=d<=6?Array(d).fill(!0):[...Array(6).fill(!0),...Array(d-6).fill(!1)]),!u)if(1==d)u=[ye.white];else if(2==d)u=we;else if(3===d)u=xe;else if(d<=6)u=Ee.slice(0,d);else{u=Array(d).fill(ye.white);const e=m.flatMap(((e,t)=>e?t:[]));for(const[t,n]of e.entries())u[n]=Ee[t]}return{loader:t,name:o,channel_axis:Number(r),colors:u,names:null!=a?a:Pe(d).map((e=>`channel_${e}`)),contrast_limits:null!=c?c:Array(d).fill([0,n]),visibilities:m,model_matrix:Ce(e.model_matrix),defaults:{selection:Array(t[0].shape.length).fill(0),colormap:s,opacity:i},axis_labels:t[0].labels}}(e,l,m);if(2===c.shape.length||!("channel_axis"in e))return function(e,t,n){const{color:a,contrast_limits:r,visibility:o,name:l,colormap:i="",opacity:s=1}=e;return{loader:t,name:l,channel_axis:null,colors:[null!=a?a:ye.white],names:["channel_0"],contrast_limits:[null!=r?r:[0,n]],visibilities:[null==o||o],model_matrix:Ce(e.model_matrix),defaults:{selection:Array(t[0].shape.length).fill(0),colormap:i,opacity:s},axis_labels:t[0].labels}}(e,l,m);throw Error("Failed to load image.")},initLayerStateFromSource:Fe});const Me=A([]),$e=A({zoom:0,target:[0,0,0],default:!0}),Le=S(Me),Ve=C((e=>A(s(i({},Fe(e)),{id:e.id}))),((e,t)=>e.id===t.id)),Re=A((e=>{const t=e(Le);if(0===t.length)return[];const n=t.map((t=>Ve(e(t))));return e(I(n))}));function Ne({layers:e}){var t,n;const[a,r]=z($e),o=F.exports.useRef(null);if(o.current&&(null==a?void 0:a.default)&&(null==(n=null==(t=e[0])?void 0:t.props)?void 0:n.loader)){const{deck:t}=o.current,{width:n,height:a,maxZoom:l}=function(e){const{loader:t,rows:n,columns:a}=e,[r,o]=Array.isArray(t)?[t[0],t.length]:[t,0],l=Se(r.shape);let[i,s]=r.shape.slice(l?-3:-2);if(n&&a){const e=5;i=(i+e)*n,s=(s+e)*a}return{height:i,width:s,maxZoom:o}}(e[0].props),i=t.width<400?10:t.width<600?30:50,{zoom:s,target:c}=function([e,t],[n,a],r,o){const l=(n-2*o)/e,i=(a-2*o)/t;return{zoom:Math.min(r,Math.log2(Math.min(l,i))),target:[e/2,t/2,0]}}([n,a],[t.width,t.height],l,i);r({zoom:s,target:c})}return k.createElement(j,{ref:o,layers:e,viewState:a,onViewStateChange:e=>r(e.viewState),views:[new M({id:"ortho",controller:!0})]})}function Te(){const e=O(Re).map((e=>e.on?new e.Layer(e.layerProps):null));return k.createElement(Ne,{layers:e})}function Be({sourceAtom:e,layerAtom:t}){const n=O(e),[a,r]=z(t);return k.createElement($,{"aria-label":`toggle-layer-visibility-${n.id}`,onClick:e=>{e.stopPropagation(),r((e=>{const t=!e.on;return s(i({},e),{on:t})}))},style:{backgroundColor:"transparent",marginTop:"2px",color:`rgb(255, 255, 255, ${a.on?1:.5})`}},a.on?k.createElement(L,null):k.createElement(V,null))}const De=R({root:{borderBottom:"1px solid rgba(150, 150, 150, .125)",backgroundColor:"rgba(150, 150, 150, 0.25)",display:"block",padding:"0 3px",height:27,minHeight:27,overflow:"hidden",transition:"none","&$expanded":{minHeight:27}},content:{margin:0,"&$expanded":{margin:0}},expanded:{}})(N);function qe({sourceAtom:e,layerAtom:t,name:n}){const a=`layer-controller-${O(e).id}`;return k.createElement(De,{"aria-controls":a,id:a},k.createElement("div",{style:{display:"flex",flexDirection:"row"}},k.createElement(Be,{sourceAtom:e,layerAtom:t}),k.createElement(T,{style:{marginTop:"4px",marginLeft:"5px"},variant:"body2"},n)))}function We({sourceAtom:e}){const t=O(e),{acquisitionId:n,acquisitions:a}=t;if(!a)return null;return k.createElement(k.Fragment,null,k.createElement(B,null,k.createElement(D,{fullWidth:!0,style:{fontSize:"0.7em"},onChange:e=>{let t=e.target.value;const n=new URL(window.location.href);"-1"===t?n.searchParams.delete("acquisition"):n.searchParams.set("acquisition",t),window.location.href=decodeURIComponent(n.href)},value:n},k.createElement("option",{value:"-1",key:"-1"},"Filter by Acquisition"),a.map((e=>(e=e,k.createElement("option",{value:e.id,key:e.id},"Acquisition: ",e.name)))))))}function Ue({sourceAtom:e,layerAtom:t}){const n=O(e),[a,r]=z(t),[o,l]=F.exports.useState(null),c=()=>{l(null)},{names:m}=n,u=Boolean(o),d=u?`layer-${n.id}-add-channel`:void 0;return k.createElement(k.Fragment,null,k.createElement($,{onClick:e=>{l(e.currentTarget)},"aria-describedby":d,style:{backgroundColor:"transparent",padding:0,zIndex:2,cursor:"pointer"},disabled:6===a.layerProps.loaderSelection.length},k.createElement(q,null)),k.createElement(W,{id:d,open:u,anchorEl:o,onClose:c,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"}},k.createElement(U,{style:{padding:"0px 4px",marginBottom:4,width:"8em"}},k.createElement(T,{variant:"caption"},"selection: "),k.createElement(G,null),k.createElement(D,{fullWidth:!0,style:{fontSize:"0.7em"},id:`layer-${n.id}-channel-select`,onChange:e=>{const{defaults:{selection:t},channel_axis:a,colors:o,contrast_limits:l}=n;c();const m=+e.target.value,u=[...t];a&&(u[a]=m),r((e=>{const{layerProps:t}=e,n=[...t.loaderSelection,u],a=[...t.colorValues,_e(o[m])],r=[...t.sliderValues,l[m]],c=[...r],d=[...t.channelIsOn,!0];return s(i({},e),{layerProps:s(i({},t),{loaderSelection:n,colorValues:a,sliderValues:r,contrastLimits:c,channelIsOn:d})})}))}},k.createElement("option",{"aria-label":"None",value:""},"None"),m.map(((e,t)=>k.createElement("option",{value:t,key:e},e)))))))}const Ge=R({root:{color:"white",padding:"10px 0px 5px 0px",marginRight:"5px"},active:{boxshadow:"0px 0px 0px 8px rgba(158, 158, 158, 0.16)"}})(H);function He({layerAtom:e}){const[t,n]=z(e);return k.createElement(Ge,{value:t.layerProps.opacity,onChange:(e,t)=>{const a=t;n((e=>s(i({},e),{layerProps:s(i({},e.layerProps),{opacity:a})})))},min:0,max:1,step:.01})}const Je=R({root:{width:"5.5em",fontSize:"0.7em"}})(J);function Ze({sourceAtom:e,layerAtom:t,axisIndex:n,max:a}){const r=O(e),[o,l]=z(t),[c,m]=F.exports.useState(null),u=Boolean(c),d=u?`${n}-index-${r.id}-options`:void 0,p=o.layerProps.loaderSelection[0]?o.layerProps.loaderSelection[0][n]:1;return k.createElement(k.Fragment,null,k.createElement($,{onClick:e=>{m(e.currentTarget)},"aria-describedby":d,style:{backgroundColor:"transparent",padding:0,zIndex:2,cursor:"pointer"}},k.createElement(Z,null)),k.createElement(W,{id:d,open:u,anchorEl:c,onClose:()=>{m(null)},anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"}},k.createElement(U,{style:{padding:"0px 4px",marginBottom:4}},k.createElement(T,{variant:"caption"},"Index:"),k.createElement(G,null),k.createElement(Je,{value:p,onChange:e=>{let t=+e.target.value;t<0&&(t=0),t>a&&(t=a),l((e=>{let a=i({},e.layerProps);return a.loaderSelection=a.loaderSelection.map((e=>{let a=[...e];return a[n]=t,a})),s(i({},e),{layerProps:a})}))},type:"number",id:"max",fullWidth:!1}),k.createElement(G,null))))}const Xe=R({root:{color:"white",padding:"10px 0px 5px 0px",marginRight:"5px"},active:{boxshadow:"0px 0px 0px 8px rgba(158, 158, 158, 0.16)"}})(H);function Ye({sourceAtom:e,layerAtom:t,axisIndex:n,max:a}){const[r,o]=z(t),l=O(e),{axis_labels:c}=l;let m=c[n];"t"!==m&&"z"!==m||(m=m.toUpperCase());const[u,d]=F.exports.useState(0);F.exports.useEffect((()=>{d(r.layerProps.loaderSelection[0]?r.layerProps.loaderSelection[0][n]:1)}),[r.layerProps.loaderSelection]);return k.createElement(k.Fragment,null,k.createElement(B,null,k.createElement(B,{container:!0,justify:"space-between"},k.createElement(B,{item:!0,xs:10},k.createElement("div",{style:{width:165,overflow:"hidden",textOverflow:"ellipsis"}},k.createElement(T,{variant:"caption",noWrap:!0},m,": ",u,"/",a))),k.createElement(B,{item:!0,xs:1},k.createElement(Ze,{sourceAtom:e,layerAtom:t,axisIndex:n,max:a}))),k.createElement(B,{container:!0,justify:"space-between"},k.createElement(B,{item:!0,xs:12},k.createElement(Xe,{value:u,onChange:(e,t)=>{d(t)},onChangeCommitted:()=>{o((e=>{let t=i({},e.layerProps);return t.loaderSelection=t.loaderSelection.map((e=>{let t=[...e];return t[n]=u,t})),s(i({},e),{layerProps:t})}))},min:0,max:a,step:1})))),k.createElement(G,null))}function Ke({sourceAtom:e,layerAtom:t}){const n=O(e),{axis_labels:a,channel_axis:r,loader:o}=n,l=a.slice(0,-2).map(((e,t)=>[e,t,o[0].shape[t]])).filter((e=>e[1]!==r&&e[2]>1)).map((([n,a,r])=>k.createElement(Ye,{key:n,sourceAtom:e,layerAtom:t,axisIndex:a,max:r-1})));return 0===l.length?null:k.createElement(k.Fragment,null,k.createElement(B,null,l),k.createElement(G,null))}const Qe=X((()=>({container:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"2px"},button:{padding:"3px",width:"16px",height:"16px"}}))),et=Object.entries(ye).map((([e,t])=>[e,_e(t)]));function tt({handleChange:e}){const t=Qe();return k.createElement("div",{className:t.container,"aria-label":"color-swatch"},et.map((([n,a])=>k.createElement($,{className:t.button,key:n,onClick:()=>e(a)},k.createElement(Y,{fontSize:"small",style:{color:`rgb(${a})`}})))))}const nt=R({root:{width:"5.5em",fontSize:"0.7em"}})(J);function at({sourceAtom:e,layerAtom:t,channelIndex:n}){const a=O(e),[r,o]=z(t),[l,c]=F.exports.useState(null),{channel_axis:m,names:u}=a,d=e=>{const t=e.target.id;let a=+e.target.value;a<0&&(a=0),o((e=>{const r=[...e.layerProps.contrastLimits],o=[...e.layerProps.sliderValues],[l,c]=r[n],[m,u]=o[n],[d,p]="min"===t?[a,c]:[l,a];return d>m&&(o[n]=[d,u]),p{c(e.currentTarget)},"aria-describedby":h,style:{backgroundColor:"transparent",padding:0,zIndex:2,cursor:"pointer"}},k.createElement(Z,null)),k.createElement(W,{id:h,open:p,anchorEl:l,onClose:()=>{c(null)},anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"}},k.createElement(U,{style:{padding:"0px 4px",marginBottom:4}},k.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},k.createElement(T,{variant:"caption"},"remove:"),k.createElement($,{onClick:()=>{o((e=>{const{layerProps:t}=e,a=[...t.colorValues],r=[...t.sliderValues],o=[...t.contrastLimits],l=[...t.loaderSelection],c=[...t.channelIsOn];return a.splice(n,1),r.splice(n,1),o.splice(n,1),l.splice(n,1),c.splice(n,1),s(i({},e),{layerProps:s(i({},t),{colorValues:a,sliderValues:r,loaderSelection:l,channelIsOn:c,contrastLimits:o})})}))}},k.createElement(K,null))),k.createElement(G,null),k.createElement(T,{variant:"caption"},"selection:"),k.createElement(G,null),k.createElement(D,{fullWidth:!0,style:{fontSize:"0.7em"},id:`layer-${a.name}-channel-select`,onChange:e=>{o((t=>{const a=[...t.layerProps.loaderSelection],r=[...a[n]];return Number.isInteger(m)&&(r[m]=+e.target.value,a[n]=r),s(i({},t),{layerProps:s(i({},t.layerProps),{loaderSelection:a})})}))},value:r.layerProps.loaderSelection[n][m]},u.map(((e,t)=>k.createElement("option",{value:t,key:e},"(",t,") ",e)))),k.createElement(G,null),k.createElement(T,{variant:"caption"},"contrast limits:"),k.createElement(G,null),k.createElement(nt,{value:f,onChange:d,type:"number",id:"min",fullWidth:!1}),k.createElement(nt,{value:g,onChange:d,type:"number",id:"max",fullWidth:!1}),k.createElement(G,null),k.createElement(T,{variant:"caption"},"color:"),k.createElement(G,null),k.createElement("div",{style:{display:"flex",justifyContent:"center"}},k.createElement(tt,{handleChange:e=>{o((t=>{const a=[...t.layerProps.colorValues];return a[n]=e,s(i({},t),{layerProps:s(i({},t.layerProps),{colorValues:a})})}))}})))))}function rt({sourceAtom:e,layerAtom:t,channelIndex:n}){const a=O(e),[r,o]=z(t),{sliderValues:l,colorValues:c,contrastLimits:m,channelIsOn:u,colormap:d,loaderSelection:p}=r.layerProps,h=[...l[n]],f=`rgb(${d?[255,255,255]:c[n]})`,g=u[n],[y,w]=m[n],{channel_axis:x,names:E}=a,b=p[n],v=E[Number.isInteger(x)?b[x]:0];return k.createElement(k.Fragment,null,k.createElement(B,{container:!0,justify:"space-between",wrap:"nowrap"},k.createElement(B,{item:!0,xs:10},k.createElement("div",{style:{width:165,overflow:"hidden",textOverflow:"ellipsis"}},k.createElement(T,{variant:"caption",noWrap:!0},v))),k.createElement(B,{item:!0,xs:1},k.createElement(at,{sourceAtom:e,layerAtom:t,channelIndex:n}))),k.createElement(B,{container:!0,justify:"space-between"},k.createElement(B,{item:!0,xs:2},k.createElement($,{style:{color:f,backgroundColor:"transparent",padding:0,zIndex:2},onClick:()=>{o((e=>{const t=[...e.layerProps.channelIsOn];return t[n]=!t[n],s(i({},e),{layerProps:s(i({},e.layerProps),{channelIsOn:t})})}))}},g?k.createElement(Q,null):k.createElement(ee,null))),k.createElement(B,{item:!0,xs:10},k.createElement(H,{value:h,onChange:(e,t)=>{o((e=>{const a=[...e.layerProps.sliderValues];return a[n]=t,s(i({},e),{layerProps:s(i({},e.layerProps),{sliderValues:a})})}))},min:y,max:w,step:.01,style:{padding:"10px 0px 5px 0px",color:f}}))))}const ot=R({root:{padding:"2px 5px",borderLeft:"1px solid rgba(150, 150, 150, .2)",borderRight:"1px solid rgba(150, 150, 150, .2)"}})(te);function lt({sourceAtom:e,layerAtom:t}){const n=O(t).layerProps.loaderSelection.length;return k.createElement(ot,null,k.createElement(B,{container:!0,direction:"column"},k.createElement(We,{sourceAtom:e,layerAtom:t}),k.createElement(B,null,k.createElement(B,{container:!0,justify:"space-between"},k.createElement(B,{item:!0,xs:3},k.createElement(T,{variant:"caption"},"opacity:")),k.createElement(B,{item:!0,xs:8},k.createElement(He,{sourceAtom:e,layerAtom:t})))),k.createElement(G,null),k.createElement(Ke,{sourceAtom:e,layerAtom:t}),k.createElement(B,{container:!0,justify:"space-between"},k.createElement(B,{item:!0,xs:3},k.createElement(T,{variant:"caption"},"channels:")),k.createElement(B,{item:!0,xs:1},k.createElement(Ue,{sourceAtom:e,layerAtom:t}))),k.createElement(G,null),k.createElement(B,null,Pe(n).map((n=>k.createElement(rt,{sourceAtom:e,layerAtom:t,channelIndex:n,key:n}))))))}const it=R({root:{borderBottom:"1px solid rgba(150, 150, 150, .2)",width:200,boxshadow:"none","&:not(:last-child)":{borderBottom:0},"&:before":{display:"none"},"&$expanded":{margin:0,padding:0}},expanded:{padding:1}})(ne);function st({sourceAtom:e}){const t=O(e),n=Ve(t),{name:a=""}=t;return k.createElement(it,{defaultExpanded:!0},k.createElement(qe,{sourceAtom:e,layerAtom:n,name:a}),k.createElement(lt,{sourceAtom:e,layerAtom:n}))}const ct=X({root:{zIndex:1,position:"absolute",backgroundColor:"rgba(0, 0, 0, 0.7)",borderRadius:"5px",left:"5px",top:"5px"},scroll:{maxHeight:500,overflowX:"hidden",overflowY:"scroll","&::-webkit-scrollbar":{display:"none",background:"transparent"},scrollbarWidth:"none",flexDirection:"column"}});function mt(){const e=O(Le),[t,n]=F.exports.useReducer((e=>!e),!1),a=ct();return k.createElement("div",{className:a.root,style:{padding:`0px 5px ${t?0:5}px 5px`}},k.createElement(B,{container:!0,direction:"column",alignItems:"flex-start"},k.createElement($,{style:{backgroundColor:"transparent",padding:0},onClick:n},t?k.createElement(q,null):k.createElement(K,null)),k.createElement("div",{className:a.scroll,style:{display:t?"none":"flex"}},e.map((e=>k.createElement(st,{key:`${e}`,sourceAtom:e}))))))}function ut(){const e=ae(Me),t=ae($e);async function n(t){const{createSourceData:n}=await de((()=>Promise.resolve().then((function(){return je}))),void 0),a=Math.random().toString(36).slice(2),r=await n(t);e((e=>(r.name||(r.name=`image_${Object.keys(e).length}`),[...e,i({id:a},r)])))}return F.exports.useEffect((()=>{const e=new URLSearchParams(window.location.search);if(e.has("source")){const t={};for(const[n,o]of e)t[n]=o;t.source=decodeURIComponent(t.source),n(t);const a=new URL(window.location.href);a.searchParams.set("source",t.source);const r=decodeURIComponent(a.toString());window.location.href!==r&&window.history.pushState(null,"",r)}}),[]),F.exports.useEffect((()=>{window.self!==window.top&&async function(){const{default:e}=await de((()=>import("./index.ccefb928.js").then((function(e){return e.i}))),[]);(await e.setupRPC({name:"vizarr",description:"A minimal, purely client-side program for viewing Zarr-based images with Viv & ImJoy.",version:"0.3.0"})).export({add_image:async e=>n(e),set_view_state:async e=>t(e)})}()}),[]),k.createElement(k.Fragment,null,k.createElement(mt,null),k.createElement(Te,null))}var dt=re({palette:{type:"dark",primary:oe,secondary:oe},props:{MuiButton:{size:"small"},MuiButtonBase:{disableRipple:!0},MuiFilledInput:{margin:"dense"},MuiFormControl:{margin:"dense"},MuiFormHelperText:{margin:"dense"},MuiIconButton:{size:"small"},MuiInputBase:{margin:"dense"},MuiInputLabel:{margin:"dense"},MuiOutlinedInput:{margin:"dense"}},overrides:{MuiSlider:{thumb:{"&:focus, &:hover":{boxShadow:"none"},height:11,width:5,borderRadius:"15%",marginLeft:-1}},MuiInput:{underline:{"&&&&:hover:before":{borderBottom:"1px solid #fff"}}},MuiPaper:{root:{backgroundColor:"rgba(0, 0, 0, 0.8)"}},MuiSvgIcon:{root:{width:"0.7em",height:"0.7em"}}}});const pt=new Map;function ht(e,t){le(e,(()=>{if(!pt.has(e)){const n=t().then((e=>e.default)).catch((t=>{throw pt.delete(e),t}));pt.set(e,n)}return pt.get(e)}))}ht("lz4",(()=>de((()=>import("./lz4.90bd37fe.js")),["lz4.90bd37fe.js","utils-6b0080f1.f4680ab2.js"]))),ht("gzip",(()=>de((()=>import("./gzip.2d512667.js")),["gzip.2d512667.js","pako.esm-9240ff4b.6c52ac68.js"]))),ht("zlib",(()=>de((()=>import("./zlib.3b3d5619.js")),["zlib.3b3d5619.js","pako.esm-9240ff4b.6c52ac68.js"]))),ht("zstd",(()=>de((()=>import("./zstd.73353642.js")),["zstd.73353642.js","utils-6b0080f1.f4680ab2.js"]))),ht("blosc",(()=>de((()=>import("./blosc.0f249b18.js")),["blosc.0f249b18.js","utils-6b0080f1.f4680ab2.js"]))),console.log("vizarr v0.3.0: https://github.com/hms-dbmi/vizarr"),ie.render(k.createElement(se,{theme:dt},k.createElement(ce,null,k.createElement(ut,null))),document.getElementById("root")); diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/index.ccefb928.js b/omero_web_zarr/static/omero_web_zarr/vizarr/index.ccefb928.js new file mode 100644 index 0000000..ecdcc87 --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/index.ccefb928.js @@ -0,0 +1 @@ +var imjoyRpc$1={exports:{}};(function(module,exports){var factory;window,factory=function(){return function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s="./src/main.js")}({"./node_modules/worker-loader/dist/workers/InlineWorker.js":function(e,n,t){var r=window.URL||window.webkitURL;e.exports=function(e,n){try{try{var t;try{(t=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder)).append(e),t=t.getBlob()}catch(o){t=new Blob([e])}return new Worker(r.createObjectURL(t))}catch(o){return new Worker("data:application/javascript,"+encodeURIComponent(e))}}catch(o){if(!n)throw Error("Inline worker is not supported");return new Worker(n)}}},"./package.json":function(e){e.exports=JSON.parse('{"name":"imjoy-rpc","version":"0.2.31","description":"Remote procedure calls for ImJoy.","module":"index.js","scripts":{"build":"rm -rf dist && npm run build-umd","build-umd":"webpack --config webpack.config.js --mode development && NODE_ENV=production webpack --config webpack.config.js --mode production --devtool source-map ","watch":"NODE_ENV=production webpack --watch --progress --config webpack.config.js --mode production --devtool source-map","publish-npm":"npm install && npm run build && npm publish","serve":"webpack-dev-server","stats":"webpack --profile --json > stats.json","stats-prod":"webpack --profile --json --mode production > stats-prod.json","analyze":"webpack-bundle-analyzer -p 9999 stats.json","analyze-prod":"webpack-bundle-analyzer -p 9999 stats-prod.json","clean":"rimraf dist/*","deploy":"npm run build && node deploy-site.js","format":"prettier --write \\"{src,tests}/**/**\\"","check-format":"prettier --check \\"{src,tests}/**/**\\"","test":"karma start --single-run --browsers ChromeHeadless,FirefoxHeadless karma.conf.js","test-watch":"karma start --auto-watch --browsers Chrome,FirefoxHeadless karma.conf.js --debug"},"repository":{"type":"git","url":"git+https://github.com/imjoy-team/imjoy-rpc.git"},"keywords":["imjoy","rpc"],"author":"imjoy-team ","license":"MIT","bugs":{"url":"https://github.com/imjoy-team/imjoy-rpc/issues"},"homepage":"https://github.com/imjoy-team/imjoy-rpc","dependencies":{},"devDependencies":{"@babel/core":"^7.0.0-beta.39","@babel/plugin-syntax-dynamic-import":"^7.0.0-beta.39","@babel/polyfill":"^7.0.0-beta.39","@babel/preset-env":"^7.0.0-beta.39","@types/requirejs":"^2.1.28","babel-core":"^6.26.0","babel-eslint":"^10.1.0","babel-loader":"^8.1.0","babel-runtime":"^6.26.0","chai":"^4.2.0","clean-webpack-plugin":"^0.1.19","copy-webpack-plugin":"^5.0.5","eslint":"^6.8.0","eslint-config-prettier":"^4.2.0","eslint-loader":"^4.0.2","file-loader":"^0.11.2","fs-extra":"^0.30.0","gh-pages":"^2.0.1","html-loader":"^0.5.5","html-webpack-plugin":"^3.2.0","json-loader":"^0.5.4","karma":"^4.4.1","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^1.3.0","karma-mocha":"^1.3.0","karma-spec-reporter":"0.0.32","karma-webpack":"^4.0.2","lerna":"^3.8.0","lodash.debounce":"^4.0.8","mocha":"^7.1.2","postcss":"^6.0.2","prettier":"^1.6.1","rimraf":"^2.6.2","schema-utils":"^0.4.3","socket.io-client":"^2.3.0","style-loader":"^0.18.1","url-loader":"^0.5.9","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.3.2","webpack-cli":"^3.1.2","webpack-dev-server":"^3.1.1","webpack-merge":"^4.1.1","workbox-webpack-plugin":"^4.3.1","worker-loader":"^2.0.0","write-file-webpack-plugin":"^4.5.1"},"eslintConfig":{"globals":{"document":true,"window":true}}}')},"./src/main.js":function(e,n,t){t.r(n),t.d(n,"waitForInitialization",(function(){return d})),t.d(n,"setupRPC",(function(){return l}));var r=t("./src/plugin.webworker.js"),o=t.n(r),i=t("./src/pluginIframe.js"),a=t("./src/utils.js"),s=t("./src/rpc.js");t.d(n,"RPC",(function(){return s.RPC})),t.d(n,"API_VERSION",(function(){return s.API_VERSION}));var c=t("./package.json");function _(){try{return window.self!==window.top}catch(e){return!0}}function d(e){if(!_())throw new Error("waitForInitialization (imjoy-rpc) should only run inside an iframe.");const n=(e=e||{}).target_origin||"*";if(e.credential_required&&"function"!=typeof e.verify_credential)throw new Error("Please also provide the `verify_credential` function with `credential_required`.");if(e.credential_required&&"*"===n)throw new Error("`target_origin` was set to `*` with `credential_required=true`, there is a security risk that you may leak the credential to website from other origin. Please specify the `target_origin` explicitly.");const t=Object(a.randId)(),r=o=>{if("message"===o.type&&("*"===n||o.origin===n)){if("initialize"!==o.data.type)throw new Error(`unrecognized message: ${o.data}`);{window.removeEventListener("message",r),o.data.peer_id!==t&&console.warn(`${o.data.config&&o.data.config.name}: connection peer id mismatch ${o.data.peer_id} !== ${t}`);const i=o.data.config;"*"!==n&&(i.target_origin=n),e.credential_required?e.verify_credential(i.credential).then((e=>{if(!e||!e.auth||e.error)throw new Error("Failed to verify the credentail:"+(e&&e.error));i.auth=e.auth,l(i).then((()=>{console.log("ImJoy RPC loaded successfully!")}))})):l(i).then((()=>{console.log("ImJoy RPC loaded successfully!")}))}}};window.addEventListener("message",r),parent.postMessage({type:"imjoyRPCReady",config:e,peer_id:t},"*")}function l(e){if(!(e=e||{}).name)throw new Error("Please specify a name for your app.");return e.version=e.version||"0.1.0",e.description=e.description||`[TODO: add description for ${e.name} ]`,e.type=e.type||"rpc-window",e.id=e.id||Object(a.randId)(),e.allow_execution=e.allow_execution||!1,e.enable_service_worker&&Object(a.setupServiceWorker)(e.base_url,e.target_origin,e.cache_requirements),e.cache_requirements&&delete e.cache_requirements,e=Object.keys(e).reduce(((n,t)=>("function"!=typeof e[t]&&(n[t]=e[t]),n)),{}),new Promise(((n,t)=>{if(_()){if("web-worker"===e.type)try{!function(e){if(!e.allow_execution)throw new Error("web-worker plugin can only work with allow_execution=true");const n=new o.a,t=setTimeout((function(){n.terminate(),console.warn("Plugin failed to start as a web-worker, running in an iframe instead."),Object(i.default)(e)}),2e3),r=Object(a.randId)();n.addEventListener("message",(function(o){let i;const a=o.data;if("worker-ready"===a.type)return n.postMessage({type:"connectRPC",config:e}),void clearTimeout(t);"initialized"===a.type?(a.config=Object.assign({},e,a.config),a.origin=window.location.origin,a.peer_id=r):"imjoy_remote_api_ready"===a.type?window.dispatchEvent(new CustomEvent("imjoy_remote_api_ready",{detail:null})):"cacheRequirements"===a.type&&"function"==typeof cache_requirements?cache_requirements(a.requirements):"disconnect"===a.type?n.terminate():a.__transferables__&&(i=a.__transferables__,delete a.__transferables__),parent.postMessage(a,e.target_origin||"*",i)})),window.addEventListener("message",(function(t){let o;const i=t.data;i.__transferables__&&(o=i.__transferables__,delete i.__transferables__),i.peer_id===r?n.postMessage(i,o):e.debug&&console.log(`connection peer id mismatch ${i.peer_id} !== ${r}`)}))}(e)}catch(r){Object(i.default)(e)}else["rpc-window","rpc-worker","iframe","window"].includes(e.type)?Object(i.default)(e):(console.error("Unsupported plugin type: "+e.type),t("Unsupported plugin type: "+e.type));try{const t=r=>{const o=r.detail;e.expose_api_globally&&(window.api=o),n(o),window.removeEventListener("imjoy_remote_api_ready",t)};window.addEventListener("imjoy_remote_api_ready",t)}catch(r){t(r)}}else t(new Error("imjoy-rpc should only run inside an iframe."))}))}t.d(n,"VERSION",(function(){return c.version}))},"./src/plugin.webworker.js":function(e,n,t){e.exports=function(){return t("./node_modules/worker-loader/dist/workers/InlineWorker.js")('/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== \'undefined\' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: \'Module\' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, \'__esModule\', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === \'object\' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, \'default\', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != \'string\') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module[\'default\']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, \'a\', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = "";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = "./src/plugin.webworker.js");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ "./src/plugin.webworker.js":\n/*!*********************************!*\\\n !*** ./src/plugin.webworker.js ***!\n \\*********************************/\n/*! no exports provided */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n"use strict";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _pluginCore_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pluginCore.js */ "./src/pluginCore.js");\n/* harmony import */ var _rpc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rpc.js */ "./src/rpc.js");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");\n/**\n * Contains the routines loaded by the plugin Worker under web-browser.\n *\n * Initializes the web environment version of the platform-dependent\n * connection object for the plugin site\n */\n\n\n\n\n(function() {\n // make sure this runs inside a webworker\n if (\n typeof WorkerGlobalScope === "undefined" ||\n !self ||\n !(self instanceof WorkerGlobalScope)\n ) {\n throw new Error("This script can only loaded in a webworker");\n }\n /**\n * Connection object provided to the RPC constructor,\n * plugin site implementation for the web-based environment.\n * Global will be then cleared to prevent exposure into the\n * Worker, so we put this local connection object into a closure\n */\n class Connection extends _utils_js__WEBPACK_IMPORTED_MODULE_2__["MessageEmitter"] {\n constructor(config) {\n super(config && config.debug);\n this.config = config || {};\n }\n connect() {\n self.addEventListener("message", e => {\n this._fire(e.data.type, e.data);\n });\n this.emit({\n type: "initialized",\n config: this.config\n });\n }\n disconnect() {\n this._fire("beforeDisconnect");\n self.close();\n this._fire("disconnected");\n }\n emit(data) {\n let transferables = undefined;\n if (data.__transferables__) {\n transferables = data.__transferables__;\n delete data.__transferables__;\n }\n self.postMessage(data, transferables);\n }\n async execute(code) {\n if (code.type === "requirements") {\n try {\n if (\n code.requirements &&\n (Array.isArray(code.requirements) ||\n typeof code.requirements === "string")\n ) {\n try {\n if (!Array.isArray(code.requirements)) {\n code.requirements = [code.requirements];\n }\n for (var i = 0; i < code.requirements.length; i++) {\n if (\n code.requirements[i].toLowerCase().endsWith(".css") ||\n code.requirements[i].startsWith("css:")\n ) {\n throw "unable to import css in a webworker";\n } else if (\n code.requirements[i].toLowerCase().endsWith(".js") ||\n code.requirements[i].startsWith("js:")\n ) {\n if (code.requirements[i].startsWith("js:")) {\n code.requirements[i] = code.requirements[i].slice(3);\n }\n importScripts(code.requirements[i]);\n } else if (code.requirements[i].startsWith("http")) {\n importScripts(code.requirements[i]);\n } else if (code.requirements[i].startsWith("cache:")) {\n //ignore cache\n } else {\n console.log(\n "Unprocessed requirements url: " + code.requirements[i]\n );\n }\n }\n } catch (e) {\n throw "failed to import required scripts: " +\n code.requirements.toString();\n }\n }\n } catch (e) {\n throw e;\n }\n } else if (code.type === "script") {\n try {\n if (\n code.requirements &&\n (Array.isArray(code.requirements) ||\n typeof code.requirements === "string")\n ) {\n try {\n if (Array.isArray(code.requirements)) {\n for (let i = 0; i < code.requirements.length; i++) {\n importScripts(code.requirements[i]);\n }\n } else {\n importScripts(code.requirements);\n }\n } catch (e) {\n throw "failed to import required scripts: " +\n code.requirements.toString();\n }\n }\n eval(code.content);\n } catch (e) {\n console.error(e.message, e.stack);\n throw e;\n }\n } else {\n throw "unsupported code type.";\n }\n if (code.type === "requirements") {\n self.postMessage({\n type: "cacheRequirements",\n requirements: code.requirements\n });\n }\n }\n }\n const config = {\n type: "web-worker",\n dedicated_thread: true,\n allow_execution: true,\n lang: "javascript",\n api_version: _rpc_js__WEBPACK_IMPORTED_MODULE_1__["API_VERSION"]\n };\n const conn = new Connection(config);\n conn.on("connectRPC", data => {\n Object(_pluginCore_js__WEBPACK_IMPORTED_MODULE_0__["connectRPC"])(conn, Object.assign(data.config, config));\n });\n conn.connect();\n self.postMessage({\n type: "worker-ready"\n });\n})();\n\n\n/***/ }),\n\n/***/ "./src/pluginCore.js":\n/*!***************************!*\\\n !*** ./src/pluginCore.js ***!\n \\***************************/\n/*! exports provided: connectRPC */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n"use strict";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectRPC", function() { return connectRPC; });\n/* harmony import */ var _rpc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rpc.js */ "./src/rpc.js");\n/**\n * Core plugin script loaded into the plugin process/thread.\n *\n * Initializes the plugin-site API global methods.\n */\n\nfunction connectRPC(connection, config) {\n config = config || {};\n const codecs = {};\n const rpc = new _rpc_js__WEBPACK_IMPORTED_MODULE_0__["RPC"](connection, config, codecs);\n rpc.on("getInterface", function () {\n launchConnected();\n });\n rpc.on("remoteReady", function () {\n const api = rpc.getRemote() || {};\n\n if (api.export) {\n throw new Error("`export` is a reserved function name");\n }\n\n if (api.onload) {\n throw new Error("`onload` is a reserved function name");\n }\n\n if (api.dispose) {\n throw new Error("`dispose` is a reserved function name");\n }\n\n api.registerCodec = function (config) {\n if (!config["name"] || !config["encoder"] && !config["decoder"]) {\n throw new Error("Invalid codec format, please make sure you provide a name, type, encoder and decoder.");\n } else {\n if (config.type) {\n for (let k of Object.keys(codecs)) {\n if (codecs[k].type === config.type || k === config.name) {\n delete codecs[k];\n console.warn("Remove duplicated codec: " + k);\n }\n }\n }\n\n codecs[config["name"]] = config;\n }\n };\n\n api.init = function (config) {\n // register a minimal plugin api\n rpc.setInterface({\n setup() {}\n\n }, config);\n };\n\n api.disposeObject = function (obj) {\n rpc.disposeObject(obj);\n };\n\n api.export = function (_interface, config) {\n rpc.setInterface(_interface, config);\n };\n\n api.onLoad = function (handler) {\n handler = checkHandler(handler);\n\n if (connected) {\n handler();\n } else {\n connectedHandlers.push(handler);\n }\n };\n\n api.dispose = function (_interface) {\n rpc.disconnect();\n };\n\n if (typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope) {\n self.api = api;\n self.postMessage({\n type: "imjoy_remote_api_ready"\n });\n } else if (typeof window) {\n window.dispatchEvent(new CustomEvent("imjoy_remote_api_ready", {\n detail: api\n }));\n }\n });\n let connected = false;\n const connectedHandlers = [];\n\n const launchConnected = function () {\n if (!connected) {\n connected = true;\n let handler;\n\n while (handler = connectedHandlers.pop()) {\n handler();\n }\n }\n };\n\n const checkHandler = function (handler) {\n const type = typeof handler;\n\n if (type !== "function") {\n const msg = "A function may only be subsribed to the event, " + type + " was provided instead";\n throw new Error(msg);\n }\n\n return handler;\n };\n\n return rpc;\n}\n\n/***/ }),\n\n/***/ "./src/rpc.js":\n/*!********************!*\\\n !*** ./src/rpc.js ***!\n \\********************/\n/*! exports provided: API_VERSION, RPC */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n"use strict";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "API_VERSION", function() { return API_VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RPC", function() { return RPC; });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");\n/**\n * Contains the RPC object used both by the application\n * site, and by each plugin\n */\n\nconst API_VERSION = "0.2.3";\nconst ArrayBufferView = Object.getPrototypeOf(Object.getPrototypeOf(new Uint8Array())).constructor;\n\nfunction _appendBuffer(buffer1, buffer2) {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n}\n\nfunction indexObject(obj, is) {\n if (!is) throw new Error("undefined index");\n if (typeof is === "string") return indexObject(obj, is.split("."));else if (is.length === 0) return obj;else return indexObject(obj[is[0]], is.slice(1));\n}\n/**\n * RPC object represents a single site in the\n * communication protocol between the application and the plugin\n *\n * @param {Object} connection a special object allowing to send\n * and receive messages from the opposite site (basically it\n * should only provide send() and onMessage() methods)\n */\n\n\nclass RPC extends _utils_js__WEBPACK_IMPORTED_MODULE_0__["MessageEmitter"] {\n constructor(connection, config, codecs) {\n super(config && config.debug);\n this._connection = connection;\n this.config = config || {};\n this._codecs = codecs || {};\n this._object_store = {};\n this._method_weakmap = new WeakMap();\n this._object_weakmap = new WeakMap();\n this._local_api = null; // make sure there is an execute function\n\n const name = this.config.name;\n\n this._connection.execute = this._connection.execute || function () {\n throw new Error(`connection.execute not implemented (in "${name}")`);\n };\n\n this._store = new ReferenceStore();\n this._method_refs = new ReferenceStore();\n\n this._method_refs.onReady(() => {\n this._fire("remoteIdle");\n });\n\n this._method_refs.onBusy(() => {\n this._fire("remoteBusy");\n });\n\n this._setupMessageHanlders();\n }\n\n init() {\n this._connection.emit({\n type: "initialized",\n config: this.config,\n peer_id: this._connection.peer_id\n });\n }\n\n setConfig(config) {\n if (config) for (const k of Object.keys(config)) {\n this.config[k] = config[k];\n }\n }\n /**\n * Set a handler to be called when received a responce from the\n * remote site reporting that the previously provided interface\n * has been successfully set as remote for that site\n *\n * @param {Function} handler\n */\n\n\n getRemoteCallStack() {\n return this._method_refs.getStack();\n }\n /**\n * @returns {Object} set of remote interface methods\n */\n\n\n getRemote() {\n return this._remote_interface;\n }\n /**\n * Sets the interface of this site making it available to the\n * remote site by sending a message with a set of methods names\n *\n * @param {Object} _interface to set\n */\n\n\n setInterface(_interface, config) {\n config = config || {};\n this.config.name = config.name || this.config.name;\n this.config.description = config.description || this.config.description;\n\n if (this.config.forwarding_functions) {\n for (let func_name of this.config.forwarding_functions) {\n const _remote = this._remote_interface;\n\n if (_remote[func_name]) {\n if (_interface.constructor === Object) {\n if (!_interface[func_name]) {\n _interface[func_name] = (...args) => {\n _remote[func_name](...args);\n };\n }\n } else if (_interface.constructor.constructor === Function) {\n if (!_interface.constructor.prototype[func_name]) {\n _interface.constructor.prototype[func_name] = (...args) => {\n _remote[func_name](...args);\n };\n }\n }\n }\n }\n }\n\n this._local_api = _interface;\n\n this._fire("interfaceAvailable");\n }\n /**\n * Sends the actual interface to the remote site upon it was\n * updated or by a special request of the remote site\n */\n\n\n sendInterface() {\n if (!this._local_api) {\n throw new Error("interface is not set.");\n }\n\n this._encode(this._local_api, true).then(api => {\n this._connection.emit({\n type: "setInterface",\n api: api\n });\n });\n }\n\n _disposeObject(objectId) {\n if (this._object_store[objectId]) {\n delete this._object_store[objectId];\n } else {\n throw new Error(`Object (id=${objectId}) not found.`);\n }\n }\n\n disposeObject(obj) {\n return new Promise((resolve, reject) => {\n if (this._object_weakmap.has(obj)) {\n const objectId = this._object_weakmap.get(obj);\n\n this._connection.once("disposed", data => {\n if (data.error) reject(new Error(data.error));else resolve();\n });\n\n this._connection.emit({\n type: "disposeObject",\n object_id: objectId\n });\n } else {\n throw new Error("Invalid object");\n }\n });\n }\n /**\n * Handles a message from the remote site\n */\n\n\n _setupMessageHanlders() {\n this._connection.on("init", this.init);\n\n this._connection.on("execute", data => {\n Promise.resolve(this._connection.execute(data.code)).then(() => {\n this._connection.emit({\n type: "executed"\n });\n }).catch(e => {\n console.error(e);\n\n this._connection.emit({\n type: "executed",\n error: String(e)\n });\n });\n });\n\n this._connection.on("method", async data => {\n let resolve, reject, method, method_this, args, result;\n\n try {\n if (data.promise) {\n [resolve, reject] = await this._unwrap(data.promise, false);\n }\n\n const _interface = this._object_store[data.object_id];\n method = indexObject(_interface, data.name);\n\n if (data.name.includes(".")) {\n const tmp = data.name.split(".");\n const intf_index = tmp.slice(0, tmp.length - 1).join(".");\n method_this = indexObject(_interface, intf_index);\n } else {\n method_this = _interface;\n }\n\n args = await this._unwrap(data.args, true);\n\n if (data.promise) {\n result = method.apply(method_this, args);\n\n if (result instanceof Promise || method.constructor && method.constructor.name === "AsyncFunction") {\n result.then(resolve).catch(reject);\n } else {\n resolve(result);\n }\n } else {\n method.apply(method_this, args);\n }\n } catch (err) {\n console.error(this.config.name, err);\n\n if (reject) {\n reject(err);\n }\n }\n });\n\n this._connection.on("callback", async data => {\n let resolve, reject, method, args, result;\n\n try {\n if (data.promise) {\n [resolve, reject] = await this._unwrap(data.promise, false);\n }\n\n if (data.promise) {\n method = this._store.fetch(data.id);\n args = await this._unwrap(data.args, true);\n\n if (!method) {\n throw new Error("Callback function can only called once, if you want to call a function for multiple times, please make it as a plugin api function. See https://imjoy.io/docs for more details.");\n }\n\n result = method.apply(null, args);\n\n if (result instanceof Promise || method.constructor && method.constructor.name === "AsyncFunction") {\n result.then(resolve).catch(reject);\n } else {\n resolve(result);\n }\n } else {\n method = this._store.fetch(data.id);\n args = await this._unwrap(data.args, true);\n\n if (!method) {\n throw new Error("Please notice that callback function can only called once, if you want to call a function for multiple times, please make it as a plugin api function. See https://imjoy.io/docs for more details.");\n }\n\n method.apply(null, args);\n }\n } catch (err) {\n console.error(this.config.name, err);\n\n if (reject) {\n reject(err);\n }\n }\n });\n\n this._connection.on("disposeObject", data => {\n try {\n this._disposeObject(data.object_id);\n\n this._connection.emit({\n type: "disposed"\n });\n } catch (e) {\n console.error(e);\n\n this._connection.emit({\n type: "disposed",\n error: String(e)\n });\n }\n });\n\n this._connection.on("setInterface", data => {\n this._setRemoteInterface(data.api);\n });\n\n this._connection.on("getInterface", () => {\n this._fire("getInterface");\n\n if (this._local_api) {\n this.sendInterface();\n } else {\n this.once("interfaceAvailable", () => {\n this.sendInterface();\n });\n }\n });\n\n this._connection.on("interfaceSetAsRemote", () => {\n this._fire("interfaceSetAsRemote");\n });\n\n this._connection.on("disconnect", () => {\n this._fire("beforeDisconnect");\n\n this._connection.disconnect();\n\n this._fire("disconnected");\n });\n }\n /**\n * Sends a requests to the remote site asking it to provide its\n * current interface\n */\n\n\n requestRemote() {\n this._connection.emit({\n type: "getInterface"\n });\n }\n\n _ndarray(typedArray, shape, dtype) {\n const _dtype = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__["typedArrayToDtype"])(typedArray);\n\n if (dtype && dtype !== _dtype) {\n throw "dtype doesn\'t match the type of the array: " + _dtype + " != " + dtype;\n }\n\n shape = shape || [typedArray.length];\n return {\n _rtype: "ndarray",\n _rvalue: typedArray.buffer,\n _rshape: shape,\n _rdtype: _dtype\n };\n }\n /**\n * Sets the new remote interface provided by the other site\n *\n * @param {Array} names list of function names\n */\n\n\n _setRemoteInterface(api) {\n this._decode(api).then(intf => {\n this._remote_interface = intf;\n\n this._fire("remoteReady");\n\n this._reportRemoteSet();\n });\n }\n /**\n * Generates the wrapped function corresponding to a single remote\n * method. When the generated function is called, it will send the\n * corresponding message to the remote site asking it to execute\n * the particular method of its interface\n *\n * @param {String} name of the remote method\n *\n * @returns {Function} wrapped remote method\n */\n\n\n _genRemoteMethod(targetId, name, objectId) {\n const me = this;\n\n const remoteMethod = function () {\n return new Promise(async (resolve, reject) => {\n let id = null;\n\n try {\n id = me._method_refs.put(objectId ? objectId + "/" + name : name);\n\n const wrapped_resolve = function () {\n if (id !== null) me._method_refs.fetch(id);\n return resolve.apply(this, arguments);\n };\n\n const wrapped_reject = function () {\n if (id !== null) me._method_refs.fetch(id);\n return reject.apply(this, arguments);\n };\n\n const encodedPromise = await me._wrap([wrapped_resolve, wrapped_reject]); // store the key id for removing them from the reference store together\n\n wrapped_resolve.__promise_pair = encodedPromise[1]._rvalue;\n wrapped_reject.__promise_pair = encodedPromise[0]._rvalue;\n let args = Array.prototype.slice.call(arguments);\n\n if (name === "register" || name === "registerService" || name === "export" || name === "on") {\n args = await me._wrap(args, true);\n } else {\n args = await me._wrap(args);\n }\n\n const transferables = args.__transferables__;\n if (transferables) delete args.__transferables__;\n\n me._connection.emit({\n type: "method",\n target_id: targetId,\n name: name,\n object_id: objectId,\n args: args,\n promise: encodedPromise\n }, transferables);\n } catch (e) {\n if (id) me._method_refs.fetch(id);\n reject(`Failed to exectue remote method (interface: ${objectId || me.id}, method: ${name}), error: ${e}`);\n }\n });\n };\n\n remoteMethod.__remote_method = true;\n return remoteMethod;\n }\n /**\n * Sends a responce reporting that interface just provided by the\n * remote site was successfully set by this site as remote\n */\n\n\n _reportRemoteSet() {\n this._connection.emit({\n type: "interfaceSetAsRemote"\n });\n }\n /**\n * Prepares the provided set of remote method arguments for\n * sending to the remote site, replaces all the callbacks with\n * identifiers\n *\n * @param {Array} args to wrap\n *\n * @returns {Array} wrapped arguments\n */\n\n\n async _encode(aObject, asInterface, objectId) {\n const aType = typeof aObject;\n\n if (aType === "number" || aType === "string" || aType === "boolean" || aObject === null || aObject === undefined || aObject instanceof ArrayBuffer) {\n return aObject;\n }\n\n let bObject;\n\n if (typeof aObject === "function") {\n if (asInterface) {\n if (!objectId) throw new Error("objectId is not specified.");\n bObject = {\n _rtype: "interface",\n _rtarget_id: this._connection.peer_id,\n _rintf: objectId,\n _rvalue: asInterface\n };\n\n this._method_weakmap.set(aObject, bObject);\n } else if (this._method_weakmap.has(aObject)) {\n bObject = this._method_weakmap.get(aObject);\n } else {\n const cid = this._store.put(aObject);\n\n bObject = {\n _rtype: "callback",\n _rtarget_id: this._connection.peer_id,\n _rname: aObject.constructor && aObject.constructor.name || cid,\n _rvalue: cid\n };\n }\n\n return bObject;\n } // skip if already encoded\n\n\n if (aObject.constructor instanceof Object && aObject._rtype) {\n // make sure the interface functions are encoded\n if (aObject._rintf) {\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._encode(aObject, asInterface, objectId);\n bObject._rtype = temp;\n } else {\n bObject = aObject;\n }\n\n return bObject;\n }\n\n const transferables = [];\n const _transfer = aObject._transfer;\n const isarray = Array.isArray(aObject);\n\n for (let tp of Object.keys(this._codecs)) {\n const codec = this._codecs[tp];\n\n if (codec.encoder && aObject instanceof codec.type) {\n // TODO: what if multiple encoders found\n let encodedObj = await Promise.resolve(codec.encoder(aObject));\n if (encodedObj && !encodedObj._rtype) encodedObj._rtype = codec.name; // encode the functions in the interface object\n\n if (encodedObj && encodedObj._rintf) {\n const temp = encodedObj._rtype;\n delete encodedObj._rtype;\n encodedObj = await this._encode(encodedObj, asInterface, objectId);\n encodedObj._rtype = temp;\n }\n\n bObject = encodedObj;\n return bObject;\n }\n }\n\n if (\n /*global tf*/\n typeof tf !== "undefined" && tf.Tensor && aObject instanceof tf.Tensor) {\n const v_buffer = aObject.dataSync();\n\n if (aObject._transfer || _transfer) {\n transferables.push(v_buffer.buffer);\n delete aObject._transfer;\n }\n\n bObject = {\n _rtype: "ndarray",\n _rvalue: v_buffer.buffer,\n _rshape: aObject.shape,\n _rdtype: aObject.dtype\n };\n } else if (\n /*global nj*/\n typeof nj !== "undefined" && nj.NdArray && aObject instanceof nj.NdArray) {\n const dtype = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__["typedArrayToDtype"])(aObject.selection.data);\n\n if (aObject._transfer || _transfer) {\n transferables.push(aObject.selection.data.buffer);\n delete aObject._transfer;\n }\n\n bObject = {\n _rtype: "ndarray",\n _rvalue: aObject.selection.data.buffer,\n _rshape: aObject.shape,\n _rdtype: dtype\n };\n } else if (aObject instanceof Error) {\n console.error(aObject);\n bObject = {\n _rtype: "error",\n _rvalue: aObject.toString()\n };\n } else if (typeof File !== "undefined" && aObject instanceof File) {\n bObject = {\n _rtype: "file",\n _rvalue: aObject,\n _rpath: aObject._path || aObject.webkitRelativePath\n };\n } // send objects supported by structure clone algorithm\n // https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\n else if (aObject !== Object(aObject) || aObject instanceof Boolean || aObject instanceof String || aObject instanceof Date || aObject instanceof RegExp || aObject instanceof ImageData || typeof FileList !== "undefined" && aObject instanceof FileList) {\n bObject = aObject; // TODO: avoid object such as DynamicPlugin instance.\n } else if (typeof File !== "undefined" && aObject instanceof File) {\n bObject = {\n _rtype: "file",\n _rname: aObject.name,\n _rmime: aObject.type,\n _rvalue: aObject,\n _rpath: aObject._path || aObject.webkitRelativePath\n };\n } else if (aObject instanceof Blob) {\n bObject = {\n _rtype: "blob",\n _rvalue: aObject\n };\n } else if (aObject instanceof ArrayBufferView) {\n if (aObject._transfer || _transfer) {\n transferables.push(aObject.buffer);\n delete aObject._transfer;\n }\n\n const dtype = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__["typedArrayToDtype"])(aObject);\n bObject = {\n _rtype: "typedarray",\n _rvalue: aObject.buffer,\n _rdtype: dtype\n };\n } else if (aObject instanceof DataView) {\n if (aObject._transfer || _transfer) {\n transferables.push(aObject.buffer);\n delete aObject._transfer;\n }\n\n bObject = {\n _rtype: "memoryview",\n _rvalue: aObject.buffer\n };\n } else if (aObject instanceof Set) {\n bObject = {\n _rtype: "set",\n _rvalue: await this._encode(Array.from(aObject), asInterface)\n };\n } else if (aObject instanceof Map) {\n bObject = {\n _rtype: "orderedmap",\n _rvalue: await this._encode(Array.from(aObject), asInterface)\n };\n } else if (aObject.constructor instanceof Object || Array.isArray(aObject)) {\n bObject = isarray ? [] : {};\n let keys; // an object/array\n\n if (aObject.constructor === Object || Array.isArray(aObject)) {\n keys = Object.keys(aObject);\n } // a class\n else if (aObject.constructor === Function) {\n throw new Error("Please instantiate the class before exportting it.");\n } // instance of a class\n else if (aObject.constructor.constructor === Function) {\n keys = Object.getOwnPropertyNames(Object.getPrototypeOf(aObject)).concat(Object.keys(aObject)); // TODO: use a proxy object to represent the actual object\n // always encode class instance as interface\n\n asInterface = true;\n } else {\n throw Error("Unsupported interface type");\n }\n\n let hasFunction = false; // encode interfaces\n\n if (aObject._rintf || asInterface) {\n if (!objectId) {\n objectId = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__["randId"])();\n this._object_store[objectId] = aObject;\n }\n\n for (let k of keys) {\n if (k === "constructor") continue;\n\n if (k.startsWith("_")) {\n continue;\n }\n\n bObject[k] = await this._encode(aObject[k], typeof asInterface === "string" ? asInterface + "." + k : k, objectId);\n\n if (typeof aObject[k] === "function") {\n hasFunction = true;\n }\n } // object id for dispose the object remotely\n\n\n if (hasFunction) bObject._rintf = objectId; // remove interface when closed\n\n if (aObject.on && typeof aObject.on === "function") {\n aObject.on("close", () => {\n delete this._object_store[objectId];\n });\n }\n } else {\n for (let k of keys) {\n if (["hasOwnProperty", "constructor"].includes(k)) continue;\n bObject[k] = await this._encode(aObject[k]);\n }\n } // for example, browserFS object\n\n } else if (typeof aObject === "object") {\n const keys = Object.getOwnPropertyNames(Object.getPrototypeOf(aObject)).concat(Object.keys(aObject));\n const objectId = Object(_utils_js__WEBPACK_IMPORTED_MODULE_0__["randId"])();\n\n for (let k of keys) {\n if (["hasOwnProperty", "constructor"].includes(k)) continue; // encode as interface\n\n bObject[k] = await this._encode(aObject[k], k, bObject);\n } // object id, used for dispose the object\n\n\n bObject._rintf = objectId;\n } else {\n throw "imjoy-rpc: Unsupported data type:" + aObject;\n }\n\n if (transferables.length > 0) {\n bObject.__transferables__ = transferables;\n }\n\n if (!bObject) {\n throw new Error("Failed to encode object");\n }\n\n return bObject;\n }\n\n async _decode(aObject, withPromise) {\n if (!aObject) {\n return aObject;\n }\n\n let bObject;\n\n if (aObject["_rtype"]) {\n if (this._codecs[aObject._rtype] && this._codecs[aObject._rtype].decoder) {\n if (aObject._rintf) {\n const temp = aObject._rtype;\n delete aObject._rtype;\n aObject = await this._decode(aObject, withPromise);\n aObject._rtype = temp;\n }\n\n bObject = await Promise.resolve(this._codecs[aObject._rtype].decoder(aObject));\n } else if (aObject._rtype === "callback") {\n bObject = this._genRemoteCallback(aObject._rtarget_id, aObject._rvalue, withPromise);\n } else if (aObject._rtype === "interface") {\n bObject = this._genRemoteMethod(aObject._rtarget_id, aObject._rvalue, aObject._rintf);\n } else if (aObject._rtype === "ndarray") {\n /*global nj tf*/\n //create build array/tensor if used in the plugin\n if (typeof nj !== "undefined" && nj.array) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n\n bObject = nj.array(new Uint8(aObject._rvalue), aObject._rdtype).reshape(aObject._rshape);\n } else if (typeof tf !== "undefined" && tf.Tensor) {\n if (Array.isArray(aObject._rvalue)) {\n aObject._rvalue = aObject._rvalue.reduce(_appendBuffer);\n }\n\n const arraytype = _utils_js__WEBPACK_IMPORTED_MODULE_0__["dtypeToTypedArray"][aObject._rdtype];\n bObject = tf.tensor(new arraytype(aObject._rvalue), aObject._rshape, aObject._rdtype);\n } else {\n //keep it as regular if transfered to the main app\n bObject = aObject;\n }\n } else if (aObject._rtype === "error") {\n bObject = new Error(aObject._rvalue);\n } else if (aObject._rtype === "file") {\n if (aObject._rvalue instanceof File) {\n bObject = aObject._rvalue; //patch _path\n\n bObject._path = aObject._rpath;\n } else {\n bObject = new File([aObject._rvalue], aObject._rname, {\n type: aObject._rmime\n });\n bObject._path = aObject._rpath;\n }\n } else if (aObject._rtype === "typedarray") {\n const arraytype = _utils_js__WEBPACK_IMPORTED_MODULE_0__["dtypeToTypedArray"][aObject._rdtype];\n if (!arraytype) throw new Error("unsupported dtype: " + aObject._rdtype);\n bObject = new arraytype(aObject._rvalue);\n } else if (aObject._rtype === "memoryview") {\n bObject = new DataView(aObject._rvalue);\n } else if (aObject._rtype === "blob") {\n if (aObject._rvalue instanceof Blob) {\n bObject = aObject._rvalue;\n } else {\n bObject = new Blob([aObject._rvalue], {\n type: aObject._rmime\n });\n }\n } else if (aObject._rtype === "orderedmap") {\n bObject = new Map((await this._decode(aObject._rvalue, withPromise)));\n } else if (aObject._rtype === "set") {\n bObject = new Set((await this._decode(aObject._rvalue, withPromise)));\n } else {\n // make sure all the interface functions are decoded\n if (aObject._rintf) {\n const temp = aObject._rtype;\n delete aObject._rtype;\n bObject = await this._decode(aObject, withPromise);\n bObject._rtype = temp;\n } else bObject = aObject;\n }\n } else if (aObject.constructor === Object || Array.isArray(aObject)) {\n const isarray = Array.isArray(aObject);\n bObject = isarray ? [] : {};\n\n for (let k of Object.keys(aObject)) {\n if (isarray || aObject.hasOwnProperty(k)) {\n const v = aObject[k];\n bObject[k] = await this._decode(v, withPromise);\n }\n }\n } else {\n bObject = aObject;\n }\n\n if (bObject === undefined) {\n throw new Error("Failed to decode object");\n } // store the object id for dispose\n\n\n if (aObject._rintf) {\n this._object_weakmap.set(bObject, aObject._rintf);\n }\n\n return bObject;\n }\n\n async _wrap(args, asInterface) {\n return await this._encode(args, asInterface);\n }\n /**\n * Unwraps the set of arguments delivered from the remote site,\n * replaces all callback identifiers with a function which will\n * initiate sending that callback identifier back to other site\n *\n * @param {Object} args to unwrap\n *\n * @param {Boolean} withPromise is true means this the callback should contain a promise\n *\n * @returns {Array} unwrapped args\n */\n\n\n async _unwrap(args, withPromise) {\n return await this._decode(args, withPromise);\n }\n /**\n * Generates the wrapped function corresponding to a single remote\n * callback. When the generated function is called, it will send\n * the corresponding message to the remote site asking it to\n * execute the particular callback previously saved during a call\n * by the remote site a method from the interface of this site\n *\n * @param {Number} id of the remote callback to execute\n * @param {Number} argNum argument index of the callback\n * @param {Boolean} withPromise is true means this the callback should contain a promise\n *\n * @returns {Function} wrapped remote callback\n */\n\n\n _genRemoteCallback(targetId, cid, withPromise) {\n const me = this;\n let remoteCallback;\n\n if (withPromise) {\n remoteCallback = function () {\n return new Promise(async (resolve, reject) => {\n const args = await me._wrap(Array.prototype.slice.call(arguments));\n const transferables = args.__transferables__;\n if (transferables) delete args.__transferables__;\n const encodedPromise = await me._wrap([resolve, reject]); // store the key id for removing them from the reference store together\n\n resolve.__promise_pair = encodedPromise[1]._rvalue;\n reject.__promise_pair = encodedPromise[0]._rvalue;\n\n try {\n me._connection.emit({\n type: "callback",\n target_id: targetId,\n id: cid,\n args: args,\n promise: encodedPromise\n }, transferables);\n } catch (e) {\n reject(`Failed to exectue remote callback ( id: ${cid}).`);\n }\n });\n };\n\n return remoteCallback;\n } else {\n remoteCallback = async function () {\n const args = await me._wrap(Array.prototype.slice.call(arguments));\n const transferables = args.__transferables__;\n if (transferables) delete args.__transferables__;\n return me._connection.emit({\n type: "callback",\n target_id: targetId,\n id: cid,\n args: args\n }, transferables);\n };\n\n return remoteCallback;\n }\n }\n /**\n * Sends the notification message and breaks the connection\n */\n\n\n disconnect() {\n this._connection.emit({\n type: "disconnect"\n });\n\n setTimeout(() => {\n this._connection.disconnect();\n }, 2000);\n }\n\n}\n/**\n * ReferenceStore is a special object which stores other objects\n * and provides the references (number) instead. This reference\n * may then be sent over a json-based communication channel (IPC\n * to another Node.js process or a message to the Worker). Other\n * site may then provide the reference in the responce message\n * implying the given object should be activated.\n *\n * Primary usage for the ReferenceStore is a storage for the\n * callbacks, which therefore makes it possible to initiate a\n * callback execution by the opposite site (which normally cannot\n * directly execute functions over the communication channel).\n *\n * Each stored object can only be fetched once and is not\n * available for the second time. Each stored object must be\n * fetched, since otherwise it will remain stored forever and\n * consume memory.\n *\n * Stored object indeces are simply the numbers, which are however\n * released along with the objects, and are later reused again (in\n * order to postpone the overflow, which should not likely happen,\n * but anyway).\n */\n\nclass ReferenceStore {\n constructor() {\n this._store = {}; // stored object\n\n this._indices = [0]; // smallest available indices\n\n this._readyHandler = function () {};\n\n this._busyHandler = function () {};\n\n this._readyHandler();\n }\n /**\n * call handler when the store is empty\n *\n * @param {FUNCTION} id of a handler\n */\n\n\n onReady(readyHandler) {\n this._readyHandler = readyHandler || function () {};\n }\n /**\n * call handler when the store is not empty\n *\n * @param {FUNCTION} id of a handler\n */\n\n\n onBusy(busyHandler) {\n this._busyHandler = busyHandler || function () {};\n }\n /**\n * get the length of the store\n *\n */\n\n\n getStack() {\n return Object.keys(this._store).length;\n }\n /**\n * @function _genId() generates the new reference id\n *\n * @returns {Number} smallest available id and reserves it\n */\n\n\n _genId() {\n let id;\n\n if (this._indices.length === 1) {\n id = this._indices[0]++;\n } else {\n id = this._indices.shift();\n }\n\n return id;\n }\n /**\n * Releases the given reference id so that it will be available by\n * another object stored\n *\n * @param {Number} id to release\n */\n\n\n _releaseId(id) {\n for (let i = 0; i < this._indices.length; i++) {\n if (id < this._indices[i]) {\n this._indices.splice(i, 0, id);\n\n break;\n }\n } // cleaning-up the sequence tail\n\n\n for (let i = this._indices.length - 1; i >= 0; i--) {\n if (this._indices[i] - 1 === this._indices[i - 1]) {\n this._indices.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Stores the given object and returns the refernce id instead\n *\n * @param {Object} obj to store\n *\n * @returns {Number} reference id of the stored object\n */\n\n\n put(obj) {\n if (this._busyHandler && Object.keys(this._store).length === 0) {\n this._busyHandler();\n }\n\n const id = this._genId();\n\n this._store[id] = obj;\n return id;\n }\n /**\n * Retrieves previously stored object and releases its reference\n *\n * @param {Number} id of an object to retrieve\n */\n\n\n fetch(id) {\n const obj = this._store[id];\n\n if (obj && !obj.__remote_method) {\n delete this._store[id];\n\n this._releaseId(id);\n\n if (this._readyHandler && Object.keys(this._store).length === 0) {\n this._readyHandler();\n }\n }\n\n if (obj && obj.__promise_pair) {\n this.fetch(obj.__promise_pair);\n }\n\n return obj;\n }\n\n}\n\n/***/ }),\n\n/***/ "./src/utils.js":\n/*!**********************!*\\\n !*** ./src/utils.js ***!\n \\**********************/\n/*! exports provided: randId, dtypeToTypedArray, typedArrayToDtypeMapping, typedArrayToDtype, cacheRequirements, setupServiceWorker, urlJoin, MessageEmitter */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n"use strict";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "randId", function() { return randId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dtypeToTypedArray", function() { return dtypeToTypedArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "typedArrayToDtypeMapping", function() { return typedArrayToDtypeMapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "typedArrayToDtype", function() { return typedArrayToDtype; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cacheRequirements", function() { return cacheRequirements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setupServiceWorker", function() { return setupServiceWorker; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "urlJoin", function() { return urlJoin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessageEmitter", function() { return MessageEmitter; });\nfunction randId() {\n return Math.random().toString(36).substr(2, 10) + new Date().getTime();\n}\nconst dtypeToTypedArray = {\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n float32: Float32Array,\n float64: Float64Array,\n array: Array\n};\nconst typedArrayToDtypeMapping = {\n Int8Array: "int8",\n Int16Array: "int16",\n Int32Array: "int32",\n Uint8Array: "uint8",\n Uint16Array: "uint16",\n Uint32Array: "uint32",\n Float32Array: "float32",\n Float64Array: "float64",\n Array: "array"\n};\nconst typedArrayToDtypeKeys = [];\n\nfor (const arrType of Object.keys(typedArrayToDtypeMapping)) {\n typedArrayToDtypeKeys.push(eval(arrType));\n}\n\nfunction typedArrayToDtype(obj) {\n let dtype = typedArrayToDtypeMapping[obj.constructor.name];\n\n if (!dtype) {\n const pt = Object.getPrototypeOf(obj);\n\n for (const arrType of typedArrayToDtypeKeys) {\n if (pt instanceof arrType) {\n dtype = typedArrayToDtypeMapping[arrType.name];\n break;\n }\n }\n }\n\n return dtype;\n}\n\nfunction cacheUrlInServiceWorker(url) {\n return new Promise(function (resolve, reject) {\n const message = {\n command: "add",\n url: url\n };\n\n if (!navigator.serviceWorker || !navigator.serviceWorker.register) {\n reject("Service worker is not supported.");\n return;\n }\n\n const messageChannel = new MessageChannel();\n\n messageChannel.port1.onmessage = function (event) {\n if (event.data && event.data.error) {\n reject(event.data.error);\n } else {\n resolve(event.data && event.data.result);\n }\n };\n\n if (navigator.serviceWorker && navigator.serviceWorker.controller) {\n navigator.serviceWorker.controller.postMessage(message, [messageChannel.port2]);\n } else {\n reject("Service worker controller is not available");\n }\n });\n}\n\nasync function cacheRequirements(requirements) {\n if (!Array.isArray(requirements)) {\n requirementsm.code.requirements = [requirements];\n }\n\n if (requirements && requirements.length > 0) {\n for (let req of requirements) {\n //remove prefix\n if (req.startsWith("js:")) req = req.slice(3);\n if (req.startsWith("css:")) req = req.slice(4);\n if (req.startsWith("cache:")) req = req.slice(6);\n if (!req.startsWith("http")) continue;\n await cacheUrlInServiceWorker(req).catch(e => {\n console.error(e);\n });\n }\n }\n}\nfunction setupServiceWorker(baseUrl, targetOrigin, cacheCallback) {\n // register service worker for offline access\n if ("serviceWorker" in navigator) {\n baseUrl = baseUrl || "/";\n navigator.serviceWorker.register(baseUrl + "plugin-service-worker.js").then(function (registration) {\n // Registration was successful\n console.log("ServiceWorker registration successful with scope: ", registration.scope);\n }, function (err) {\n // registration failed :(\n console.log("ServiceWorker registration failed: ", err);\n });\n targetOrigin = targetOrigin || "*";\n cacheCallback = cacheCallback || cacheRequirements;\n\n if (cacheCallback && typeof cacheCallback !== "function") {\n throw new Error("config.cache_requirements must be a function");\n }\n\n window.addEventListener("message", function (e) {\n if (targetOrigin === "*" || e.origin === targetOrigin) {\n const m = e.data;\n\n if (m.type === "cacheRequirements") {\n cacheCallback(m.requirements);\n }\n }\n });\n }\n} //#Source https://bit.ly/2neWfJ2\n\nfunction urlJoin(...args) {\n return args.join("/").replace(/[\\/]+/g, "/").replace(/^(.+):\\//, "$1://").replace(/^file:/, "file:/").replace(/\\/(\\?|&|#[^!])/g, "$1").replace(/\\?/g, "&").replace("&", "?");\n}\nclass MessageEmitter {\n constructor(debug) {\n this._event_handlers = {};\n this._once_handlers = {};\n this._debug = debug;\n }\n\n emit() {\n throw new Error("emit is not implemented");\n }\n\n on(event, handler) {\n if (!this._event_handlers[event]) {\n this._event_handlers[event] = [];\n }\n\n this._event_handlers[event].push(handler);\n }\n\n once(event, handler) {\n handler.___event_run_once = true;\n this.on(event, handler);\n }\n\n off(event, handler) {\n if (!event && !handler) {\n // remove all events handlers\n this._event_handlers = {};\n } else if (event && !handler) {\n // remove all hanlders for the event\n if (this._event_handlers[event]) this._event_handlers[event] = [];\n } else {\n // remove a specific handler\n if (this._event_handlers[event]) {\n const idx = this._event_handlers[event].indexOf(handler);\n\n if (idx >= 0) {\n this._event_handlers[event].splice(idx, 1);\n }\n }\n }\n }\n\n _fire(event, data) {\n if (this._event_handlers[event]) {\n var i = this._event_handlers[event].length;\n\n while (i--) {\n const handler = this._event_handlers[event][i];\n\n try {\n handler(data);\n } catch (e) {\n console.error(e);\n } finally {\n if (handler.___event_run_once) {\n this._event_handlers[event].splice(i, 1);\n }\n }\n }\n } else {\n if (this._debug) {\n console.warn("unhandled event", event, data);\n }\n }\n }\n\n}\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=plugin.webworker.js.map',null)}},"./src/pluginCore.js":function(e,n,t){t.r(n),t.d(n,"connectRPC",(function(){return o}));var r=t("./src/rpc.js");function o(e,n){n=n||{};const t={},o=new r.RPC(e,n,t);o.on("getInterface",(function(){s()})),o.on("remoteReady",(function(){const e=o.getRemote()||{};if(e.export)throw new Error("`export` is a reserved function name");if(e.onload)throw new Error("`onload` is a reserved function name");if(e.dispose)throw new Error("`dispose` is a reserved function name");e.registerCodec=function(e){if(!e.name||!e.encoder&&!e.decoder)throw new Error("Invalid codec format, please make sure you provide a name, type, encoder and decoder.");if(e.type)for(let n of Object.keys(t))t[n].type!==e.type&&n!==e.name||(delete t[n],console.warn("Remove duplicated codec: "+n));t[e.name]=e},e.init=function(e){o.setInterface({setup(){}},e)},e.disposeObject=function(e){o.disposeObject(e)},e.export=function(e,n){o.setInterface(e,n)},e.onLoad=function(e){e=c(e),i?e():a.push(e)},e.dispose=function(e){o.disconnect()},"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?(self.api=e,self.postMessage({type:"imjoy_remote_api_ready"})):window.dispatchEvent(new CustomEvent("imjoy_remote_api_ready",{detail:e}))}));let i=!1;const a=[],s=function(){if(!i){let e;for(i=!0;e=a.pop();)e()}},c=function(e){const n=typeof e;if("function"!==n)throw new Error("A function may only be subsribed to the event, "+n+" was provided instead");return e};return o}},"./src/pluginIframe.js":function(module,__webpack_exports__,__webpack_require__){__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"Connection",(function(){return Connection})),__webpack_require__.d(__webpack_exports__,"default",(function(){return setupIframe}));var _pluginCore_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./src/pluginCore.js"),_rpc_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./src/rpc.js"),_utils_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./src/utils.js");function _htmlToElement(e){var n=document.createElement("template");return e=e.trim(),n.innerHTML=e,n.content.firstChild}var _importScript=function(e){return new Promise(((n,t)=>{var r=document.createElement("script");r.src=e,r.type="text/javascript",r.onload=n,r.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||n()},r.onerror=t,document.head.appendChild(r)}))};async function importScripts(){for(var e=Array.prototype.slice.call(arguments),n=e.length,t=0;t{this._fire("remoteIdle")})),this._method_refs.onBusy((()=>{this._fire("remoteBusy")})),this._setupMessageHanlders()}init(){this._connection.emit({type:"initialized",config:this.config,peer_id:this._connection.peer_id})}setConfig(e){if(e)for(const n of Object.keys(e))this.config[n]=e[n]}getRemoteCallStack(){return this._method_refs.getStack()}getRemote(){return this._remote_interface}setInterface(e,n){if(n=n||{},this.config.name=n.name||this.config.name,this.config.description=n.description||this.config.description,this.config.forwarding_functions)for(let t of this.config.forwarding_functions){const n=this._remote_interface;n[t]&&(e.constructor===Object?e[t]||(e[t]=(...e)=>{n[t](...e)}):e.constructor.constructor===Function&&(e.constructor.prototype[t]||(e.constructor.prototype[t]=(...e)=>{n[t](...e)})))}this._local_api=e,this._fire("interfaceAvailable")}sendInterface(){if(!this._local_api)throw new Error("interface is not set.");this._encode(this._local_api,!0).then((e=>{this._connection.emit({type:"setInterface",api:e})}))}_disposeObject(e){if(!this._object_store[e])throw new Error(`Object (id=${e}) not found.`);delete this._object_store[e]}disposeObject(e){return new Promise(((n,t)=>{if(!this._object_weakmap.has(e))throw new Error("Invalid object");{const r=this._object_weakmap.get(e);this._connection.once("disposed",(e=>{e.error?t(new Error(e.error)):n()})),this._connection.emit({type:"disposeObject",object_id:r})}}))}_setupMessageHanlders(){this._connection.on("init",this.init),this._connection.on("execute",(e=>{Promise.resolve(this._connection.execute(e.code)).then((()=>{this._connection.emit({type:"executed"})})).catch((e=>{console.error(e),this._connection.emit({type:"executed",error:String(e)})}))})),this._connection.on("method",(async e=>{let n,t,r,o,i,a;try{e.promise&&([n,t]=await this._unwrap(e.promise,!1));const c=this._object_store[e.object_id];if(r=s(c,e.name),e.name.includes(".")){const n=e.name.split(".");o=s(c,n.slice(0,n.length-1).join("."))}else o=c;i=await this._unwrap(e.args,!0),e.promise?(a=r.apply(o,i),a instanceof Promise||r.constructor&&"AsyncFunction"===r.constructor.name?a.then(n).catch(t):n(a)):r.apply(o,i)}catch(c){console.error(this.config.name,c),t&&t(c)}})),this._connection.on("callback",(async e=>{let n,t,r,o,i;try{if(e.promise&&([n,t]=await this._unwrap(e.promise,!1)),e.promise){if(r=this._store.fetch(e.id),o=await this._unwrap(e.args,!0),!r)throw new Error("Callback function can only called once, if you want to call a function for multiple times, please make it as a plugin api function. See https://imjoy.io/docs for more details.");i=r.apply(null,o),i instanceof Promise||r.constructor&&"AsyncFunction"===r.constructor.name?i.then(n).catch(t):n(i)}else{if(r=this._store.fetch(e.id),o=await this._unwrap(e.args,!0),!r)throw new Error("Please notice that callback function can only called once, if you want to call a function for multiple times, please make it as a plugin api function. See https://imjoy.io/docs for more details.");r.apply(null,o)}}catch(a){console.error(this.config.name,a),t&&t(a)}})),this._connection.on("disposeObject",(e=>{try{this._disposeObject(e.object_id),this._connection.emit({type:"disposed"})}catch(n){console.error(n),this._connection.emit({type:"disposed",error:String(n)})}})),this._connection.on("setInterface",(e=>{this._setRemoteInterface(e.api)})),this._connection.on("getInterface",(()=>{this._fire("getInterface"),this._local_api?this.sendInterface():this.once("interfaceAvailable",(()=>{this.sendInterface()}))})),this._connection.on("interfaceSetAsRemote",(()=>{this._fire("interfaceSetAsRemote")})),this._connection.on("disconnect",(()=>{this._fire("beforeDisconnect"),this._connection.disconnect(),this._fire("disconnected")}))}requestRemote(){this._connection.emit({type:"getInterface"})}_ndarray(e,n,t){const o=Object(r.typedArrayToDtype)(e);if(t&&t!==o)throw"dtype doesn't match the type of the array: "+o+" != "+t;return n=n||[e.length],{_rtype:"ndarray",_rvalue:e.buffer,_rshape:n,_rdtype:o}}_setRemoteInterface(e){this._decode(e).then((e=>{this._remote_interface=e,this._fire("remoteReady"),this._reportRemoteSet()}))}_genRemoteMethod(e,n,t){const r=this,o=function(){return new Promise((async(o,i)=>{let a=null;try{a=r._method_refs.put(t?t+"/"+n:n);const s=function(){return null!==a&&r._method_refs.fetch(a),o.apply(this,arguments)},c=function(){return null!==a&&r._method_refs.fetch(a),i.apply(this,arguments)},_=await r._wrap([s,c]);s.__promise_pair=_[1]._rvalue,c.__promise_pair=_[0]._rvalue;let d=Array.prototype.slice.call(arguments);d="register"===n||"registerService"===n||"export"===n||"on"===n?await r._wrap(d,!0):await r._wrap(d);const l=d.__transferables__;l&&delete d.__transferables__,r._connection.emit({type:"method",target_id:e,name:n,object_id:t,args:d,promise:_},l)}catch(s){a&&r._method_refs.fetch(a),i(`Failed to exectue remote method (interface: ${t||r.id}, method: ${n}), error: ${s}`)}}))};return o.__remote_method=!0,o}_reportRemoteSet(){this._connection.emit({type:"interfaceSetAsRemote"})}async _encode(e,n,t){const o=typeof e;if("number"===o||"string"===o||"boolean"===o||null==e||e instanceof ArrayBuffer)return e;let a;if("function"==typeof e){if(n){if(!t)throw new Error("objectId is not specified.");a={_rtype:"interface",_rtarget_id:this._connection.peer_id,_rintf:t,_rvalue:n},this._method_weakmap.set(e,a)}else if(this._method_weakmap.has(e))a=this._method_weakmap.get(e);else{const n=this._store.put(e);a={_rtype:"callback",_rtarget_id:this._connection.peer_id,_rname:e.constructor&&e.constructor.name||n,_rvalue:n}}return a}if(e.constructor instanceof Object&&e._rtype){if(e._rintf){const r=e._rtype;delete e._rtype,a=await this._encode(e,n,t),a._rtype=r}else a=e;return a}const s=[],c=e._transfer,_=Array.isArray(e);for(let r of Object.keys(this._codecs)){const o=this._codecs[r];if(o.encoder&&e instanceof o.type){let r=await Promise.resolve(o.encoder(e));if(r&&!r._rtype&&(r._rtype=o.name),r&&r._rintf){const e=r._rtype;delete r._rtype,r=await this._encode(r,n,t),r._rtype=e}return a=r,a}}if("undefined"!=typeof tf&&tf.Tensor&&e instanceof tf.Tensor){const n=e.dataSync();(e._transfer||c)&&(s.push(n.buffer),delete e._transfer),a={_rtype:"ndarray",_rvalue:n.buffer,_rshape:e.shape,_rdtype:e.dtype}}else if("undefined"!=typeof nj&&nj.NdArray&&e instanceof nj.NdArray){const n=Object(r.typedArrayToDtype)(e.selection.data);(e._transfer||c)&&(s.push(e.selection.data.buffer),delete e._transfer),a={_rtype:"ndarray",_rvalue:e.selection.data.buffer,_rshape:e.shape,_rdtype:n}}else if(e instanceof Error)console.error(e),a={_rtype:"error",_rvalue:e.toString()};else if("undefined"!=typeof File&&e instanceof File)a={_rtype:"file",_rvalue:e,_rpath:e._path||e.webkitRelativePath};else if(e!==Object(e)||e instanceof Boolean||e instanceof String||e instanceof Date||e instanceof RegExp||e instanceof ImageData||"undefined"!=typeof FileList&&e instanceof FileList)a=e;else if("undefined"!=typeof File&&e instanceof File)a={_rtype:"file",_rname:e.name,_rmime:e.type,_rvalue:e,_rpath:e._path||e.webkitRelativePath};else if(e instanceof Blob)a={_rtype:"blob",_rvalue:e};else if(e instanceof i){(e._transfer||c)&&(s.push(e.buffer),delete e._transfer);const n=Object(r.typedArrayToDtype)(e);a={_rtype:"typedarray",_rvalue:e.buffer,_rdtype:n}}else if(e instanceof DataView)(e._transfer||c)&&(s.push(e.buffer),delete e._transfer),a={_rtype:"memoryview",_rvalue:e.buffer};else if(e instanceof Set)a={_rtype:"set",_rvalue:await this._encode(Array.from(e),n)};else if(e instanceof Map)a={_rtype:"orderedmap",_rvalue:await this._encode(Array.from(e),n)};else if(e.constructor instanceof Object||Array.isArray(e)){let o;if(a=_?[]:{},e.constructor===Object||Array.isArray(e))o=Object.keys(e);else{if(e.constructor===Function)throw new Error("Please instantiate the class before exportting it.");if(e.constructor.constructor!==Function)throw Error("Unsupported interface type");o=Object.getOwnPropertyNames(Object.getPrototypeOf(e)).concat(Object.keys(e)),n=!0}let i=!1;if(e._rintf||n){t||(t=Object(r.randId)(),this._object_store[t]=e);for(let r of o)"constructor"!==r&&(r.startsWith("_")||(a[r]=await this._encode(e[r],"string"==typeof n?n+"."+r:r,t),"function"==typeof e[r]&&(i=!0)));i&&(a._rintf=t),e.on&&"function"==typeof e.on&&e.on("close",(()=>{delete this._object_store[t]}))}else for(let n of o)["hasOwnProperty","constructor"].includes(n)||(a[n]=await this._encode(e[n]))}else{if("object"!=typeof e)throw"imjoy-rpc: Unsupported data type:"+e;{const n=Object.getOwnPropertyNames(Object.getPrototypeOf(e)).concat(Object.keys(e)),t=Object(r.randId)();for(let r of n)["hasOwnProperty","constructor"].includes(r)||(a[r]=await this._encode(e[r],r,a));a._rintf=t}}if(s.length>0&&(a.__transferables__=s),!a)throw new Error("Failed to encode object");return a}async _decode(e,n){if(!e)return e;let t;if(e._rtype)if(this._codecs[e._rtype]&&this._codecs[e._rtype].decoder){if(e._rintf){const t=e._rtype;delete e._rtype,(e=await this._decode(e,n))._rtype=t}t=await Promise.resolve(this._codecs[e._rtype].decoder(e))}else if("callback"===e._rtype)t=this._genRemoteCallback(e._rtarget_id,e._rvalue,n);else if("interface"===e._rtype)t=this._genRemoteMethod(e._rtarget_id,e._rvalue,e._rintf);else if("ndarray"===e._rtype)if("undefined"!=typeof nj&&nj.array)Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(a)),t=nj.array(new Uint8(e._rvalue),e._rdtype).reshape(e._rshape);else if("undefined"!=typeof tf&&tf.Tensor){Array.isArray(e._rvalue)&&(e._rvalue=e._rvalue.reduce(a));const n=r.dtypeToTypedArray[e._rdtype];t=tf.tensor(new n(e._rvalue),e._rshape,e._rdtype)}else t=e;else if("error"===e._rtype)t=new Error(e._rvalue);else if("file"===e._rtype)e._rvalue instanceof File?(t=e._rvalue,t._path=e._rpath):(t=new File([e._rvalue],e._rname,{type:e._rmime}),t._path=e._rpath);else if("typedarray"===e._rtype){const n=r.dtypeToTypedArray[e._rdtype];if(!n)throw new Error("unsupported dtype: "+e._rdtype);t=new n(e._rvalue)}else if("memoryview"===e._rtype)t=new DataView(e._rvalue);else if("blob"===e._rtype)t=e._rvalue instanceof Blob?e._rvalue:new Blob([e._rvalue],{type:e._rmime});else if("orderedmap"===e._rtype)t=new Map(await this._decode(e._rvalue,n));else if("set"===e._rtype)t=new Set(await this._decode(e._rvalue,n));else if(e._rintf){const r=e._rtype;delete e._rtype,t=await this._decode(e,n),t._rtype=r}else t=e;else if(e.constructor===Object||Array.isArray(e)){const r=Array.isArray(e);t=r?[]:{};for(let o of Object.keys(e))if(r||e.hasOwnProperty(o)){const r=e[o];t[o]=await this._decode(r,n)}}else t=e;if(void 0===t)throw new Error("Failed to decode object");return e._rintf&&this._object_weakmap.set(t,e._rintf),t}async _wrap(e,n){return await this._encode(e,n)}async _unwrap(e,n){return await this._decode(e,n)}_genRemoteCallback(e,n,t){const r=this;let o;return t?(o=function(){return new Promise((async(t,o)=>{const i=await r._wrap(Array.prototype.slice.call(arguments)),a=i.__transferables__;a&&delete i.__transferables__;const s=await r._wrap([t,o]);t.__promise_pair=s[1]._rvalue,o.__promise_pair=s[0]._rvalue;try{r._connection.emit({type:"callback",target_id:e,id:n,args:i,promise:s},a)}catch(c){o(`Failed to exectue remote callback ( id: ${n}).`)}}))},o):(o=async function(){const t=await r._wrap(Array.prototype.slice.call(arguments)),o=t.__transferables__;return o&&delete t.__transferables__,r._connection.emit({type:"callback",target_id:e,id:n,args:t},o)},o)}disconnect(){this._connection.emit({type:"disconnect"}),setTimeout((()=>{this._connection.disconnect()}),2e3)}}class _{constructor(){this._store={},this._indices=[0],this._readyHandler=function(){},this._busyHandler=function(){},this._readyHandler()}onReady(e){this._readyHandler=e||function(){}}onBusy(e){this._busyHandler=e||function(){}}getStack(){return Object.keys(this._store).length}_genId(){let e;return e=1===this._indices.length?this._indices[0]++:this._indices.shift(),e}_releaseId(e){for(let n=0;n=0&&this._indices[n]-1===this._indices[n-1];n--)this._indices.pop()}put(e){this._busyHandler&&0===Object.keys(this._store).length&&this._busyHandler();const n=this._genId();return this._store[n]=e,n}fetch(e){const n=this._store[e];return n&&!n.__remote_method&&(delete this._store[e],this._releaseId(e),this._readyHandler&&0===Object.keys(this._store).length&&this._readyHandler()),n&&n.__promise_pair&&this.fetch(n.__promise_pair),n}}},"./src/utils.js":function(module,__webpack_exports__,__webpack_require__){function randId(){return Math.random().toString(36).substr(2,10)+(new Date).getTime()}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"randId",(function(){return randId})),__webpack_require__.d(__webpack_exports__,"dtypeToTypedArray",(function(){return dtypeToTypedArray})),__webpack_require__.d(__webpack_exports__,"typedArrayToDtypeMapping",(function(){return typedArrayToDtypeMapping})),__webpack_require__.d(__webpack_exports__,"typedArrayToDtype",(function(){return typedArrayToDtype})),__webpack_require__.d(__webpack_exports__,"cacheRequirements",(function(){return cacheRequirements})),__webpack_require__.d(__webpack_exports__,"setupServiceWorker",(function(){return setupServiceWorker})),__webpack_require__.d(__webpack_exports__,"urlJoin",(function(){return urlJoin})),__webpack_require__.d(__webpack_exports__,"MessageEmitter",(function(){return MessageEmitter}));const dtypeToTypedArray={int8:Int8Array,int16:Int16Array,int32:Int32Array,uint8:Uint8Array,uint16:Uint16Array,uint32:Uint32Array,float32:Float32Array,float64:Float64Array,array:Array},typedArrayToDtypeMapping={Int8Array:"int8",Int16Array:"int16",Int32Array:"int32",Uint8Array:"uint8",Uint16Array:"uint16",Uint32Array:"uint32",Float32Array:"float32",Float64Array:"float64",Array:"array"},typedArrayToDtypeKeys=[];for(const arrType of Object.keys(typedArrayToDtypeMapping))typedArrayToDtypeKeys.push(eval(arrType));function typedArrayToDtype(e){let n=typedArrayToDtypeMapping[e.constructor.name];if(!n){const t=Object.getPrototypeOf(e);for(const e of typedArrayToDtypeKeys)if(t instanceof e){n=typedArrayToDtypeMapping[e.name];break}}return n}function cacheUrlInServiceWorker(e){return new Promise((function(n,t){const r={command:"add",url:e};if(!navigator.serviceWorker||!navigator.serviceWorker.register)return void t("Service worker is not supported.");const o=new MessageChannel;o.port1.onmessage=function(e){e.data&&e.data.error?t(e.data.error):n(e.data&&e.data.result)},navigator.serviceWorker&&navigator.serviceWorker.controller?navigator.serviceWorker.controller.postMessage(r,[o.port2]):t("Service worker controller is not available")}))}async function cacheRequirements(e){if(Array.isArray(e)||(requirementsm.code.requirements=[e]),e&&e.length>0)for(let n of e)n.startsWith("js:")&&(n=n.slice(3)),n.startsWith("css:")&&(n=n.slice(4)),n.startsWith("cache:")&&(n=n.slice(6)),n.startsWith("http")&&await cacheUrlInServiceWorker(n).catch((e=>{console.error(e)}))}function setupServiceWorker(e,n,t){if("serviceWorker"in navigator){if(e=e||"/",navigator.serviceWorker.register(e+"plugin-service-worker.js").then((function(e){console.log("ServiceWorker registration successful with scope: ",e.scope)}),(function(e){console.log("ServiceWorker registration failed: ",e)})),n=n||"*",(t=t||cacheRequirements)&&"function"!=typeof t)throw new Error("config.cache_requirements must be a function");window.addEventListener("message",(function(e){if("*"===n||e.origin===n){const n=e.data;"cacheRequirements"===n.type&&t(n.requirements)}}))}}function urlJoin(...e){return e.join("/").replace(/[\/]+/g,"/").replace(/^(.+):\//,"$1://").replace(/^file:/,"file:/").replace(/\/(\?|&|#[^!])/g,"$1").replace(/\?/g,"&").replace("&","?")}class MessageEmitter{constructor(e){this._event_handlers={},this._once_handlers={},this._debug=e}emit(){throw new Error("emit is not implemented")}on(e,n){this._event_handlers[e]||(this._event_handlers[e]=[]),this._event_handlers[e].push(n)}once(e,n){n.___event_run_once=!0,this.on(e,n)}off(e,n){if(e||n){if(e&&!n)this._event_handlers[e]&&(this._event_handlers[e]=[]);else if(this._event_handlers[e]){const t=this._event_handlers[e].indexOf(n);t>=0&&this._event_handlers[e].splice(t,1)}}else this._event_handlers={}}_fire(e,n){if(this._event_handlers[e])for(var t=this._event_handlers[e].length;t--;){const o=this._event_handlers[e][t];try{o(n)}catch(r){console.error(r)}finally{o.___event_run_once&&this._event_handlers[e].splice(t,1)}}else this._debug&&console.warn("unhandled event",e,n)}}}})},module.exports=factory()})(imjoyRpc$1);var imjoyRpc=imjoyRpc$1.exports,index=Object.freeze(Object.assign(Object.create(null),imjoyRpc,{[Symbol.toStringTag]:"Module",default:imjoyRpc}));export{index as i}; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/index.html b/omero_web_zarr/static/omero_web_zarr/vizarr/index.html new file mode 100644 index 0000000..4d7d7e0 --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/index.html @@ -0,0 +1,24 @@ + + + + + + + + + vizarr + + + + +

+ + + + + diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/lz4.90bd37fe.js b/omero_web_zarr/static/omero_web_zarr/vizarr/lz4.90bd37fe.js new file mode 100644 index 0000000..1e1e622 --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/lz4.90bd37fe.js @@ -0,0 +1 @@ +import{i as A}from"./utils-6b0080f1.f4680ab2.js";var B,I=("undefined"!=typeof document&&document.currentScript&&document.currentScript.src,function(A){var B,I,g;A=A||{},B||(B=void 0!==A?A:{}),B.ready=new Promise((function(A,B){I=A,g=B}));var Q,E={};for(Q in B)B.hasOwnProperty(Q)&&(E[Q]=B[Q]);var C,i=B.printErr||console.warn.bind(console);for(Q in E)E.hasOwnProperty(Q)&&(B[Q]=E[Q]);E=null,B.wasmBinary&&(C=B.wasmBinary),B.noExitRuntime&&B.noExitRuntime,"object"!=typeof WebAssembly&&H("no native wasm support detected");var n,o,r,t,a,e,s,f,c,D,y=!1,u="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0,w="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0;function h(A,B){for(var I=A>>1,g=I+B/2;!(I>=g)&&e[I];)++I;if(32<(I<<=1)-A&&w)return w.decode(t.subarray(A,I));for(I=0,g="";;){var Q=a[A+2*I>>1];if(0==Q||I==B/2)return g;++I,g+=String.fromCharCode(Q)}}function F(A,B,I){if(void 0===I&&(I=2147483647),2>I)return 0;var g=B;I=(I-=2)<2*A.length?I/2:A.length;for(var Q=0;Q>1]=A.charCodeAt(Q),B+=2;return a[B>>1]=0,B-g}function l(A){return 2*A.length}function R(A,B){for(var I=0,g="";!(I>=B/4);){var Q=s[A+4*I>>2];if(0==Q)break;++I,65536<=Q?(Q-=65536,g+=String.fromCharCode(55296|Q>>10,56320|1023&Q)):g+=String.fromCharCode(Q)}return g}function N(A,B,I){if(void 0===I&&(I=2147483647),4>I)return 0;var g=B;I=g+I-4;for(var Q=0;Q=E&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++Q)),s[B>>2]=E,(B+=4)+4>I)break}return s[B>>2]=0,B-g}function d(A){for(var B=0,I=0;I=g&&++I,B+=4}return B}function G(A){o=A,B.HEAP8=r=new Int8Array(A),B.HEAP16=a=new Int16Array(A),B.HEAP32=s=new Int32Array(A),B.HEAPU8=t=new Uint8Array(A),B.HEAPU16=e=new Uint16Array(A),B.HEAPU32=f=new Uint32Array(A),B.HEAPF32=c=new Float32Array(A),B.HEAPF64=D=new Float64Array(A)}var M=B.INITIAL_MEMORY||16777216;(n=B.wasmMemory?B.wasmMemory:new WebAssembly.Memory({initial:M/65536,maximum:32768}))&&(o=n.buffer),M=o.byteLength,G(o);var p,S=[],k=[],m=[],U=[];function Y(){var A=B.preRun.shift();S.unshift(A)}var J=0,L=null;function H(A){throw B.onAbort&&B.onAbort(A),i(A),y=!0,A=new WebAssembly.RuntimeError("abort("+A+"). Build with -s ASSERTIONS=1 for more info."),g(A),A}function v(A){var B=b;return String.prototype.startsWith?B.startsWith(A):0===B.indexOf(A)}function W(){return v("data:application/octet-stream;base64,")}B.preloadedImages={},B.preloadedAudios={};var b="lz4_codec.wasm";if(!W()){var q=b;b=B.locateFile?B.locateFile(q,""):""+q}function x(){try{if(C)return new Uint8Array(C);throw"both async and sync fetching of the wasm failed"}catch(A){H(A)}}function X(A){for(;0>2]=A},this.M=function(A){s[this.C+0>>2]=A},this.N=function(){s[this.C+4>>2]=0},this.L=function(){r[this.C+12>>0]=0},this.O=function(){r[this.C+13>>0]=0},this.K=function(A,B){this.P(A),this.M(B),this.N(),this.L(),this.O()}}function K(A){switch(A){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+A)}}var V=void 0;function Z(A){for(var B="";t[A];)B+=V[t[A++]];return B}var P={},O={},j={};function z(A){if(void 0===A)return"_unknown";var B=(A=A.replace(/[^a-zA-Z0-9_]/g,"$")).charCodeAt(0);return 48<=B&&57>=B?"_"+A:A}function _(A,B){return A=z(A),new Function("body","return function "+A+'() {\n "use strict"; return body.apply(this, arguments);\n};\n')(B)}function $(A){var B=Error,I=_(A,(function(B){this.name=A,this.message=B,void 0!==(B=Error(B).stack)&&(this.stack=this.toString()+"\n"+B.replace(/^Error(:[^\n]*)?\n/,""))}));return I.prototype=Object.create(B.prototype),I.prototype.constructor=I,I.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message},I}var AA=void 0;function BA(A){throw new AA(A)}var IA=void 0;function gA(A,B,I){if(I=I||{},!("argPackAdvance"in B))throw new TypeError("registerType registeredInstance requires argPackAdvance");var g=B.name;if(A||BA('type "'+g+'" must have a positive integer typeid pointer'),O.hasOwnProperty(A)){if(I.J)return;BA("Cannot register type '"+g+"' twice")}O[A]=B,delete j[A],P.hasOwnProperty(A)&&(B=P[A],delete P[A],B.forEach((function(A){A()})))}var QA=[],EA=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function CA(A){4>2])}function oA(A){if(null===A)return"null";var B=typeof A;return"object"===B||"array"===B||"function"===B?A.toString():""+A}function rA(A,B){switch(B){case 2:return function(A){return this.fromWireType(c[A>>2])};case 3:return function(A){return this.fromWireType(D[A>>3])};default:throw new TypeError("Unknown float type: "+A)}}function tA(A){for(;A.length;){var B=A.pop();A.pop()(B)}}function aA(A,I,g){B.hasOwnProperty(A)?((void 0===g||void 0!==B[A].A&&void 0!==B[A].A[g])&&BA("Cannot register public name '"+A+"' twice"),function(A,I){var g=B;if(void 0===g[A].A){var Q=g[A];g[A]=function(){return g[A].A.hasOwnProperty(arguments.length)||BA("Function '"+I+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+g[A].A+")!"),g[A].A[arguments.length].apply(this,arguments)},g[A].A=[],g[A].A[Q.H]=Q}}(A,A),B.hasOwnProperty(g)&&BA("Cannot register multiple overloads of a function with the same number of arguments ("+g+")!"),B[A].A[g]=I):(B[A]=I,void 0!==g&&(B[A].S=g))}function eA(A,I){var g=-1!=(A=Z(A)).indexOf("j")?function(A,I){0<=A.indexOf("j")||H("Assertion failed: getDynCaller should only be called with i64 sigs");var g=[];return function(){g.length=arguments.length;for(var Q=0;Q>1]}:function(A){return e[A>>1]};case 2:return I?function(A){return s[A>>2]}:function(A){return f[A>>2]};default:throw new TypeError("Unknown integer type: "+A)}}for(var DA=Array(256),yA=0;256>yA;++yA)DA[yA]=String.fromCharCode(yA);V=DA,AA=B.BindingError=$("BindingError"),IA=B.InternalError=$("InternalError"),B.count_emval_handles=function(){for(var A=0,B=5;B>E])},B:null})},q:function(A,B){gA(A,{name:B=Z(B),fromWireType:function(A){var B=EA[A].value;return CA(A),B},toWireType:function(A,B){return iA(B)},argPackAdvance:8,readValueFromPointer:nA,B:null})},g:function(A,B,I){I=K(I),gA(A,{name:B=Z(B),fromWireType:function(A){return A},toWireType:function(A,B){if("number"!=typeof B&&"boolean"!=typeof B)throw new TypeError('Cannot convert "'+oA(B)+'" to '+this.name);return B},argPackAdvance:8,readValueFromPointer:rA(B,I),B:null})},e:function(A,I,g,Q,E,C){var i=function(A,B){for(var I=[],g=0;g>2)+g]);return I}(I,g);A=Z(A),E=eA(Q,E),aA(A,(function(){!function(A,B){var I=[],g={};throw B.forEach((function A(B){g[B]||O[B]||(j[B]?j[B].forEach(A):(I.push(B),g[B]=!0))})),new sA(A+": "+I.map(fA).join([", "]))}("Cannot call "+A+" due to unbound types",i)}),I-1),function(A,B){function I(A){if((A=B(A)).length!==g.length)throw new IA("Mismatched type converter count");for(var I=0;Io&&BA("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==g[1]&&!1,t=!1,a=1;a>>i}}var n=-1!=B.indexOf("unsigned");gA(A,{name:B,fromWireType:E,toWireType:function(A,I){if("number"!=typeof I&&"boolean"!=typeof I)throw new TypeError('Cannot convert "'+oA(I)+'" to '+this.name);if(IQ)throw new TypeError('Passing a number "'+oA(I)+'" from JS side to C/C++ side to an argument of type "'+B+'", which is outside the valid range ['+g+", "+Q+"]!");return n?I>>>0:0|I},argPackAdvance:8,readValueFromPointer:cA(B,C,0!==g),B:null})},b:function(A,B,I){function g(A){var B=f;return new Q(o,B[1+(A>>=2)],B[A])}var Q=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][B];gA(A,{name:I=Z(I),fromWireType:g,argPackAdvance:8,readValueFromPointer:g},{J:!0})},f:function(A,B){var I="std::string"===(B=Z(B));gA(A,{name:B,fromWireType:function(A){var B=f[A>>2];if(I)for(var g=A+4,Q=0;Q<=B;++Q){var E=A+4+Q;if(Q==B||0==t[E]){if(g){var C=g,i=t,n=C+(E-g);for(g=C;i[g]&&!(g>=n);)++g;if(16(o=224==(240&o)?(15&o)<<12|r<<6|a:(7&o)<<18|r<<12|a<<6|63&i[C++])?n+=String.fromCharCode(o):(o-=65536,n+=String.fromCharCode(55296|o>>10,56320|1023&o))}}else n+=String.fromCharCode(o)}C=n}}else C="";if(void 0===e)var e=C;else e+=String.fromCharCode(0),e+=C;g=E+1}}else{for(e=Array(B),Q=0;Q=g&&(g=65536+((1023&g)<<10)|1023&B.charCodeAt(++I)),127>=g?++A:A=2047>=g?A+2:65535>=g?A+3:A+4}return A}:function(){return B.length})(),E=FA(4+Q+1);if(f[E>>2]=Q,I&&g)!function(A,B,I){var g=t;if(0=E&&(E=65536+((1023&E)<<10)|1023&A.charCodeAt(++Q)),127>=E){if(B>=I)break;g[B++]=E}else{if(2047>=E){if(B+1>=I)break;g[B++]=192|E>>6}else{if(65535>=E){if(B+2>=I)break;g[B++]=224|E>>12}else{if(B+3>=I)break;g[B++]=240|E>>18,g[B++]=128|E>>12&63}g[B++]=128|E>>6&63}g[B++]=128|63&E}}g[B]=0}}(B,E+4,Q+1);else if(g)for(g=0;g>2],E=C(),n=A+4,o=0;o<=Q;++o){var r=A+4+o*B;o!=Q&&0!=E[r>>i]||(n=g(n,r-n),void 0===I?I=n:(I+=String.fromCharCode(0),I+=n),n=r+B)}return lA(A),I},toWireType:function(A,g){"string"!=typeof g&&BA("Cannot pass non-string to C++ string type "+I);var C=E(g),n=FA(4+C+B);return f[n>>2]=C>>i,Q(g,n+4,C+B),null!==A&&A.push(lA,n),n},argPackAdvance:8,readValueFromPointer:nA,B:function(A){lA(A)}})},i:function(A,B){gA(A,{R:!0,name:B=Z(B),argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},j:CA,m:function(A){4>>=0;var B=t.length;if(2147483648=I;I*=2){var g=B*(1+.2/I);g=Math.min(g,A+100663296),0<(g=Math.max(16777216,A,g))%65536&&(g+=65536-g%65536);A:{try{n.grow(Math.min(2147483648,g)-o.byteLength+65535>>>16),G(n.buffer);var Q=1;break A}catch(E){}Q=void 0}if(Q)return!0}return!1},a:n};!function(){function A(A){B.asm=A.exports,p=B.asm.s,J--,B.monitorRunDependencies&&B.monitorRunDependencies(J),0==J&&L&&(A=L,L=null,A())}function I(B){A(B.instance)}function Q(A){return Promise.resolve().then(x).then((function(A){return WebAssembly.instantiate(A,E)})).then(A,(function(A){i("failed to asynchronously prepare wasm: "+A),H(A)}))}var E={a:uA};if(J++,B.monitorRunDependencies&&B.monitorRunDependencies(J),B.instantiateWasm)try{return B.instantiateWasm(E,A)}catch(n){return i("Module.instantiateWasm callback failed with error: "+n),!1}(C||"function"!=typeof WebAssembly.instantiateStreaming||W()||v("file://")||"function"!=typeof fetch?Q(I):fetch(b,{credentials:"same-origin"}).then((function(A){return WebAssembly.instantiateStreaming(A,E).then(I,(function(A){return i("wasm streaming compile failed: "+A),i("falling back to ArrayBuffer instantiation"),Q(I)}))}))).catch(g)}();var wA,hA=B.___wasm_call_ctors=function(){return(hA=B.___wasm_call_ctors=B.asm.t).apply(null,arguments)},FA=B._malloc=function(){return(FA=B._malloc=B.asm.u).apply(null,arguments)},lA=B._free=function(){return(lA=B._free=B.asm.v).apply(null,arguments)},RA=B.___getTypeName=function(){return(RA=B.___getTypeName=B.asm.w).apply(null,arguments)};function NA(){function A(){if(!wA&&(wA=!0,B.calledRun=!0,!y)){if(X(k),X(m),I(B),B.onRuntimeInitialized&&B.onRuntimeInitialized(),B.postRun)for("function"==typeof B.postRun&&(B.postRun=[B.postRun]);B.postRun.length;){var A=B.postRun.shift();U.unshift(A)}X(U)}}if(!(02113929216)throw Error("Codec does not support buffers of > 2113929216 bytes.");const E=await Q,C=E.compress(B,this.acceleration),i=new Uint8Array(C);return E.free_result(),i}async decode(B,E){if(Q||(Q=A(I,g)),B.length>2113929216)throw Error("Codec does not support buffers of > 2113929216 bytes.");const C=await Q,i=C.decompress(B),n=new Uint8Array(i);return C.free_result(),void 0!==E?(E.set(n),E):n}}).codecId="lz4",B.DEFAULT_ACCELERATION=1,B.max_buffer_size=2113929216,B);export default E; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/pako.esm-9240ff4b.6c52ac68.js b/omero_web_zarr/static/omero_web_zarr/vizarr/pako.esm-9240ff4b.6c52ac68.js new file mode 100644 index 0000000..196d47a --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/pako.esm-9240ff4b.6c52ac68.js @@ -0,0 +1,2 @@ +/*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */ +function t(t){let e=t.length;for(;--e>=0;)t[e]=0}const e=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),a=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),i=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),n=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=new Array(576);t(s);const r=new Array(60);t(r);const l=new Array(512);t(l);const o=new Array(256);t(o);const h=new Array(29);t(h);const d=new Array(30);function _(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}let f,c,u;function w(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}t(d);const b=t=>t<256?l[t]:l[256+(t>>>7)],g=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},m=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<{m(t,a[2*e],a[2*e+1])},k=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},v=(t,e,a)=>{const i=new Array(16);let n,s,r=0;for(n=1;n<=15;n++)i[n]=r=r+a[n-1]<<1;for(s=0;s<=e;s++){let e=t[2*s+1];0!==e&&(t[2*s]=k(i[e]++,e))}},y=t=>{let e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0},x=t=>{t.bi_valid>8?g(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},z=(t,e,a,i)=>{const n=2*e,s=2*a;return t[n]{const i=t.heap[a];let n=a<<1;for(;n<=t.heap_len&&(n{let s,r,l,_,f=0;if(0!==t.last_lit)do{s=t.pending_buf[t.d_buf+2*f]<<8|t.pending_buf[t.d_buf+2*f+1],r=t.pending_buf[t.l_buf+f],f++,0===s?p(t,r,i):(l=o[r],p(t,l+256+1,i),_=e[l],0!==_&&(r-=h[l],m(t,r,_)),s--,l=b(s),p(t,l,n),_=a[l],0!==_&&(s-=d[l],m(t,s,_)))}while(f{const a=e.dyn_tree,i=e.stat_desc.static_tree,n=e.stat_desc.has_stree,s=e.stat_desc.elems;let r,l,o,h=-1;for(t.heap_len=0,t.heap_max=573,r=0;r>1;r>=1;r--)A(t,a,r);o=s;do{r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],A(t,a,1),l=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=l,a[2*o]=a[2*r]+a[2*l],t.depth[o]=(t.depth[r]>=t.depth[l]?t.depth[r]:t.depth[l])+1,a[2*r+1]=a[2*l+1]=o,t.heap[1]=o++,A(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,i=e.max_code,n=e.stat_desc.static_tree,s=e.stat_desc.has_stree,r=e.stat_desc.extra_bits,l=e.stat_desc.extra_base,o=e.stat_desc.max_length;let h,d,_,f,c,u,w=0;for(f=0;f<=15;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,h=t.heap_max+1;h<573;h++)d=t.heap[h],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,w++),a[2*d+1]=f,d>i||(t.bl_count[f]++,c=0,d>=l&&(c=r[d-l]),u=a[2*d],t.opt_len+=u*(f+c),s&&(t.static_len+=u*(n[2*d+1]+c)));if(0!==w){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,w-=2}while(w>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)_=t.heap[--h],_>i||(a[2*_+1]!==f&&(t.opt_len+=(f-a[2*_+1])*a[2*_],a[2*_+1]=f),d--)}})(t,e),v(a,h,t.bl_count)},Z=(t,e,a)=>{let i,n,s=-1,r=e[1],l=0,o=7,h=4;for(0===r&&(o=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=r,r=e[2*(i+1)+1],++l{let i,n,s=-1,r=e[1],l=0,o=7,h=4;for(0===r&&(o=138,h=3),i=0;i<=a;i++)if(n=r,r=e[2*(i+1)+1],!(++l{m(t,0+(i?1:0),3),((t,e,a,i)=>{x(t),i&&(g(t,a),g(t,~a)),t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a})(t,e,a,!0)};var O={_tr_init:t=>{S||((()=>{let t,n,w,b,g;const m=new Array(16);for(w=0,b=0;b<28;b++)for(h[b]=w,t=0;t<1<>=7;b<30;b++)for(d[b]=g<<7,t=0;t<1<{let l,o,h=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),R(t,t.l_desc),R(t,t.d_desc),h=(t=>{let e;for(Z(t,t.dyn_ltree,t.l_desc.max_code),Z(t,t.dyn_dtree,t.d_desc.max_code),R(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*n[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),l=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=l&&(l=o)):l=o=a+5,a+4<=l&&-1!==e?D(t,e,a,i):4===t.strategy||o===l?(m(t,2+(i?1:0),3),E(t,s,r)):(m(t,4+(i?1:0),3),((t,e,a,i)=>{let s;for(m(t,e-257,5),m(t,a-1,5),m(t,i-4,4),s=0;s(t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(o[a]+256+1)]++,t.dyn_dtree[2*b(e)]++),t.last_lit===t.lit_bufsize-1),_tr_align:t=>{m(t,2,3),p(t,256,s),(t=>{16===t.bi_valid?(g(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var T=(t,e,a,i)=>{let n=65535&t|0,s=t>>>16&65535|0,r=0;for(;0!==a;){r=a>2e3?2e3:a,a-=r;do{n=n+e[i++]|0,s=s+n|0}while(--r);n%=65521,s%=65521}return n|s<<16|0};const F=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var I=(t,e,a,i)=>{const n=F,s=i+a;t^=-1;for(let r=i;r>>8^n[255&(t^e[r])];return-1^t},L={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},N={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:B,_tr_stored_block:C,_tr_flush_block:H,_tr_tally:M,_tr_align:j}=O,{Z_NO_FLUSH:K,Z_PARTIAL_FLUSH:P,Z_FULL_FLUSH:Y,Z_FINISH:G,Z_BLOCK:X,Z_OK:W,Z_STREAM_END:q,Z_STREAM_ERROR:J,Z_DATA_ERROR:Q,Z_BUF_ERROR:V,Z_DEFAULT_COMPRESSION:$,Z_FILTERED:tt,Z_HUFFMAN_ONLY:et,Z_RLE:at,Z_FIXED:it,Z_DEFAULT_STRATEGY:nt,Z_UNKNOWN:st,Z_DEFLATED:rt}=N,lt=(t,e)=>(t.msg=L[e],e),ot=t=>(t<<1)-(t>4?9:0),ht=t=>{let e=t.length;for(;--e>=0;)t[e]=0};let dt=(t,e,a)=>(e<{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ft=(t,e)=>{H(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,_t(t.strm)},ct=(t,e)=>{t.pending_buf[t.pending++]=e},ut=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},wt=(t,e,a,i)=>{let n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,e.set(t.input.subarray(t.next_in,t.next_in+n),a),1===t.state.wrap?t.adler=T(t.adler,e,n,a):2===t.state.wrap&&(t.adler=I(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)},bt=(t,e)=>{let a,i,n=t.max_chain_length,s=t.strstart,r=t.prev_length,l=t.nice_match;const o=t.strstart>t.w_size-262?t.strstart-(t.w_size-262):0,h=t.window,d=t.w_mask,_=t.prev,f=t.strstart+258;let c=h[s+r-1],u=h[s+r];t.prev_length>=t.good_match&&(n>>=2),l>t.lookahead&&(l=t.lookahead);do{if(a=e,h[a+r]===u&&h[a+r-1]===c&&h[a]===h[s]&&h[++a]===h[s+1]){s+=2,a++;do{}while(h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&sr){if(t.match_start=e,r=i,i>=l)break;c=h[s+r-1],u=h[s+r]}}}while((e=_[e&d])>o&&0!=--n);return r<=t.lookahead?r:t.lookahead},gt=t=>{const e=t.w_size;let a,i,n,s,r;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-262)){t.window.set(t.window.subarray(e,e+e),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,i=t.hash_size,a=i;do{n=t.head[--a],t.head[a]=n>=e?n-e:0}while(--i);i=e,a=i;do{n=t.prev[--a],t.prev[a]=n>=e?n-e:0}while(--i);s+=e}if(0===t.strm.avail_in)break;if(i=wt(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=i,t.lookahead+t.insert>=3)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=dt(t,t.ins_h,t.window[r+1]);t.insert&&(t.ins_h=dt(t,t.ins_h,t.window[r+3-1]),t.prev[r&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=r,r++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<262&&0!==t.strm.avail_in)},mt=(t,e)=>{let a,i;for(;;){if(t.lookahead<262){if(gt(t),t.lookahead<262&&e===K)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=dt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-262&&(t.match_length=bt(t,a)),t.match_length>=3)if(i=M(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=dt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=dt(t,t.ins_h,t.window[t.strstart+1]);else i=M(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(ft(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===G?(ft(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(ft(t,!1),0===t.strm.avail_out)?1:2},pt=(t,e)=>{let a,i,n;for(;;){if(t.lookahead<262){if(gt(t),t.lookahead<262&&e===K)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=dt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-3,i=M(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=dt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,i&&(ft(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(i=M(t,0,t.window[t.strstart-1]),i&&ft(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=M(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===G?(ft(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(ft(t,!1),0===t.strm.avail_out)?1:2};function kt(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}const vt=[new kt(0,0,0,0,((t,e)=>{let a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(gt(t),0===t.lookahead&&e===K)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;const i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,ft(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-262&&(ft(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===G?(ft(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(ft(t,!1),t.strm.avail_out),1)})),new kt(4,4,8,4,mt),new kt(4,5,16,8,mt),new kt(4,6,32,32,mt),new kt(4,4,16,16,pt),new kt(8,16,32,32,pt),new kt(8,16,128,128,pt),new kt(8,32,128,256,pt),new kt(32,128,258,1024,pt),new kt(32,258,258,4096,pt)];function yt(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=rt,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ht(this.dyn_ltree),ht(this.dyn_dtree),ht(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ht(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ht(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const xt=t=>{if(!t||!t.state)return lt(t,J);t.total_in=t.total_out=0,t.data_type=st;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:113,t.adler=2===e.wrap?0:1,e.last_flush=K,B(e),W},zt=t=>{const e=xt(t);var a;return e===W&&((a=t.state).window_size=2*a.w_size,ht(a.head),a.max_lazy_match=vt[a.level].max_lazy,a.good_match=vt[a.level].good_length,a.nice_match=vt[a.level].nice_length,a.max_chain_length=vt[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},At=(t,e,a,i,n,s)=>{if(!t)return J;let r=1;if(e===$&&(e=6),i<0?(r=0,i=-i):i>15&&(r=2,i-=16),n<1||n>9||a!==rt||i<8||i>15||e<0||e>9||s<0||s>it)return lt(t,J);8===i&&(i=9);const l=new yt;return t.state=l,l.strm=t,l.wrap=r,l.gzhead=null,l.w_bits=i,l.w_size=1<At(t,e,rt,15,8,nt),deflateInit2:At,deflateReset:zt,deflateResetKeep:xt,deflateSetHeader:(t,e)=>t&&t.state?2!==t.state.wrap?J:(t.state.gzhead=e,W):J,deflate:(t,e)=>{let a,i;if(!t||!t.state||e>X||e<0)return t?lt(t,J):J;const n=t.state;if(!t.output||!t.input&&0!==t.avail_in||666===n.status&&e!==G)return lt(t,0===t.avail_out?V:J);n.strm=t;const s=n.last_flush;if(n.last_flush=e,42===n.status)if(2===n.wrap)t.adler=0,ct(n,31),ct(n,139),ct(n,8),n.gzhead?(ct(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),ct(n,255&n.gzhead.time),ct(n,n.gzhead.time>>8&255),ct(n,n.gzhead.time>>16&255),ct(n,n.gzhead.time>>24&255),ct(n,9===n.level?2:n.strategy>=et||n.level<2?4:0),ct(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(ct(n,255&n.gzhead.extra.length),ct(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=I(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(ct(n,0),ct(n,0),ct(n,0),ct(n,0),ct(n,0),ct(n,9===n.level?2:n.strategy>=et||n.level<2?4:0),ct(n,3),n.status=113);else{let e=rt+(n.w_bits-8<<4)<<8,a=-1;a=n.strategy>=et||n.level<2?0:n.level<6?1:6===n.level?2:3,e|=a<<6,0!==n.strstart&&(e|=32),e+=31-e%31,n.status=113,ut(n,e),0!==n.strstart&&(ut(n,t.adler>>>16),ut(n,65535&t.adler)),t.adler=1}if(69===n.status)if(n.gzhead.extra){for(a=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>a&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),_t(t),a=n.pending,n.pending!==n.pending_buf_size));)ct(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>a&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),_t(t),a=n.pending,n.pending===n.pending_buf_size)){i=1;break}i=n.gzindexa&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),0===i&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){a=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>a&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),_t(t),a=n.pending,n.pending===n.pending_buf_size)){i=1;break}i=n.gzindexa&&(t.adler=I(t.adler,n.pending_buf,n.pending-a,a)),0===i&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&_t(t),n.pending+2<=n.pending_buf_size&&(ct(n,255&t.adler),ct(n,t.adler>>8&255),t.adler=0,n.status=113)):n.status=113),0!==n.pending){if(_t(t),0===t.avail_out)return n.last_flush=-1,W}else if(0===t.avail_in&&ot(e)<=ot(s)&&e!==G)return lt(t,V);if(666===n.status&&0!==t.avail_in)return lt(t,V);if(0!==t.avail_in||0!==n.lookahead||e!==K&&666!==n.status){let a=n.strategy===et?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(gt(t),0===t.lookahead)){if(e===K)return 1;break}if(t.match_length=0,a=M(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ft(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===G?(ft(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(ft(t,!1),0===t.strm.avail_out)?1:2})(n,e):n.strategy===at?((t,e)=>{let a,i,n,s;const r=t.window;for(;;){if(t.lookahead<=258){if(gt(t),t.lookahead<=258&&e===K)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=t.strstart-1,i=r[n],i===r[++n]&&i===r[++n]&&i===r[++n])){s=t.strstart+258;do{}while(i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=M(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=M(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ft(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===G?(ft(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(ft(t,!1),0===t.strm.avail_out)?1:2})(n,e):vt[n.level].func(n,e);if(3!==a&&4!==a||(n.status=666),1===a||3===a)return 0===t.avail_out&&(n.last_flush=-1),W;if(2===a&&(e===P?j(n):e!==X&&(C(n,0,0,!1),e===Y&&(ht(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),_t(t),0===t.avail_out))return n.last_flush=-1,W}return e!==G?W:n.wrap<=0?q:(2===n.wrap?(ct(n,255&t.adler),ct(n,t.adler>>8&255),ct(n,t.adler>>16&255),ct(n,t.adler>>24&255),ct(n,255&t.total_in),ct(n,t.total_in>>8&255),ct(n,t.total_in>>16&255),ct(n,t.total_in>>24&255)):(ut(n,t.adler>>>16),ut(n,65535&t.adler)),_t(t),n.wrap>0&&(n.wrap=-n.wrap),0!==n.pending?W:q)},deflateEnd:t=>{if(!t||!t.state)return J;const e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&103!==e&&113!==e&&666!==e?lt(t,J):(t.state=null,113===e?lt(t,Q):W)},deflateSetDictionary:(t,e)=>{let a=e.length;if(!t||!t.state)return J;const i=t.state,n=i.wrap;if(2===n||1===n&&42!==i.status||i.lookahead)return J;if(1===n&&(t.adler=T(t.adler,e,a,0)),i.wrap=0,a>=i.w_size){0===n&&(ht(i.head),i.strstart=0,i.block_start=0,i.insert=0);let t=new Uint8Array(i.w_size);t.set(e.subarray(a-i.w_size,a),0),e=t,a=i.w_size}const s=t.avail_in,r=t.next_in,l=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,gt(i);i.lookahead>=3;){let t=i.strstart,e=i.lookahead-2;do{i.ins_h=dt(i,i.ins_h,i.window[t+3-1]),i.prev[t&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=t,t++}while(--e);i.strstart=t,i.lookahead=2,gt(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,t.next_in=r,t.input=l,t.avail_in=s,i.wrap=n,W},deflateInfo:"pako deflate (from Nodeca project)"};const Rt=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Zt=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)Rt(a,e)&&(t[e]=a[e])}}return t},Ut=t=>{let e=0;for(let i=0,n=t.length;i=252?6:Xe>=248?5:Xe>=240?4:Xe>=224?3:Xe>=192?2:1;Dt[254]=Dt[254]=1;var Ot=t=>{let e,a,i,n,s,r=t.length,l=0;for(n=0;n>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},Tt=(t,e)=>{let a,i;const n=e||t.length,s=new Array(2*n);for(i=0,a=0;a4)s[i++]=65533,a+=r-1;else{for(e&=2===r?31:3===r?15:7;r>1&&a1?s[i++]=65533:e<65536?s[i++]=e:(e-=65536,s[i++]=55296|e>>10&1023,s[i++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&St)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let a="";for(let i=0;i{(e=e||t.length)>t.length&&(e=t.length);let a=e-1;for(;a>=0&&128==(192&t[a]);)a--;return a<0||0===a?e:a+Dt[t[a]]>e?a:e};var It=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Lt=Object.prototype.toString,{Z_NO_FLUSH:Nt,Z_SYNC_FLUSH:Bt,Z_FULL_FLUSH:Ct,Z_FINISH:Ht,Z_OK:Mt,Z_STREAM_END:jt,Z_DEFAULT_COMPRESSION:Kt,Z_DEFAULT_STRATEGY:Pt,Z_DEFLATED:Yt}=N;function Gt(t){this.options=Zt({level:Kt,method:Yt,chunkSize:16384,windowBits:15,memLevel:8,strategy:Pt},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new It,this.strm.avail_out=0;let a=Et.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Mt)throw new Error(L[a]);if(e.header&&Et.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Ot(e.dictionary):"[object ArrayBuffer]"===Lt.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=Et.deflateSetDictionary(this.strm,t),a!==Mt)throw new Error(L[a]);this._dict_set=!0}}function Xt(t,e){const a=new Gt(e);if(a.push(t,!0),a.err)throw a.msg||L[a.err];return a.result}Gt.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize;let n,s;if(this.ended)return!1;for(s=e===~~e?e:!0===e?Ht:Nt,"string"==typeof t?a.input=Ot(t):"[object ArrayBuffer]"===Lt.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),(s===Bt||s===Ct)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(n=Et.deflate(a,s),n===jt)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),n=Et.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===Mt;if(0!==a.avail_out){if(s>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Gt.prototype.onData=function(t){this.chunks.push(t)},Gt.prototype.onEnd=function(t){t===Mt&&(this.result=Ut(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Wt={Deflate:Gt,deflate:Xt,deflateRaw:function(t,e){return(e=e||{}).raw=!0,Xt(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,Xt(t,e)},constants:N};var qt=function(t,e){let a,i,n,s,r,l,o,h,d,_,f,c,u,w,b,g,m,p,k,v,y,x,z,A;const E=t.state;a=t.next_in,z=t.input,i=a+(t.avail_in-5),n=t.next_out,A=t.output,s=n-(e-t.avail_out),r=n+(t.avail_out-257),l=E.dmax,o=E.wsize,h=E.whave,d=E.wnext,_=E.window,f=E.hold,c=E.bits,u=E.lencode,w=E.distcode,b=(1<>>24,f>>>=p,c-=p,p=m>>>16&255,0===p)A[n++]=65535&m;else{if(!(16&p)){if(0==(64&p)){m=u[(65535&m)+(f&(1<>>=p,c-=p),c<15&&(f+=z[a++]<>>24,f>>>=p,c-=p,p=m>>>16&255,!(16&p)){if(0==(64&p)){m=w[(65535&m)+(f&(1<l){t.msg="invalid distance too far back",E.mode=30;break t}if(f>>>=p,c-=p,p=n-s,v>p){if(p=v-p,p>h&&E.sane){t.msg="invalid distance too far back",E.mode=30;break t}if(y=0,x=_,0===d){if(y+=o-p,p2;)A[n++]=x[y++],A[n++]=x[y++],A[n++]=x[y++],k-=3;k&&(A[n++]=x[y++],k>1&&(A[n++]=x[y++]))}else{y=n-v;do{A[n++]=A[y++],A[n++]=A[y++],A[n++]=A[y++],k-=3}while(k>2);k&&(A[n++]=A[y++],k>1&&(A[n++]=A[y++]))}break}}break}}while(a>3,a-=k,c-=k<<3,f&=(1<{const o=l.bits;let h,d,_,f,c,u,w=0,b=0,g=0,m=0,p=0,k=0,v=0,y=0,x=0,z=0,A=null,E=0;const R=new Uint16Array(16),Z=new Uint16Array(16);let U,S,D,O=null,T=0;for(w=0;w<=15;w++)R[w]=0;for(b=0;b=1&&0===R[m];m--);if(p>m&&(p=m),0===m)return n[s++]=20971520,n[s++]=20971520,l.bits=1,0;for(g=1;g0&&(0===t||1!==m))return-1;for(Z[1]=0,w=1;w<15;w++)Z[w+1]=Z[w]+R[w];for(b=0;b852||2===t&&x>592)return 1;for(;;){U=w-v,r[b]u?(S=O[T+r[b]],D=A[E+r[b]]):(S=96,D=0),h=1<>v)+d]=U<<24|S<<16|D|0}while(0!==d);for(h=1<>=1;if(0!==h?(z&=h-1,z+=h):z=0,b++,0==--R[w]){if(w===m)break;w=e[a+r[b]]}if(w>p&&(z&f)!==_){for(0===v&&(v=p),c+=g,k=w-v,y=1<852||2===t&&x>592)return 1;_=z&f,n[_]=p<<24|k<<16|c-s|0}}return 0!==z&&(n[c+z]=w-v<<24|64<<16|0),l.bits=p,0};const{Z_FINISH:ee,Z_BLOCK:ae,Z_TREES:ie,Z_OK:ne,Z_STREAM_END:se,Z_NEED_DICT:re,Z_STREAM_ERROR:le,Z_DATA_ERROR:oe,Z_MEM_ERROR:he,Z_BUF_ERROR:de,Z_DEFLATED:_e}=N,fe=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function ce(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const ue=t=>{if(!t||!t.state)return le;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ne},we=t=>{if(!t||!t.state)return le;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,ue(t)},be=(t,e)=>{let a;if(!t||!t.state)return le;const i=t.state;return e<0?(a=0,e=-e):(a=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?le:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,we(t))},ge=(t,e)=>{if(!t)return le;const a=new ce;t.state=a,a.window=null;const i=be(t,e);return i!==ne&&(t.state=null),i};let me,pe,ke=!0;const ve=t=>{if(ke){me=new Int32Array(512),pe=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(te(1,t.lens,0,288,me,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;te(2,t.lens,0,32,pe,0,t.work,{bits:5}),ke=!1}t.lencode=me,t.lenbits=9,t.distcode=pe,t.distbits=5},ye=(t,e,a,i)=>{let n;const s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(e.subarray(a-s.wsize,a),0),s.wnext=0,s.whave=s.wsize):(n=s.wsize-s.wnext,n>i&&(n=i),s.window.set(e.subarray(a-i,a-i+n),s.wnext),(i-=n)?(s.window.set(e.subarray(a-i,a),0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whavege(t,15),inflateInit2:ge,inflate:(t,e)=>{let a,i,n,s,r,l,o,h,d,_,f,c,u,w,b,g,m,p,k,v,y,x,z=0;const A=new Uint8Array(4);let E,R;const Z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return le;a=t.state,12===a.mode&&(a.mode=13),r=t.next_out,n=t.output,o=t.avail_out,s=t.next_in,i=t.input,l=t.avail_in,h=a.hold,d=a.bits,_=l,f=o,x=ne;t:for(;;)switch(a.mode){case 1:if(0===a.wrap){a.mode=13;break}for(;d<16;){if(0===l)break t;l--,h+=i[s++]<>>8&255,a.check=I(a.check,A,2,0),h=0,d=0,a.mode=2;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",a.mode=30;break}if((15&h)!==_e){t.msg="unknown compression method",a.mode=30;break}if(h>>>=4,d-=4,y=8+(15&h),0===a.wbits)a.wbits=y;else if(y>a.wbits){t.msg="invalid window size",a.mode=30;break}a.dmax=1<>8&1),512&a.flags&&(A[0]=255&h,A[1]=h>>>8&255,a.check=I(a.check,A,2,0)),h=0,d=0,a.mode=3;case 3:for(;d<32;){if(0===l)break t;l--,h+=i[s++]<>>8&255,A[2]=h>>>16&255,A[3]=h>>>24&255,a.check=I(a.check,A,4,0)),h=0,d=0,a.mode=4;case 4:for(;d<16;){if(0===l)break t;l--,h+=i[s++]<>8),512&a.flags&&(A[0]=255&h,A[1]=h>>>8&255,a.check=I(a.check,A,2,0)),h=0,d=0,a.mode=5;case 5:if(1024&a.flags){for(;d<16;){if(0===l)break t;l--,h+=i[s++]<>>8&255,a.check=I(a.check,A,2,0)),h=0,d=0}else a.head&&(a.head.extra=null);a.mode=6;case 6:if(1024&a.flags&&(c=a.length,c>l&&(c=l),c&&(a.head&&(y=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(i.subarray(s,s+c),y)),512&a.flags&&(a.check=I(a.check,i,c,s)),l-=c,s+=c,a.length-=c),a.length))break t;a.length=0,a.mode=7;case 7:if(2048&a.flags){if(0===l)break t;c=0;do{y=i[s+c++],a.head&&y&&a.length<65536&&(a.head.name+=String.fromCharCode(y))}while(y&&c>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=12;break;case 10:for(;d<32;){if(0===l)break t;l--,h+=i[s++]<>>=7&d,d-=7&d,a.mode=27;break}for(;d<3;){if(0===l)break t;l--,h+=i[s++]<>>=1,d-=1,3&h){case 0:a.mode=14;break;case 1:if(ve(a),a.mode=20,e===ie){h>>>=2,d-=2;break t}break;case 2:a.mode=17;break;case 3:t.msg="invalid block type",a.mode=30}h>>>=2,d-=2;break;case 14:for(h>>>=7&d,d-=7&d;d<32;){if(0===l)break t;l--,h+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=30;break}if(a.length=65535&h,h=0,d=0,a.mode=15,e===ie)break t;case 15:a.mode=16;case 16:if(c=a.length,c){if(c>l&&(c=l),c>o&&(c=o),0===c)break t;n.set(i.subarray(s,s+c),r),l-=c,s+=c,o-=c,r+=c,a.length-=c;break}a.mode=12;break;case 17:for(;d<14;){if(0===l)break t;l--,h+=i[s++]<>>=5,d-=5,a.ndist=1+(31&h),h>>>=5,d-=5,a.ncode=4+(15&h),h>>>=4,d-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=30;break}a.have=0,a.mode=18;case 18:for(;a.have>>=3,d-=3}for(;a.have<19;)a.lens[Z[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,E={bits:a.lenbits},x=te(0,a.lens,0,19,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid code lengths set",a.mode=30;break}a.have=0,a.mode=19;case 19:for(;a.have>>24,g=z>>>16&255,m=65535&z,!(b<=d);){if(0===l)break t;l--,h+=i[s++]<>>=b,d-=b,a.lens[a.have++]=m;else{if(16===m){for(R=b+2;d>>=b,d-=b,0===a.have){t.msg="invalid bit length repeat",a.mode=30;break}y=a.lens[a.have-1],c=3+(3&h),h>>>=2,d-=2}else if(17===m){for(R=b+3;d>>=b,d-=b,y=0,c=3+(7&h),h>>>=3,d-=3}else{for(R=b+7;d>>=b,d-=b,y=0,c=11+(127&h),h>>>=7,d-=7}if(a.have+c>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=30;break}for(;c--;)a.lens[a.have++]=y}}if(30===a.mode)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=30;break}if(a.lenbits=9,E={bits:a.lenbits},x=te(1,a.lens,0,a.nlen,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid literal/lengths set",a.mode=30;break}if(a.distbits=6,a.distcode=a.distdyn,E={bits:a.distbits},x=te(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,E),a.distbits=E.bits,x){t.msg="invalid distances set",a.mode=30;break}if(a.mode=20,e===ie)break t;case 20:a.mode=21;case 21:if(l>=6&&o>=258){t.next_out=r,t.avail_out=o,t.next_in=s,t.avail_in=l,a.hold=h,a.bits=d,qt(t,f),r=t.next_out,n=t.output,o=t.avail_out,s=t.next_in,i=t.input,l=t.avail_in,h=a.hold,d=a.bits,12===a.mode&&(a.back=-1);break}for(a.back=0;z=a.lencode[h&(1<>>24,g=z>>>16&255,m=65535&z,!(b<=d);){if(0===l)break t;l--,h+=i[s++]<>p)],b=z>>>24,g=z>>>16&255,m=65535&z,!(p+b<=d);){if(0===l)break t;l--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=b,d-=b,a.back+=b,a.length=m,0===g){a.mode=26;break}if(32&g){a.back=-1,a.mode=12;break}if(64&g){t.msg="invalid literal/length code",a.mode=30;break}a.extra=15&g,a.mode=22;case 22:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=23;case 23:for(;z=a.distcode[h&(1<>>24,g=z>>>16&255,m=65535&z,!(b<=d);){if(0===l)break t;l--,h+=i[s++]<>p)],b=z>>>24,g=z>>>16&255,m=65535&z,!(p+b<=d);){if(0===l)break t;l--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=b,d-=b,a.back+=b,64&g){t.msg="invalid distance code",a.mode=30;break}a.offset=m,a.extra=15&g,a.mode=24;case 24:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=30;break}a.mode=25;case 25:if(0===o)break t;if(c=f-o,a.offset>c){if(c=a.offset-c,c>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=30;break}c>a.wnext?(c-=a.wnext,u=a.wsize-c):u=a.wnext-c,c>a.length&&(c=a.length),w=a.window}else w=n,u=r-a.offset,c=a.length;c>o&&(c=o),o-=c,a.length-=c;do{n[r++]=w[u++]}while(--c);0===a.length&&(a.mode=21);break;case 26:if(0===o)break t;n[r++]=a.length,o--,a.mode=21;break;case 27:if(a.wrap){for(;d<32;){if(0===l)break t;l--,h|=i[s++]<{if(!t||!t.state)return le;let e=t.state;return e.window&&(e.window=null),t.state=null,ne},inflateGetHeader:(t,e)=>{if(!t||!t.state)return le;const a=t.state;return 0==(2&a.wrap)?le:(a.head=e,e.done=!1,ne)},inflateSetDictionary:(t,e)=>{const a=e.length;let i,n,s;return t&&t.state?(i=t.state,0!==i.wrap&&11!==i.mode?le:11===i.mode&&(n=1,n=T(n,e,a,0),n!==i.check)?oe:(s=ye(t,e,a,a),s?(i.mode=31,he):(i.havedict=1,ne))):le},inflateInfo:"pako inflate (from Nodeca project)"};var ze=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Ae=Object.prototype.toString,{Z_NO_FLUSH:Ee,Z_FINISH:Re,Z_OK:Ze,Z_STREAM_END:Ue,Z_NEED_DICT:Se,Z_STREAM_ERROR:De,Z_DATA_ERROR:Oe,Z_MEM_ERROR:Te}=N;function Fe(t){this.options=Zt({chunkSize:65536,windowBits:15,to:""},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new It,this.strm.avail_out=0;let a=xe.inflateInit2(this.strm,e.windowBits);if(a!==Ze)throw new Error(L[a]);if(this.header=new ze,xe.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=Ot(e.dictionary):"[object ArrayBuffer]"===Ae.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(a=xe.inflateSetDictionary(this.strm,e.dictionary),a!==Ze)))throw new Error(L[a])}function Ie(t,e){const a=new Fe(e);if(a.push(t),a.err)throw a.msg||L[a.err];return a.result}Fe.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize,n=this.options.dictionary;let s,r,l;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Re:Ee,"[object ArrayBuffer]"===Ae.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;){for(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),s=xe.inflate(a,r),s===Se&&n&&(s=xe.inflateSetDictionary(a,n),s===Ze?s=xe.inflate(a,r):s===Oe&&(s=Se));a.avail_in>0&&s===Ue&&a.state.wrap>0&&0!==t[a.next_in];)xe.inflateReset(a),s=xe.inflate(a,r);switch(s){case De:case Oe:case Se:case Te:return this.onEnd(s),this.ended=!0,!1}if(l=a.avail_out,a.next_out&&(0===a.avail_out||s===Ue))if("string"===this.options.to){let t=Ft(a.output,a.next_out),e=a.next_out-t,n=Tt(a.output,t);a.next_out=e,a.avail_out=i-e,e&&a.output.set(a.output.subarray(t,t+e),0),this.onData(n)}else this.onData(a.output.length===a.next_out?a.output:a.output.subarray(0,a.next_out));if(s!==Ze||0!==l){if(s===Ue)return s=xe.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===a.avail_in)break}}return!0},Fe.prototype.onData=function(t){this.chunks.push(t)},Fe.prototype.onEnd=function(t){t===Ze&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Ut(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Le={Inflate:Fe,inflate:Ie,inflateRaw:function(t,e){return(e=e||{}).raw=!0,Ie(t,e)},ungzip:Ie,constants:N};const{Deflate:Ne,deflate:Be,deflateRaw:Ce,gzip:He}=Wt,{Inflate:Me,inflate:je,inflateRaw:Ke,ungzip:Pe}=Le;var Ye={Deflate:Ne,deflate:Be,deflateRaw:Ce,gzip:He,Inflate:Me,inflate:je,inflateRaw:Ke,ungzip:Pe,constants:N};export{Ye as p}; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/robots.txt b/omero_web_zarr/static/omero_web_zarr/vizarr/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/utils-6b0080f1.f4680ab2.js b/omero_web_zarr/static/omero_web_zarr/vizarr/utils-6b0080f1.f4680ab2.js new file mode 100644 index 0000000..98e4eaf --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/utils-6b0080f1.f4680ab2.js @@ -0,0 +1 @@ +let r="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node?r=>new Uint8Array(Buffer.from(r,"base64")):(()=>{for(var r=new Uint8Array(128),e=0;e<64;e++)r[e<26?e+65:e<52?e+71:e<62?e-4:4*e-205]=e;return e=>{for(var n=e.length,o=new Uint8Array(3*(n-("="==e[n-1])-("="==e[n-2]))/4|0),t=0,a=0;t>4,o[a++]=i<<4|u>>2,o[a++]=u<<6|c}return o}})();function e(e,n){return e({noInitialRun:!0,wasmBinary:r(n)})}export{e as i}; diff --git a/omero_web_zarr/static/omero_web_zarr/vizarr/vendor.32c7a866.js b/omero_web_zarr/static/omero_web_zarr/vizarr/vendor.32c7a866.js new file mode 100644 index 0000000..c4c56ab --- /dev/null +++ b/omero_web_zarr/static/omero_web_zarr/vizarr/vendor.32c7a866.js @@ -0,0 +1,40 @@ +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,a=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,s=(e,t)=>{for(var n in t||(t={}))i.call(t,n)&&a(e,n,t[n]);if(r)for(var n of r(t))o.call(t,n)&&a(e,n,t[n]);return e},l=(e,r)=>t(e,n(r)),u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function c(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var f={exports:{}},h={},d=Object.getOwnPropertySymbols,p=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable;function m(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var g=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(i){return!1}}()?Object.assign:function(e,t){for(var n,r,i=m(e),o=1;o=y},i=function(){},e.unstable_forceFrameRate=function(e){0>e||125>>1,i=e[r];if(!(void 0!==i&&0S(a,n))void 0!==l&&0>S(l,a)?(e[r]=l,e[s]=n,r=s):(e[r]=a,e[o]=n,r=o);else{if(!(void 0!==l&&0>S(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function S(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var E=[],P=[],C=1,A=null,O=3,T=!1,M=!1,R=!1;function I(e){for(var t=w(P);null!==t;){if(null===t.callback)k(P);else{if(!(t.startTime<=e))break;k(P),t.sortIndex=t.expirationTime,_(E,t)}t=w(P)}}function L(e){if(R=!1,I(e),!M)if(null!==w(E))M=!0,t(j);else{var r=w(P);null!==r&&n(L,r.startTime-e)}}function j(t,i){M=!1,R&&(R=!1,r()),T=!0;var o=O;try{for(I(i),A=w(E);null!==A&&(!(A.expirationTime>i)||t&&!e.unstable_shouldYield());){var a=A.callback;if("function"==typeof a){A.callback=null,O=A.priorityLevel;var s=a(A.expirationTime<=i);i=e.unstable_now(),"function"==typeof s?A.callback=s:A===w(E)&&k(E),I(i)}else k(E);A=w(E)}if(null!==A)var l=!0;else{var u=w(P);null!==u&&n(L,u.startTime-i),l=!1}return l}finally{A=null,O=o,T=!1}}var D=i;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_continueExecution=function(){M||T||(M=!0,t(j))},e.unstable_getCurrentPriorityLevel=function(){return O},e.unstable_getFirstCallbackNode=function(){return w(E)},e.unstable_next=function(e){switch(O){case 1:case 2:case 3:var t=3;break;default:t=O}var n=O;O=t;try{return e()}finally{O=n}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=D,e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=O;O=e;try{return t()}finally{O=n}},e.unstable_scheduleCallback=function(i,o,a){var s=e.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0s?(i.sortIndex=a,_(P,i),null===w(E)&&i===w(P)&&(R?r():R=!0,n(L,a-s))):(i.sortIndex=l,_(E,i),M||T||(M=!0,t(j))),i},e.unstable_wrapCallback=function(e){var t=O;return function(){var n=O;O=t;try{return e.apply(this,arguments)}finally{O=n}}}}(Q),K.exports=Q; +/** @license React v17.0.1 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var J=f.exports,ee=g,te=K.exports;function ne(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n