class IEventHandler{_register(event){this._events[event]=[]}constructor(){this._events={}}_emit(event){event=event.toLowerCase();var args=Array.prototype.slice.call(arguments,1);if(this._events[event])for(var i=0;i-1&&this._events[event].splice(index,1)}else this._events[event]=[]}}!function(){"use strict";function t(t,i){i?(p[0]=p[16]=p[1]=p[2]=p[3]=p[4]=p[5]=p[6]=p[7]=p[8]=p[9]=p[10]=p[11]=p[12]=p[13]=p[14]=p[15]=0,this.blocks=p):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=t}function i(i,r,e){var n="string"!=typeof i;if(n){if(null===i||void 0===i)throw h;i.constructor===s.ArrayBuffer&&(i=new Uint8Array(i))}o=i.length;if(n){if("number"!=typeof o||!Array.isArray(i)&&(!a||!ArrayBuffer.isView(i)))throw h}else{for(var f,u=[],o=i.length,c=0,y=0;o>y;++y)128>(f=i.charCodeAt(y))?u[c++]=f:2048>f?(u[c++]=192|f>>6,u[c++]=128|63&f):55296>f||f>=57344?(u[c++]=224|f>>12,u[c++]=128|f>>6&63,u[c++]=128|63&f):(f=65536+((1023&f)<<10|1023&i.charCodeAt(++y)),u[c++]=240|f>>18,u[c++]=128|f>>12&63,u[c++]=128|f>>6&63,u[c++]=128|63&f);i=u}i.length>64&&(i=new t(r,!0).update(i).array());for(var p=[],l=[],y=0;64>y;++y){var d=i[y]||0;p[y]=92^d,l[y]=54^d}t.call(this,r,e),this.update(l),this.oKeyPad=p,this.inner=!0,this.sharedMemory=e}var h="input is invalid type",s="object"==typeof window?window:{},r=!s.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;r&&(s=global);var e=!s.JS_SHA256_NO_COMMON_JS&&"object"==typeof module&&module.exports,n="function"==typeof define&&define.amd,a="undefined"!=typeof ArrayBuffer,o="0123456789abcdef".split(""),f=[-2147483648,8388608,32768,128],u=[24,16,8,0],c=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],y=["hex","array","digest","arrayBuffer"],p=[];(s.JS_SHA256_NO_NODE_JS||!Array.isArray)&&(Array.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)});var l=function(i,h){return function(s){return new t(h,!0).update(s)[i]()}},d=function(i){var h=l("hex",i);r&&(h=v(h,i)),h.create=function(){return new t(i)},h.update=function(t){return h.create().update(t)};for(var s=0;so;){if(this.hashed&&(this.hashed=!1,f[0]=this.block,f[16]=f[1]=f[2]=f[3]=f[4]=f[5]=f[6]=f[7]=f[8]=f[9]=f[10]=f[11]=f[12]=f[13]=f[14]=f[15]=0),i)for(n=this.start;r>o&&64>n;++o)f[n>>2]|=t[o]<o&&64>n;++o)128>(e=t.charCodeAt(o))?f[n>>2]|=e<e?(f[n>>2]|=(192|e>>6)<>2]|=(128|63&e)<e||e>=57344?(f[n>>2]|=(224|e>>12)<>2]|=(128|e>>6&63)<>2]|=(128|63&e)<>2]|=(240|e>>18)<>2]|=(128|e>>12&63)<>2]|=(128|e>>6&63)<>2]|=(128|63&e)<=64?(this.block=f[16],this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this}},t.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,i=this.lastByteIndex;t[16]=this.block,t[i>>2]|=f[3&i],this.block=t[16],i>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[15]=this.bytes<<3,this.hash()}},t.prototype.hash=function(){var t,i,h,s,r,e,n,a,o,f,u,y=this.h0,p=this.h1,l=this.h2,d=this.h3,v=this.h4,A=this.h5,w=this.h6,b=this.h7,g=this.blocks;for(t=16;64>t;++t)r=g[t-15],i=(r>>>7|r<<25)^(r>>>18|r<<14)^r>>>3,r=g[t-2],h=(r>>>17|r<<15)^(r>>>19|r<<13)^r>>>10,g[t]=g[t-16]+i+g[t-7]+h<<0;for(u=p&l,t=0;64>t;t+=4)this.first?(this.is224?(a=300032,r=g[0]-1413257819,b=r-150054599<<0,d=r+24177077<<0):(a=704751109,r=g[0]-210244248,b=r-1521486534<<0,d=r+143694565<<0),this.first=!1):(i=(y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10),h=(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7),a=y&p,s=a^y&l^u,n=v&A^~v&w,r=b+h+n+c[t]+g[t],e=i+s,b=d+r<<0,d=r+e<<0),i=(d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),h=(b>>>6|b<<26)^(b>>>11|b<<21)^(b>>>25|b<<7),o=d&y,s=o^d&p^a,n=b&v^~b&A,r=w+h+n+c[t+1]+g[t+1],e=i+s,w=l+r<<0,l=r+e<<0,i=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),h=(w>>>6|w<<26)^(w>>>11|w<<21)^(w>>>25|w<<7),f=l&d,s=f^l&y^o,n=w&b^~w&v,r=A+h+n+c[t+2]+g[t+2],e=i+s,A=p+r<<0,p=r+e<<0,i=(p>>>2|p<<30)^(p>>>13|p<<19)^(p>>>22|p<<10),h=(A>>>6|A<<26)^(A>>>11|A<<21)^(A>>>25|A<<7),u=p&l,s=u^p&d^f,n=A&w^~A&b,r=v+h+n+c[t+3]+g[t+3],e=i+s,v=y+r<<0,y=r+e<<0;this.h0=this.h0+y<<0,this.h1=this.h1+p<<0,this.h2=this.h2+l<<0,this.h3=this.h3+d<<0,this.h4=this.h4+v<<0,this.h5=this.h5+A<<0,this.h6=this.h6+w<<0,this.h7=this.h7+b<<0},t.prototype.hex=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,s=this.h3,r=this.h4,e=this.h5,n=this.h6,a=this.h7,f=o[t>>28&15]+o[t>>24&15]+o[t>>20&15]+o[t>>16&15]+o[t>>12&15]+o[t>>8&15]+o[t>>4&15]+o[15&t]+o[i>>28&15]+o[i>>24&15]+o[i>>20&15]+o[i>>16&15]+o[i>>12&15]+o[i>>8&15]+o[i>>4&15]+o[15&i]+o[h>>28&15]+o[h>>24&15]+o[h>>20&15]+o[h>>16&15]+o[h>>12&15]+o[h>>8&15]+o[h>>4&15]+o[15&h]+o[s>>28&15]+o[s>>24&15]+o[s>>20&15]+o[s>>16&15]+o[s>>12&15]+o[s>>8&15]+o[s>>4&15]+o[15&s]+o[r>>28&15]+o[r>>24&15]+o[r>>20&15]+o[r>>16&15]+o[r>>12&15]+o[r>>8&15]+o[r>>4&15]+o[15&r]+o[e>>28&15]+o[e>>24&15]+o[e>>20&15]+o[e>>16&15]+o[e>>12&15]+o[e>>8&15]+o[e>>4&15]+o[15&e]+o[n>>28&15]+o[n>>24&15]+o[n>>20&15]+o[n>>16&15]+o[n>>12&15]+o[n>>8&15]+o[n>>4&15]+o[15&n];return this.is224||(f+=o[a>>28&15]+o[a>>24&15]+o[a>>20&15]+o[a>>16&15]+o[a>>12&15]+o[a>>8&15]+o[a>>4&15]+o[15&a]),f},t.prototype.toString=t.prototype.hex,t.prototype.digest=function(){this.finalize();var t=this.h0,i=this.h1,h=this.h2,s=this.h3,r=this.h4,e=this.h5,n=this.h6,a=this.h7,o=[t>>24&255,t>>16&255,t>>8&255,255&t,i>>24&255,i>>16&255,i>>8&255,255&i,h>>24&255,h>>16&255,h>>8&255,255&h,s>>24&255,s>>16&255,s>>8&255,255&s,r>>24&255,r>>16&255,r>>8&255,255&r,e>>24&255,e>>16&255,e>>8&255,255&e,n>>24&255,n>>16&255,n>>8&255,255&n];return this.is224||o.push(a>>24&255,a>>16&255,a>>8&255,255&a),o},t.prototype.array=t.prototype.digest,t.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(this.is224?28:32),i=new DataView(t);return i.setUint32(0,this.h0),i.setUint32(4,this.h1),i.setUint32(8,this.h2),i.setUint32(12,this.h3),i.setUint32(16,this.h4),i.setUint32(20,this.h5),i.setUint32(24,this.h6),this.is224||i.setUint32(28,this.h7),t},(i.prototype=new t).finalize=function(){if(t.prototype.finalize.call(this),this.inner){this.inner=!1;var i=this.array();t.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(i),t.prototype.finalize.call(this)}};var b=d();b.sha256=b,b.sha224=d(!0),b.sha256.hmac=w(),b.sha224.hmac=w(!0),e?module.exports=b:(s.sha256=b.sha256,s.sha224=b.sha224,n&&define(function(){return b}))}();class IDestructible extends IEventHandler{destroy(){this._emit("destroy",this)}constructor(){super()}}class AutoList extends IEventHandler{constructor(){super(),this.list=[]}add(value){value instanceof IDestructible&&value.on("destroy",this._item_destroyed),this.list.push(value),this._emit("add",value)}set(index,value){index>=this.list.length||index<0||(value instanceof IDestructible&&value.on("destroy",this._item_destroyed),this.list[index]instanceof IDestructible&&this.list[index].off("destroy",this._item_destroyed),this.list[index]=value)}remove(value){this.removeAt(this.list.indexOf(value))}contains(value){return this.list.indexOf(value)>-1}removeAt(index){if(!(index>=this.list.length||index<0)){var item=this.list[index];item instanceof IDestructible&&item.off("destroy",this._item_destroyed),this.list.splice(index,1),this._emit("remove",item)}}_item_destroyed(sender){this.remove(sender)}}var ResourceTrigger={Loaded:0,Initialize:1,Terminate:2,Configure:3,SystemInitialized:4,SystemTerminated:5,SystemReload:6};class IResource extends IDestructible{trigger(trigger){}constructor(){super()}static getTemplate(){return{namespace:"Esiur",properties:[],functions:[],events:[]}}}class IStore extends IResource{get(path){}retrieve(iid){}put(resource){}constructor(){super()}}class Structure{getKeys(){var rt=[];for(var i in this)this[i]instanceof Function||rt.push(i);return rt}}class StructureArray extends Array{push(value){value instanceof Structure&&super.push(value)}}class ResourceArray extends Array{push(value){value instanceof IResource&&super.push(value)}}var MemberType={Function:0,Property:1,Event:2};class MemberTemplate{compose(){return DC.stringToBytes(this.name)}}class AsyncReply{then(callback){this.callbacks.push(callback),this.ready&&callback(this.result,this)}trigger(result){this.result=result,this.ready=!0;for(var i=0;i0;){var len=data[offset++];keylist.push(data.getString(offset,len)),offset+=len,typelist.push(data[offset]);rt={};bag.add(Codec.parse(data,offset,rt,connection)),contentLength-=rt.size+len+1,offset+=rt.size}else if(null==types){for(i=0;i0;){typelist.push(data[offset]);rt={};bag.add(Codec.parse(data,offset,rt,connection)),contentLength-=rt.size+1,offset+=rt.size+1}}else{for(i=0;i0;){var rt={};bag.add(Codec.parse(data,offset,rt,connection,types[i])),contentLength-=rt.size,offset+=rt.size,i++}}return bag.seal(),bag.then(function(res){for(var s=new Structure,i=0;i0;){var cs={};if(rt.add(Codec.parse(data,offset,cs,connection)),!(cs.size>0))throw new Exception("Error while parsing structured data");offset+=cs.size,contentLength-=cs.size}return rt.seal(),rt}static compose(value,connection,prependType=!0){var type=Codec.getDataType(value,connection),rt=new BinaryList;switch(type){case DataType.Void:break;case DataType.String:var st=DC.stringToBytes(value);rt.addUint32(st.length).addUint8Array(st);break;case DataType.Resource:case DataType.DistributedResource:rt.addUint32(value.instance.id);break;case DataType.Structure:rt.addUint8Array(Codec.composeStructure(value,connection,!0,!0,!0));break;case DataType.VarArray:rt.addUint8Array(Codec.composeVarArray(value,connection,!0));break;case DataType.ResourceArray:rt.addUint8Array(Codec.composeResourceArray(value,connection,!0));break;case DataType.StructureArray:rt.addUint8Array(Codec.composeStructureArray(value,connection,!0));break;default:rt.add({type:type,value:value}),DataType.isArray(type)&&rt.addUint32(rt.length,0)}return prependType&&rt.addUint8(type,0),rt.toArray()}static composeVarArray(array,connection,prependLength=!1){for(var rt=new BinaryList,i=0;i0?value>255?value>65535?value>4294967295?DataType.UInt64:DataType.UInt32:DataType.UInt16:DataType.UInt8:value<-128?value<-32768?value<-2147483648?DataType.Int64:DataType.Int32:DataType.Int16:DataType.Int8:DataType.Float64;case"string":return DataType.String;case"boolean":return DataType.Bool;case"object":return value instanceof Array?DataType.VarArray:value instanceof IResource?Codec.isLocalResource(value,connection)?DataType.Resource:DataType.DistributedResource:value instanceof Date?DataType.DateTime:value instanceof Uint8Array||value instanceof ArrayBuffer?DataType.UInt8Array:value instanceof Number?DataType.Float64:value instanceof Structure?DataType.Structure:DataType.Void;default:return DataType.Void}}}var UNIX_EPOCH=621355968e9,TWO_PWR_32=4294967296;class DC extends Uint8Array{constructor(bufferOrSize){super(bufferOrSize),this.dv=new DataView(this.buffer)}static boolToBytes(value){var rt=new DC(1);return rt.setBoolean(0,value),rt}static int8ToBytes(value){var rt=new DC(1);return rt.setInt8(0,value),rt}static hexToBytes(value){for(var rt=new DC(value.length/2),i=0;i0}setBoolean(offset,value){this.setUint8(offset,value?1:0)}getBooleanArray(offset,length){for(var rt=[],i=0;i=0?l:TWO_PWR_32+l)}getUint64(offset){var h=this.getUint32(offset),l=this.getUint32(offset+4);return h*TWO_PWR_32+(l>=0?l:TWO_PWR_32+l)}setInt64(offset,value){var l=value%TWO_PWR_32|0,h=value/TWO_PWR_32|0;this.setInt32(offset,h),this.setInt32(offset+4,l)}setUint64(offset,value){var l=value%TWO_PWR_32|0,h=value/TWO_PWR_32|0;this.setInt32(offset,h),this.setInt32(offset+4,l)}setDateTime(offset,value){var ticks=621355968e9+1e4*value.getTime();this.setUint64(offset,ticks)}getDateTime(offset){var ticks=this.getUint64(offset);return new Date(Math.round((ticks-DCStatic.UNIX_EPOCH)/1e4))}getDateTimeArray(offset){for(var rt=[],i=0;i0&&!this.networkBuffer.protected;)self.receive(this.networkBuffer)}}receive(data){for(var msg=data.read(),offset=0,ends=msg.length,packet=this.packet,authPacket=this.authPacket;offsetage){var pv=r[pt.name];sl.addUint8(146).addUint32(callback).addUint8Array(Codec.compose(pv,sl.connection)).done()}else sl.addUint8(146).addUint32(callback).addUint8(DataType.NotModified).done()}})}IIPRequestSetProperty(callback,resourceId,index,content){var sl=this.sendParams();Warehouse.get(resourceId).then(function(r){if(null!=r){var pt=r.instance.template.getPropertyTemplateByIndex(index);null!=pt&&Codec.parse(content,0,this).then(function(value){r instanceof DistributedResource?r._set(index,value).then(function(x){sl.addUint8(147).addUint32(callback).done()}):(r[pt.name]=value,sl.addUint8(147).addUint32(callback).done())})}})}getTemplate(classId){if(this.templates[classId])return new AsyncReply(this.templates[classId]);if(this.templateRequests[classId])return this.templateRequests[classId];var reply=new AsyncReply;this.templateRequests[classId]=reply;var self=this;return this.sendRequest(IIPPacketAction.TemplateFromClassId,BL().addUint8Array(classId.value)).then(function(rt){delete self.templateRequests[classId],self.templates[rt[0].classId]=rt[0],reply.trigger(rt[0])}),reply}get(path){if(this.pathRequests[path])return this.pathRequests[path];var reply=new AsyncReply;this.pathRequests[path]=reply;var bl=new BinaryList;bl.addString(path),bl.addUint16(bl.length,0);var self=this;return this.sendRequest(IIPPacketAction.ResourceIdFromResourceLink,bl).then(function(rt){delete self.pathRequests[path],self.fetch(rt[1]).then(function(r){reply.trigger(r)})}),reply}retrieve(iid){for(var r in this.resources)if(this.resources[r].instance.id==iid)return new AsyncReply(r);return new AsyncReply(null)}fetch(id){if(this.resourceRequests[id]&&this.resources[id])return this.resourceRequests[id];if(this.resourceRequests[id])return this.resourceRequests[id];if(this.resources[id])return new AsyncReply(this.resources[id]);var reply=new AsyncReply,self=this;return this.sendRequest(IIPPacketAction.AttachResource,BL().addUint32(id)).then(function(rt){self.getTemplate(rt[0]).then(function(tmp){var dr=new DistributedResource(self,tmp,id,rt[1],rt[2]);Warehouse.put(dr,id.toString(),self),Codec.parseVarArray(rt[3],0,rt[3].length,self).then(function(ar){dr._attached(ar),delete self.resourceRequests[id],reply.trigger(dr)})})}),reply}instance_resourceDestroyed(resource){this.sendParams().addUint8(1).addUint32(resource.instance.id).done()}instance_propertyModified(resource,name,newValue,oldValue){var pt=resource.instance.template.getPropertyTemplateByName(name);null!=pt&&(newValue instanceof Function?sendParams().addUint8(16).addUint32(resource.instance.id).addUint8(pt.index).addUint8Array(Codec.compose(newValue(this),this)).done():sendParams().addUint8(16).addUint32(resource.instance.id).addUint8(pt.index).addUint8Array(Codec.compose(newValue,this)).done())}instance_eventOccured(resource,name,receivers,args){var et=resource.instance.template.getEventTemplateByName(name);if(null!=et&&!(null!=receivers&&receivers.indexOf(this.remoteUsername)<0)){for(var clientArgs=[],i=0;i=this._p.template.functions.length)throw new Exception("Function index is incorrect");var reply=new AsyncReply,parameters=Codec.composeVarArray(args,this._p.connection,!0),self=this;return this._p.connection.sendRequest(IIPPacketAction.InvokeFunction,BL().addUint32(self._p.instanceId).addUint8(index).addUint8Array(parameters)).then(function(res){Codec.parse(res[0],0,self._p.connection).then(function(rt){reply.trigger(rt)})}),reply}_get(index){return index>=this._p.properties.length?null:this._p.properties[index]}_updatePropertyByIndex(index,value){var pt=this._p.template.getPropertyTemplateByIndex(index);this._p.properties[index]=value,this.instance.modified(pt.name,value)}_set(index,value){if(index>=this._p.properties.length)return null;var reply=new AsyncReply,parameters=Codec.compose(value,this._p.connection),self=this;return this._p.connection.sendRequest(IIPPacketAction.SetProperty,BL().addUint32(self._p.instanceId).addUint8(index).addUint8Array(parameters)).then(function(res){reply.trigger(null)}),reply}}var DistributedResourceQueueItemType={Propery:0,Event:1};class DistributedResourceQueueItem{constructor(resource,type,value,index){this.resource=resource,this.index=index,this.type=type,this.value=value}}class EventTemplate extends MemberTemplate{constructor(){super(),this.type=MemberType.Event}compose(){var rt=new BinaryList,name=super.compose();if(null!=this.expansion){var exp=DC.stringToBytes(this.expansion);return rt.addUint8(80).addUint32(exp.length).addUint8Array(exp).addUint8(name.length).addUint8Array(name).toArray()}return rt.addUint8(64).addUint32(name.length).addUint8Array(name).toArray()}}class FunctionTemplate extends MemberTemplate{compose(){var name=super.compose(),rt=new BinaryList;if(null!=this.expansion){var exp=DC.stringToBytes(this.expansion);return rt.addUint8(16|(IsVoid?8:0)).addUint32(exp.length).addUint8Array(exp).addUint8(name.length).addUint8Array(name).toArray()}return rt.addUint8(IsVoid?8:0).addUint8(name.length).addUint8Array(name).toArray()}constructor(){super(),this.type=MemberType.Function}}class Guid{constructor(dc){this.value=dc}valueOf(){return this.value.getHex(0,16)}}var IIPAuthPacketCommand={Action:0,Declare:1,Acknowledge:2,Error:3},IIPAuthPacketAction={AuthenticateHash:0,NewConnection:32,ResumeConnection:33,ConnectionEstablished:40},IIPAuthPacketMethod={None:0,Certificate:1,Credentials:2,Token:3};class IIPAuthPacket{constructor(){this.command=0,this.action=0,this.errorCode=0,this.errorMessage="",this.localMethod=0,this.sourceInfo="",this.hash="",this.sessionId="",this.remoteMethod=0,this.domain="",this.CertificateId=0,this.localUsername="",this.remoteUsername="",this.localPassword="",this.remotePassword="",this.localToken=[],this.reemoteToken=[],this.asymetricEncryptionKey=[],this.localNonce=[],this.remoteNonce=[],this.dataLengthNeeded=0}notEnough(offset,ends,needed){return offset+needed>ends&&(this.dataLengthNeeded=needed-(ends-offset),!0)}parse(data,offset,ends){var oOffset=offset;if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;if(this.command=data.getUint8(offset)>>6,this.command==IIPAuthPacketCommand.Action){if(this.action=63&data[offset++],this.action==IIPAuthPacketAction.AuthenticateHash){if(this.notEnough(offset,ends,32))return-this.dataLengthNeeded;this.hash=data.getUint8Array(offset,32),offset+=32}else if(this.action==IIPAuthPacketAction.NewConnection){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;length=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,length))return-this.dataLengthNeeded;this.sourceInfo=data.clip(offset,length),offset+=32}else if(this.action==IIPAuthPacketAction.ResumeConnection||this.action==IIPAuthPacketAction.ConnectionEstablished){if(this.notEnough(offset,ends,32))return-this.dataLengthNeeded;this.sessionId=data.clip(offset,32),offset+=32}}else if(this.command==IIPAuthPacketCommand.Declare){this.remoteMethod=data.getUint8(offset)>>4&3,this.localMethod=data.getUint8(offset)>>2&3;encrypt=2==(2&data.getUint8(offset++));if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;var domainLength=data.getUint8(offset++);if(this.notEnough(offset,ends,domainLength))return-this.dataLengthNeeded;if(this.domain=data.getString(offset,domainLength),offset+=domainLength,this.remoteMethod==IIPAuthPacketMethod.Credentials&&this.localMethod==IIPAuthPacketMethod.None){if(this.notEnough(offset,ends,33))return-this.dataLengthNeeded;this.remoteNonce=data.clip(offset,32),offset+=32;var length=data.getUint8(offset++);if(this.notEnough(offset,ends,length))return-this.dataLengthNeeded;this.remoteUsername=data.getString(offset,length),offset+=length}if(encrypt){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;keyLength=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,keyLength))return-this.dataLengthNeeded;this.asymetricEncryptionKey=data.clip(offset,keyLength),offset+=keyLength}}else if(this.command==IIPAuthPacketCommand.Acknowledge){this.remoteMethod=data.getUint8(offset)>>4&3,this.localMethod=data.getUint8(offset)>>2&3;var encrypt=2==(2&data.getUint8(offset++));if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;if(this.remoteMethod==IIPAuthPacketMethod.Credentials&&this.localMethod==IIPAuthPacketMethod.None){if(this.notEnough(offset,ends,32))return-this.dataLengthNeeded;this.remoteNonce=data.clip(offset,32),offset+=32}if(encrypt){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;var keyLength=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,keyLength))return-this.dataLengthNeeded;this.asymetricEncryptionKey=data.clip(offset,keyLength),offset+=keyLength}}else if(this.command==IIPAuthPacketCommand.Error){if(this.notEnough(offset,ends,5))return-this.dataLengthNeeded;offset++,this.errorCode=data.getUint8(offset++);var cl=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.errorMessage=data.getString(offset,cl),offset+=cl}return offset-oOffset}}var IIPPacketCommand={Event:0,Request:1,Reply:2,Error:3},IIPPacketEvent={ResourceReassigned:0,ResourceDestroyed:1,PropertyUpdated:16,EventOccured:17},IIPPacketAction={AttachResource:0,ReattachResource:1,DetachResource:2,CreateResource:3,DeleteResource:4,TemplateFromClassName:8,TemplateFromClassId:9,TemplateFromResourceLink:10,TemplateFromResourceId:11,ResourceIdFromResourceLink:12,InvokeFunction:16,GetProperty:17,GetPropertyIfModified:18,SetProperty:19};class IIPPacket{constructor(){this.command=0,this.action=0,this.event=0,this.resourceId=0,this.newResourceId=0,this.resourceAge=0,this.content=[],this.errorCode=0,this.errorMessage="",this.className="",this.resourceLink="",this.classId="",this.methodIndex="",this.methodName="",this.callbackId=0,this.dataLengthNeeded=0}notEnough(offset,ends,needed){return offset+needed>ends&&(this.dataLengthNeeded=needed-(ends-offset),!0)}parse(data,offset,ends){var oOffset=offset;if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;if(this.command=data.getUint8(offset)>>6,this.command==IIPPacketCommand.Event){if(this.event=63&data.getUint8(offset++),this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4}else{if(this.action=63&data.getUint8(offset++),this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.callbackId=data.getUint32(offset),offset+=4}if(this.command==IIPPacketCommand.Event){if(this.event==IIPPacketEvent.ResourceReassigned){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.newResourceId=data.getUint32(offset),offset+=4}else if(this.event==IIPPacketEvent.ResourceDestroyed);else if(this.event==IIPPacketEvent.PropertyUpdated){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;this.methodIndex=data[offset++];dt=data.getUint8(offset++);if((size=DataType.sizeOf(dt))<0){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset-5,cl+5),offset+=cl}else{if(this.notEnough(offset,ends,size))return-this.dataLengthNeeded;this.content=data.clip(offset-1,size+1),offset+=size}}else if(this.event==IIPPacketEvent.EventOccured){if(this.notEnough(offset,ends,5))return-this.dataLengthNeeded;this.methodIndex=data.getUint8(offset++);cl=data.getUint32(offset);offset+=4,this.content=data.clip(offset,cl),offset+=cl}}else if(this.command==IIPPacketCommand.Request){if(this.action==IIPPacketAction.AttachResource){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.ReattachResource){if(this.notEnough(offset,ends,8))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4,this.resourceAge=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.DetachResource){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.CreateResource){if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;cl=data.getUint8(offset++);if(this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.className=data.getString(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.DeleteResource){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.TemplateFromClassName){if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;cl=data.getUint8(offset++);if(this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.className=data.getString(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.TemplateFromClassId){if(this.notEnough(offset,ends,16))return-this.dataLengthNeeded;this.classId=data.getGuid(offset),offset+=16}else if(this.action==IIPPacketAction.TemplateFromResourceLink){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;cl=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.resourceLink=data.getString(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.TemplateFromResourceId){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.ResourceIdFromResourceLink){if(this.notEnough(offset,ends,2))return-this.dataLengthNeeded;cl=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.resourceLink=data.getString(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.InvokeFunction){if(this.notEnough(offset,ends,9))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4,this.methodIndex=data.getUint8(offset++);cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.GetProperty){if(this.notEnough(offset,ends,5))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4,this.methodIndex=data.getUint8(offset++)}else if(this.action==IIPPacketAction.GetPropertyIfModified){if(this.notEnough(offset,ends,9))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4,this.methodIndex=data[offset++],this.resourceAge=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.SetProperty){if(this.notEnough(offset,ends,6))return-this.dataLengthNeeded;this.resourceId=data.getUint32(offset),offset+=4,this.methodIndex=data[offset++];dt=data.getUint8(offset++);if((size=DataType.sizeOf(dt))<0){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset-5,cl+5),offset+=cl}else{if(this.notEnough(offset,ends,size))return-this.dataLengthNeeded;this.content=data.clip(offset-1,size+1),offset+=size}}}else if(this.command==IIPPacketCommand.Reply)if(this.action==IIPPacketAction.AttachResource||this.action==IIPPacketAction.ReattachResource){if(this.notEnough(offset,ends,26))return-this.dataLengthNeeded;this.classId=data.getGuid(offset),offset+=16,this.resourceAge=data.getUint32(offset),offset+=4;cl=data.getUint16(offset);if(offset+=2,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;if(this.resourceLink=data.getString(offset,cl),offset+=cl,this.notEnough(offset,ends,4))return-this.dataLengthNeeded;if(cl=data.getUint32(offset),offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.DetachResource);else if(this.action==IIPPacketAction.CreateResource){if(this.notEnough(offset,ends,20))return-this.dataLengthNeeded;this.classId=data.GetGuid(offset),offset+=16,this.resourceId=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.DetachResource);else if(this.action==IIPPacketAction.TemplateFromClassName||this.action==IIPPacketAction.TemplateFromClassId||this.action==IIPPacketAction.TemplateFromResourceLink||this.action==IIPPacketAction.TemplateFromResourceId){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset,cl),offset+=cl}else if(this.action==IIPPacketAction.ResourceIdFromResourceLink){if(this.notEnough(offset,ends,24))return-this.dataLengthNeeded;this.classId=data.getGuid(offset),offset+=16,this.resourceId=data.getUint32(offset),offset+=4,this.resourceAge=data.getUint32(offset),offset+=4}else if(this.action==IIPPacketAction.InvokeFunction||this.action==IIPPacketAction.GetProperty||this.action==IIPPacketAction.GetPropertyIfModified){if(this.notEnough(offset,ends,1))return-this.dataLengthNeeded;var dt=data.getUint8(offset++),size=DataType.sizeOf(dt);if(size<0){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.content=data.clip(offset-5,cl+5),offset+=cl}else{if(this.notEnough(offset,ends,size))return-this.dataLengthNeeded;this.content=data.clip(offset-1,size+1),offset+=size}}else this.action,IIPPacketAction.SetProperty;else if(this.command==IIPPacketCommand.Error){if(this.notEnough(offset,ends,4))return-this.dataLengthNeeded;if(this.callbackId=data.getUint32(offset),this.notEnough(offset,ends,1))return-this.dataLengthNeeded;if(this.errorCode=data.getUint8(offset++),this.notEnough(offset,ends,4))return-this.dataLengthNeeded;var cl=data.getUint32(offset);if(offset+=4,this.notEnough(offset,ends,cl))return-this.dataLengthNeeded;this.errorMessage=data.getString(offset,cl),offset+=cl}return offset-oOffset}}class Instance extends IEventHandler{getAge(index){return indexthis.data.length}get available(){return this.data.length}holdAllForNextWrite(src){this.holdFor(src,src.length+1)}holdForNextWrite(src,offset,size){this.holdFor(src,offset,size,size+1)}holdFor(src,offset,size,needed){if(size>=needed)throw new Exception("Size >= Needed !");this.data=DC.combine(src,offset,size,this.data,0,this.data.length),this.neededDataLength=needed}holdAllFor(src,needed){this.holdFor(src,0,src.length,needed)}protect(data,offset,needed){var dataLength=data.length-offset;return dataLength=this.neededDataLength?(rt=this.data,this.data=new DC(0),this.neededDataLength=0,rt):null:(rt=this.data,this.data=new DC(0),rt)}}class NotModified{}var PropertyPermission={Read:1,Write:2,ReadWrite:3};class PropertyTemplate extends MemberTemplate{constructor(){super(),this.type=MemberType.Property}compose(){var name=super.compose(),rt=new BinaryList;if(null!=this.writeExpansion&&null!=this.readExpansion){var rexp=DC.stringToBytes(this.readExpansion),wexp=DC.stringToBytes(this.writeExpansion);return rt.addUint8(56|this.permission).addUint32(wexp.length).addUint8Array(wexp).addUint32(rexp.length).addUint8Array(rexp).addUint8(name.length).addUint8Array(name).toArray()}if(null!=this.writeExpansion){wexp=DC.stringToBytes(this.writeExpansion);return rt.addUint8(48|this.permission).addUint32(wexp.length).addUint8Array(wexp).addUint8(name.length).addUint8Array(name).toArray()}if(null!=this.readExpansion){rexp=DC.stringToBytes(this.readExpansion);return rt.addUint8(40|this.permission).addUint32(rexp.length).addUint8Array(rexp).addUint8(name.length).addUint8Array(name).toArray()}return rt.addUint8(32|this.permission).addUint32(name.length).addUint8Array(name).toArray()}}class ResourceTemplate{getMemberTemplate(member){return member instanceof MethodInfo?this.getFunctionTemplate(member.name):member instanceof EventInfo?this.getEventTemplate(member.name):member instanceof PropertyInfo?this.getPropertyTemplate(member.name):null}getEventTemplateByName(eventName){for(var i=0;i>5;if(0==type){var ft=new FunctionTemplate;ft.index=functionIndex++;expansion=16==(16&data.getUint8(offset));if(ft.isVoid=8==(8&data.getUint8(offset++)),ft.name=data.getString(offset+1,data.getUint8(offset)),offset+=data.getUint8(offset)+1,expansion){cs=data.getUint32(offset);offset+=4,ft.expansion=data.getString(offset,cs),offset+=cs}od.functions.push(ft)}else if(1==type){var pt=new PropertyTemplate;pt.index=propertyIndex++;var readExpansion=8==(8&data.getUint8(offset)),writeExpansion=16==(16&data.getUint8(offset));if(pt.permission=data.getUint8(offset++)>>1&3,pt.name=data.getString(offset+1,data.getUint8(offset)),offset+=data.getUint8(offset)+1,readExpansion){cs=data.getUint32(offset);offset+=4,pt.readExpansion=data.getString(offset,cs),offset+=cs}if(writeExpansion){cs=data.getUint32(offset);offset+=4,pt.writeExpansion=data.getString(offset,cs),offset+=cs}od.properties.push(pt)}else if(2==type){var et=new EventTemplate;et.index=eventIndex++;var expansion=16==(16&data.getUint8(offset++));if(et.name=data.getString(offset+1,data.getUint8(offset)),offset+=data.getUint8(offset)+1,expansion){var cs=data.getUint32(offset);offset+=4,et.expansion=data.getString(offset,cs),offset+=cs}od.events.push(et)}}for(i=0;i