{"version":3,"sources":["runtime.ts"],"sourcesContent":["\n/**\n╔══════════════════════════════════════════════════════════════════════════════════════╗\n║  DATEX Runtime                                                                       ║\n╠══════════════════════════════════════════════════════════════════════════════════════╣\n║  Complete DATEX runtime for the web and node.js                                      ║\n║  * Parses & executes DATEX requests, handles pointers, garbage collection and more   ║\n║  * Supports the DATEX binary format (dxb) and DATEX script code                      ║\n║  Visit https://docs.unyt.org/datex for more information                              ║\n╠═════════════════════════════════════════╦════════════════════════════════════════════╣\n║  © 2022 unyt.org                        ║                                            ║\n╚═════════════════════════════════════════╩════════════════════════════════════════════╝\n*/\n\n//logger.info(\"initializing ...\");\n\n// displayInit();\n\n\nglobalThis.performance?.mark(\"runtime_start\");\n\n// for debugging: converting bigints to JSON\n// @ts-ignore\nBigInt.prototype.toJSON = function(){return globalThis.String(this)+\"n\"}\n// @ts-ignore\nSymbol.prototype.toJSON = function(){return globalThis.String(this)}\n\n/***** imports */\nimport { Compiler, compiler_options, PrecompiledDXB, ProtocolDataTypesMap, DatexResponse} from \"../compiler/compiler.ts\"; // Compiler functions\nimport { Pointer, PointerProperty, RefOrValue, ReactiveValue, ObjectWithDatexValues, JSValueWith$, MinimalJSRef, ObjectRef, RefLike, UpdateScheduler} from \"./pointers.ts\";\nimport { BROADCAST, Endpoint, endpoints, IdEndpoint, LOCAL_ENDPOINT, Target, target_clause, WildcardTarget } from \"../types/addressing.ts\";\nimport { RuntimePerformance } from \"./performance_measure.ts\";\nimport { NetworkError, PermissionError, PointerError, RuntimeError, SecurityError, ValueError, Error as DatexError, CompilerError, TypeError, SyntaxError, AssertionError } from \"../types/errors.ts\";\nimport { Function as DatexFunction } from \"../types/function.ts\";\nimport { MatchCondition, Storage } from \"../storage/storage.ts\";\nimport { Observers } from \"../utils/observers.ts\";\nimport { BinaryCode } from \"../compiler/binary_codes.ts\";\nimport type { ExecConditions, trace, compile_info, datex_meta, datex_scope, dxb_header, routing_info } from \"../utils/global_types.ts\";\nimport { Markdown } from \"../types/markdown.ts\";\nimport { Type } from \"../types/type.ts\";\nimport { Tuple } from \"../types/tuple.ts\";\nimport { DatexObject } from \"../types/object.ts\";\nimport { Crypto } from \"../runtime/crypto.ts\";\nimport { ProtocolDataType } from \"../compiler/protocol_types.ts\";\nimport { arrayBufferToBase64, base64ToArrayBuffer, buffer2hex, getFileContent } from \"../utils/utils.ts\";\nimport { IOHandler } from \"./io_handler.ts\";\nimport { DX_PERMISSIONS, DX_SLOTS, DX_RETURN_POINTER_VALUE, DX_TYPE, DX_SERIALIZED, DX_VALUE, INVALID, MAX_UINT_16, NOT_EXISTING, UNKNOWN_TYPE, VOID, WILDCARD, SLOT_WRITE, SLOT_READ, SLOT_GET, SLOT_SET } from \"./constants.ts\";\nimport { baseURL, DEFAULT_HIDDEN_OBJECT_PROPERTIES, logger, TypedArray } from \"../utils/global_values.ts\";\nimport { client_type } from \"../utils/constants.ts\";\nimport { MessageLogger } from \"../utils/message_logger.ts\";\nimport { JSInterface } from \"./js_interface.ts\";\nimport { Stream } from \"../types/stream.ts\";\nimport { Quantity } from \"../types/quantity.ts\";\nimport { Scope } from \"../types/scope.ts\";\nimport type { fundamental } from \"../types/abstract_types.ts\";\nimport { IterationFunction as IteratorFunction, Iterator, RangeIterator } from \"../types/iterator.ts\";\nimport { Assertion } from \"../types/assertion.ts\";\nimport { Deferred } from \"../types/deferred.ts\";\nimport { Task } from \"../types/task.ts\";\nimport { DATEX_ERROR } from \"../types/error_codes.ts\";\nimport { Conjunction, Disjunction, Logical, Negation } from \"../types/logic.ts\";\nimport { Logger } from \"../utils/logger.ts\";\nimport { Debugger } from \"./debugger.ts\";\nimport {decompile as wasm_decompile} from \"../wasm/adapter/pkg/datex_wasm.js\";\nimport { CommunicationInterfaceSocket } from \"../network/communication-interface.ts\";\n\nimport \"../types/native_types.ts\"; // load prototype overrides\nimport { Time } from \"../types/time.ts\";\nimport { initPublicStaticClasses } from \"../js_adapter/js_class_adapter.ts\";\nimport { JSTransferableFunction } from \"../types/js-function.ts\";\nimport { createFunctionWithDependencyInjections } from \"../types/function-utils.ts\";\nimport type { Blockchain } from \"../network/blockchain_adapter.ts\";\nimport { AutoMap } from \"../utils/auto_map.ts\";\nimport { Supranet } from \"../network/supranet.ts\";\nimport { sendDatexViaHTTPChannel } from \"../network/datex-http-channel.ts\";\nimport { deleteCookie, getCookie, setCookie } from \"../utils/cookies.ts\";\nimport { addPersistentListener, removePersistentListener } from \"../utils/persistent-listeners.ts\";\nimport { endpoint_config } from \"./endpoint_config.ts\";\nimport type { DatexInData, DatexOutData } from \"../network/communication-hub.ts\";\nimport { communicationHub } from \"../network/communication-hub.ts\";\nimport { sub } from \"../functions.ts\";\n\nconst mime = client_type === \"deno\" ? (await import(\"https://deno.land/x/mimetypes@v1.0.0/mod.ts\")).mime : null;\n\n// from datex_short.ts --------------------------------------------\nfunction $$<T>(value:RefOrValue<T>): MinimalJSRef<T> {\n    return <any> Pointer.createOrGet(value).js_value;\n}\nfunction static_pointer<T>(value:RefOrValue<T>, endpoint:IdEndpoint, unique_id:number, label?:string|number) {\n    const static_id = Pointer.getStaticPointerId(endpoint, unique_id);\n    const pointer = Pointer.create(static_id, value)\n    if (label) pointer.addLabel(typeof label == \"string\" ? label.replace(/^\\$/, '') : label);\n    return ReactiveValue.collapseValue(pointer);\n}\n\n// --------------------------------------------------------------\n\n\n// @ts-ignore\nexport const ReadableStream = globalThis.ReadableStream;\n\n/*********************************************************************************************************************/\n\nRuntimePerformance.marker(\"module loading time\", \"modules_loaded\", \"runtime_start\");\n\n// TODO reader for node.js\nconst ReadableStreamDefaultReader = globalThis.ReadableStreamDefaultReader ?? class {};\n\nconst EXPOSE = Symbol(\"EXPOSE\");\n\nexport class StaticScope {\n\n    public static STD: StaticScope;\n    public static scopes = new Map<any, StaticScope>()\n\n    public static readonly NAME: unique symbol = Symbol(\"name\");\n    public static readonly DOCS: unique symbol = Symbol(\"docs\");\n\n    // return a scope with a given name, if it already exists\n    public static get(name?:string, expose = true): StaticScope {\n        if (!expose) return new StaticScope(name, false);\n        else return this.scopes.get(name) || new StaticScope(name);\n    }\n\n    [EXPOSE]: boolean\n\n    private constructor(name?:string, expose = true){\n        this[EXPOSE] = expose;\n        const proxy = <this> Pointer.proxifyValue(this, false, undefined, false);\n        DatexObject.setWritePermission(<Record<string | symbol, unknown>>proxy, undefined); // make readonly\n        \n        const ptr = Pointer.pointerifyValue(proxy);\n        ptr.grantPublicAccess(true);\n\n        if (name) proxy.name = name;\n        return proxy;\n    }\n\n    // handle scope variables\n    getVariable(name: string) {\n        return this[name];\n    }\n    setVariable(name: string, value: any) {\n        const ptr = Pointer.pointerifyValue(value);\n        if (ptr) ptr.grantPublicAccess(true);\n        return this[name] = value;\n    }\n    hasVariable(name: string) {\n        return Object.hasOwn(this,name)\n    }\n\n    // update/set the name of this static scope\n    set name(name:string){\n        if (this[StaticScope.NAME] && this[EXPOSE]) StaticScope.scopes.delete(this[StaticScope.NAME]);\n        this[StaticScope.NAME] = name;\n        if (this[EXPOSE]) StaticScope.scopes.set(this[StaticScope.NAME], this);\n        if (this[StaticScope.NAME] == \"std\") StaticScope.STD = this;\n    }\n\n    get name() {\n        return this[StaticScope.NAME]\n    }\n\n    set docs(docs:string) {\n        this[StaticScope.DOCS] = docs;\n    }\n    \n    get docs() {\n        return this[StaticScope.DOCS];\n    }\n}\n\n// DatexObject.setWritePermission(StaticScope.scopes, undefined); // make readonly\n\n\n// typed object\nexport class TypedValue<T extends Type = Type>  {\n\n    [DX_TYPE]: Type\n\n    constructor(type:T, value?:T extends Type<infer TT> ? TT : unknown) {\n        this[DX_VALUE] = value;\n        this[DX_TYPE] = type;\n    }\n\n    toString() {\n        return \"[Could not resolve type: \"+ this[DX_TYPE] + \"]\"\n    }\n\n}\n\n\n// typed value that can not be mapped to an object\nexport class UnresolvedValue {\n\n    [DX_TYPE]: Type\n    [DX_VALUE]: any\n\n    constructor(type:Type, value:any) {\n        this[DX_VALUE] = value;\n        this[DX_TYPE] = type;\n    }\n\n}\n\n\n/** Runtime */\n\ntype local_text_map = {[lang:string]:{[key:string]:string}};\n\ntype mime_type = `${string}/${string}`\ntype mime_type_definition<T> = (new(...args:any[])=>T) | {class:(new(...args:any[])=>T),generator:(value:Blob)=>T}\n\ntype Source = '_source'|{};\n\n/**\n * available permission that can be given to trusted endpoints\n */\nexport type trustedEndpointPermission = \"remote-js-execution\" | \"protected-pointer-access\" | \"fallback-pointer-source\";\n\nexport const WRAPPED_PROMISE = Symbol(\"WRAPPED_PROMISE\");\n\nexport class Runtime {\n\n\n    // can be changed\n    public static OPTIONS = {\n        PROTECT_POINTERS: true, // explicit permissions are required for remote endpoints to read/write pointers (default: true)\n        INDIRECT_REFERENCES: false, // enable support for indirect references to pointers from other pointers\n        DEFAULT_REQUEST_TIMEOUT: 5000, // default timeout for DATEX requests in ms\n        GARBAGE_COLLECTION_TIMEOUT: 1000, // time after which a value can get garbage collected\n        USE_BIGINTS: true,  // DATEX integers are interpreted as JS BigInts \n                            // otherwise DATEX floats and integers are interpreted as numbers\n                            // recommended: true, otherwise all integers are implicitly casted to the type <decimal> in DATEX\n        ERROR_STACK_TRACES: true, // create detailed stack traces with all DATEX Errors\n        NATIVE_ERROR_STACK_TRACES: true, // create detailed stack traces of JS Errors (NATIVE_ERROR_MESSAGES must be true)\n        NATIVE_ERROR_DEBUG_STACK_TRACES: false, // also display internal DATEX library stack traces (hidden per default)\n        NATIVE_ERROR_MESSAGES: true, // expose native error messages\n        DATEX_HTTP_ORIGIN: globalThis.location?.origin, // http origin to use to send datex-over-http messages (e.g. GOODBYE messages), default is current origin for browsers\n        USE_DX_CONFIG: true, // use local /.dx file for endpoint/connection setup\n        USE_PUBLIC_NODES: true, // use public nodes from unyt.cc\n    }\n\n    public static MIME_TYPE_MAPPING: Record<mime_type, mime_type_definition<unknown>> = {\n        \"text/markdown\": Markdown\n    }\n\n\n    static mime_type_classes = new Map(Object.entries(this.MIME_TYPE_MAPPING).map(x=>[('class' in x[1] && typeof x[1].class == \"function\") ? x[1].class : x[1], x[0]])) \n\n\n    /**\n     * List of endpoints that are allowed to create js:Functions that are executable on this endpoint\n     */\n    public static trustedEndpoints = new Map<Endpoint, trustedEndpointPermission[]>()\n\n    public static ENV: ObjectRef<{LANG:string, DATEX_VERSION:string, [key:string]:string}>\n    public static VERSION = \"beta\";\n\n    public static PRECOMPILED_DXB: {[key:string]:PrecompiledDXB}\n\n    // blockchain is loaded in init()\n    static Blockchain?: typeof Blockchain\n\n    static #saved_local_strings = new WeakMap<local_text_map, Map<RefOrValue<string>, Pointer<string>>>();\n    static #not_loaded_local_strings = new WeakMap<local_text_map, Set<RefOrValue<string>>>();\n    \n    /**\n     * Add a trusted endpoints with special permissions (default: all permissions enabled):\n     *  - `\"protected-pointer-access\"`: allows this endpoint to access all pointers, even if the PROTECT_POINTERS runtime flag is set\n     *  - `\"remote-js-execution\"`: allows local execution of <js:Function> values (containing JS source code) that were created by this endpoint\n     * @param endpoint \n     * @param permissions \n     */\n    public static addTrustedEndpoint(endpoint:Endpoint, permissions:trustedEndpointPermission[] = [\"protected-pointer-access\", \"remote-js-execution\", \"fallback-pointer-source\"]) {\n        if (this.trustedEndpoints.has(endpoint))\n            logger.debug(\"Updated permissions for trusted endpoint \" + endpoint + \": \" + permissions.join(\", \"));\n        else \n            logger.debug(\"Added trusted endpoint \" + endpoint + \" with permissions: \" + permissions.join(\", \"));\n        this.trustedEndpoints.set(endpoint, permissions);\n    }\n\n    public static getLocalString(local_map:{[lang:string]:string}):Pointer<string> {\n        const ptr = Pointer.createTransform([PointerProperty.get(Runtime.ENV, 'LANG')],\n            (lang:string) => {\n                return local_map[lang] ?? this.getTranslatedLocalString(local_map['en'], lang)\n            }, // sync js mapping\n            `\n            var lang = #env->LANG; \n            var local_map = ${Runtime.valueToDatexString(local_map)};\n            always (\n                if (local_map.(lang)) (local_map.(lang))\n                else (\n                    local_map.'en' default '?'\n                    /*\n                    val text = local_map.'en';\n                    val language = lang;\n                    @example.translate (text, language);\n                    */\n                )\n            )\n            `, true // used for persistent DATEX storage\n        ) as Pointer<string>;\n        ptr.transformMap = local_map;\n        return ptr;\n    }\n\n    public static getLocalStringFromMap(local_map:local_text_map, key:RefOrValue<string>):Pointer<string> {\n        // get cached transform pointer\n        let saved_strings = this.#saved_local_strings.get(local_map);\n        if (saved_strings && saved_strings.has(key)) return saved_strings.get(key)!;\n\n        // create new transform pointer\n        else {\n            const keyVal = ReactiveValue.collapseValue(key, true, true);\n            const value_available = !local_map[Runtime.ENV.LANG] || (keyVal in local_map[Runtime.ENV.LANG]); // in map or auto translate\n            const transformValues:RefLike<string>[] = [PointerProperty.get(Runtime.ENV, 'LANG')];\n            if (key instanceof ReactiveValue) transformValues.push(key)\n\n            const string_transform = Pointer.createTransform(transformValues, \n                (lang:string) => this.transformLangValue(lang, local_map, ReactiveValue.collapseValue(key, true, true)), // sync js mapping\n                value_available ? `\n                    var lang = #env->LANG; \n                    var local_map = ${Runtime.valueToDatexString(local_map)};\n                    var key = ${Runtime.valueToDatexString(key)};\n                    always (\n                        if (local_map.(lang)) (local_map.(lang).(key))\n                        else (\n                            local_map.'en' default '?'\n                            /*\n                            val text = local_map.'en'.(key);\n                            val language = lang;\n                            @example.translate (text, language);\n                            */\n                        )\n                    )` : '' // used for persistent DATEX storage\n                    , true\n            );\n            // add to saved string\n            if(!saved_strings) this.#saved_local_strings.set(local_map, saved_strings = new Map());\n            saved_strings.set(key, string_transform);\n\n            // value not yet available, add to not loaded local strings\n            if (!value_available) {\n                if (!this.#not_loaded_local_strings.has(local_map)) this.#not_loaded_local_strings.set(local_map, new Set());\n                this.#not_loaded_local_strings.get(local_map)!.add(key);\n            }\n            return string_transform;\n        }\n    }\n\n    // updates not yet initialized local string map values\n    public static async newLocalStringsMapValues(local_map:local_text_map) {\n        const local_strings_map = this.#saved_local_strings.get(local_map);\n        if (!local_strings_map) {\n            return;\n        }\n        const lang = Runtime.ENV.LANG;\n\n        // force override transform values (currently unknown)\n        for (const key of this.#not_loaded_local_strings.get(local_map)??[]) {\n            const keyVal = ReactiveValue.collapseValue(key, true, true);\n            if (lang in local_map && keyVal in local_map[lang]) {\n                local_strings_map.get(key)!.val = await this.transformLangValue(lang, local_map, keyVal);\n                local_strings_map.get(key)!.setDatexTransform(`\n                var lang = #env->LANG; \n                var local_map = ${Runtime.valueToDatexString(local_map)};\n                var key = ${Runtime.valueToDatexString(key)};\n                always (\n                    if (local_map.(lang)) (local_map.(lang).(key))\n                    else (\n                        'Could not translate to (lang)'\n                        /*\n                        val text = local_map.'en'.(key);\n                        val language = lang;\n                        @example.translate (text, language);\n                        */\n                    )\n                )`) // used for persistent DATEX storage\n                this.#not_loaded_local_strings.get(local_map)!.delete(key); // is now loaded\n                if (this.#not_loaded_local_strings.get(local_map)!.size == 0) this.#not_loaded_local_strings.delete(local_map) // no more keys in 'not loaded' set\n            }\n        }\n    }\n\n    private static transformLangValue(lang:string, local_map:{[lang:string]:{[key:string]:string}}, key:string, auto_translate = true):Promise<string>|string {\n        return (lang in local_map ? local_map[lang]?.[key] : (auto_translate ? this.getTranslatedLocalString(local_map['en']?.[key], lang) : local_map['en']?.[key])) ?? '██████████████';\n    }\n\n    private static getTranslatedLocalString(text_en:string, lang:string) {\n        return \"Could not translate to \" + lang;// <Promise<string>> datex `@example.translate (${text_en},${lang})`\n    }\n\n    // @ts-ignore\n    public static HOST_ENV = '';\n\n    static #endpoint: Endpoint;  // this endpoint (default is special local endpoint %000000000000000000000000)\n\n    static get endpoint(){\n        return this.#endpoint\n    }\n\n    static set endpoint(endpoint: Endpoint){\n        const _isInitialSetWorkaround = this.#endpoint==undefined;\n        if (this.#endpoint === endpoint) return; // already set\n        if (endpoint != LOCAL_ENDPOINT) {\n            logger.debug(\"using endpoint: \" + endpoint);\n        }\n        this.#endpoint = endpoint;\n\n        if (!_isInitialSetWorkaround) Observers.call(this,\"endpoint\",this.#endpoint);\n    }\n\n    static _setEndpoint(endpoint: Endpoint) {\n        this.endpoint = endpoint;\n    }\n\n    static {\n        Observers.register(Runtime, \"endpoint\");\n    }\n\n    static onEndpointChanged(listener:(endpoint:Endpoint)=>void){\n        Observers.add(this,\"endpoint\",listener);\n    }\n\n    public static main_node:Endpoint; // TODO remove?\n\n    static endpoint_entrypoint:any\n\n    private static utf8_decoder = new TextDecoder(\"utf-8\");\n    private static utf8_encoder = new TextEncoder();\n\n    // initialize std pointers if not yet initialized\n    private static initialized = false;\n\n    /**\n     * resolves as soon as all scheduled DATEX updates are sent\n     */\n    public static get synchronized() {\n        // first force trigger all remaining scheduled pointer updates\n        UpdateScheduler.triggerAll();\n        \n        return new Promise<void>((resolve) => {\n            Runtime.datexOutAllSent().then(() => {\n                resolve()\n            });\n        });\n    }\n\n    // binary codes that always indicate the end of a subscope\n    private static END_BIN_CODES = [\n        undefined, \n        BinaryCode.CLOSE_AND_STORE, \n\n        BinaryCode.IMPLEMENTS, \n        BinaryCode.EXTENDS, \n        BinaryCode.MATCHES, \n        BinaryCode.DEFAULT, \n\n        BinaryCode.ARRAY_END,\n        BinaryCode.SUBSCOPE_END, \n        BinaryCode.OBJECT_END, \n        BinaryCode.TUPLE_END, \n\n        BinaryCode.ELEMENT, \n        BinaryCode.ELEMENT_WITH_KEY,\n        BinaryCode.ELEMENT_WITH_INT_KEY,\n        BinaryCode.ELEMENT_WITH_DYNAMIC_KEY,\n        BinaryCode.KEY_PERMISSION,\n\n        BinaryCode.EQUAL_VALUE,\n        BinaryCode.EQUAL,\n        BinaryCode.NOT_EQUAL_VALUE,\n        BinaryCode.NOT_EQUAL,\n        BinaryCode.GREATER,\n        BinaryCode.GREATER_EQUAL,\n        BinaryCode.LESS,\n        BinaryCode.LESS_EQUAL,\n\n        BinaryCode.ADD,\n        BinaryCode.SUBTRACT,\n        BinaryCode.MULTIPLY,\n        BinaryCode.DIVIDE,\n        BinaryCode.POWER,\n        BinaryCode.OR,\n        BinaryCode.AND,\n        BinaryCode.MODULO,\n    ];\n\n\n    private static readonly_internal_vars = new Set<string|number>([\n        'current',\n        'sender',\n        'timestamp', \n        'signed',\n        'encrypted',\n        'meta',\n        'this',\n        'location'\n    ])\n\n    // DATEX OUT + REDIRECT\n\n    private static callbacks_by_sid = new Map<string, [resolve:globalThis.Function, reject:globalThis.Function, timeoutId?: number]>();\n    private static detailed_result_callbacks_by_sid = new Map<string, (scope:datex_scope, header:dxb_header, error?:Error)=>void>(); // call only once\n    private static detailed_result_callbacks_by_sid_multi = new Map<string, (scope:datex_scope, header:dxb_header, error?:Error)=>void>(); // call multiple times\n\n\n    public static setMainNode(main_node:Endpoint){\n        this.main_node = main_node\n    }\n\n\n    // default static scope: std\n    static STD_STATIC_SCOPE:Record<string,any>;\n\n    private static STD_TYPES_ABOUT:Map<Type,Markdown>;\n\n    static #datex_out_handler_initialized_resolve?:(value: void | PromiseLike<void>) => void\n    static #datex_out_init_promise:Promise<void>|undefined = new Promise<void>(resolve=>this.#datex_out_handler_initialized_resolve=resolve);\n\n\n    // default datex out: send to self (if no routing available)\n    private static datex_out:(data: DatexOutData)=>Promise<void> = async (data)=>{\n        await this.datexIn(data);\n    } \n\n    public static setDatexOutHandler(handler:(data: DatexOutData)=>Promise<void>){\n        this.datex_out = handler\n        //  TODO:\n        // datex out callback wrapper, handles crypto proxy\n        // (data: DatexOutData) => {\n        //     // redirect as crypto proxy: decrypt\n        //     // if (to && this.#cryptoProxies.has(to)) {\n        //     //     // TODO#CryptoProxy: decrypt + check channel\n        //     //     const decKey = this.#cryptoProxies.get(to)![1]\n        //     //     console.log(\"TODO: handle proxy decrypt for \" + to)\n        //     // }\n\n        //     return handler(data);\n        // }\n\n        if (this.#datex_out_handler_initialized_resolve) {\n            this.#datex_out_handler_initialized_resolve();\n            // initialized, delete promise\n            this.#datex_out_handler_initialized_resolve = undefined;\n            this.#datex_out_init_promise = undefined;\n        }\n    }\n\n\n    /** handles symmetric keys for scope sessions */\n    private static scope_symmetric_keys:Map<Endpoint,Map<number, CryptoKey>> = new Map();\n\n\n    // get key for a sender\n    protected static async getOwnSymmetricKey(scope_id:number):Promise<CryptoKey> {\n        if (!this.scope_symmetric_keys.has(this.endpoint)) this.scope_symmetric_keys.set(this.endpoint, new Map())\n        let sender_map = this.scope_symmetric_keys.get(this.endpoint);\n        // create new if not yet created\n        if (!sender_map.has(scope_id)) sender_map.set(scope_id, await Crypto.generateSymmetricKey())\n        return sender_map.get(scope_id)\n    }\n\n    // get key for a sender\n    protected static async getScopeSymmetricKeyForSender(scope_id:number, sender:Endpoint):Promise<CryptoKey> {\n        if (!this.scope_symmetric_keys.has(sender)) this.scope_symmetric_keys.set(sender, new Map())\n        let sender_map = this.scope_symmetric_keys.get(sender);\n        if (!sender_map.has(scope_id)) {\n            throw new SecurityError(\"Found no encryption key for this scope\");\n        }\n        return sender_map.get(scope_id)\n    }\n\n\n    // set key if received from remote endpoint\n    protected static async setScopeSymmetricKeyForSender(scope_id:number, sender:Endpoint, key:CryptoKey) {\n        if (!this.scope_symmetric_keys.has(sender)) this.scope_symmetric_keys.set(sender, new Map())\n        this.scope_symmetric_keys.get(sender).set(scope_id, key)\n    }\n\n    protected static async removeScopeSymmetricKeyForSender(scope_id:number, sender:Endpoint) {\n        this.scope_symmetric_keys.get(sender)?.delete(scope_id)\n    }\n\n    // content cache\n    static #url_content_cache = new Map<string,any>();\n    static #url_raw_content_cache = new Map<string,any>();\n\n    public static deleteURLCache(url: string|URL) {\n        this.#url_content_cache.delete(url.toString())\n        this.#url_raw_content_cache.delete(url.toString())\n    }\n\n    // converts exports from DATEX tuple to normal JS object\n    private static normalizeDatexExports(module:any){\n        // TODO: fix tuple madness\n\t\tif (module instanceof Tuple && !Pointer.getByValue(module)) module = Object.fromEntries(module.named);\n        return module;\n    }\n\n    // get content of https://, file://, ...\n    public static async getURLContent<T=unknown, RAW extends boolean = false>(url_string:string, raw?:RAW, cached?:boolean, potentialDatexAsJsModule?: boolean):Promise<RAW extends false ? T : [data:unknown, type?:string]>\n    public static async getURLContent<T=unknown, RAW extends boolean = false>(url:URL, raw?:RAW, cached?:boolean, potentialDatexAsJsModule?:boolean):Promise<RAW extends false ? T : [data:unknown, type?:string]>\n    public static async getURLContent<T=unknown, RAW extends boolean = false>(url_string:string|URL, raw:RAW=false, cached = false, potentialDatexAsJsModule = true):Promise<RAW extends false ? T : [data:unknown, type?:string]> {\n\n        if (url_string.toString().startsWith(\"route:\") && globalThis.location?.origin) url_string = new URL(url_string.toString().replace(\"route:\", \"\"), globalThis.location.origin)\n\n        // catch fatal route errors here\n        if (url_string.toString().startsWith(\"fatal:\")) {\n            throw new Error(url_string.toString().replace(\"fatal:\",\"\"))\n        }\n\n        const url = url_string instanceof URL ? url_string : new URL(url_string, baseURL);\n        url_string = url.toString();\n\n        // get cached content\n        if (cached) {\n            if (raw && this.#url_raw_content_cache.has(url_string)) return this.#url_raw_content_cache.get(url_string);\n            if (!raw && this.#url_content_cache.has(url_string))    return this.#url_content_cache.get(url_string);\n        }\n\n        let result:any;\n\n        if (url.protocol == \"https:\" || url.protocol == \"http:\" || url.protocol == \"blob:\") {\n            let response:Response|undefined = undefined;\n            let overrideContentType: string|undefined;\n\n            let doFetch = true;\n\n\n            // exceptions to force potentialDatexAsJsModule (definitely dx files)\n            if (url_string.endsWith(\"/.dxb\") || url_string.endsWith(\"/.dx\") || url_string == \"https://unyt.cc/nodes.dx\") {\n                potentialDatexAsJsModule = false;\n            }\n\n            // js module import\n            if (!raw && (url_string.endsWith(\".js\") || url_string.endsWith(\".ts\") || url_string.endsWith(\".tsx\") || url_string.endsWith(\".jsx\"))) {\n                doFetch = false; // no body fetch required, can directly import() module\n                overrideContentType = \"application/javascript\"\n            }\n            // potential js module as dxb/dx: fetch headers first and check content type\n            else if (!raw && potentialDatexAsJsModule && (url_string.endsWith(\".dx\")  || url_string.endsWith(\".dxb\"))) {\n                try {\n                    response = await fetch(url, {method: 'HEAD', cache: 'no-store'});\n                    const type = response.headers.get('content-type');\n                    if (type?.startsWith(\"text/javascript\") || type?.startsWith(\"application/javascript\")) {\n                        doFetch = false; // no body fetch required, can directly import() module\n                    }\n                }\n                catch (e) {\n                    if (!response) console.error(e);\n                }\n                if (!response?.ok) {\n                    throw new RuntimeError(\"Cannot get content of '\"+url_string+\"' (\" + response?.status??\"unknown\" + \")\");\n                }\n            }\n\n            if (doFetch) {\n                try {\n                    response = await fetch(url);\n                }\n                catch (e) {\n                    if (!response) console.error(e);\n                }\n                if (!response?.ok) {\n                    throw new RuntimeError(\"Cannot get content of '\"+url_string+\"' (\" + response?.status??\"unknown\" + \")\");\n                }\n            }\n            \n            const type = overrideContentType ?? response?.headers.get('content-type');\n\n            if (type == \"application/datex\" || type == \"text/dxb\" || url_string.endsWith(\".dxb\")) {\n                const content = await response!.arrayBuffer();\n                if (raw) result = [content, type];\n                else result = await this.executeDXBLocally(content, url);\n            }\n            else if (type?.startsWith(\"text/datex\") || url_string.endsWith(\".dx\")) {\n                const content = await response!.text()\n                if (raw) result = [content, type];\n                else result = await this.executeDatexLocally(content, undefined, undefined, url);\n            }\n            else if (type?.startsWith(\"application/json5\") || url_string.endsWith(\".json5\")) {\n                const content = await response!.text();\n                if (raw) result = [content, type];\n                else result = await Runtime.datexOut([content, [], {sign:false, encrypt:false, type:ProtocolDataType.DATA}]);\n            }\n            else if (type?.startsWith(\"application/json\") || type?.endsWith(\"+json\")) {\n                if (raw) result = [await response!.text(), type]; \n                else result = await response!.json()\n            }\n            else if (type?.startsWith(\"text/javascript\") || type?.startsWith(\"application/javascript\")) {\n                if (raw) result = [await response!.text(), type]; \n                else result = await import(url_string)\n            }\n            else {\n                const content = await response!.arrayBuffer()\n                if (raw) result = [content, type];\n                else {\n                    if (!type) throw Error(\"Cannot infer type from URL content\");\n                    const mime_type = type.split(\"/\");\n                    result = Runtime.collapseValueCast(await Runtime.castValue(Type.get(\"std\",mime_type[0], mime_type[1].split(/;| /)[0]), content));\n                }\n            }\n        }\n\n        else if (url.protocol == \"file:\") {\n\n            const filePath = url.pathname;\n            // check if has deno api (worker, deno or browser (remote))\n            if (client_type !== \"deno\") {\n                throw new RuntimeError(\"Cannot get content of '\"+url_string+\"'\");\n            }\n\n            if (filePath.endsWith('.dxb')) {\n                const content = (<Uint8Array>(await getFileContent(url, true, true))).buffer;\n                if (raw) result = [content, \"application/datex\"];\n                else result = await this.executeDXBLocally(content, url);\n            }\n            else if (filePath.endsWith('.dx')) {\n                const content = <string> await getFileContent(url);\n                if (raw) result = [content, \"text/datex\"];\n                else result = await this.executeDatexLocally(content, undefined, undefined, url);\n            }\n            else if (filePath.endsWith('.json')) {\n                const content = <string> await getFileContent(url);\n                if (raw) result = [content, \"application/json\"];\n                else result = JSON.parse(content)\n            }\n            else if (filePath.endsWith('.json5')) {\n                const content = <string> await getFileContent(url);\n                if (raw) result = [content, \"application/json5\"];\n                else result = await Runtime.datexOut([content, [], {sign:false, encrypt:false, type:ProtocolDataType.DATA}]);\n            }\n            else if (filePath.endsWith('.js') || filePath.endsWith('.ts')  || filePath.endsWith('.tsx') || filePath.endsWith('.jsx') || filePath.endsWith('.mts') || filePath.endsWith('.mjs')) {\n                const content = <string> await getFileContent(url);\n                if (raw) result = [content, \"application/javascript\"];\n                else {\n                    result = await import(url_string )\n                    // TODO: why try catch?, it should not be used?\n                    // try {\n                        \n                    // } catch (e) {\n                    //     console.warn(url_string)\n                    //     console.error(e)\n                    // }\n                }\n            }\n            else {\n                if (!mime) throw Error(\"Cannot infer type from URL content - missing mime module\");\n                const content = ((await getFileContent(url, true, true)) as Uint8Array).buffer;\n                const ext = url.toString().match(/\\.[^./]*$/)?.[0].replace(\".\",\"\");\n                if (!ext) throw Error(\"Cannot infer type from URL content (no extension)\");\n                const mime_type = mime.getType(ext);\n                if (!mime_type) throw Error(\"Cannot infer type from URL content - could not resolve mime type (extension: \"+ext+\")\");\n\n                if (raw) result = [content, mime_type];\n                else {\n                    const type = mime_type.split(\"/\");\n                    result = Runtime.collapseValueCast(await Runtime.castValue(Type.get(\"std\",type[0], type[1].split(/;| /)[0]), content));\n                }\n            }\n            \n        }\n\n        else if (url.protocol == \"route:\") {\n            // TODO: only a warning for now (for js module preloading), should be an error\n            logger.warn(\"Route could not be resolved: \" + url_string);\n            return null as any;\n        }\n\n        else {\n            throw new RuntimeError(\"Protocol '\"+url.protocol.slice(0,-1)+\"' not supported\");\n        }\n\n        // cache result\n        if (cached) {\n            if (raw) this.#url_raw_content_cache.set(url_string, result);\n            else this.#url_content_cache.set(url_string, result);\n        }\n\n        return result;\n    }\n\n\n    /**\n     * executes a DATEX Script with insert data and returns the evaluated result\n     * @param dx DATEX Script\n     * @param data insert values (replaces '?' in SCRIPT)\n     * @returns evaluated script result\n     */\n    static async parseDatexData(dx:string, data?:any[]):Promise<any> {\n        return Runtime.executeDXBLocally(<ArrayBuffer> await Compiler.compile(dx, data, {sign:false, encrypt:false, type:ProtocolDataType.DATA}))\n    }\n\n    /**\n     * executes a DATEX Binary encoded as Base64\n     * @param dxb_base64 DATEX Binary as Base64 string\n     * @returns evaluated DATEX result\n     */\n    public static getValueFromBase64DXB(dxb_base64:string):Promise<any> {\n        return Runtime.executeDXBLocally(base64ToArrayBuffer(dxb_base64))\n    }\n\n    /**\n     * evaluates a DATEX Data Binary without a DATEX header encoded as Base64\n     * @param dxb_base64 DATEX Data Binary (without header) as Base64 string\n     * @returns evaluated DATEX result\n     */\n    public static decodeValueBase64<T=unknown>(dxb_base64:string, outer_serialized=false, conditions?:ExecConditions):Promise<T> {\n        // create scope\n        const scope = Runtime.createNewInitialScope();\n        scope.outer_serialized = outer_serialized;\n        scope.exec_conditions = conditions;\n        // set dxb as scope buffer\n        Runtime.updateScope(scope, base64ToArrayBuffer(dxb_base64), {end_of_scope:true, sender:Runtime.endpoint})\n        // execute scope\n        return Runtime.simpleScopeExecution(scope)\n    }\n\n    /**\n     * evaluates a DATEX Data Binary without a DATEX header\n     * @param dxb DATEX Data Binary (without header)\n     * @returns evaluated DATEX result\n     */\n    public static decodeValue(dxb:ArrayBuffer, outer_serialized=false, conditions?:ExecConditions):Promise<any> {\n        // create scope\n        const scope = Runtime.createNewInitialScope();\n        scope.outer_serialized = outer_serialized;\n        scope.exec_conditions = conditions;\n        // set dxb as scope buffer\n        Runtime.updateScope(scope, dxb, {end_of_scope:true, sender:Runtime.endpoint})\n        // execute scope\n        return Runtime.simpleScopeExecution(scope)\n    }\n\n    /**\n     * Clones a value by serializing and deserializing, keeping only local references\n     * @param value any DATEX value\n     * @returns cloned value\n     */\n    public static async collapseCloneValue<T>(value:T):Promise<T> {\n        const encoded = Compiler.encodeValue(value, undefined, true, true, true, true, false, true);\n        // console.log(MessageLogger.decompile(encoded,false));\n        return await Runtime.decodeValue(encoded);\n    }\n\n    /**\n     * Clones a value (no deep clone) by serializing and deserializing\n     * @param value any DATEX value\n     * @returns cloned value\n     */\n    public static async cloneValue<T>(value:T):Promise<T> {\n        return await Runtime.decodeValue(Compiler.encodeValue(value, undefined, true, false, true, false, false));\n    }\n    \n    /**\n     * Clones a value by serializing and deserializing\n     * @param value any DATEX value\n     * @returns deep-cloned value\n     */\n    public static async deepCloneValue<T>(value:T):Promise<T> {\n        return await Runtime.decodeValue(Compiler.encodeValue(value, undefined, true, true, true, false, false));\n    }\n\n    /**\n     * Executes a DATEX Script locally and returns the result\n     * @param datex DATEX Script\n     * @param options compiler options\n     * @param context_location context in which the script should be executed (URL)\n     * @returns evaluated DATEX result\n     */\n    public static async executeDatexLocally(datex:string|PrecompiledDXB, data?:unknown[], options?:compiler_options & { __overrideMeta?: Partial<datex_meta> }, context_location?:URL):Promise<unknown> {\n        return Runtime.executeDXBLocally(<ArrayBuffer> await Compiler.compile(datex, data, {sign:false, encrypt:false, context_location, ...options}), context_location, options?.__overrideMeta)\n    }\n\n    /**\n     * Executes a DATEX Binary locally and returns the result\n     * @param dxb DATEX Binary\n     * @param context_location context in which the script should be executed (URL)\n     * @param overrideMeta custom override header metadata\n     * @param forceLocalExecution execute block even if receiver is external (default false)\n     * @returns evaluated DATEX result\n     */\n    public static async executeDXBLocally(dxb:ArrayBuffer, context_location?:URL, overrideMeta?: Partial<datex_meta>, forceLocalExecution = false):Promise<unknown> {\n        // generate new header using executor scope header\n        let header:dxb_header;\n        let dxb_body:ArrayBuffer;\n\n        const res = await this.parseHeader(dxb, undefined, false, forceLocalExecution)\n        if (res instanceof Array) {\n            header = res[0];\n            dxb_body = res[1].buffer;\n        }\n        else {\n            throw new DatexError(\"Cannot execute dxb locally, the receiver defined in the header is external\")\n        }\n           \n        // override meta\n        if (overrideMeta) {\n            Object.assign(header, overrideMeta)\n        }\n\n        // create scope\n        const scope = Runtime.createNewInitialScope(header, undefined, undefined, undefined, context_location);\n    \n        // set dxb as scope buffer\n        Runtime.updateScope(scope, dxb_body, header)\n\n\n        // execute scope\n        return Runtime.simpleScopeExecution(scope)\n    }\n\n    /**\n     * Handles compilation in Runtime\n     *  manages SID and sets the right encryption keys\n     *  redirects to Compiler.compile\n     * @param data compile info (DATEX Script, data, options, ...)\n     * @returns compiled DATEX Binary\n     */\n    protected static async compileAdvanced(data:compile_info):Promise<ArrayBuffer|ReadableStream> {\n        const header_options = data[2];\n\n        if (!header_options) throw new Error(\"header_options not defined\")\n\n        // get sid or generate new\n        if (header_options.sid == null) header_options.sid = Compiler.generateSID();\n\n        // encryption?\n        if (header_options.encrypt && !header_options.sym_encrypt_key) {\n            header_options.sym_encrypt_key = await this.getOwnSymmetricKey(header_options.sid);\n            header_options.send_sym_encrypt_key = true; // TODO handle\n        }\n\n        return Compiler.compile(...data) // TODO currently workaround bridge to get generator value\n    }\n\n    static #prepocessingTasks = new Set<Promise<void>>();\n    static #sendingTasks = new Set<Promise<void>>();\n\n    /**\n     * resolves as soon as all datex out preprocessing tasks are finished\n     */\n    protected static datexOutPreprocessingFinished() {\n        return Promise.all(this.#prepocessingTasks);\n    }\n\n    /**\n     * resolves as soon as all currently scheduled outgoing datex messages are sent\n     */\n    protected static datexOutAllSent() {\n        // first await prepocessing, then await sending tasks\n        return this.datexOutPreprocessingFinished()\n            .then(() => Promise.all(this.#sendingTasks));\n    }\n\n    /**\n     * Creates a new preprocessing task\n     * @returns function that removes the task from the preprocessing tasks\n     */\n    protected static createPrepocessingTask() {\n        const {promise, reject, resolve} = Promise.withResolvers<void>();\n        this.#prepocessingTasks.add(promise);\n        return () => {\n            this.#prepocessingTasks.delete(promise);\n            resolve();\n        };\n    }\n\n    /**\n     * Creates a new sending task\n     * @returns function that removes the task from the sending tasks\n     */\n    protected static createDatexSendingTask() {\n        const {promise, reject, resolve} = Promise.withResolvers<void>();\n        this.#sendingTasks.add(promise);\n        return () => {\n            this.#sendingTasks.delete(promise);\n            resolve();\n        };\n    }\n\n\n    /**\n     * Sends DATEX to one or multiple endpoints\n     * @param data DATEX Binary or compile info (Script, data, options, ...)\n     * @param to receiving endpoint, not required if flood is set to true\n     * @param sid optional, can be explicitly set, otherwise inferred from compiled DXB or automatically generated\n     * @param wait_for_result returns result if set to true, otherwise the receiving endpoint(s) don't send a response\n     * @param encrypt encrypt DXB (TODO still required as extra parameter?)\n     * @param detailed_result_callback callback function returning the complete scope and header of the response \n     * @param flood flood (broadcast) message\n     * @param flood_exclude endpoint to exclude from the broadcast\n     * @param timeout response timeout\n     * @returns evaluated response value\n     */\n    public static async datexOut(data:ArrayBuffer|compile_info, to:target_clause=Runtime.endpoint, sid?:number, wait_for_result=true, encrypt=false, detailed_result_callback?:(scope:datex_scope, header:dxb_header, error:Error)=>void, flood = false, timeout?:number, socket?:CommunicationInterfaceSocket):Promise<any>{\n\n        const finish = this.createPrepocessingTask();\n\n        try {\n            // external request, but datex out not yet initialized, wait for initialization\n            if (!(to instanceof Endpoint && Runtime.endpoint.equals(to)) && this.#datex_out_init_promise /*instanceof Promise*/) {\n                await this.#datex_out_init_promise;\n            }\n\n            // one or multiple blocks\n            let dxb:ArrayBuffer|ReadableStream<ArrayBuffer>;\n\n            // only info about what to compile, not yet compiled\n            if (data instanceof Array) {\n                if (!data[2]) data[2] = {}\n                if (!data[2].to && to!=null) data[2].to = to; // add receiver if not found in compile options\n                if (!data[2].sid && sid!=null) data[2].sid = sid; // add sid if not found in compile options\n                if (data[2].flood==null && flood!=null) data[2].flood = flood; // add flood if not found in compile options\n                if (data[2].encrypt==null && encrypt!=null) data[2].encrypt = encrypt; // add flood if not found in compile options\n                dxb = await this.compileAdvanced(data);\n                // override values from compiled data\n                sid = data[2].sid ?? sid;\n                flood = data[2].flood ?? flood;\n                encrypt = data[2].encrypt ?? encrypt;\n            }\n            // already compiled\n            else dxb = data;\n\n            // no sid provided, and not compiled with new sid\n            if (!sid) throw new RuntimeError(\"Could not get an SID for sending data\");\n            if (!this.datex_out) throw new NetworkError(DATEX_ERROR.NO_OUTPUT);\n            if (!flood && !to) throw new NetworkError(DATEX_ERROR.NO_RECEIVERS);\n\n            const unique_sid = sid+\"-\"+(data[2]?.return_index??0); // sid + block index;\n            const evaluated_receivers = to ? <Disjunction<Endpoint>> Logical.collapse(to, Target) : null;\n\n            // single block\n            if (dxb instanceof ArrayBuffer) {\n                return this.datexOutSingleBlock(dxb, evaluated_receivers, sid, unique_sid, <compile_info>data, wait_for_result, encrypt, detailed_result_callback, flood, timeout, socket);\n            }\n\n            // multiple blocks\n            else {\n                const reader = dxb.getReader();\n                let next:ReadableStreamReadResult<ArrayBuffer>;\n                let end_of_scope = false;\n                finish();\n                // read all blocks (before the last block)\n                while (true) {\n                    next = await reader.read()\n                    if (next.done) break;\n\n                    // empty arraybuffer indicates that next block is end_of_scope\n                    if (next.value.byteLength == 0) end_of_scope = true;\n                    // end_of_scope, now return result for last block (wait_for_result)\n                    else if (end_of_scope) return this.datexOutSingleBlock(next.value, evaluated_receivers, sid, unique_sid, <compile_info>data, wait_for_result, encrypt, detailed_result_callback, flood, timeout, socket);\n                    // not last block,  wait_for_result = false, no detailed_result_callback\n                    else this.datexOutSingleBlock(next.value, evaluated_receivers, sid, unique_sid, <compile_info>data, false, encrypt, null, flood, timeout, socket);\n                }\n                \n            }\n        }\n\n        finally {\n            finish();\n        }\n        \n    }\n\n    private static async _handleEndpointOffline(endpoint:Endpoint, handler:(err:Error)=>void) {\n        if (!await endpoint.isOnline()) {\n            handler(new NetworkError(\"Endpoint \" + endpoint + \" is offline\"))\n        }\n    }\n\n    // handle sending a single dxb block out\n    private static datexOutSingleBlock(dxb:ArrayBuffer, to:Disjunction<Endpoint>, sid:number, unique_sid:string, data:compile_info, wait_for_result=true, encrypt=false, detailed_result_callback:((scope:datex_scope, header:dxb_header, error:Error)=>void)|undefined, flood = false, timeout:number|undefined, socket:CommunicationInterfaceSocket) {\n              \n        // empty filter?\n        if (to?.size == 0) {\n            throw new NetworkError(\"No valid receivers\");\n        } \n\n        const finish = this.createDatexSendingTask();\n\n        return new Promise<any>((resolve, reject) => {\n\n            // flood exclude flood_exclude receiver\n            if (flood) {\n                this.datex_out({\n                    dxb,\n                    receivers: BROADCAST,\n                    socket: socket\n                })\n                    .catch(e => {\n                        if (wait_for_result) reject(e);\n                        else logger.debug(\"Error sending datex block (flood)\");\n                    })\n                    .finally(() => finish());\n            }\n            // send to receivers\n            else if (to) {\n                //this.datex_out(dxb, to)?.catch(e=>reject(e));\n                // send and catch errors while sending, like NetworkError\n                const isSingleReceiver = to.size == 1;\n                // check offline status (async), immediately reject if offline\n                if (isSingleReceiver && wait_for_result) this._handleEndpointOffline([...to][0], reject)\n                // send dxb\n\n                this.datex_out({\n                    dxb,\n                    receivers: to,\n                    socket\n                })\n                    .catch(e => {\n                        if (wait_for_result) reject(e);\n                        else logger.debug(\"Error sending datex block to \" + [...to].map(t=>t.toString()).join(\", \") + \": \" + e.message);\n                    })\n                    .finally(() => finish());\n            }\n\n            // callback for detailed results?\n            if (detailed_result_callback) {\n                // only one expected response\n                if (to.size == 1)\n                    this.detailed_result_callbacks_by_sid.set(unique_sid, detailed_result_callback);\n\n                // multiple reponses expected\n                else \n                    this.detailed_result_callbacks_by_sid_multi.set(unique_sid, detailed_result_callback);\n            }\n          \n\n            if (wait_for_result) { // only set callback if required\n                let timeoutId = undefined;\n                // default timeout\n                if (timeout == undefined) timeout = this.OPTIONS.DEFAULT_REQUEST_TIMEOUT;\n                if (timeout > 0 && Number.isFinite(timeout)) {\n                    timeoutId = setTimeout(()=>{\n                        // reject if response wasn't already received (might still be processed, and resolve not yet called)\n                        reject(new NetworkError(\"DATEX request timeout after \"+timeout+\"ms: \" + unique_sid +  \" to \" + Runtime.valueToDatexString(to)));\n                    }, timeout);\n                }\n                this.callbacks_by_sid.set(unique_sid, [resolve, reject, timeoutId]);\n            }\n            else resolve(true)\n        })\n    }\n\n    // evaluate filter\n    private static evaluateFilter(filter:target_clause):Set<Target> {\n        // TODO!!!\n        if (filter instanceof Target) return new Set([filter])\n        else if (filter instanceof Set) return <Set<Target>>filter;\n        else logger.error(\"cannot evaluate non-filter\", filter);\n    }\n\n    /**\n     * Redirect a DATEX Binary Message to endpoints as specified in the header.routing.receivers\n     * Also decreases the TTL\n     * @param datex DATEX Binary\n     * @param header header information\n     * @param wait_for_result returns the result if set to true\n     * @returns result of the redirected DATEX \n     */\n    static redirectDatex(datex:ArrayBuffer, header:dxb_header, wait_for_result=true, socket?:CommunicationInterfaceSocket):Promise<any> {\n        logger.debug(\"redirect \" + (ProtocolDataType[header.type]) + \" \" + header.sid + \" \" + header.sender + \" > \" + Runtime.valueToDatexString(header.routing.receivers) + \", ttl=\"+ (header.routing?.ttl));\n        return this.datexOut(datex, header.routing.receivers, header.sid, wait_for_result, undefined, undefined, undefined, undefined, socket);\n    }\n\n    /**\n     * Broadcast DATEX Binary Message\n     * @param datex DATEX Binary\n     * @param exclude endpoint that should be excluded from the broadcast\n     * @param ttl override TTL\n     */\n    static floodDatex(datex:ArrayBuffer, header:dxb_header, socket?:CommunicationInterfaceSocket) {\n        logger.debug(\"flood \" + (ProtocolDataType[header.type]) + \" \" + header.sid + \", ttl=\"+ (header.routing?.ttl));\n        this.datexOut(datex, undefined, header.sid, false, false, null, true, undefined, socket);\n    }\n\n    public static async precompile() {\n        // precompile dxb\n        this.PRECOMPILED_DXB = {\n            SET_PROPERTY:   await PrecompiledDXB.create('?.? = ?'),\n            SET_PROPERTY_REF:   await PrecompiledDXB.create('?.? $= ?'),\n            SET_WILDCARD:   await PrecompiledDXB.create('?.* = ?'),\n            CLEAR_WILDCARD:   await PrecompiledDXB.create('?.* = void'),\n            // PROPERTY_ADD:   await PrecompiledDXB.create('? += ?'),\n            // PROPERTY_SUB:   await PrecompiledDXB.create('? -= ?'),\n            STREAM:         await PrecompiledDXB.create('? << ?'),\n        }\n    }\n\n    private static ownLastEndpoint?: Endpoint;\n    private static lastEndpointUnloadHandler?: EventListener\n\n    static goodbyeMessage?: ArrayBuffer // is set by supranet when connected\n\n    /**\n     * Adds endpoint to localStorage active lists\n     * Handles beforeunload (sending GOODBYE)\n     * @param endpoint \n     */\n    static setActiveEndpoint(endpoint:Endpoint) {       \n\n        let endpoints:string[] = [];\n        if (client_type == \"browser\") {\n            try {\n                endpoints = JSON.parse(localStorage['active_endpoints']) as string[]\n            }\n            catch {\n                localStorage['active_endpoints'] = \"\"\n            }\n        }\n        \n        // remove previous local endpoint\n        if (this.ownLastEndpoint && endpoints.includes(this.ownLastEndpoint?.toString())) endpoints.splice(endpoints.indexOf(this.ownLastEndpoint?.toString()), 1);\n        \n        // remove previous goodbye\n        if (this.lastEndpointUnloadHandler) {\n            removePersistentListener(globalThis, \"beforeunload\", this.lastEndpointUnloadHandler)\n            this.lastEndpointUnloadHandler = undefined;\n        }\n\n        // endpoint already in active list (added from other tab?)\n        if (endpoints.includes(endpoint.toString())) {\n            logger.warn(\"Endpoint \" + endpoint + \" is already active\");\n        }\n        // add endpoint to active list\n        else {\n            endpoints.push(endpoint.toString())\n            this.ownLastEndpoint = endpoint;\n            this.lastEndpointUnloadHandler = () => {\n                // send goodbye\n                if (this.goodbyeMessage) sendDatexViaHTTPChannel(this.goodbyeMessage, this.OPTIONS.DATEX_HTTP_ORIGIN);\n                if (client_type == \"browser\") {\n                    try {\n                        // remove from localstorage list\n                        endpoints = JSON.parse(localStorage['active_endpoints']) as string[]\n                        if (endpoints.includes(endpoint?.toString())) endpoints.splice(endpoints.indexOf(endpoint?.toString()), 1);\n                        localStorage['active_endpoints'] = JSON.stringify(endpoints)\n                    }\n                    catch {\n                        localStorage['active_endpoints'] = \"\"\n                    }\n                }\n            }\n            \n            // delete endpoint on exit\n            addPersistentListener(globalThis, \"beforeunload\", this.lastEndpointUnloadHandler)\n        }\n\n        this.compileGoodByeMessage()\n\n        if (client_type == \"browser\") localStorage['active_endpoints'] = JSON.stringify(endpoints)\n\n        // update endpoint cookie\n        const endpointName = endpoint.toString();\n        // TODO: store signed endpoint validation cookie\n        if (client_type == \"browser\") {\n            const currentEndpointName = getCookie(\"datex-endpoint\");\n            // only update if endpoint not already set in cookie\n            if (currentEndpointName != endpointName || !getCookie(\"datex-endpoint-validation\")) {\n                deleteCookie(\"datex-endpoint-validation\");\n                deleteCookie(\"datex-endpoint-nonce\");\n                setCookie(\"datex-endpoint\", endpointName, endpoint_config.temporary ? 0 : undefined);\n                (async() => {\n                    const nonceBase64 = getCookie(\"datex-endpoint-nonce\");\n                    if (nonceBase64) {\n                        const nonce = base64ToArrayBuffer(nonceBase64);\n                        setCookie(\"datex-endpoint-validation\", arrayBufferToBase64(await Crypto.sign(nonce)), endpoint_config.temporary ? 0 : undefined);\n                    }\n                })()\n            }  \n        }\n    }\n\n    /**\n     * Compiles GOODBYE message with current endpoint instance as sender\n     */\n    static async compileGoodByeMessage() {\n        this.goodbyeMessage = <ArrayBuffer> await Compiler.compile(\"\", [], {type:ProtocolDataType.GOODBYE, sign:true, flood:true, __routing_ttl:10})\n    }\n\n    static getActiveLocalStorageEndpoints() {\n        if (client_type == \"browser\") {\n            try {\n                const endpoints = JSON.parse(localStorage['active_endpoints']) as string[]\n                return endpoints.map((e) => Target.get(e) as Endpoint).filter((e) => e!==this.ownLastEndpoint)\n            }\n            catch {\n                localStorage['active_endpoints'] = \"\"\n                return []\n            }\n        }\n        else return []\n    }\n\n    /**\n     * Removes all active datex scopes for an endpoint\n     */\n    public static clearEndpointScopes(endpoint: Endpoint) {\n        const removeCount = this.active_datex_scopes.get(endpoint)?.size;\n        this.active_datex_scopes.delete(endpoint);\n        if (removeCount) logger.debug(\"removed \" + removeCount + \" datex scopes for \" + endpoint);\n    }\n\n    /**\n     * Creates default static scopes\n     * + other async initializations\n     * @param endpoint initial local endpoint\n     * @returns \n     */\n    public static init(endpoint?:Endpoint) {\n\n        // save all currently active endpoints for shared local storage (multiple tabs)\n        if (endpoint && endpoint != LOCAL_ENDPOINT && client_type == \"browser\") this.setActiveEndpoint(endpoint)\n\n\n        if (endpoint) Runtime.endpoint = endpoint;\n\n        if (this.initialized) return;\n        this.initialized = true;\n\n\n        // default labels:\n        // Pointer.createLabel({\n        //     REQUEST:ProtocolDataType.REQUEST,\n        //     RESPONSE:ProtocolDataType.RESPONSE,\n        //     DATA:ProtocolDataType.DATA,\n        //     HELLO:ProtocolDataType.HELLO,\n        //     LOCAL:ProtocolDataType.LOCAL,\n        //     UPDATE:ProtocolDataType.UPDATE,\n        // }, \"TYPE\");\n\n        // create std static scope\n        this.STD_STATIC_SCOPE = {};\n\n        // std.print\n        const print = DatexFunction.createFromJSFunction((...params:any[])=>{\n            const meta = datex.meta;\n            IOHandler.stdOut(params, meta);\n        }, undefined, undefined, undefined, undefined, undefined, new Tuple({v1:Type.std.Any, v2:Type.std.Any, v3:Type.std.Any, v4:Type.std.Any, v5:Type.std.Any, v6:Type.std.Any}))\n\n        // std.printf (formatted output)\n        const printf = DatexFunction.createFromJSFunction(async (...params:any[])=>{\n            const meta = datex.meta;\n            await IOHandler.stdOutF(params, meta);\n        }, undefined, undefined, undefined, undefined, undefined, new Tuple({v1:Type.std.Any, v2:Type.std.Any, v3:Type.std.Any, v4:Type.std.Any, v5:Type.std.Any, v6:Type.std.Any}));\n\n        // std.printn (native output)\n        const printn = DatexFunction.createFromJSFunction((...params:any[])=>{\n            console.log(\"printn >\", ...params);\n        }, undefined, undefined, undefined, undefined, undefined, new Tuple({v1:Type.std.Any, v2:Type.std.Any, v3:Type.std.Any, v4:Type.std.Any, v5:Type.std.Any, v6:Type.std.Any}));\n\n\n        // std.printn (native output)\n        const _logger = new Logger(\"DATEX Script\");\n        const dx_logger = {\n            success: $$((text:string) => {\n                _logger.success(text)\n            }),\n            error: $$((text:string) => {\n                _logger.error(text)\n            }),\n            debug: $$((text:string) => {\n                _logger.debug(text)\n            }),\n            info: $$((text:string) => {\n                _logger.info(text)\n            }),\n            plain: $$((text:string) => {\n                _logger.plain(text)\n            })\n        }\n\n        // std.read\n        const read = DatexFunction.createFromJSFunction((meta, msg_start:any=\"\", msg_end:any=\"\")=>{\n            return IOHandler.stdIn(msg_start, msg_end, meta.sender);\n        }, undefined, undefined, undefined, undefined, undefined, new Tuple({msg_start:Type.std.text, msg_end:Type.std.text}), 0);\n\n        // std.sleep\n        const sleep = DatexFunction.createFromJSFunction((time_ms:bigint)=>{\n            return new Promise<void>(resolve=>setTimeout(()=>resolve(), Number(time_ms)));\n        });\n\n        // std.localtext\n        const localtext = DatexFunction.createFromJSFunction((local_map:{[lang: string]: string})=>{\n            return Runtime.getLocalString(local_map);\n        });\n\n\n        this.STD_STATIC_SCOPE['print']      = static_pointer(print, LOCAL_ENDPOINT, 0xaa00, \"$std_print\");\n        this.STD_STATIC_SCOPE['printf']     = static_pointer(printf, LOCAL_ENDPOINT, 0xaa01, \"$std_printf\");\n        this.STD_STATIC_SCOPE['printn']     = static_pointer(printn, LOCAL_ENDPOINT, 0xaa02, \"$std_printn\");\n        this.STD_STATIC_SCOPE['read']       = static_pointer(read, LOCAL_ENDPOINT, 0xaa03, \"$std_read\");\n        this.STD_STATIC_SCOPE['sleep']      = static_pointer(sleep, LOCAL_ENDPOINT, 0xaa04, \"$std_sleep\");\n        this.STD_STATIC_SCOPE['logger']     = static_pointer(dx_logger, LOCAL_ENDPOINT, 0xaa05, \"$std_dx_logger\");\n        this.STD_STATIC_SCOPE['localtext']  = static_pointer(localtext, LOCAL_ENDPOINT, 0xaa06, \"$std_localtext\");\n    \n        // std.types \n        // try to get from cdn.unyt.org\n        // try {\n        //     this.STD_TYPES_ABOUT = await Runtime.getURLContent('https://cdn.unyt.org/unyt_core/dx_data/type_info.dx')\n        // }\n        // // otherwise try to get local file (only backend)\n        // catch {\n        //     this.STD_TYPES_ABOUT = await Runtime.getURLContent(new URL('../dx_data/type_info.dx', import.meta.url));\n        // }\n\n        DatexObject.setWritePermission(<Record<string|symbol,unknown>>this.STD_STATIC_SCOPE, undefined); // make readonly\n        DatexObject.seal(this.STD_STATIC_SCOPE);\n\n\n        // logger.success(\"Initialized <std:> library\")\n    }\n\n\n\n    /**\n     * Formats a variable name (converts integer to hex string)\n     * @param name variable name / id\n     * @param prefix variable prefix (e.g. '#')\n     * @returns formatted name\n     */\n    public static formatVariableName(name:string|number, prefix:string) {\n        return prefix + (typeof name == \"number\" ? name.toString(16) : name)\n    }\n\n\n    private static getAbout(type:Type):Markdown|undefined {\n        if (type instanceof Type) return type.about;\n        else return VOID;\n    }\n\n    /**\n     * Splits the bits of a byte into multiple values\n     * @param bit_distribution sizes for each part of the byte, must add up to 8 (e.g. [2,2,2,2])\n     * @param byte the byte as a number\n     * @returns array containing the separate byte parts\n     */    \n    public static convertByteToNumbers(bit_distribution:number[], byte:number):number[] {\n        const byte_str = byte.toString(2).padStart(8, '0');\n        const nrs = [];\n        let pos = 0;\n        for (const size of bit_distribution) {\n            nrs.push(parseInt(byte_str.slice(pos, pos+size), 2));\n            pos += size;\n        }\n        return nrs;\n    }\n    \n    \n    // parseHeader, synchronous Part\n    public static parseHeaderSynchronousPart(dxb:ArrayBuffer):[dxb_header, Uint8Array, Uint8Array, number, Uint8Array, ArrayBuffer] {\n        const header_data_view = new DataView(dxb);\n        const header_uint8     = new Uint8Array(dxb); \n\n        if (header_uint8[0] !== 0x01 || header_uint8[1] !== 0x64) {\n            throw new SecurityError(\"DXB Format not recognized\")\n        }\n\n        if (dxb.byteLength<4) throw new SecurityError(\"DXB Block must be at least 4 bytes\")\n\n        const header:dxb_header = {};\n        const routing_info:routing_info = {}\n\n        // version\n        header.version = header_uint8[2];\n\n        const VERSION_2 = header.version == 2;\n        if (VERSION_2) console.log(\"using header v.2\");\n\n        let i = 3;\n\n        const block_size = header_data_view.getUint16(i, true);\n        i += Int16Array.BYTES_PER_ELEMENT;\n\n        // ROUTING HEADER /////////////////////////////////////////////////\n        routing_info.ttl = header_uint8[i++];\n        routing_info.prio = header_uint8[i++];\n\n        const signed_encrypted = header_uint8[i++];\n        header.signed = signed_encrypted == 1 || signed_encrypted == 2; // is signed?\n        header.encrypted = signed_encrypted == 2 || signed_encrypted == 3; // is encrypted?\n\n        header.routing = routing_info;\n\n        // sender\n        const last_index:[number] = [0];\n        routing_info.sender = header.sender = VERSION_2 ? Compiler.extractHeaderSenderV2(header_uint8, last_index) : Compiler.extractHeaderSender(header_uint8, last_index);\n        i = last_index[0];\n       \n        \n        let receiver_size = header_data_view.getUint16(i, true);\n        i += Uint16Array.BYTES_PER_ELEMENT;\n\n        let encrypted_key:ArrayBuffer;\n\n        // indicates flooding\n        if (receiver_size == MAX_UINT_16) {\n            routing_info.flood = true;\n        }\n        else if (receiver_size!=0) {\n            // receivers\n\n            let type = header_uint8[i++];\n\n            // is pointer\n            if (type == 1) {\n                const id_buffer = header_uint8.subarray(i, i+=Pointer.MAX_POINTER_ID_SIZE);\n                const target = Pointer.get(id_buffer)?.val;\n                if (!target) throw new ValueError(\"Receiver filter pointer not found (TODO request)\")\n                if (!(target instanceof Target || target instanceof Logical || target instanceof Array || target instanceof Set)) throw new ValueError(\"Receiver filter pointer is not a filter\")\n                else {\n                    console.log(\"Pointer TARGET\", target)\n                    routing_info.receivers = <target_clause>target;\n                }\n               \n            }\n\n            // filter target\n            else {     \n                let targets = new Disjunction<Endpoint>();\n\n                let targets_nr = header_data_view.getInt16(i, true)\n                i += Int16Array.BYTES_PER_ELEMENT;\n\n                for (let t = 0; t<targets_nr; t++) {\n                    let type = header_uint8[i++]; // get endpoint type\n                    let name_length = header_uint8[i++]; // get name length\n                    let subspace_number = header_uint8[i++]; // get subspace number\n                    let instance_length = header_uint8[i++]; // get instance length\n        \n                    let name_binary = header_uint8.subarray(i, i+=name_length);\n                    let name = type == BinaryCode.ENDPOINT ? name_binary : Runtime.utf8_decoder.decode(name_binary)  // get name\n        \n                    let subspaces = [];\n                    for (let n=0; n<subspace_number; n++) {\n                        let length = header_uint8[i++];\n                        let subspace_name = Runtime.utf8_decoder.decode(header_uint8.subarray(i, i+=length));\n                        subspaces.push(subspace_name);\n                    }\n        \n                    let instance = Runtime.utf8_decoder.decode(header_uint8.subarray(i, i+=instance_length))  // get instance\n    \n                    const target = <Endpoint> Target.get(name, instance, type);\n\n                    targets.add(target)\n    \n                    // get attached symmetric key?\n                    let has_key = header_uint8[i++];\n    \n                    if (has_key) {\n                        // add to keys\n                        if (this.endpoint.equals(<Endpoint>target)) encrypted_key = header_uint8.slice(i, i+512);\n                        i += 512;\n                    }\n                }\n                routing_info.receivers = targets;\n                \n            }\n\n        }\n        \n\n        ///////////////////////////////////////////////////////////////////\n\n        let signature_start = i;\n        if (header.signed) i += Compiler.signature_size; // has signature?\n\n        // always get the following values: /////////////\n        \n        // sid \n        header.sid = header_data_view.getUint32(i, true);\n        i+=Uint32Array.BYTES_PER_ELEMENT;\n\n        // block index\n        header.return_index = header_data_view.getUint16(i, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT;\n\n        header.inc = header_data_view.getUint16(i, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT;\n\n        // now save symmetric key\n    \n        // foreign endpoint (if receiver not self or force eating this response) //////////\n        // handle result\n        // TODO better check for && !routing_info.receivers.equals(Runtime.endpoint)\n        if (\n            routing_info.receivers && // has receivers\n            // not for local endpoint:\n            !(\n                routing_info.receivers instanceof Disjunction && \n                routing_info.receivers.size == 1 && // single receiver\n                (\n                    Runtime.endpoint.equals([...routing_info.receivers][0]) || // endpoint instance equals receiver\n                    Runtime.endpoint.main.equals([...routing_info.receivers][0]) || // endpoint main equals receiver\n                    [...routing_info.receivers][0] == LOCAL_ENDPOINT // receiver is @@local\n                )\n            )\n        ) {\n            header.redirect = true;\n        }\n        ///////////////////////////////////////////////////////////////////\n\n\n\n        // type\n        header.type = header_uint8[i++];\n\n        // get additional meta data (header data)\n\n        // flags\n        let [_, executable, end_of_scope, device_type] =\n            this.convertByteToNumbers([1,1,1,5], header_uint8[i++]);\n        header.executable = executable ? true : false;\n        header.end_of_scope = end_of_scope ? true : false;\n        \n        if (header.version == 2) console.log(\"header:\",header);\n\n        // timestamp\n        header.timestamp = new Date(Number(header_data_view.getBigUint64(i, true)) + Compiler.BIG_BANG_TIME);\n        i+=BigUint64Array.BYTES_PER_ELEMENT;\n\n        // iv if encrypted\n        let iv:Uint8Array;\n        if (header.encrypted) {\n            iv = header_uint8.slice(i, i+16);\n            i+=16;\n        }\n        \n        \n        // extract buffers\n        let header_buffer = header_uint8.slice(0, i);\n        let data_buffer = header_uint8.slice(i);\n\n        return [header, data_buffer, header_buffer, signature_start, iv, encrypted_key] \n    }\n\n    // returns header info and dxb body, or routing information if not directed to own endpoint\n    static async parseHeader(dxb:ArrayBuffer, force_sym_enc_key?:CryptoKey, force_only_header_info = false, force_no_redirect = false):Promise<[dxb_header, Uint8Array, Uint8Array, Uint8Array]|dxb_header> {\n\n        const res = this.parseHeaderSynchronousPart(dxb);\n\n        let header: dxb_header,\n            data_buffer:Uint8Array, \n            header_buffer:Uint8Array, \n            signature_start:number, \n            iv: Uint8Array,\n            encrypted_key: ArrayBuffer;\n\n        // no redirect\n        if ((!res[0].redirect && !force_only_header_info) || force_no_redirect) {\n            [header, data_buffer, header_buffer, signature_start, iv, encrypted_key] = res;\n\n            try {\n                // save encrypted key?\n                if (encrypted_key) {\n                    const sym_enc_key = await Crypto.extractEncryptedKey(encrypted_key);\n                    await this.setScopeSymmetricKeyForSender(header.sid, header.sender, sym_enc_key)\n                }\n\n                // get signature\n                if (header.signed) {\n                    if (!header.sender) throw new SecurityError(\"Signed DATEX without a sender\");\n                    let j = signature_start;\n                    const signature = header_buffer.subarray(j, j + Compiler.signature_size);\n                    const content = new Uint8Array(dxb).subarray(j + Compiler.signature_size);\n                    j += Compiler.signature_size;\n                    const valid = await Crypto.verify(content, signature, header.sender);\n\n                    if (!valid) {\n                        logger.error(\"Invalid signature from \" + header.sender);\n                        throw new SecurityError(\"Invalid signature from \" + header.sender);\n                    }\n                }\n\n                // decrypt\n\n                if (header.encrypted) {\n                    if (!iv) throw new SecurityError(\"DATEX not correctly encrypted\");\n                    // try to decrypt body\n                    data_buffer = new Uint8Array(await Crypto.decryptSymmetric(data_buffer.buffer, force_sym_enc_key ?? await this.getScopeSymmetricKeyForSender(header.sid, header.sender), iv));\n                }\n                    \n                // header data , body buffer, header buffer, original (encrypted) body buffer\n                return [header, data_buffer, header_buffer, res[1]];\n            }\n            catch (e) {\n                throw [header, e];\n            }\n\n        }\n\n        // only return header (for redirect)\n        else return res[0];\n\n    }\n\n\n\n    static active_datex_scopes = new Map<Target, Map<number, {next:number, scope?:datex_scope, active:Map<number, [dxb_header, ArrayBuffer, ArrayBuffer]>}>>();\n\n    public static datexIn(data: DatexInData) {\n        if (data.dxb instanceof ArrayBuffer) return this.handleDatexIn(data.dxb, undefined, undefined, undefined, data.socket); \n        else if (data.dxb instanceof ReadableStreamDefaultReader) {\n            throw new Error(\"Continuos DATEX block input streams are not supported yet\")\n            // return this.handleContinuousBlockStream(data.dxb, undefined, undefined, undefined, data.socket)\n        }\n        else throw new Error(\"Invalid data for datexIn\")\n    }\n\n\n    // extract dxb blocks from a continuos stream\n    private static async handleContinuousBlockStream(dxb_stream_reader: ReadableStreamDefaultReader<Uint8Array>, full_scope_callback, variables?:any, header_callback?:(header:dxb_header)=>void, socket?:CommunicationInterfaceSocket) {\n        \n        let current_block: Uint8Array;\n        let current_block_size: number\n        let new_block = new Uint8Array(4);\n        let overflow_block: Uint8Array;\n\n        let index = 0;\n        let timeout;\n\n        const newValue = (value:Uint8Array) => {\n\n            // reset after some time\n            /*clearTimeout(timeout);\n            timeout = setTimeout(()=>{\n                console.log(\"reset dxb stream after timeout\")\n                current_block = null; \n                overflow_block = null;\n                index = 0;\n            }, 6000)*/\n\n            // insert overflow data\n            if (overflow_block) {\n                const _overflow_block = overflow_block;\n                overflow_block = null;\n                newValue(_overflow_block);\n            }\n\n            if (current_block) {\n                // too big for current_block\n                if (index+value.byteLength > current_block_size) {\n                    current_block.set(value.subarray(0,current_block_size-index), index);\n                    overflow_block = value.subarray(current_block_size-index);\n                }\n                else current_block.set(value, index);\n            }\n            else {\n                // too big for new_block\n                if (index+value.byteLength > 4) {\n                    new_block.set(value.subarray(0,4-index), index);\n                    overflow_block = value.subarray(4-index);\n                }\n                else new_block.set(value, index);\n            }\n\n            index += value.byteLength;\n\n            // block start and size is available\n            if (!current_block && index >= 4) {\n                // check magic number and block size\n                if (!(new_block[0] == 0x01 && new_block[1] == 0x64)) {\n                    logger.error(\"DXB Format not recognized in block stream\");\n                    // try again\n                    overflow_block = null;\n                    index = 0;\n                }\n                else {\n                    // get Uint16 block size and create new buffer\n                    current_block_size = new_block[2]*256+new_block[3];\n                    current_block = new Uint8Array(current_block_size);\n                    current_block.set(new_block); // copy first header part into new block  \n                    index = 4; // force to 4\n                }\n            }\n\n            // block end\n            if (current_block && index >= current_block_size) {\n                this.handleDatexIn(current_block.buffer, full_scope_callback, variables, header_callback, socket)\n                    .catch(e=>console.error(\"Error handling block stream: \", e)) \n                // reset for next block\n                current_block = null; \n                index = 0; // force to 0\n            }\n        }\n\n        try {\n            while (true) {\n                const { value, done } = await dxb_stream_reader.read();\n                if (done) {\n                    logger.error(\"reader has been cancelled\")\n                    break;\n                }\n                newValue(value);\n            }\n        } catch (error) {\n            logger.error(\"disconnected: \" + error)\n        } finally {\n            dxb_stream_reader.releaseLock();\n        }\n        \n    }\n\n    // simple scope execution, no callbacks, multi block scopes, return global or throw error\n    public static async simpleScopeExecution(scope:datex_scope) {\n        // run scope, result is saved in 'scope' object\n        await this.run(scope);\n        return ReactiveValue.collapseValue(scope.result);\n    }\n\n    static #cryptoProxies = new Map<Endpoint, [signKey:CryptoKey, decKey:CryptoKey]>()\n\n    public static enableCryptoProxy(proxiedEndpoint: Endpoint, keys: [signKey:CryptoKey, decKey:CryptoKey]) {\n        logger.success(\"enabling crypto proxy for \" + proxiedEndpoint)\n        this.#cryptoProxies.set(proxiedEndpoint, keys)\n    }\n\n\n    // keep track of last received messages endpoint:sid:inc:returnindex\n    private static receivedMessagesHistory:string[] = []\n\n    private static async checkDuplicate(header: dxb_header) {\n        const identifier = `${header.type}:${header.sender}:${header.sid}:${header.inc}:${header.return_index}:${await Compiler.getValueHashString(header.routing?.receivers)}`;\n        let isDuplicate = false;\n        // is duplicate\n        if (this.receivedMessagesHistory.includes(identifier)) {\n            // console.debug(\"duplicate \" + identifier);\n            isDuplicate = true;\n        }\n\n        // add to history\n        this.receivedMessagesHistory.push(identifier);\n        \n        // remove after 20s\n        setTimeout(()=> {\n            this.receivedMessagesHistory.shift();\n        }, 20_000)\n\n        return isDuplicate;\n    }\n\n    /**\n     * Updates the online state of the sender endpoint of an incoming DXB message\n     * @param header DXB header of incoming message\n     */\n    private static updateEndpointOnlineState(header: dxb_header) {\n        if (!header) {\n            logger.error(\"updateEndpointOnlineState: no header provided\");\n            return;\n        }\n        if (header.sender) {\n            // received signed GOODBYE message -> endpoint is offline\n            if (header.type == ProtocolDataType.GOODBYE) {\n                if (header.signed) {\n                    const endpoint = header.sender;\n\n                    logger.debug(\"GOODBYE from \" + endpoint)\n                    endpoint.setOnline(false)\n\n                    Pointer.clearEndpointSubscriptions(endpoint)\n                    this.clearEndpointScopes(endpoint);\n\n                    // TODO/NOTE: permissions are not reset immediately here, otherwise DOM pointers might not be accessible during hydration in UIX\n                    // permissions will still be reset in the periodic cleanup procedure\n                    // Pointer.clearEndpointPermissions(header.sender)\n                }\n                else {\n                    logger.error(\"ignoring unsigned GOODBYE message\")\n                }\n            }\n            // other message, assume sender endpoint is online now\n            else {\n                // TODO: HELLO message received, regard as new login to network, reset previous subscriptions? \n                // does not work correctly because valid subscriptions are reset after HELLO message is received after some time\n                // if (header.type == ProtocolDataType.HELLO && !header.sender.ignoreHello) Pointer.clearEndpointSubscriptions(header.sender)\n                header.sender.setOnline(true)\n            }\n        }\n    }\n\n    /**\n     * handle incoming DATEX Binary\n     * @param dxb DATEX Binary Message\n     * @param full_scope_callback returns the scope result, error and sid after the dxb was evaluated\n     * @param header_callback callback method returning information for the evaluated header before executing the dxb\n     * @returns header information (after executing the dxb)\n     */\n    private static async handleDatexIn(dxb:ArrayBuffer, full_scope_callback:((sid:number, scope:any, error?:boolean)=>void)|undefined, _:any|undefined, header_callback:((header:dxb_header)=>void)|undefined, socket: CommunicationInterfaceSocket): Promise<dxb_header> {\n\n        let header:dxb_header, data_uint8:Uint8Array;\n\n        let res:dxb_header|[dxb_header, Uint8Array, Uint8Array, Uint8Array];\n        try {\n            res = await this.parseHeader(dxb);\n        }\n        catch (e) {\n            // e is [dxb_header, Error]\n            //throw e\n            const header = e[0];\n            if (header) {\n                this.handleScopeError(header, e[1]);\n                this.updateEndpointOnlineState(header);\n                // console.error(e[1]??e)\n                return header;\n            }\n            throw e;\n        }\n        \n\n        // normal request\n        if (res instanceof Array) {\n\n            [header, data_uint8] = res;\n\n            if (await this.checkDuplicate(header)) return header;\n\n            this.updateEndpointOnlineState(header);\n\n            // + flood, exclude last_endpoint - don't send back in flooding tree\n            if (header.routing && header.routing.flood) {\n                this.floodDatex(dxb, header, socket);\n            }\n\n            // callback for header info\n            if (header_callback instanceof globalThis.Function) header_callback(header);\n\n            // assume sender endpoint is online now  \n            if (header.sender) header.sender.setOnline(true);\n\n            if (header.type !== ProtocolDataType.GOODBYE && header.type !== ProtocolDataType.HELLO && header.sender && header.signed) {\n                await Crypto.activateEndpoint(header.sender)\n            }\n\n            if (header.type === ProtocolDataType.GOODBYE && header.sender && !Crypto.public_keys.has(header.sender.main)) {\n                console.log(\"ignoring GOODBYE from \" + header.sender);\n                return header;\n            }\n        }\n\n        // needs to be redirected \n        else {\n\n            if (await this.checkDuplicate(res)) return res;\n\n            // redirect as crypto proxy: sign\n            if (res.sender && this.#cryptoProxies.has(res.sender)) {\n                // TODO#CryptoProxy: sign\n                const signKey = this.#cryptoProxies.get(res.sender)![0]\n                console.log(\"TODO: handle proxy sign for \" + res.sender)\n            }\n\n            // propagate TRACE message\n            try {\n                const to = [...(res.routing?.receivers??[])][0];\n                if (res.type == ProtocolDataType.TRACE || res.type == ProtocolDataType.TRACE_BACK) {\n                    const trace = await this.executeDXBLocally(dxb, undefined, undefined, true);\n                    if (to instanceof Endpoint && trace instanceof Array) {\n                        let destinationReached = false;\n                        let localHops = 0;\n                        \n                        for (const entry of trace) {\n                            if (entry.endpoint === to || entry.endpoint.main === to) {\n                                destinationReached = true;\n                            }\n                            if (entry.endpoint === Runtime.endpoint) localHops++;\n                            \n                            if ((destinationReached && localHops>2) || (!destinationReached && localHops>1)) {\n                                console.error(trace);\n                                throw new Error(\"Circular \" + ProtocolDataTypesMap[res.type])\n                            }\n                        }\n                        try {\n                            await to.trace({header: res, socket, trace})\n                        }\n                        catch {}\n                        return {};\n                    }\n                    else {\n                        logger.error(\"Invalid TRACE message\")\n                    }\n                }\n                \n                await this.redirectDatex(dxb, res, false, socket);\n            }\n            catch (e) {\n                console.log(\"redirect failed\", e)\n            }\n\n            // callback for header info\n            if (header_callback instanceof globalThis.Function) header_callback(res);\n            return res;\n        }\n\n        // if (header.type == ProtocolDataType.TRACE_BACK) {\n        //     debugger;\n        //     console.warn(\"TRACE_BACK from \" + header.sender);\n        // }\n\n        const data = data_uint8.buffer; // get array buffer\n\n        // create map for this sender\n        if (!this.active_datex_scopes.has(header.sender)) {\n            if (header.end_of_scope) {} // is new scope and immediately closed\n            else this.active_datex_scopes.set(header.sender, new Map());\n        }\n        // modified sid: negative for own responses to differentiate\n        const sid = (Runtime.endpoint.equals(header.sender) || Runtime.endpoint.main.equals(header.sender)) && header.type == ProtocolDataType.RESPONSE ? -header.sid : header.sid;\n        // create map for this sid if not yet created\n        const sender_map = this.active_datex_scopes.get(header.sender);\n        if (sender_map && !sender_map.has(sid)) {\n            sender_map.set(sid, {next:0, active:new Map()});\n        }\n        const scope_map = sender_map?.get(sid);\n\n\n        // this is the next block or the only block (immediately closed)\n        if (!scope_map || (scope_map.next == header.inc)) {\n\n\n            // get existing scope or create new\n            const scope = scope_map?.scope ?? this.createNewInitialScope(header);\n            scope.socket = socket;\n\n            // those values can change later in the while loop\n            let _header = header;\n            let _data = data;\n            let _dxb = dxb;\n\n            // inform that response was received (still processing)\n            const unique_sid = header.sid+\"-\"+header.return_index;\n            const callbacks = this.callbacks_by_sid.get(unique_sid);\n            if (callbacks) {\n                // clear response received timeout\n                if (callbacks[2] != undefined) clearTimeout(callbacks[2])\n            }\n\n            // parse current block and try if blocks with higher ids exist\n            do {\n                let has_error = false;\n                try {\n                    // update scope buffers\n                    this.updateScope(scope, _data, _header) // set new _data (datex body) and _header (header information)\n                    // run scope, result is saved in 'scope' object\n                    await this.run(scope);\n                }\n                // catch global errors\n                catch (e) {\n                    // return full dxb\n                    if (full_scope_callback && typeof full_scope_callback == \"function\") {\n                        full_scope_callback(sid, e, true);\n                    }\n\n                    //logger.error(\"scope error\", e);\n                    this.handleScopeError(_header, e, scope);\n                    has_error = true;\n                }\n\n                // end reached (end of scope or 'end' command in scope)\n                if (_header.end_of_scope || scope.closed) {\n\n                    // save persistent memory\n                    if (scope.persistent_vars) {\n                        const identifier = scope.context_location.toString()\n                        for (const name of scope.persistent_vars) Runtime.saveScopeMemoryValue(identifier, name, scope.internal_vars[name]);\n                    }\n\n                    // cleanup\n                    sender_map?.delete(sid);\n                    this.removeScopeSymmetricKeyForSender(sid, _header.sender);\n                    \n                    // handle result normal\n                    if (!has_error) {\n                        // return full dxb\n                        if (full_scope_callback && typeof full_scope_callback == \"function\") {\n                            full_scope_callback(sid, scope);\n                        }\n\n                        // handle result\n                        await this.handleScopeResult(_header, scope, scope.result)\n                    }\n    \n                    break;\n                }\n\n                else {\n                    scope_map.next++; // increase index counter\n                    if (scope_map.next > Compiler.MAX_BLOCK) scope_map.next = 0; // index overflow, reset to 0\n                    if (!scope_map.scope) scope_map.scope = scope; // save scope\n\n                    // check for waiting block with next index\n                    if (scope_map.active.has(scope_map.next)) {\n                        [_header, _data, _dxb] = scope_map.active.get(scope_map.next);\n                    }\n                    else break; // currently no waiting block\n                    \n                }\n\n            } while(true)\n\n        }\n\n        // has to wait for another block first\n        else {\n            // should not happen, scope_map.next can't already be higher, because it would have required this block\n            // possible reason: this block was already sent earlier\n            if (scope_map.next > header.inc) {\n                logger.error(\"invalid scope inc, lower than next required number\")\n            }\n            // block not yet required, wait\n            else {\n                scope_map.active.set(header.inc, [header, data, dxb]);\n            }\n        }\n    \n        return header\n    }\n\n    private static handleScopeDebuggerSession(scope:datex_scope) {\n\n        const header = scope.header;\n\n        const deb = new Debugger();\n\n\n        this.datexOut([\"?\", [deb], {type:ProtocolDataType.DEBUGGER, to:header.sender, return_index:header.return_index, sign:header.signed}], header.sender,  header.sid, false);\n\n    }\n\n\n    private static handleScopeError(header:dxb_header, e: any, scope?:datex_scope) {\n\n        if (header?.type == undefined) {\n            console.log(\"Scope error occured, cannot get the original error here!\");\n            return;\n        }\n\n        // return error to sender (if request)\n        if (header.type == ProtocolDataType.REQUEST) {\n            // is not a DatexError -> convert to DatexError\n            if (e instanceof globalThis.Error && !(e instanceof DatexError)) {\n                e = DatexError.fromJSError(e);\n                if (scope) e.addScopeToStack(scope);\n            }\n            this.datexOut([\"yeet ?\", [e], {type:ProtocolDataType.RESPONSE, to:header.sender, return_index:header.return_index, sign:header.signed}], header.sender, header.sid, false);\n        }\n        else if (\n            header.type == ProtocolDataType.RESPONSE || \n            header.type == ProtocolDataType.DATA ||\n            header.type == ProtocolDataType.TRACE_BACK ||\n            header.type == ProtocolDataType.LOCAL) \n        {\n            const unique_sid = header.sid+\"-\"+header.return_index;\n\n            // handle result\n            if (this.callbacks_by_sid.has(unique_sid)) {\n                this.callbacks_by_sid.get(unique_sid)![1](e, true);\n                this.callbacks_by_sid.delete(unique_sid);\n            }\n            if (this.detailed_result_callbacks_by_sid.has(unique_sid)) {\n                this.detailed_result_callbacks_by_sid.get(unique_sid)!(scope, header, e);\n                this.detailed_result_callbacks_by_sid.delete(unique_sid)\n            }\n            else if (this.detailed_result_callbacks_by_sid_multi.has(unique_sid)) {\n                this.detailed_result_callbacks_by_sid_multi.get(unique_sid)!(scope, header, e);\n            }\n\n        }\n        else if (header.type == ProtocolDataType.UPDATE) {\n            // ignore\n        }\n        else if (header.type == ProtocolDataType.GOODBYE) {\n            logger.error(\"Error in GOODBYE message:\", e instanceof Error ? (e.message ?? '') : '')\n        }\n        else {\n            logger.error(\"Invalid proctocol data type: \" + ProtocolDataTypesMap[header.type]??header.type)\n        }\n\n    }\n\n    private static async handleScopeResult(header:dxb_header, scope: datex_scope, return_value:any, source?: Source){\n        \n        const unique_sid = header.sid+\"-\"+header.return_index;\n        \n        // return global result to sender (if request)\n        if (header.type == ProtocolDataType.REQUEST) {\n            this.datexOut([\"?\", [return_value], {type:ProtocolDataType.RESPONSE, to:header.sender, return_index:header.return_index, encrypt:header.encrypted, sign:header.signed}], header.sender, header.sid, false);\n        }\n\n        // handle response\n        else if (header.type == ProtocolDataType.RESPONSE ||\n            header.type == ProtocolDataType.DATA ||\n            header.type == ProtocolDataType.TRACE_BACK ||\n            header.type == ProtocolDataType.LOCAL)\n        {\n\n            if (header.type == ProtocolDataType.TRACE_BACK) {\n                const traceStack = return_value as trace[]\n                traceStack.push({endpoint:Runtime.endpoint, socket: {type: scope.socket?.interfaceProperties?.type??\"unknown\", name: scope.socket?.interfaceProperties?.name}, timestamp: new Date()});\n            }\n\n            // handle result\n            if (this.callbacks_by_sid.has(unique_sid)) {\n                this.callbacks_by_sid.get(unique_sid)![0](return_value);      \n                this.callbacks_by_sid.delete(unique_sid)                     \n            }\n            if (this.detailed_result_callbacks_by_sid.has(unique_sid)) {\n                this.detailed_result_callbacks_by_sid.get(unique_sid)!(scope, header);\n                this.detailed_result_callbacks_by_sid.delete(unique_sid)\n            }\n            else if (this.detailed_result_callbacks_by_sid_multi.has(unique_sid)) {\n                this.detailed_result_callbacks_by_sid_multi.get(unique_sid)!(scope, header);\n            }\n            \n        }\n\n        // // bc transaction\n        // else if (header.type == ProtocolDataType.BC_TRNSCT) {\n        //     console.log(\"bc transaction\");\n        // }\n\n        // hello (also temp: get public keys)\n        else if (header.type == ProtocolDataType.HELLO) {\n            if (!header.sender) logger.error(\"Invalid HELLO message, no sender\");\n            else if (return_value) {\n                try {\n                    const keys_updated = await Crypto.bindKeys(header.sender, ...<[ArrayBuffer,ArrayBuffer]>return_value);\n                    if (header.routing?.ttl)\n                        header.routing.ttl--;\n                    \n                    logger.debug(\"HELLO (\"+header.sid+\"/\" + header.inc+ \"/\" + header.return_index + \") from \" + header.sender +  \", keys \"+(keys_updated?\"\":\"not \")+\"updated, ttl = \" + header.routing?.ttl);\n                }\n                catch (e) {\n                    logger.error(\"Invalid HELLO keys\");\n                }\n            }\n            else {\n                logger.debug(\"HELLO from \" + header.sender +  \", no keys, ttl = \" + header.routing?.ttl);\n            }\n        }\n\n        else if (header.type == ProtocolDataType.GOODBYE) {\n            \n        }\n\n        else if (header.type == ProtocolDataType.TRACE) {\n            const sender = return_value[0].endpoint;\n            const traceStack  = return_value as trace[];\n            traceStack.push({endpoint:Runtime.endpoint, destReached:true, socket: {type: scope.socket?.interfaceProperties?.type??\"unknown\", name: scope.socket?.interfaceProperties?.name}, timestamp: new Date()});\n            console.log(\"TRACE request from \" + sender);\n\n            this.datexOut([\"?\", [traceStack], {type:ProtocolDataType.TRACE_BACK, to:sender, return_index:header.return_index, encrypt:header.encrypted, sign:header.signed}], sender, header.sid, false);\n        }\n        \n        else if (header.type == ProtocolDataType.DEBUGGER) {\n            logger.success(\"DEBUGGER ?\", return_value)\n        }\n\n        else if (header.type == ProtocolDataType.UPDATE) {\n            // ignore\n        }\n\n        else {\n            logger.error(\"Invalid proctocol data type: \" + ProtocolDataTypesMap[header.type]??header.type)\n        }\n        // global scope output (e.g. for displaying binary data or scope metadata)\n        IOHandler.handleScopeFinished(header.sid, scope);\n\n    }\n\n    // Persistant Scope Memory\n    static persistent_memory:AutoMap<string,{[key:number|string]:any}>;\n\n    static saveScopeMemoryValue(scope_identifier:string, key:string|number, value: any) {\n        logger.debug(\"saving persistent memory location ? for ?: ?\", key, scope_identifier, value)\n        if (this.persistent_memory) this.persistent_memory.getAuto(scope_identifier)[key] = value;\n        else logger.error(\"persistent memory was not initialized\");\n    }\n\n    static getScopeMemory(scope_identifier:string) {\n        return this.persistent_memory?.get(scope_identifier)\n    }\n\n    /**\n     * Collapses WRAPPED_PROMISE values returned from Runtime.castValue\n     */\n    public static collapseValueCast(value: unknown) {\n        if (value && value[WRAPPED_PROMISE]) return value[WRAPPED_PROMISE];\n        else return value;\n    }\n\n    /**\n     * Cast a value to a specific type\n     * Result must be awaited and collapsed with Runtime.collapseValueCast\n     */\n    public static async castValue(type:Type, value:any, context?:any, context_location?:URL, origin:Endpoint = Runtime.endpoint, no_fetch?:boolean, assigningPtrId?: string): Promise<any> {\n        \n        let old_type = Type.ofValue(value);\n        let old_value = value instanceof UnresolvedValue ? value[DX_VALUE] : value;\n        // already the right type\n        if (old_type == type) return old_value;\n        \n        let new_value:any = UNKNOWN_TYPE;\n\n        // only handle std namespace / js:Object / js:Symbol\n        if (type.namespace == \"std\" || type == Type.js.NativeObject || type == Type.js.Symbol || type == Type.js.RegExp || type == Type.js.MediaStream || type == Type.js.File || type.root_type == Type.js.TypedArray) {\n            const uncollapsed_old_value = old_value\n            if (old_value instanceof Pointer) old_value = old_value.val;\n\n            // handle default casts\n            switch (type.root_type) {\n\n                // get <Type>\n                case Type.std.Type:{\n                    new_value = old_type;\n                    break;\n                }\n\n                case Type.std.void: {\n                    new_value = VOID;\n                    break;\n                }\n\n                case Type.std.null: {\n                    new_value = null;\n                    break;\n                }\n\n                case Type.std.text: {\n                    if (old_value === VOID) new_value = globalThis.String()\n                    else if (old_value instanceof Markdown) new_value = old_value.toString();\n                    else if (old_value instanceof ArrayBuffer) new_value = Runtime.utf8_decoder.decode(old_value); // cast to <text>\n                    else if (old_value instanceof TypedArray) new_value = Runtime.utf8_decoder.decode(old_value.buffer); // cast to <text>\n                    else if (old_value instanceof Blob) new_value = await old_value.text()\n                    else new_value = this.valueToDatexString(value, false, true); \n                    break;\n                }\n                case Type.std.decimal: {\n                    if (old_value === VOID) new_value = Number()\n                    else if (old_value==null) new_value =  0;\n                    else if (typeof old_value == \"string\" || typeof old_value == \"boolean\" || typeof old_value == \"bigint\"){\n                        new_value = Number(old_value);\n                        if (isNaN(new_value)) throw new ValueError(\"Failed to convert \"+ old_type +\" to \"+type);\n                    }\n                    break;\n                }\n                case Type.std.integer: {\n                    if (old_value === VOID) new_value = this.OPTIONS.USE_BIGINTS ? 0n : 0;\n                    else if (typeof old_value == \"number\") new_value = Runtime.OPTIONS.USE_BIGINTS ?  BigInt(Math.floor(old_value)) : Math.floor(old_value);\n                    else if (old_value==null) new_value = this.OPTIONS.USE_BIGINTS ? 0n : 0;\n                    else if (typeof old_value == \"string\" || typeof old_value == \"boolean\" || typeof old_value == \"bigint\"){\n                        new_value = Math.floor(Number(old_value));\n                        if (isNaN(new_value)) throw new ValueError(\"Failed to convert \"+ old_type+\" to \"+type);\n                        if (Runtime.OPTIONS.USE_BIGINTS) new_value = BigInt(new_value);\n                    }\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.boolean: {\n                    if (old_value === VOID) new_value = globalThis.Boolean();\n                    new_value = !!old_value;\n                    break;\n                }\n                case Type.std.endpoint: {\n                    if (typeof old_value==\"string\") new_value = await Endpoint.fromStringAsync(old_value)\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.target: {\n                    if (typeof old_value==\"string\") new_value = Target.get(old_value);\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.Object: {\n                    if (old_value === VOID) new_value = Object();\n                    else if (old_value instanceof Tuple) new_value = old_value.toObject();\n                    else if (old_value && typeof old_value == \"object\") new_value = {...<object>Runtime.serializeValue(old_value)??{}};\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.js.NativeObject: {\n                    if (old_value === VOID) new_value = Object();\n                    else if (old_value instanceof Tuple) new_value = old_value.toObject();\n                    else if (old_value && typeof old_value == \"object\") new_value = {...<object>Runtime.serializeValue(old_value)??{}};\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.js.Symbol: {\n                    if (old_value === VOID) new_value = Symbol();\n                    else if (typeof old_value == \"string\") new_value = Symbol(old_value);\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.js.RegExp: {\n                    if (typeof old_value == \"string\") new_value = new RegExp(old_value);\n                    else if (old_value instanceof Tuple) {\n                        const array = old_value.toArray() as [string, string?];\n                        new_value = new RegExp(...array);\n                    }\n                    else if (old_value instanceof Array) {\n                        new_value = new RegExp(...old_value as [string, string?]);\n                    }\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.js.File: {\n                    if (old_value && typeof old_value == \"object\") {\n                        new_value = new File([old_value.content], old_value.name, {\n                            type: old_value.type,\n                            lastModified: old_value.lastModified\n                        });\n                    }\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.js.TypedArray: {\n                    if (old_value instanceof ArrayBuffer) {\n                        switch (type.variation) {\n                            case \"u8\": new_value = new Uint8Array(old_value); break;\n                            case \"u16\": new_value = new Uint16Array(old_value); break;\n                            case \"u32\": new_value = new Uint32Array(old_value); break;\n                            case \"u64\": new_value = new BigUint64Array(old_value); break;\n                            case \"i8\": new_value = new Int8Array(old_value); break;\n                            case \"i16\": new_value = new Int16Array(old_value); break;\n                            case \"i32\": new_value = new Int32Array(old_value); break;\n                            case \"i64\": new_value = new BigInt64Array(old_value); break;\n                            case \"f32\": new_value = new Float32Array(old_value); break;\n                            case \"f64\": new_value = new Float64Array(old_value); break;\n                            default: new_value = INVALID;\n                        }\n                    }\n                    else new_value = INVALID;\n\n                    break;\n                }\n\n                case Type.js.MediaStream: {\n                    if (!globalThis.MediaStream) throw new Error(\"MediaStreams are not supported on this endpoint\")\n                    if (old_value === VOID || typeof old_value == \"object\") {\n                        if (assigningPtrId) {\n                            const {WebRTCInterface} = await import(\"../network/communication-interfaces/webrtc-interface.ts\")\n                            new_value = await WebRTCInterface.getMediaStream(assigningPtrId)\n                        } \n                        else new_value = new MediaStream();\n                    }\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.Tuple: {\n                    if (old_value === VOID) new_value = new Tuple().seal();\n                    else if (old_value instanceof Array){\n                        new_value = new Tuple(old_value).seal();\n                    }\n                    else if (old_value instanceof Set) {\n                        new_value = new Tuple(old_value).seal();\n                    }\n                    else if (old_value instanceof Map){\n                        new_value = new Tuple(old_value.entries()).seal();\n                    }\n                    else if (old_value instanceof Iterator){\n                        new_value = await old_value.collapse()\n                    }\n                    else new_value = new Tuple([old_value]).seal();\n                    break;\n                }\n                \n\n                case Type.std.Array: {\n                    if (old_value === VOID) new_value = [];\n                    else if (old_value instanceof Tuple) new_value = old_value.toArray();\n                    else if (old_value instanceof Set) new_value = [...old_value];\n                    else if (old_value instanceof Map) new_value = [...old_value.entries()];\n                    else if (old_value instanceof ArrayBuffer) new_value = [...new Uint8Array(old_value)];\n                    else new_value = INVALID;\n                    break;\n                }        \n                case Type.std.buffer: {\n                    if (old_value === VOID) new_value = new ArrayBuffer(0);\n                    else if (typeof old_value==\"string\") new_value = this.utf8_encoder.encode(old_value).buffer;\n                    else new_value = INVALID;\n                    break;\n                }\n\n                // Errors\n                case Type.std.Error: {\n                    if (old_value === VOID) new_value = new DatexError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new DatexError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new DatexError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.SyntaxError: {\n                    if (old_value === VOID) new_value = new SyntaxError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new SyntaxError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new SyntaxError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.CompilerError: {\n                    if (old_value === VOID) new_value = new CompilerError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new CompilerError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new CompilerError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.PointerError: {\n                    if (old_value === VOID) new_value = new PointerError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new PointerError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new PointerError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.ValueError: {\n                    if (old_value === VOID) new_value = new ValueError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new ValueError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new ValueError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.PermissionError: {\n                    if (old_value === VOID) new_value = new PermissionError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new PermissionError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new PermissionError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                } \n                case Type.std.TypeError: {\n                    if (old_value === VOID) new_value = new TypeError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new TypeError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new TypeError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.NetworkError: {\n                    if (old_value === VOID) new_value = new NetworkError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new NetworkError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new NetworkError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.SecurityError: {\n                    if (old_value === VOID) new_value = new SecurityError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new SecurityError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new SecurityError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.RuntimeError: {\n                    if (old_value === VOID) new_value = new RuntimeError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new RuntimeError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new RuntimeError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.AssertionError: {\n                    if (old_value === VOID) new_value = new AssertionError(null, null);\n                    else if(typeof old_value == \"string\" || typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new AssertionError(old_value, null);\n                    else if(old_value instanceof Array) new_value = new AssertionError(old_value[0], old_value[1])\n                    else new_value = INVALID;\n                    break;\n                }\n\n                case Type.std.WeakRef: {\n                    if (old_value === VOID) {\n                        // empty weakref\n                        new_value = new WeakRef(Symbol(\"EMPTY\"));\n                        new_value.deref = ()=>{};\n                    }\n                    else if (typeof uncollapsed_old_value == \"symbol\" || typeof uncollapsed_old_value == \"object\" || typeof uncollapsed_old_value == \"function\") {\n                        const ptr = Pointer.collapseValue(Pointer.createOrGet(uncollapsed_old_value))\n                        new_value = new WeakRef(ptr);\n                    }\n                    // pointer id -> resolve pointer\n                    else if (typeof old_value == \"string\" && old_value.startsWith(\"$\")) {\n                        try {\n                            const ptr = Pointer.collapseValue(await Pointer.load(old_value.slice(1)))\n                            new_value = new WeakRef(ptr);\n                        }\n                        catch {\n                            // pointer not found, empty weakref\n                            new_value = new WeakRef(Symbol(\"EMPTY\"));\n                            new_value.deref = ()=>{};\n                        }\n                    }\n                    else new_value = INVALID;\n                    break;\n                }\n\n                case Type.std.time: {\n                    if (old_value === VOID) new_value = new Time(Date.now());\n                    else if (typeof old_value == \"number\" || typeof old_value == \"bigint\") new_value = new Time(Number(old_value));\n                    else new_value = INVALID;\n                    break;\n                }\n\n                case Type.std.url: {\n                    if (typeof old_value == \"string\") new_value = new URL(old_value, context_location);\n                    else new_value = INVALID;\n                    break;\n                }\n\n                case Type.std.Iterator: {\n                    new_value = Iterator.get(old_value);\n                    break;\n                }\n\n\n                case Type.std.Assertion: {\n                    if (old_value instanceof Scope) new_value = Assertion.get(old_value)\n                    else new_value = INVALID;\n                    break;\n                }\n                \n                case Type.std.Stream: {\n                    if (old_value === VOID) new_value = new Stream();\n                    else if (typeof old_value == \"object\") new_value = new Stream();\n                    else new_value = INVALID;\n                    break;\n                }\n                case Type.std.Scope: {\n                    new_value = INVALID;\n                    break;\n                }\n                case Type.std.Negation: {\n                    new_value = new Negation(old_value)\n                    break;\n                }\n        \n                default: {\n\n                    if (Type.std.Function.matchesType(type)) {\n                        if (old_value instanceof Tuple) {\n                            // from js source\n                            if (old_value.has('js_source')) {\n                                const source = old_value.get('js_source');\n                                const dependencies = old_value.get('js_deps') ?? {}\n                                const intermediateFn = createFunctionWithDependencyInjections(source, dependencies)\n                                new_value = DatexFunction.createFromJSFunction(intermediateFn, old_value.get('context'), old_value.get('location'), undefined, undefined, undefined, type.parameters?.[0]);\n                                new_value.external_variables = dependencies;\n                                DatexObject.setType(new_value, type);\n                            }\n                            // datex\n                            else {\n                                new_value = DatexFunction.createFromDatexScope(old_value.get('body'), old_value.get('context'), old_value.get('location'), undefined, false, type.parameters?.[0]);\n                                DatexObject.setType(new_value, type);\n                            }\n                        }\n                        else if (old_value instanceof Scope) {\n                            new_value = DatexFunction.createFromDatexScope(old_value, context, undefined, undefined, false, type.parameters?.[0]);\n                            DatexObject.setType(new_value, type);\n                        }\n                        else if (old_value == VOID) {\n                            new_value = DatexFunction.createFromDatexScope(old_value, context, undefined, undefined, false, type.parameters?.[0]);\n                            DatexObject.setType(new_value, type);\n                        }\n                        else new_value = INVALID;\n                    }\n\n                    // special arrays\n                    else if (Type.std.Array.matchesType(type)) {\n                        switch (type.variation) {\n                            case \"8\": new_value = [...new Int8Array(old_value)];break;\n                            case \"16\": new_value = [...new Int16Array(old_value)];break;\n                            case \"32\": new_value = [...new Int32Array(old_value)];break;\n                            case \"64\": new_value = [...new BigInt64Array(old_value)];break;\n                            case \"u8\": new_value = [...new Uint8Array(old_value)];break;\n                            case \"u16\": new_value = [...new Uint16Array(old_value)];break;\n                            case \"u32\": new_value = [...new Uint32Array(old_value)];break;\n                            case \"u64\": new_value = [...new BigUint64Array(old_value)];break;\n                            default: new_value = INVALID;\n                        }\n                        new_value[DX_TYPE] = type;\n                    }\n\n                    // handle mime types\n                    else if (\n                        Type.std.text.matchesType(type) || \n                        Type.std.application.matchesType(type) ||\n                        Type.std.image.matchesType(type) ||\n                        Type.std.audio.matchesType(type) ||\n                        Type.std.video.matchesType(type) ||\n                        Type.std.model.matchesType(type)\n                    ) {\n                        const full_mime_type = `${type.name}/${type.variation}`;\n                        let mime_type = full_mime_type;\n                        // logger.debug(\"mime type: \" + mime_type);\n\n                        // custom mime type mapping\n                        if (mime_type in Runtime.MIME_TYPE_MAPPING || ((mime_type = `${type.name}/*`) in Runtime.MIME_TYPE_MAPPING)){\n                            const mapping = Runtime.MIME_TYPE_MAPPING[<keyof typeof Runtime.MIME_TYPE_MAPPING>mime_type];\n                            // generator function\n                            if ('generator' in mapping && typeof mapping.generator == \"function\") {\n                                const blob = new Blob([old_value], {type:full_mime_type});\n                                new_value = mapping.generator(blob);\n                            }\n                            // simple class\n                            else {\n                                new_value = new (<new(...args:any[])=>unknown> mapping) (old_value)\n                            }\n                        }\n                        // default: blob\n                        else {\n                            new_value = new Blob([old_value], {type:full_mime_type});\n                        }\n\n                        // save type and cache\n                        new_value[DX_TYPE] = type;\n                        new_value[DX_SERIALIZED] = old_value;\n                    }\n\n                }\n            }\n        }\n\n\n        // try custom type cast to JS class\n        if (new_value === UNKNOWN_TYPE && (type.hasMatchingJSClassOrPrototype() || type.template)) {\n            new_value = type.cast(old_value, context, origin, false, false, assigningPtrId);\n        }\n\n        // still unknown type\n        if (new_value === UNKNOWN_TYPE){\n\n            // try loading the type configuration dynamically for this type and cast again\n            if (!no_fetch) {\n                try {\n                    await JSInterface.loadTypeConfiguration(type);\n                    return Runtime.castValue(type, value, context, undefined, origin, true, assigningPtrId); // no_fetch = true\n                } catch (e) {\n                    logger.error(e)\n                }\n            }\n\n            else {\n                // cannot fetch type, just cast default\n                logger.warn(\"Cannot find a type definition for \"+type.toString()+\". Make sure the module for this type is imported. If this type is no longer used, try to clear your eternal caches.\");\n                new_value = type.cast(old_value, context, origin, false, false, assigningPtrId);\n            }\n\n        }\n\n        // could not cast \n        if (new_value === INVALID) {\n            throw new TypeError(\"Cannot cast \"+ old_type +\" to \"+type);\n        }\n\n        // return new value\n        // dont' collapes Promise on return\n        if (new_value instanceof Promise) return {[WRAPPED_PROMISE]: new_value}\n        else return new_value;\n    }\n\n    \n    static async cacheValue(value:unknown){\n        if (value instanceof Blob) {\n            if (!(value as any)[DX_SERIALIZED]) {\n                (value as any)[DX_SERIALIZED] = await value.arrayBuffer();\n                // remove serialized value cache after 1 minute\n                setTimeout(()=>{delete (value as any)[DX_SERIALIZED]}, 60_000);\n            }\n        }\n        else {\n            throw new ValueError(\"Cannot cache value of type \" + Type.ofValue(value));\n        }\n    }\n\n    /**\n     * Serialize any value to a value accepted by the DATEX Compiler - no recursive serialization\n     * @param value any value\n     * @returns serialized value\n     */    \n    static serializeValue(value:unknown, receiver?:target_clause):fundamental {\n\n        let type:Type;\n\n        // file (special handling of DX_SERIALIZED inherited from Blob)\n        if (value instanceof File) {\n            if (!(value as any)[DX_SERIALIZED]) throw new RuntimeError(\"Cannot serialize file without cached content\");\n            return {name: value.name, type: value.type, size: value.size, lastModified: value.lastModified, content: (value as any)[DX_SERIALIZED]};\n        }\n\n        // cached serialized (e.g. for mime types)\n        if ((<Record<symbol,fundamental>>value)?.[DX_SERIALIZED]) return (<Record<symbol,fundamental>>value)[DX_SERIALIZED];\n\n        // pointer property\n        if (value instanceof PointerProperty) return value;\n\n        // raw datex - only works with asynchronous compilation (not with optimized value compilation) - otherwise a CompilerError is thrown\n        if (value instanceof DatexResponse) return value;\n\n        // primitives\n        if (typeof value == \"string\" || typeof value == \"boolean\" || typeof value == \"number\" || typeof value == \"bigint\") return value;\n        \n        // symbol\n        if (typeof value == \"symbol\") return value.toString().slice(7,-1) || undefined\n\n        // regex\n        if (value instanceof RegExp) return value.flags ? new Tuple([value.source, value.flags]) : value.source;\n\n        if (globalThis.MediaStream && value instanceof MediaStream) return {};\n\n        // weakref\n        if (value instanceof WeakRef) {\n            const deref = value.deref();\n            // empty weak ref\n            if (!deref) return VOID;\n            const ptr = Pointer.createOrGet(deref)\n            if (ptr) return \"$\"+ptr.id;\n            else throw new TypeError(\"Cannot serialize weakref to non-pointer value\");\n        }\n        \n        // directly return, cannot be overwritten\n        if (value === VOID || value === null || value instanceof Endpoint || value instanceof Type) return value;\n        if (value instanceof Scope) return value;\n        if (value instanceof URL) return value;\n        if (value instanceof Logical) return value;\n        if (value instanceof Time) return value;\n\n        // TODO fix recursive context problem TODO: replace with return value.body ?? VOID;\n        if (value instanceof DatexFunction) {\n            // only expose js source if function location matches receiver\n            // TODO: improve, prevent 100% internal js code exposure\n            if (value.ntarget && receiver === value.location) {\n                return new Tuple({js_source: value.js_source, js_deps: value.external_variables, body:value.body, location:value.location});\n            }\n            return new Tuple({/*context:value.context,*/ body:value.body, location:value.location});\n        }\n        if (value instanceof Assertion) return value.scope;\n        if (value instanceof Iterator) return VOID;\n\n        // collapse wildcard target\n        if (value instanceof WildcardTarget) return value.target;\n        // normal ArrayBuffer does not need to be serialized further:\n        if (value instanceof ArrayBuffer) return value;\n        // stream has no internal content\n        if (value instanceof Stream) return VOID;\n       \n        // special Typed Buffer -> get buffer\n        if (value instanceof TypedArray) return value.buffer;\n\n        // mime types - not cached\n        if (value instanceof Blob) {\n            throw new RuntimeError(\"Uncached mime type value cannot be serialized to DATEX Type\");\n        }\n        if (Runtime.mime_type_classes.has(value.constructor)) throw new RuntimeError(\"Uncached custom mime type value cannot be serialized to DATEX Type\");\n\n        // check if custom serialization available\n        let serialized = JSInterface.serializeValue(value); \n        if (serialized instanceof TypedArray) serialized = (<any>serialized).buffer;\n\n        if (serialized!==INVALID  && serialized !==NOT_EXISTING) {} // serialization with DatexCustomPseudoClasses was successful\n\n        // serialization for <std:*> types\n        else if (value instanceof DatexError) serialized = [value.code ?? value.message, value.datex_stack]\n        else if (value instanceof Error) serialized = value.toString();\n        //else if (value instanceof Date) serialized = BigInt(value.getTime()||0);\n\n\n        // DatexUnresolvedValue without corresponding JS class\n        else if (value instanceof UnresolvedValue) serialized = Runtime.serializeValue(value[DX_VALUE])\n\n        // create new object, lose the original reference\n\n        // Array or object: allow all keys/values\n        else if (value instanceof Array) {\n            serialized = [];\n            for (let i=0; i<value.length; i++){\n                serialized[i] = value[i];\n            }\n        }\n\n        else if (value instanceof Tuple) serialized = value.clone();\n    \n        // type with fixed visible children -> check which properties are actually available to DATEX\n        else if ((type = Type.ofValue(value)) && type.visible_children) {\n            serialized = {};\n            const type = Type.ofValue(value);\n            const pointer = Pointer.getByValue(value)\n            for (const key of type.visible_children){\n                serialized[key] = pointer?.shadow_object ? pointer.shadow_object[key]/*keep references*/ : value[key];\n            }\n        }\n\n        // is object\n        else if (typeof value == \"object\") {\n            serialized = {};\n            const pointer = Pointer.getByValue(value)\n            for (const key of Object.keys(value)){\n                serialized[key] = pointer?.shadow_object ? pointer.shadow_object[key] : value[key];\n            }\n        }\n\n        if (serialized == INVALID || serialized == NOT_EXISTING) return VOID;\n\n        return serialized;\n    }\n\n    \n\n    /**\n     * Compares to values by comparing their DATEX representation\n     * required to be async because of hash generation\n     * @param a first value\n     * @param b second value\n     * @returns true if values are equal, else false\n     */\n    public static async equalValues(a:any, b:any) {\n        // collapse (primitive) pointers\n        a = ReactiveValue.collapseValue(a,true,true);\n        b = ReactiveValue.collapseValue(b,true,true);\n\n        // empty Tuple equals void\n        if (a === VOID && b instanceof Tuple && Object.keys(b).length == 0) return true;\n        if (b === VOID && a instanceof Tuple && Object.keys(a).length == 0) return true;\n\n        // compare ints/floats\n        if ((typeof a == \"number\" || typeof a == \"bigint\") && (typeof b == \"number\" || typeof b == \"bigint\")) return a == b;\n\n        // cannot match\n        if (typeof a != typeof b) return false;\n        // both primitive values\n        if (a !== Object(a) && b !== Object(a !== Object(a))) {\n            return a === b;\n        }\n        // compare hashes\n        const [hashA, hashB] = await Promise.all([Compiler.getValueHashString(a), Compiler.getValueHashString(b)])\n\n        return (hashA === hashB)\n    }\n\n\n\n    private static FORMAT_INDENT = 3;\n\n    public static TEXT_KEY = /^\\w+$/;\n\n    private static escapeString(string:string, formatted=false) {\n        string = string\n            .replace(/\\\\/g, '\\\\\\\\')\n            .replace(/\\\"/g, '\\\\\"');\n        if (!formatted) string = string.replace(/\\n/g, \"\\\\n\");\n        return '\"'+string+'\"';\n    }\n\n\n    /**\n     * @experimental\n     * Converts values to string by compiling and decompiling (Decompiler not yet 100% correct)\n     * resolves recursive structures and references correctly, compared to valueToDatexString\n     * @param value any value\n     * @param deep_clone collapse pointers recursively\n     * @param collapse_value collapse value if it is apointer \n     * @param formatted add new lines / more spaces, otherwise compact representation\n     * @returns value as DATEX Script string\n     */\n    static valueToDatexStringExperimental(value: unknown, formatted = true, colorized = false, deep_clone = false, collapse_value = false, resolve_slots = true){\n        try {\n            // extract body (TODO: just temporary, rust impl does not yet support header decompilation)\n            const compiled = new Uint8Array(Compiler.encodeValue(value, undefined, false, deep_clone, collapse_value, false, true, false, true));\n            return wasm_decompile(compiled, formatted, colorized, resolve_slots).replace(/\\r\\n$/, '');\n        } catch (e) {\n            // console.debug(e);\n            return this.valueToDatexString(value, formatted)\n        }\n        // return Decompiler.decompile(Compiler.encodeValue(value, undefined, false, deep_clone, collapse_value), true, formatted, formatted, false);\n    }\n\n\n    /** Converts any value to its DAETX representation \n     * \n     * @param formatted adds line breaks and indentations\n     * @param collapse_pointers collapse value if pointer (not recursive)\n     * @param deep_collapse if true, all pointer values are collapsed recursively \n     * @param pointer_anchors add start and end sequence (e.g. html) around a pointer\n     * @return value as DATEX Script string\n     */\n\n    static valueToDatexString(value:any, formatted = false, collapse_pointers = false, deep_collapse = false, pointer_anchors?:[string,string]): string {\n        return this._valueToDatexString(value, formatted, 0, collapse_pointers, deep_collapse, pointer_anchors);\n    }\n\n    /**_serialized: object already only consists of primitives or arrays / objects */\n    private static _valueToDatexString(value:any, formatted = false, depth=0, collapse_pointers=false, deep_collapse = false, pointer_anchors?:[string,string], _serialized = false, parents = new Set<any>()): string {\n        let string:string;\n\n        // proxyify pointers\n        if (!collapse_pointers && !deep_collapse) value = Pointer.pointerifyValue(value);\n        if (collapse_pointers && value instanceof ReactiveValue) value = value.val; \n        // don't show anonymous pointers as pointers\n        if (value instanceof Pointer && value.is_anonymous) value = value.original_value;\n\n        // check for recursive objects\n        if (parents.has(value)) return value instanceof Tuple ? \"(...)\"  : (value instanceof Array ? \"[...]\" : \"{...}\");\n\n        // get type\n        const type = value instanceof Pointer ? Type.std.Object : Type.ofValue(value);\n\n        if (typeof value == \"string\") {\n            string = Runtime.escapeString(value, formatted);\n        }\n        else if (value === null) {\n            string = \"null\";\n        }\n        else if (value === VOID) {\n            string = \"void\";\n        }\n        else if (value instanceof Quantity) {\n            string = value.toString();\n        }\n        else if (value instanceof Time) {\n            string = value.toString();\n        }\n        // floats (always represented as x.y)\n        else if (typeof value == \"number\") {\n            if (isNaN(value)) string = 'nan';\n            else if (value ===  -Infinity) string = '-infinity';\n            else if (value ===  Infinity) string = 'infinity';\n            else if (Object.is(value, -0)) string = '-0.0'; // special edge case for -0.0\n            else if (Number.isInteger(value)) {\n                string = value.toString()\n                if (!string.includes(\"e\")) string += '.0'; // make sure to show float as x.0 (as long as not in exp. representation)\n            }\n            else string = value.toString(); // normal float\n        }\n        // ints & booleans\n        else if (typeof value == \"bigint\" || typeof value == \"boolean\") {\n            string = value.toString();\n        }\n        else if (value instanceof ArrayBuffer || value instanceof TypedArray) {\n            let type = \"\"\n            if (value instanceof Uint8Array) type = \"<js:TypedArray/u8>\";\n            else if (value instanceof Uint16Array) type = \"<js:TypedArray/u16>\";\n            else if (value instanceof Uint32Array) type = \"<js:TypedArray/u32>\";\n            else if (value instanceof BigInt64Array) type = \"<js:TypedArray/i64>\";\n            else if (value instanceof Int8Array) type = \"<js:TypedArray/i8>\";\n            else if (value instanceof Int16Array) type = \"<js:TypedArray/i16>\";\n            else if (value instanceof Int32Array) type = \"<js:TypedArray/i32>\";\n            else if (value instanceof BigUint64Array) type = \"<js:TypedArray/u64>\";\n            else if (value instanceof Float32Array) type = \"<js:TypedArray/f32>\";\n            else if (value instanceof Float64Array) type = \"<js:TypedArray/f64>\";\n\n            string = type+\"`\"+buffer2hex(value instanceof Uint8Array ? value : new Uint8Array(value instanceof TypedArray ? value.buffer : value), undefined, null)+\"`\"\n        }\n        else if (value instanceof Scope) {\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            string = value.toString(formatted, spaces);\n        }\n        else if (value instanceof Target) {\n            string = value.toString();\n        }\n        else if (value instanceof URL) {\n            string = value.toString();\n        }\n        else if (value instanceof Pointer) { \n            if (pointer_anchors) string = pointer_anchors[0] + value.idString() + pointer_anchors[1];\n            else string = value.idString();\n        }\n        else if (value instanceof PointerProperty) { \n            const string_value = value.pointer.idString() + \"->\" + (typeof value.key == \"string\" && value.key.match(Runtime.TEXT_KEY) ? value.key : Runtime.valueToDatexString(value.key,false));\n            if (pointer_anchors) string = pointer_anchors[0] + string_value + pointer_anchors[1];\n            else string = string_value;\n        }\n        else if (value instanceof Type) {\n            string = value.toString();\n        }\n        else if (value instanceof Negation) {\n            string = \"!\" + this._valueToDatexString(value.not(), formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n        }\n        else if (value instanceof Conjunction) {\n            string = \"(\";\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            for (const el of value) {\n                string +=  (formatted ? spaces:\"\") + this._valueToDatexString(el, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                string += \"&\";\n            }\n            string = string.slice(0,-1);\n            string += \")\";\n        }\n        else if (value instanceof Disjunction) {\n            string = \"(\";\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            for (const el of value) {\n                string +=  (formatted ? spaces:\"\") + this._valueToDatexString(el, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                string += \"|\";\n            }\n            string = string.slice(0,-1);\n            string += \")\";\n        }\n        else if (value instanceof Tuple && _serialized) {\n            parents.add(value);\n            const brackets = ['(', ')'];\n            if (value instanceof Tuple && value.indexed.length == 1 && value.named.size == 0) string = Type.std.Tuple.toString();\n            else string = \"\";\n            string += brackets[0] + (formatted ? \"\\n\":\"\")\n            let first = true;\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            for (const [k,v] of value) {\n                if (!first) string += \", \" + (formatted ? \"\\n\":\"\")\n                // named property\n                if (typeof k == 'string')  string += (formatted ? spaces:\"\") + `${k.match(Runtime.TEXT_KEY) ? k : Runtime.escapeString(k, false)}: ` + this._valueToDatexString(v, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                // indexed property\n                else string +=  (formatted ? spaces:\"\") + this._valueToDatexString(v, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                first = false;\n            }\n            string += (formatted ? \"\\n\"+Array(this.FORMAT_INDENT*depth).join(' '):\"\") + brackets[1];\n        }\n        // <Array>\n        else if (value instanceof Array && _serialized) {\n            parents.add(value);\n            const brackets = ['[', ']'];\n            string = ((value instanceof Tuple && value.length == 0) ? Type.std.Tuple.toString() : \"\") + brackets[0] + (formatted ? \"\\n\":\"\")\n            // make clear tuple with only 1 element is a tuple (...)\n            if (value instanceof Tuple && value.length == 1) string += \"...\";\n            let first = true;\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            for (let v of value) {\n                if (!first) string += \", \" + (formatted ? \"\\n\":\"\")\n                string +=  (formatted ? spaces:\"\") + this._valueToDatexString(v, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                first = false;\n            }\n            string += (formatted ? \"\\n\"+Array(this.FORMAT_INDENT*depth).join(' '):\"\") + brackets[1];\n        }\n        // all other sorts of object\n        else if ((typeof value == \"object\" || value instanceof DatexFunction || value instanceof Assertion /*also an object*/) && _serialized) { // must be a 'JSON' object  \n            parents.add(value);   \n            const brackets = ['{', '}'];\n            const entries = Object.entries(value);\n\n            string = brackets[0] + (formatted ? \"\\n\":\"\");\n            let first = true;\n            const spaces = Array(this.FORMAT_INDENT*(depth+1)).join(' ');\n            for (const [key, v] of entries) {\n                if (!first) string +=  \", \" + (formatted ? \"\\n\":\"\")\n                string += (formatted ? spaces:\"\") + `${key.match(Runtime.TEXT_KEY) ? key : Runtime.escapeString(key, false)}: ` + this._valueToDatexString(v, formatted, depth+1, false, deep_collapse, pointer_anchors, false, new Set(parents))\n                first = false;\n            }\n            string +=  (formatted ? \"\\n\"+Array(this.FORMAT_INDENT*depth).join(' '):\"\") + brackets[1];\n        }\n        else if (typeof value == \"object\" || value instanceof DatexFunction || value instanceof Assertion /*also an object*/) {\n            parents.add(value);\n            let serialized = value!=null ? this.serializeValue(value, Runtime.endpoint) : value;\n            serialized = Pointer.pointerifyValue(serialized); // try to get a pointer from serialized\n\n\n            if (serialized == VOID) string = \"()\"; // display void as ()\n            else if (type?.is_primitive) string = this._valueToDatexString(serialized, formatted, depth, true, deep_collapse, pointer_anchors, false, new Set(parents)) // is primitive type - use original value\n            else string = this._valueToDatexString(serialized, formatted, depth, true, deep_collapse, pointer_anchors, true, new Set(parents)) // is complex or fundamental type\n        }\n\n        else { // all invalid DATEX values (functions, ...)\n            string = \"void\";\n        }\n\n        // type cast required: if not primitive and complex, or type variation\n        // exception for explicit type quantity, type variation is always included in primitive representation without explicit cast\n        if (type && ((!type.is_primitive && type.is_complex && type != Type.std.Scope) || type.root_type !== type) && !Type.std.quantity.matchesType(type)) string = type.toString() + (formatted ? \" \":\"\") + string;\n\n        return string;\n    }\n\n\n    static readonly runtime_actions:\n    {\n        waitForBuffer: (SCOPE: datex_scope, jump_to_index?: number, shift_current_index?: number) => void,\n        constructFilterElement: <T extends typeof Endpoint = typeof Endpoint>(SCOPE: datex_scope, type: BinaryCode, appspace_targets?:Endpoint[]) => false | InstanceType<T>\n        trimArray: (array: Array<any>) => any[],\n        getTrimmedArrayLength: (array: Array<any>) => number,\n        returnValue: (SCOPE: datex_scope, value: any) => Promise<void>,\n        enterSubScope: (SCOPE: datex_scope) => void,\n        exitSubScope: (SCOPE: datex_scope) => Promise<any>,\n        newSubScope: (SCOPE: datex_scope) => Promise<void>,\n        closeSubScopeAssignments: (SCOPE: datex_scope) => Promise<void>,\n        handleAssignAction: (SCOPE: datex_scope, action_type: BinaryCode | -1, parent: any, key: any, value: any, current_val?: any) => Promise<void>,\n        checkValueReadPermission: (SCOPE: datex_scope, parent: any, key: string) => void,\n        checkValueUpdatePermission: (SCOPE: datex_scope, parent: any, key: string) => void,\n        countValue: (value: any) => bigint,\n        getReferencedProperty: (SCOPE: datex_scope, parent: any, key: any) => PointerProperty<any>,\n        getProperty: (SCOPE: datex_scope, parent: any, key: any) => any,\n        has: (SCOPE: datex_scope, parent: any, key: any) => Promise<boolean>,\n        getKeys: (value: any, array_indices_as_numbers?:boolean) => Iterator<any>,\n        setProperty: (SCOPE: datex_scope, parent: any, key: any, value: any) => void,\n        assignAction(SCOPE: datex_scope, action_type: BinaryCode, parent: any, key: any, value: any, current_val?: any): void,\n        _removeItemFromArray(arr: any[], value: any): void,\n        extractScopeBlock(SCOPE: datex_scope): ArrayBuffer | false,\n        extractVariableName(SCOPE: datex_scope): string | number | false,\n        extractType(SCOPE: datex_scope, is_extended_type?: boolean): [Type, boolean] | false | Type,\n        forkScope(SCOPE: datex_scope): datex_scope,\n        insertToScope(SCOPE: datex_scope, el: any, literal_value?: boolean): Promise<void>,\n        setInternalVarReference(SCOPE: datex_scope, name: number | string, reference: any, save_persistent?: boolean): void,\n        setInternalVarValue(SCOPE: datex_scope, name: number | string, value: any, save_persistent?: boolean): void\n    }\n    = {\n\n        // shift current index and set cache_previous to true, SCOPE should be stopped after calling this function, to wait for next dxb block\n        waitForBuffer(SCOPE:datex_scope, jump_to_index?:number, shift_current_index?:number){\n            if (typeof jump_to_index == \"number\") SCOPE.current_index = jump_to_index;\n            else if (typeof shift_current_index == \"number\") SCOPE.current_index -= shift_current_index; \n            else  SCOPE.current_index = SCOPE.start_index; // use stored jump-back index from SCOPE\n\n            SCOPE.cache_previous = true;\n        },\n\n        constructFilterElement<T extends typeof Endpoint=typeof Endpoint>(SCOPE:datex_scope, type:BinaryCode, target_list:Endpoint[]):InstanceType<T>|false {\n            /** wait for buffer */\n            if (SCOPE.current_index+2 > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n\n            const name_is_binary = type == BinaryCode.ENDPOINT || type == BinaryCode.ENDPOINT_WILDCARD;\n\n            let instance:string;\n\n            let name_length = SCOPE.buffer_views.uint8[SCOPE.current_index++]; // get name length\n            let subspace_number = SCOPE.buffer_views.uint8[SCOPE.current_index++]; // get subspace number\n            let instance_length = SCOPE.buffer_views.uint8[SCOPE.current_index++]; // get instance length\n\n            if (instance_length == 0) instance = \"*\";\n            else if (instance_length == 255) instance_length = 0;\n\n            /** wait for buffer */\n            if (SCOPE.current_index+name_length+instance_length+1 > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/  \n\n            let name_binary = SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=name_length);\n            let name = name_is_binary ? name_binary : Runtime.utf8_decoder.decode(name_binary)  // get name\n\n            let subspaces:string[]= [];\n            for (let n=0; n<subspace_number; n++) {\n                let length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                if (length == 0) {\n                    subspaces.push(\"*\");\n                }\n                else {\n                    let subspace_name = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=length));\n                    subspaces.push(subspace_name);\n                }\n            }\n\n\n            if (!instance) instance = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=instance_length))  // get instance\n            \n            let app_index:number\n            if (target_list) app_index = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n\n            return <InstanceType<T>> Target.get(name, instance, type);\n        },\n        \n        // removes trailing undefined/empty values from array (trim length)\n        trimArray(array:Array<any>){\n            let new_length = array.length;\n            for (let i=array.length-1; i>=0; i--) {\n                if (array[i] === VOID) new_length--;\n                else break;\n            }\n            array.length = new_length // set new length\n            return array;\n        },\n\n        // only returns trimmed length, does not trim the array\n        getTrimmedArrayLength(array:Array<any>):number{\n            let new_length = array.length;\n            for (let i=array.length-1; i>=0; i--) {\n                if (array[i] === VOID) new_length--;\n                else break;\n            }\n            return new_length;\n        },\n\n        async returnValue(SCOPE:datex_scope, value: any){\n            await Runtime.handleScopeResult(SCOPE.header, SCOPE, value);\n        },\n\n        enterSubScope(SCOPE:datex_scope){\n            SCOPE.inner_scope = {ctx_intern:SCOPE.inner_scope.active_object ?? SCOPE.inner_scope.ctx_intern}; // inherit root and internal context from parent subscope / new internal object\n            SCOPE.sub_scopes.push(SCOPE.inner_scope);\n        },\n\n        // sub scope end, returns result value\n        async exitSubScope (SCOPE:datex_scope){\n\n            // handle scope result variable and make pointer / variable assignments\n            await Runtime.runtime_actions.closeSubScopeAssignments(SCOPE);\n\n            let result = SCOPE.inner_scope.result;\n            let inner_spread = SCOPE.inner_scope.inner_spread; // remember ... from inner subscope\n\n            if (SCOPE.sub_scopes.length==1) {\n                logger.error(\"Cannot exit out of root scope\");\n                console.warn(buffer2hex(SCOPE.buffer_views.uint8, \" \"), SCOPE.buffer_views.buffer)// DatexRuntime.decompile(SCOPE.buffer_views.buffer, true, true, true, false));\n                return;\n            }\n\n            SCOPE.sub_scopes.pop();\n            SCOPE.inner_scope = SCOPE.sub_scopes[SCOPE.sub_scopes.length-1];\n            if (inner_spread) SCOPE.inner_scope.waiting_collapse = true;\n\n            return result // return last result\n        },\n\n        // switch scope between commands(ignore that it is outer scope)\n        async newSubScope(SCOPE:datex_scope){\n            // currently in outer scope\n            const is_outer_scope = SCOPE.inner_scope.is_outer_scope;\n\n            // handle scope result variable and make pointer / variable assignments\n            await Runtime.runtime_actions.closeSubScopeAssignments(SCOPE);\n\n            let result = SCOPE.inner_scope.result;\n            SCOPE.sub_scopes.pop();\n\n            Runtime.runtime_actions.enterSubScope(SCOPE);\n\n            // insert 'result' to outer scope\n            if (is_outer_scope && result!==VOID) {\n                SCOPE.result = result;\n            }\n            // insert sub_result to current scope;\n            if (result!==VOID) SCOPE.inner_scope.result = result;\n\n            SCOPE.inner_scope.is_outer_scope = is_outer_scope; // is outer scope?\n        },\n\n        // use INNER_SCOPE.active_value, apply remaining assignments -> INNER_SCOPE.result\n        async closeSubScopeAssignments(SCOPE:datex_scope){\n            const INNER_SCOPE = SCOPE.inner_scope;\n\n            // first check if remaining type casts; inner scope result must be void\n            if (INNER_SCOPE.type_casts?.length) {\n                // first type cast becomes actual type value\n                let el = INNER_SCOPE.type_casts.pop();\n                let type:Type | undefined;\n                // iterate over now remaining type casts\n                while ((type = INNER_SCOPE.type_casts.pop())) el = await Runtime.castValue(type, el, INNER_SCOPE.ctx_intern, SCOPE.context_location, SCOPE.origin)\n                INNER_SCOPE.active_value = el;\n            }\n\n            // assignments:\n\n            // get current active value\n            const el = INNER_SCOPE.active_value;\n            let did_assignment = false;\n\n            // make sure endpoint has access (TODO: INNER_SCOPE.active_value should never be set if no access)\n            const ptr = Pointer.pointerifyValue(el);\n            if (ptr instanceof Pointer) ptr.assertEndpointCanRead(SCOPE?.sender)\n\n            // ptrs\n            if (INNER_SCOPE.waiting_ptrs?.size) {\n                for (const p of INNER_SCOPE.waiting_ptrs) {\n                    const isSet = p[1] == undefined;\n                    const isInit = typeof p[1] == \"object\";\n\n                    try {\n                        if (SCOPE.header.type==ProtocolDataType.UPDATE) p[0].excludeEndpointFromUpdates(SCOPE.sender); \n                        if (isSet || isInit) {\n\n                            // if value does not support indirect refs, its safe to assume that any existing pointer for the value can be moved\n                            // TODO: only workaround, improve\n                            const forceMove = !Type.ofValue(el).supportsIndirectRefs\n                            const ptr = p[0].setValue(el, forceMove);\n\n                            // remote pointer value was set - handle subscription\n                            if (!ptr.is_origin) {\n\n                                // subscription was already added by pointer origin for preemptively loaded pointer, just finalize\n                                if (isInit) {\n                                    ptr.finalizeSubscribe()\n                                }\n                                // subscribe for updates at pointer origin\n                                else {\n                                    await ptr.subscribeForPointerUpdates();\n                                }\n                                \n                            }\n                            // resolve\n                            if (p[1]?.resolve) {\n                                p[1].resolve(ptr)\n                                Pointer.loading_pointers.delete(ptr.id); // TODO: only workaround, automatically handle delete, but leads to promise rejection errors\n                            }\n                        }\n                        else await Runtime.runtime_actions.handleAssignAction(SCOPE, p[1], null, null, el, p[0]); // other action on pointer\n                    }\n                    catch (e) {\n                        if (p[1]?.reject) {\n                            p[1].reject(e);\n                            Pointer.loading_pointers.delete(ptr.id); \n                        }\n                        p[0].enableUpdatesForAll();\n                        throw e;\n                    };\n                    p[0].enableUpdatesForAll()\n                }\n                did_assignment = true;\n            }\n\n            // labels (set label to pointer)\n            if (INNER_SCOPE.waiting_labels?.size) {\n                for (let label of INNER_SCOPE.waiting_labels) {\n                    let pointer = Pointer.getByValue(el);\n                    // already a pointer\n                    if (pointer) pointer.addLabel(label);\n                    else {\n                        pointer = Pointer.create(null, el);\n                        pointer.addLabel(label);\n                    }\n                }\n                did_assignment = true;\n            }\n   \n\n            // handle child assignment\n            if (INNER_SCOPE.waiting_for_action?.length) {\n                let action:[type: BinaryCode, parent: any, key: any];\n                \n                // assign for all waiting\n                while (action = INNER_SCOPE.waiting_for_action.pop()) {\n                    await Runtime.runtime_actions.handleAssignAction(SCOPE, action[0], action[1], action[2], el);   \n                }\n\n                did_assignment = true;\n            }\n\n            // internal vars (last, because inner scope sub_result might be re-added)\n            if (INNER_SCOPE.waiting_internal_vars?.size) {\n                did_assignment = true;\n\n                for (let v of INNER_SCOPE.waiting_internal_vars) {\n                    // set value\n                    if (v[1] == BinaryCode.SET_INTERNAL_VAR) await Runtime.runtime_actions.setInternalVarValue(SCOPE, v[0], el, v[2]);\n                    \n                    // set reference\n                    else if (v[1] == BinaryCode.SET_INTERNAL_VAR_REFERENCE) await Runtime.runtime_actions.setInternalVarReference(SCOPE, v[0], el, v[2]);\n\n                    // other action on internal variable\n                    else { \n                        let parent = SCOPE.internal_vars; // default parent\n                        let key = v[0];\n\n                        if (v[0] == 'result') parent = SCOPE; // parent is SCOPE, key is 'result'\n                        else if (v[0] == 'sub_result') {parent = INNER_SCOPE; key = 'sub_result'}  // parent is INNER_SCOPE, key is 'sub_result'\n                        else if (v[0] == 'remote') parent = SCOPE;  // parent is SCOPE, key is 'remote';\n                        else if (v[0] == 'it') parent = SCOPE;  // parent is SCOPE, key is 'it';\n                        else key = v[0].toString() // internal var, object key must be string\n\n                        await Runtime.runtime_actions.handleAssignAction(SCOPE, v[1], parent, key, el);\n                    }\n                }\n            }\n\n            // has return?\n            if (INNER_SCOPE.return) {\n                Runtime.runtime_actions.returnValue(SCOPE, el === VOID ? INNER_SCOPE.result : el);\n            }\n\n            // update scope result if no assignment happened and value is not void\n            else if (!did_assignment && el !== VOID) INNER_SCOPE.result = el;\n        },\n\n        // sets the value a internal variable points to\n        // reference might be copied if not a pointer value\n        async setInternalVarReference(SCOPE:datex_scope, name:number|string, reference:any, save_persistent = false) {\n            // reference is void -> delete\n            if (reference === VOID) delete SCOPE.internal_vars[name];\n            else {\n                // set direct js reference if value has a DATEX reference\n                if (Pointer.isReference(reference)) SCOPE.internal_vars[name] = reference; \n                // otherwise, lose reference (copy value) TODO\n                else {\n                    // TODO: avoid unneccesary cloning\n                    //console.log(\"cloning reference\", reference);\n                    SCOPE.internal_vars[name] = reference // await Runtime.cloneValue(reference);\n                }\n\n                // persistent memory?\n                if (save_persistent) {\n                    if (!SCOPE.persistent_vars) SCOPE.persistent_vars = [];\n                    SCOPE.persistent_vars.push(name);\n                }\n            }\n        },\n\n        // sets the value of the current reference the internal variable points to\n        // if no reference available, the value becomes the new reference\n        async setInternalVarValue(SCOPE:datex_scope, name:number|string, value:any, save_persistent = false) {\n\n            // handle special internal variables -> modify value\n            if (name == 'result') {\n                SCOPE.result = SCOPE.inner_scope.result = value; // set new result\n            }\n            else if (name == 'sub_result') SCOPE.inner_scope.result = value;  // set result of current sub scope\n            else if (name == 'it') SCOPE.it = value;  // set it of scope\n            else if (name == 'void') {\n                // just ignore\n            }\n            else if (name == 'remote') {\n                if (typeof value == \"object\") SCOPE.remote = value;\n                else throw new ValueError(\"Invalid type for #remote\");\n            }\n            else {// default internal variable\n\n                // variable does not exist, set new reference\n                if (!(name in SCOPE.internal_vars)) {\n                    await Runtime.runtime_actions.setInternalVarReference(SCOPE, name, value, save_persistent);\n                    return;\n                }\n\n                const pointer = Pointer.pointerifyValue(SCOPE.internal_vars[name]);\n\n                // no reference, just override internal variable\n                if (!(pointer instanceof Pointer)) {\n                    await Runtime.runtime_actions.setInternalVarReference(SCOPE, name, value, save_persistent);\n                    return;\n                }\n\n                else {\n                    try {\n                        if (SCOPE.header.type==ProtocolDataType.UPDATE) pointer.excludeEndpointFromUpdates(SCOPE.sender);\n                        await pointer.setVal(value);\n                    }  catch (e) {\n                        pointer.enableUpdatesForAll()\n                        throw e\n                    }\n                }\n\n                \n            }\n        },\n\n        async handleAssignAction(SCOPE:datex_scope, action_type:BinaryCode|-1, parent:any, key:any, value:any, current_val?:any){\n\n            // collapse iterator key to tuple\n            if (key instanceof Iterator) key = await key.collapse();\n\n            // set value\n            if (action_type == -1) {\n               Runtime.runtime_actions.setProperty(SCOPE, parent, key, value);\n            }\n            // all other actions (+=, -=, ...)\n            else {\n                await Runtime.runtime_actions.assignAction(SCOPE, action_type, parent, key, value, current_val);\n            }\n        },\n\n\n        // throws an error if no permission\n        checkValueReadPermission(SCOPE:datex_scope, parent:any, key:string){\n            // #read slot\n            if (parent[DX_SLOTS]?.has(SLOT_READ)) {\n                const filter = parent[DX_SLOTS].get(SLOT_READ);\n                if (!Logical.matches(SCOPE.sender, filter, Target)) \n                    throw new PermissionError(\"Property \"+Runtime.valueToDatexString(key)+\" does not exist or cannot be accessed\");    \n            }\n            \n            const pointer = Pointer.pointerifyValue(parent) // make sure the parent is proxified\n            // check pointer read permission\n            if (pointer instanceof Pointer && !pointer.canReadProperty(key))\n                throw new ValueError(\"Property '\"+key.toString()+\"' does not exist or cannot be accessed\");\n        },\n\n        // throws an error if no permission\n        checkValueUpdatePermission(SCOPE:datex_scope, parent:any, key:string){\n\n            // #write slot\n            if (parent[DX_SLOTS]?.has(SLOT_WRITE)) {\n                const filter = parent[DX_SLOTS].get(SLOT_WRITE);\n                if (!Logical.matches(SCOPE.sender, filter, Target)) \n                    throw new PermissionError(\"Cannot update property \"+Runtime.valueToDatexString(key)+\"\");    \n            }\n            \n            // check pointer write permission\n            const pointer = Pointer.pointerifyValue(parent) // make sure the parent is proxified\n            if (pointer instanceof Pointer && !pointer.canUpdateProperty(key))\n                throw new PermissionError(\"Cannot update pointer property \"+Runtime.valueToDatexString(key)+\"\");        \n        },\n\n        // get count (length) of value\n        countValue(value:any){\n            if (value === VOID) return 0n; // void is 0\n\n            let count = JSInterface.handleCount(value) \n\n            if (count == NOT_EXISTING) {\n                if (value instanceof Tuple) count = value.size; // array or tuple\n                else if (value instanceof Array) count = value.length; // array or tuple\n                else if (value.constructor == Object) count = Object.keys(value).length; // plain object\n                else count = 1n; // default value\n            }\n            else if (count == INVALID) throw new ValueError(\"Value uncountable\");        \n            return BigInt(count);\n        },\n\n\n        getKeys(value:any, array_indices_as_numbers = false):Iterator<any> {\n            // restricted to visible_children\n            const pointer = Pointer.getByValue(value);\n            if (pointer && pointer.visible_children) return Iterator.get(pointer.visible_children);\n\n            let keys = JSInterface.handleKeys(value, Type.ofValue(value));\n            if (keys == INVALID) throw new ValueError(\"Value has no iterable content\");\n            if (keys == NOT_EXISTING) {\n                if (value instanceof Array) {\n                    if (array_indices_as_numbers) return Iterator.get(value.keys())\n                    else return Iterator.get([...value.keys()].map(BigInt));\n                }\n                else keys = Object.keys(value); // default Object.keys\n            }\n            return Iterator.get(keys);\n        },\n\n\n        // has value\n        async has(SCOPE:datex_scope, parent:any, value:any){\n\n            let has = JSInterface.handleHas(parent, value); \n\n            if (has == NOT_EXISTING) { \n                if (parent instanceof Tuple) {\n                    return parent.hasValue(value)\n                }\n                else if (parent instanceof Array) {\n                    return parent.includes(value);\n                }\n                else if (parent instanceof Iterator) {\n                    return (await parent.collapse()).hasValue(value);\n\n                }\n                else if (typeof parent == \"object\") {\n                    return Object.values(parent).includes(value)\n                    // if (typeof key != \"string\") throw new ValueError(\"Invalid key for <Object> - must be of type <text>\", SCOPE);\n                    // else if (DEFAULT_HIDDEN_OBJECT_PROPERTIES.has(key) || (parent && !(key in parent))) return false;\n                    // else return true; // plain object\n                }\n                else has = INVALID;\n            }\n            \n            if (has == INVALID) throw new ValueError(\"Cannot check for properties on this value\");     \n            else return has;   \n        },\n\n        // get parent[key] as DatexPointerProperty if possible\n        getReferencedProperty(SCOPE: datex_scope, parent:any, key:any){\n            const pointer = Pointer.createOrGetLazy(parent);\n            if (pointer) {\n                if (pointer instanceof Pointer) pointer.assertEndpointCanRead(SCOPE?.sender)\n                return PointerProperty.get(pointer, key);\n            }\n            else throw new RuntimeError(\"Could not get a child reference\");\n        },\n        \n        // get parent[key]; !! Returns promise because of Endpoint.getProperty()\n        getProperty(SCOPE:datex_scope, parent:any, key:any){\n\n            if (parent instanceof UnresolvedValue) parent = parent[DX_VALUE];\n\n            if (parent === undefined) throw new ValueError(\"void has no properties (trying to read property \"+key+\")\");\n\n            const o_parent:Pointer = Pointer.pointerifyValue(parent);\n            if (o_parent instanceof Pointer) o_parent.assertEndpointCanRead(SCOPE?.sender)\n\n\n            key = ReactiveValue.collapseValue(key,true,true);\n\n            // check read permission (throws an error)\n            Runtime.runtime_actions.checkValueReadPermission(SCOPE, parent, key)\n\n            // has no properties\n            if (!Type.doesValueHaveProperties(parent)) throw new ValueError(\"Value of type \"+Type.ofValue(parent)+\" has no properties\", SCOPE);\n            \n            // key is * - get iterator with all values\n            if (key === WILDCARD) {\n                // parent = Value.collapseValue(parent,true,true);\n                // let values = JSInterface.handleGetAllValues(parent);\n                // if (values == NOT_EXISTING) {\n                //     let keys;\n                //     // create list of integer keys\n                //     if (parent instanceof Array) {\n                //         keys = [];\n                //         const N = parent.length;\n                //         let i = 0n;\n                //         while (i < N) keys[Number(i)] = i++;\n                //     }\n                //     // list of object property keys\n                //     else keys = Object.keys(parent);\n                //     if (!(Symbol.iterator in keys)) throw new RuntimeError(\"Value keys are not iterable\", SCOPE);\n                //     return Runtime.runtime_actions.getProperty(SCOPE, Pointer.pointerifyValue(parent), new Tuple(keys));\n                // }\n                // else if (values == INVALID) throw new ValueError(\"Value has no iterable content\", SCOPE);\n                \n                // if (!(Symbol.iterator in values)) throw new RuntimeError(\"Value keys are not iterable\", SCOPE);\n                // return values instanceof Tuple ? values: new Tuple(values);\n                key = Runtime.runtime_actions.getKeys(parent);\n            }\n            // key is <Tuple> - get multiple properties (recursive)\n            else if (key instanceof Tuple) {\n                key = Iterator.get(key);\n            }\n\n            // key is <Iterator> - get multiple properties (recursive)\n            if (key instanceof Iterator) {\n                // parent also iterator\n                if (parent instanceof Iterator) {\n                    //console.log(parent);\n                    return Iterator.map(key, async k => {\n                        //console.log(k, await parent.collapse(), await (await Runtime.runtime_actions.getProperty(SCOPE, parent, k)).collapse());\n                        return (await Runtime.runtime_actions.getProperty(SCOPE, parent, k)).collapse()\n                    });\n                }\n                // parent normal value\n                else return Iterator.map(key, (k)=>Runtime.runtime_actions.getProperty(SCOPE, parent, k))\n            }\n\n            // value is iterator, key is normal value -> map iterator\n            else if (parent instanceof Iterator) {\n                return Iterator.map(parent, (child)=>Runtime.runtime_actions.getProperty(SCOPE, child, key))\n            }\n\n            parent = ReactiveValue.collapseValue(parent,true,true);\n\n            // custom types get\n            let new_obj = JSInterface.handleGetProperty(parent, key) \n\n            // definitly does not exist and can not exist\n            if (new_obj == INVALID) throw new ValueError(\"Property '\"+key.toString()+\"' does not exist\", SCOPE);\n\n\n            // was not handled by custom pseudo classes\n            else if (new_obj == NOT_EXISTING) {\n\n                // get endpoint subspace\n                if (parent instanceof Endpoint) return parent.getProperty(key?.toString());\n                // invalid key type\n                if (parent instanceof Array && typeof key != \"bigint\") throw new ValueError(\"Invalid key for <Array> - must be of type <integer>\", SCOPE);\n                // sealed tuple\n                else if (parent instanceof Tuple) {\n                    if (!parent.has(key)) throw new ValueError(\"Property '\"+key.toString()+\"' does not exist in <Tuple>\", SCOPE)\n                    else return parent.get(key)\n                }\n                // sealed or frozen\n                else if ((Object.isSealed(parent) || Object.isFrozen(parent)) && !Object.hasOwn(parent, key)) throw new ValueError(\"Property '\"+key.toString()+\"' does not exist\", SCOPE)\n                // not a key string in a normal object\n                else if (typeof key != \"string\" && !(parent instanceof Array)) throw new ValueError(\"Invalid key for <Object> - must be of type <text>\", SCOPE);\n                // default hidden properties\n                else if (DEFAULT_HIDDEN_OBJECT_PROPERTIES.has(key)) return VOID;\n                // get value\n                else {\n                    if (parent instanceof Array && typeof key == \"bigint\" && key < 0n)  key = parent.length+Number(key)  // negative array indices\n                   \n                    // get single value\n                    else {\n                        if (key in parent) return parent[key];\n                        else if (DX_SLOTS in parent && parent[DX_SLOTS]?.has(SLOT_GET)) return parent[DX_SLOTS].get(SLOT_GET)(key);\n                        else return undefined;\n                    }\n                }\n            }\n\n            // was handled by custom pseudo class\n            else return new_obj;\n        },\n\n        // set parent[key] = value\n        setProperty(SCOPE:datex_scope, parent:any, key:any, value:any){\n\n            if (parent instanceof UnresolvedValue) parent = parent[DX_VALUE];\n\n            let o_parent:Pointer = Pointer.pointerifyValue(parent);\n            if (!(o_parent instanceof Pointer)) o_parent = null;\n            else o_parent.assertEndpointCanRead(SCOPE?.sender)\n\n            if (o_parent?.externalUpdatesBlocked) {\n                throw new Error(\"Cannot update readonly pointer\");\n            }\n\n            key = ReactiveValue.collapseValue(key,true,true);\n            \n            // check read/write permission (throws an error)\n            Runtime.runtime_actions.checkValueUpdatePermission(SCOPE, parent, key)\n\n            // handle values without properties\n            if (!Type.doesValueHaveProperties(parent)) {\n                throw new PermissionError(\"Cannot set a property for value of type \"+Type.ofValue(parent)+\"\", SCOPE);\n            }\n\n            // key is * -  set for all matching keys (recursive)\n            if (key === WILDCARD) {\n                parent = ReactiveValue.collapseValue(parent,true,true);\n                // handle custom pseudo class\n                if (JSInterface.hasPseudoClass(parent)) {\n                    // void => clear\n                    if (value === VOID) {\n                        if (SCOPE.header.type==ProtocolDataType.UPDATE) o_parent?.excludeEndpointFromUpdates(SCOPE.sender);\n\n                        let res = JSInterface.handleClear(parent, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                        // note: keys == NOT_EXISTING is always false since hasPseudoClass == true\n                        if (res == INVALID || res == NOT_EXISTING) {\n                            o_parent?.enableUpdatesForAll();\n                            throw new ValueError(\"Cannot clear value\", SCOPE);\n                        }\n                    }\n                    else {\n                        let keys = JSInterface.handleKeys(parent);\n                        // note: keys == NOT_EXISTING is always false since hasPseudoClass == true\n                        if (keys == INVALID || keys == NOT_EXISTING) throw new ValueError(\"Value has no iterable content\", SCOPE);\n                        Runtime.runtime_actions.setProperty(SCOPE, Pointer.pointerifyValue(parent), new Tuple(keys), value);\n                    }\n                }\n\n                else if (value instanceof Tuple && (typeof parent == \"object\")) {\n                    DatexObject.extend(parent, value); // link value, don't copy\n                }\n               \n                // handle other objects\n                else {\n                    let keys:any[];\n                    // create list of integer keys\n                    if (parent instanceof Array) {\n                        keys = [];\n                        const N = parent.length;\n                        let i = 0n;\n                        while (i < N) keys[Number(i)] = i++;\n                    }\n                    // list of object property keys\n                    else keys = Object.keys(parent);\n                    if (!(Symbol.iterator in keys)) throw new RuntimeError(\"Value keys are not iterable\", SCOPE);\n                    Runtime.runtime_actions.setProperty(SCOPE, Pointer.pointerifyValue(parent), new Tuple(keys), value);\n                }\n                return;\n            }\n\n            // key is <Tuple> - set multiple properties (recursive)\n            else if (key instanceof Tuple) {\n                // distribute values over keys (tuple)\n                if (value instanceof Tuple) {\n                    for (let [k, v] of Object.entries(value)) {\n                        Runtime.runtime_actions.setProperty(SCOPE, parent, k, v)\n                    }\n                }\n\n                // set same value for all keys\n                else {\n                    for (let k of key.toArray()) Runtime.runtime_actions.setProperty(SCOPE, parent, k, value)\n                }\n                return;\n            }\n           \n\n            parent = ReactiveValue.collapseValue(parent,true,true);\n            value = ReactiveValue.collapseValue(value,true);\n\n            // TODO permission handling\n            // if (parent[DX_PERMISSIONS]?.[key] && !(<Filter>parent[DX_PERMISSIONS][key]).test(SCOPE.sender)) {\n            //     throw new PermissionError(\"Cannot update this value\");\n            // }\n\n            // get current value\n            const current_value = JSInterface.handleGetProperty(parent, key)\n            // value has not changed\n            if (current_value === value) {\n                return;\n            }\n\n            if (SCOPE.header.type==ProtocolDataType.UPDATE) o_parent?.excludeEndpointFromUpdates(SCOPE.sender);\n\n            // custom types assign or delete\n            let assigned;\n            if (value === VOID) assigned = JSInterface.handleDeleteProperty(parent, key, undefined, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n            else assigned = JSInterface.handleSetProperty(parent, key, value, undefined, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n\n            if (assigned === INVALID) {\n                o_parent?.enableUpdatesForAll();\n                throw new ValueError(\"Property '\"+key.toString()+\"' can not be \"+ (value === VOID ? \"deleted\" : \"set\"), SCOPE);\n            } \n\n            else if (assigned == NOT_EXISTING) {\n                // invalid key type\n                if (parent instanceof Array && (typeof key != \"bigint\")) {\n                    o_parent?.enableUpdatesForAll();\n                    throw new ValueError(\"Invalid key for <Array> - must be of type <integer>\", SCOPE);\n                } \n                else if (typeof key != \"string\" && !(parent instanceof Array)) {\n                    o_parent?.enableUpdatesForAll();\n                    throw new ValueError(\"Invalid key for <Object> - must be of type <text>\", SCOPE);\n                }\n                // default hidden properties                \n                else if (DEFAULT_HIDDEN_OBJECT_PROPERTIES.has(key)) {\n                    o_parent?.enableUpdatesForAll();\n                    throw new ValueError(\"Property '\"+key.toString()+\"' can not be \" + (value === VOID ? \"deleted\" : \"set\"), SCOPE);\n                }\n                // handle endpoint properties\n                else if (parent instanceof Endpoint) {\n                    try {\n                        parent.setProperty(key, value);\n                    } catch (e) {\n                        o_parent?.enableUpdatesForAll();\n                        throw e;\n                    }\n                }\n                // set value\n                else {\n                    if (parent instanceof Array && typeof key == \"bigint\" && key < 0n)  key = parent.length+Number(key)  // negative array indices\n                    \n                    // check template types first\n                    const type = Type.ofValue(parent);\n\n                    if (type.template && !type.isPropertyAllowed(key)) throw new ValueError(\"Property '\" + key + \"' does not exist\");\n                    if (type.template) type.assertPropertyValueAllowed(key, value)\n                    \n                    // check sealed tuple\n                    if (parent instanceof Tuple && !parent.has(key)) throw new ValueError(\"Property '\"+key.toString()+\"' does not exist in <Tuple>\", SCOPE)\n                    \n                    // now set the value\n                    try {\n                        if (value === VOID) {\n                            delete parent[key]; // = void (delete)\n                            if (parent instanceof Array && Number(key)+1==parent.length) Runtime.runtime_actions.trimArray(parent) // trim end\n                        }\n                        // set single value\n                        else {\n                            if (DX_SLOTS in parent && parent[DX_SLOTS]?.has(SLOT_SET) && !(key in parent)) return parent[DX_SLOTS].get(SLOT_SET)(key, value);\n                            else parent[key] = value;\n                        }\n                    } catch (e) {\n                        o_parent?.enableUpdatesForAll();\n                        throw new RuntimeError(\"Property '\"+key.toString()+\"' is readonly or does not exist\", SCOPE)\n                    }\n                }\n            }\n            o_parent?.enableUpdatesForAll();\n        },\n\n        async assignAction(SCOPE:datex_scope, action_type:BinaryCode, parent:any, key:any, value:any, current_val?:any) {\n\n            current_val ??= await Runtime.runtime_actions.getProperty(SCOPE, parent, key)\n\n            if (parent instanceof UnresolvedValue) parent = parent[DX_VALUE];\n\n            let o_parent:Pointer = Pointer.pointerifyValue(current_val);\n            if (!(o_parent instanceof Pointer)) o_parent = null;\n            else o_parent.assertEndpointCanRead(SCOPE?.sender);\n\n            if (o_parent?.externalUpdatesBlocked) {\n                throw new Error(\"Cannot update readonly pointer\");\n            }\n\n            key = ReactiveValue.collapseValue(key,true,true);\n\n            // check read/write permission (throws an error)\n            if (parent) Runtime.runtime_actions.checkValueUpdatePermission(SCOPE, parent, key)\n\n            // key is * -  add for all matching keys (recursive)\n            if (key === WILDCARD) {\n                parent = ReactiveValue.collapseValue(parent);\n                let keys:Iterable<any>;\n                // handle custom pseudo class\n                if (JSInterface.hasPseudoClass(parent)) {\n                    let _keys = JSInterface.handleKeys(parent);\n                    // note: keys == NOT_EXISTING is always false since hasPseudoClass == true\n                    if (_keys == INVALID || _keys == NOT_EXISTING) throw new ValueError(\"Value has no iterable content\", SCOPE);\n                    keys = _keys;\n                }\n                // handle other objects\n                else {\n                    // create list of integer keys\n                    if (parent instanceof Array) {\n                        keys = [];\n                        const N = parent.length;\n                        let i = 0n;\n                        while (i < N) keys[Number(i)] = i++;\n                    }\n                    // list of object property keys\n                    else keys = Object.keys(parent);\n                    if (!(Symbol.iterator in keys)) throw new RuntimeError(\"Value keys are not iterable\", SCOPE);\n                }\n                await Runtime.runtime_actions.assignAction(SCOPE, action_type, Pointer.pointerifyValue(parent), new Tuple(keys), value);\n                return;\n            }\n\n            // key is <Tuple> - multiple properties action (recursive)\n            else if (key instanceof Tuple) {\n                // TODO\n                const array = key.toArray();\n                // distribute values over keys\n                if (value instanceof Tuple) {\n                    for (let i=0; i<array.length; i++) {\n                        await Runtime.runtime_actions.assignAction(SCOPE, action_type, parent, array[i], value[i])\n                    }\n                }\n                // use same value for all keys\n                else {\n                    for (let k of array) await Runtime.runtime_actions.assignAction(SCOPE, action_type, parent, k, value)\n                }\n                return;\n            }\n\n            // custom += actions\n            else if (action_type == BinaryCode.ADD) {\n                // spread insert tuple\n                if (value instanceof Tuple) {\n                    if (current_val instanceof Array) {\n                        for (let v of value.indexed) {\n                            await Runtime.runtime_actions.assignAction(SCOPE, action_type, null, null, v, current_val);\n                        }\n                    }\n                    else DatexObject.extend(current_val, value) // link value, don't copy\n\n                    return;\n                }\n            } \n            \n\n\n            current_val = ReactiveValue.collapseValue(current_val); // first make sure that current_val is actual value\n            parent = ReactiveValue.collapseValue(parent);\n            value = ReactiveValue.collapseValue(value);\n\n            if (SCOPE.header.type==ProtocolDataType.UPDATE) o_parent?.excludeEndpointFromUpdates(SCOPE.sender);\n\n            // custom types add\n            let assigned = NOT_EXISTING //JSInterface.handlePropertyAction(action_type, current_val, value);\n\n            if (assigned === INVALID) {\n                o_parent?.enableUpdatesForAll();\n                throw new ValueError(\"Could not perform property operation\", SCOPE);\n            }\n\n            // handle default actions for primitives, ...\n            else if (assigned == NOT_EXISTING) {\n\n                 // DatexPrimitivePointers also collapsed\n                const current_val_prim = ReactiveValue.collapseValue(current_val,true,true);\n                const value_prim = ReactiveValue.collapseValue(value,true,true); // DatexPrimitivePointers also collapsed\n                try {\n\n                    const currentValIsIntegerRef = current_val instanceof ReactiveValue && typeof current_val.val == \"bigint\";\n                    const currentValIsDecimalRef = current_val instanceof ReactiveValue && typeof current_val.val == \"number\";\n\n                    // x.current_val ?= value\n                    switch (action_type) {\n\n                        case BinaryCode.ADD:\n                            if (current_val instanceof Array && !(current_val instanceof Tuple)) current_val.push(value); // Array push (TODO array extend?)\n                            else if (current_val instanceof ReactiveValue && typeof current_val.val == \"string\" && typeof value_prim == \"string\") await current_val.setVal(current_val.val + value_prim); // primitive pointer operations\n                            else if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val + value_prim);\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val + value_prim);\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val + Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim+value_prim) // add\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)+Number(value_prim)) // add\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim+value_prim) // add\n                            else if (typeof current_val_prim == \"string\" && typeof value_prim == \"string\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim+value_prim) // add\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionAdd(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform an add operation on this value\", SCOPE);\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.SUBTRACT:\n                            if (current_val instanceof Array) Runtime.runtime_actions._removeItemFromArray(current_val, value); // Array splice\n                            else if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val - value_prim); // primitive pointer operations\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val - value_prim);\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val - Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim-value_prim) // subtract\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)-Number(value_prim)) // subtract\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim-value_prim) // subtract\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionSubtract(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform a subtract operation on this value\", SCOPE)\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.MULTIPLY:\n                            if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val * value_prim); // primitive pointer operations\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val * value_prim);\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val * Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim*value_prim) // subtract\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)*Number(value_prim)) // subtract\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim*value_prim) // subtract\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionMultiply(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform a multiply operation on this value\", SCOPE)\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.DIVIDE:\n                            if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val / value_prim); // primitive pointer operations\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val / value_prim);\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val / Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim/value_prim) // subtract\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)/Number(value_prim)) // subtract\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim/value_prim) // subtract\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionDivide(current_val, value, false,  SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform a divide operation on this value\", SCOPE)\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.POWER:\n                            if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val ** value_prim); // primitive pointer operations\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") {\n                                if (value_prim < 0) throw new ValueError(\"Cannot use a negative exponent with an integer\")\n                                else current_val.val = current_val.val ** value_prim;\n                            }\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val ** Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim**value_prim) // power\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)**Number(value_prim)) // power\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim**value_prim) // power\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionPower(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform a power operation on this value\", SCOPE)\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.MODULO:\n                            if (currentValIsDecimalRef && typeof value_prim == \"number\") await current_val.setVal(current_val.val % value_prim); // primitive pointer operations\n                            else if (currentValIsIntegerRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val % value_prim);\n                            else if (currentValIsDecimalRef && typeof value_prim == \"bigint\") await current_val.setVal(current_val.val % Number(value_prim));\n                            else if (currentValIsIntegerRef && typeof value_prim == \"number\") throw new ValueError(\"Cannot apply a <decimal> value to an <integer> pointer\", SCOPE);\n                            else if (typeof current_val_prim == \"number\" && typeof value_prim == \"number\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim%value_prim) // subtract\n                            else if ((typeof current_val_prim == \"number\" && typeof value_prim == \"bigint\") || (typeof current_val_prim == \"bigint\" && typeof value_prim == \"number\")) Runtime.runtime_actions.setProperty(SCOPE, parent, key, Number(current_val_prim)%Number(value_prim)) // subtract\n                            else if (typeof current_val_prim == \"bigint\" && typeof value_prim == \"bigint\") Runtime.runtime_actions.setProperty(SCOPE, parent, key, current_val_prim%value_prim) // subtract\n                            else {\n                                try {\n                                    Type.ofValue(current_val).handleActionModulo(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                                } catch (e) {\n                                    if (e instanceof DatexError) throw e;\n                                    else throw new ValueError(\"Failed to perform a modulo operation on this value\", SCOPE)\n                                }\n                            }\n                            break;\n\n                        case BinaryCode.AND:\n                            try {\n                                Type.ofValue(current_val).handleActionAnd(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                            } catch (e) {\n                                if (e instanceof DatexError) throw e;\n                                else throw new ValueError(\"Failed to perform an add operation on this value\", SCOPE)\n                            }\n                            break;\n\n                        case BinaryCode.OR:\n                            try {\n                                Type.ofValue(current_val).handleActionOr(current_val, value, false, SCOPE.header.type==ProtocolDataType.UPDATE ? SCOPE.sender : null);\n                            } catch (e) {\n                                if (e instanceof DatexError) throw e;\n                                else throw new ValueError(\"Failed to perform an or operation on this value\", SCOPE)\n                            }\n                            break;\n\n                        // set reference\n                        case BinaryCode.CREATE_POINTER:\n\n                            if (current_val instanceof Pointer) current_val.val = value_prim; // primitive pointer value update\n                            else throw new ValueError(\"Pointer value assignment not possible on this value\", SCOPE)\n                            break;\n\n                        default:\n                            throw new RuntimeError(\"Unsupported assignment operation\", SCOPE);\n                    }\n\n                } catch (e) {\n                    console.log(e);\n                    o_parent?.enableUpdatesForAll();\n                    if (e instanceof DatexError) throw e;\n                    throw new PermissionError(\"Cannot change a readonly value\", SCOPE);\n                }\n            }\n            \n            o_parent?.enableUpdatesForAll();\n\n        },\n            \n        _removeItemFromArray(arr:any[], value:any){\n            let i = 0;\n            while (i < arr.length) {\n                if (arr[i] === value) arr.splice(i, 1);\n                else ++i;\n            }\n        },\n\n\n        extractScopeBlock(SCOPE:datex_scope):ArrayBuffer|false {\n            \n            // Compiled buffer\n            /** wait for buffer */\n            if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n\n            let buffer_length = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n            SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n            if (buffer_length == 0) return undefined;\n\n            /** wait for buffer */\n            if (SCOPE.current_index+buffer_length > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n\n            let _buffer = SCOPE.buffer_views.buffer.slice(SCOPE.current_index, SCOPE.current_index+buffer_length);\n            SCOPE.current_index += buffer_length;\n\n            return _buffer;\n        },\n\n        extractVariableName(SCOPE:datex_scope):string|number|false  {\n            /** wait for buffer */\n            if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n\n            let length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n            let name:string|number;\n            if (length == 0) { // binary name (2 byte number)\n                /** wait for buffer */\n                if (SCOPE.current_index+Uint16Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return false;\n                /********************/\n                name = SCOPE.buffer_views.data_view.getUint16(SCOPE.current_index, true);\n                SCOPE.current_index += Uint16Array.BYTES_PER_ELEMENT;\n            }\n            else {\n                /** wait for buffer */\n                if (SCOPE.current_index+length > SCOPE.buffer_views.uint8.byteLength) return false;\n                /********************/\n                name = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+length));\n                SCOPE.current_index += length;\n            }\n            return name;\n        },\n\n        extractType(SCOPE:datex_scope, is_extended_type = false):[Type,boolean]|false|Type {\n            /** wait for buffer */\n            if (SCOPE.current_index+2+(is_extended_type?2:0) > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n            let ns_length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n            let name_length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n            let variation_length = 0;\n            let has_parameters;\n            if (is_extended_type) {\n                variation_length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                has_parameters = SCOPE.buffer_views.uint8[SCOPE.current_index++] ? true : false;\n            }\n\n            /** wait for buffer */\n            if (SCOPE.current_index+ns_length+name_length+variation_length > SCOPE.buffer_views.uint8.byteLength) return false;\n            /********************/\n\n            let ns = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index += ns_length));\n            let type = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index += name_length));\n            let varation:string;\n            if (is_extended_type) {\n                varation = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index += variation_length));\n            }\n\n            return is_extended_type ? [Type.get(ns, type, varation), has_parameters] : Type.get(ns, type, varation);\n        },\n\n        // create a clone of the SCOPE in the current state\n        forkScope(SCOPE:datex_scope): datex_scope {\n            let structuredClone = globalThis.structuredClone;\n            \n            const forked_scope:datex_scope = {\n                sid: SCOPE.sid,\n                header: SCOPE.header,\n                sender: SCOPE.sender,\n                origin: SCOPE.origin,\n                current_index: SCOPE.current_index,\n                start_index: SCOPE.start_index,\n                index_offset: SCOPE.index_offset,\n                cache_previous: SCOPE.cache_previous,\n                cache_after_index: SCOPE.cache_after_index,\n                context: SCOPE.context,\n                sync: SCOPE.sync,\n                result: SCOPE.result,\n                closed: SCOPE.closed,\n                persistent_vars: [...SCOPE.persistent_vars],\n                internal_vars: {...SCOPE.internal_vars},\n                execution_permission: SCOPE.execution_permission,\n                impersonation_permission: SCOPE.impersonation_permission,\n                sub_scopes: [],\n                meta: {...SCOPE.meta},\n                remote: {...SCOPE.remote},\n                buffer_views: {...SCOPE.buffer_views},\n                inner_scope: undefined\n            };\n\n            for (let s of SCOPE.sub_scopes) {\n                forked_scope.sub_scopes.push({\n                    result: s.result,\n                    is_outer_scope: s.is_outer_scope,\n                    type_casts: s.type_casts,\n\n                    ctx_intern: s.ctx_intern,\n\n                    last_insert_value: s.last_insert_value,\n                    active_object: s.active_object,\n                    auto_obj_index: s.auto_obj_index,\n                    active_object_new: s.active_object_new,\n                    waiting_key: s.waiting_key,\n                    waiting_internal_slot: s.waiting_internal_slot,\n                    waiting_ptrs: s.waiting_ptrs,\n                    waiting_internal_vars: s.waiting_internal_vars,\n\n                    waiting_ext_type: s.waiting_ext_type,\n                    waiting_labels: s.waiting_labels,\n\n                    waiting_for_child: s.waiting_for_child,\n                    waiting_for_child_action: s.waiting_for_child_action,\n\n                    return: s.return,\n\n                    waiting_range: s.waiting_range,\n\n                    waiting_collapse: s.waiting_collapse,\n\n                    compare_type: s.compare_type,\n\n                    about: s.about,\n                    count: s.count,\n                    get: s.get,\n\n                    waiting_for_action: s.waiting_for_action,\n                    create_pointer: s.create_pointer,\n                    delete_pointer: s.delete_pointer,\n                    sync: s.sync,\n                    copy: s.copy,\n                    get_type: s.get_type,\n                    get_origin: s.get_origin,\n                    get_subscribers: s.get_subscribers,\n\n                    active_value: s.active_value,\n                    \n                    auto_exit: s.auto_exit,\n\n                    stream_consumer: s.stream_consumer,\n\n                    jmp: s.jmp,\n                    jmp_true: s.jmp_true,\n\n                    operator: s.operator,\n                    negate_operator: s.negate_operator\n                })\n            }\n            forked_scope.inner_scope = forked_scope.sub_scopes[forked_scope.sub_scopes.length-1]\n\n            return forked_scope;\n        },\n\n\n        // add float, int, person, ... to right parent in scope\n        // if literal_value = true, treat types as values\n        async insertToScope(SCOPE:datex_scope, el:any, literal_value = false){\n\n            const INNER_SCOPE = SCOPE.inner_scope;\n\n            // check pointer access permission\n            const pointer = el instanceof Pointer ? el : Pointer.getByValue(el);\n            if (pointer instanceof Pointer) pointer.assertEndpointCanRead(SCOPE?.sender)\n            \n            // make sure promise wrappers are collapsed\n            el = Runtime.collapseValueCast(el)\n            // first make sure pointers are collapsed\n            el = ReactiveValue.collapseValue(el) \n\n            // collapse Maybes (TODO)\n            //if (el instanceof Maybe) el = await el.value;\n\n            /** First handle strongly bound modifiers (template, type casts, spread operator, negation, ...)*/\n\n            // template <> () - ignores type cast!! (TODO change?)\n            if (INNER_SCOPE.template) {\n                if (INNER_SCOPE.template === true) {\n                    if (el instanceof Type) {\n                        INNER_SCOPE.template = el;\n                        return;\n                    }\n                    else throw new RuntimeError(\"Invalid template definition\");\n                }\n                else if (INNER_SCOPE.template instanceof Type) {\n                    if (typeof el == \"object\") {\n                        INNER_SCOPE.template.setTemplate(el);\n                        delete INNER_SCOPE.template;\n                    }\n                    else throw new RuntimeError(\"Invalid template definition\");\n              \n                    return;\n                }\n                else throw new RuntimeError(\"Invalid template definition\");\n            }\n            // new ignore type cast\n\n            // new\n            else if (INNER_SCOPE.wait_new) {\n                if (!(el instanceof Type)) throw new ValueError(\"first parameter for 'new' must be of type <Type>\")\n                INNER_SCOPE.new_type = el;\n                delete INNER_SCOPE.wait_new;\n                return;\n            }\n\n            // get scope block vars (wait for pointer property key )\n            if (INNER_SCOPE.scope_block_for && SCOPE.buffer_views.uint8[SCOPE.current_index] != BinaryCode.CHILD_GET_REF) {\n                INNER_SCOPE.scope_block_vars.push(Pointer.pointerifyValue(el));\n                return;\n            }\n\n            if (INNER_SCOPE.wait_dynamic_key) {\n                const key = el;\n                // add key for next value\n                INNER_SCOPE.waiting_key = key;       \n                INNER_SCOPE.wait_dynamic_key = false;\n                Runtime.runtime_actions.enterSubScope(SCOPE);\n                return;\n            }\n\n            if (INNER_SCOPE.wait_iterator) {\n                // TODO\n                return;\n            }\n\n            if (INNER_SCOPE.wait_await) {\n                if (el instanceof Task) {\n                    // only tasks with reference can be awaited, otherwise they cannot be observed\n                    if (!Pointer.getByValue(el)) throw new RuntimeError(\"Cannot await a Task that has no reference\");\n                    delete INNER_SCOPE.wait_await;\n                    const task = el;\n                    INNER_SCOPE.active_value = await task.promise;\n                    return;\n                }\n                else if (el instanceof Tuple) {\n                    delete INNER_SCOPE.wait_await;\n                    INNER_SCOPE.active_value = await Promise.all(el.indexed.map(v=>v.promise)); // TODO await non-local task\n                    return;\n                }\n            }\n\n            if (INNER_SCOPE.wait_next) {\n                if (el instanceof Iterator) {\n                    INNER_SCOPE.active_value = await el.next();\n                    SCOPE.it = el.val;\n                    delete INNER_SCOPE.wait_next;\n                    return;\n                }\n                else throw new RuntimeError(\"The 'next' command requires an <Iterator>\");\n            }\n\n            // negation? (~) - before connective!\n            if (INNER_SCOPE.negate_operator) {\n\n                // logical\n                if (el instanceof Logical) {\n                    el = el.not();\n                }\n                else if (el instanceof Target || el instanceof Type) {\n                    el = new Negation(el)\n                }\n         \n                else if (typeof el == \"boolean\" || typeof (el = ReactiveValue.collapseValue(el, true, true)) == \"boolean\" ) {\n                    el = !el;\n                }\n                else throw(new ValueError(\"Cannot negate this value (\"+Runtime.valueToDatexString(el)+\")\", SCOPE))               \n                \n                delete INNER_SCOPE.negate_operator;\n            }\n\n            // add connective element\n            if ('connective_size' in INNER_SCOPE) {\n                if (INNER_SCOPE.connective_size > 0) {\n                    INNER_SCOPE.connective.add(el);\n                    INNER_SCOPE.connective_size--;\n                }\n                if (INNER_SCOPE.connective_size == 0) {\n                    INNER_SCOPE.active_value = INNER_SCOPE.connective;\n                    delete INNER_SCOPE.connective;\n                    delete INNER_SCOPE.connective_size;\n                    const res = await Runtime.runtime_actions.exitSubScope(SCOPE);\n                    await Runtime.runtime_actions.insertToScope(SCOPE, res);\n                }\n                return;\n            }\n\n            // type parameters <x()> - required for type cast\n            if (INNER_SCOPE.waiting_ext_type) {\n                if (!(el instanceof Tuple)) el = new Tuple([el]);\n                if (el.size) el = INNER_SCOPE.waiting_ext_type.getParametrized((<Tuple>el).toArray());\n                else el = INNER_SCOPE.waiting_ext_type;\n                INNER_SCOPE.waiting_ext_type = null;\n            }\n\n            \n            // add to casts, if not followed by end bin code -> interpret as actual type value\n            if (!literal_value && el instanceof Type && !(Runtime.END_BIN_CODES.includes(SCOPE.buffer_views.uint8[SCOPE.current_index]) || SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET || SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET_REF)) {\n                if (!INNER_SCOPE.type_casts) INNER_SCOPE.type_casts = [];\n                INNER_SCOPE.type_casts.push(el)\n                return;\n            }\n\n\n            // apply all casts \n            if (INNER_SCOPE.type_casts) {\n                let type:Type|undefined\n                while ((type = INNER_SCOPE.type_casts.pop())) {\n                    // workaround to get pointer that the new cast value will be assigned to\n                    let subscopePtrs = SCOPE.sub_scopes.at(-1)?.waiting_ptrs; // INNER_SCOPE.waiting_ptrs\n                    // workaround: only for uix - also check one subscope up for assigning pointer if none found\n                    if (!subscopePtrs && type.name == \"uix\") subscopePtrs = SCOPE.sub_scopes.at(-2)?.waiting_ptrs; // go one scope up\n                    const waitingPtr = [...subscopePtrs??[]][0];\n                    let ptrId: string|undefined;\n                    if (waitingPtr && (typeof waitingPtr[1] == \"object\" || waitingPtr[1] == undefined)) ptrId = waitingPtr[0].id;\n                    el = await Runtime.castValue(type, el, INNER_SCOPE.ctx_intern, SCOPE.context_location, SCOPE.origin, undefined, ptrId)\n                }\n            }\n\n           \n\n            // handle child get\n            if (INNER_SCOPE.waiting_for_child == 1) {\n                el = await Runtime.runtime_actions.getProperty(SCOPE, INNER_SCOPE.active_value, el);\n                delete INNER_SCOPE.active_value; // no longer exists\n                INNER_SCOPE.waiting_for_child = 0;\n                // ... continue (insert new el)\n            }\n\n            // handle child get (referenced child if pointer)\n            else if (INNER_SCOPE.waiting_for_child == 2) {\n                el = Runtime.runtime_actions.getReferencedProperty(SCOPE, INNER_SCOPE.active_value, el);\n                delete INNER_SCOPE.active_value; // no longer exists\n                INNER_SCOPE.waiting_for_child = 0;\n                // ... continue (insert new el)\n            }\n\n            // handle child set/add/...\n            else if (INNER_SCOPE.waiting_for_child_action) {\n                if (!INNER_SCOPE.waiting_for_action) INNER_SCOPE.waiting_for_action = [];\n                INNER_SCOPE.waiting_for_action.push([INNER_SCOPE.waiting_for_child_action, INNER_SCOPE.active_value, el]);\n                delete INNER_SCOPE.active_value; // no longer exists\n                delete INNER_SCOPE.waiting_for_child_action;\n                return;\n            }\n\n\n            // child path coming afterwards?, create new subscope (if not already created => auto_exit), set active value and return\n            if (!INNER_SCOPE.auto_exit && (SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET || SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET_REF)) {\n                Runtime.runtime_actions.enterSubScope(SCOPE);\n                SCOPE.inner_scope.active_value = el;\n                SCOPE.inner_scope.auto_exit = 1; // auto exit subscope at next possible position\n                return;\n            }\n\n\n            if (INNER_SCOPE.waiting_for_key_perm) {\n                INNER_SCOPE.waiting_for_key_perm = false;\n                if (el instanceof Logical || el instanceof Target) INNER_SCOPE.key_perm = el;\n                else throw new ValueError(\"Invalid permission prefix, must be <Target>\")\n\n                return;\n            }\n\n\n            /************************** */\n\n\n\n            // now insert value:\n\n            // range (before path handling)\n            if (INNER_SCOPE.waiting_range) {\n                // add to range\n                if (INNER_SCOPE.waiting_range.length < 2) INNER_SCOPE.waiting_range.push(el)\n                // is range closed?\n                if (INNER_SCOPE.waiting_range.length == 2) {\n                    INNER_SCOPE.active_value = $$(new RangeIterator(INNER_SCOPE.waiting_range[0], INNER_SCOPE.waiting_range[1]))// Tuple.generateRange(INNER_SCOPE.waiting_range[0], INNER_SCOPE.waiting_range[1]); // new el is the generated range <Tuple>\n                    INNER_SCOPE.waiting_range = null; // range closed\n                }\n            }\n            \n\n            // insert\n            \n            // inside Array\n            else if (INNER_SCOPE.active_object && (INNER_SCOPE.active_object instanceof Array)) {\n                // collapse ...\n                if (INNER_SCOPE.waiting_collapse) {\n                    INNER_SCOPE.waiting_collapse = false;\n\n                    if (el instanceof Iterator) INNER_SCOPE.active_object.push(...(await el.collapse()).toArray());\n                    else if (el instanceof Tuple) INNER_SCOPE.active_object.push(...el.toArray());\n                    else if (el instanceof Array) INNER_SCOPE.active_object.push(...el);\n                    else throw new ValueError(\"Cannot collapse value\")\n                }\n\n                // key insert (integer)\n                else if ('waiting_key' in INNER_SCOPE) {\n                    if (typeof INNER_SCOPE.waiting_key == \"bigint\") INNER_SCOPE.active_object[Number(INNER_SCOPE.waiting_key)] = el;\n                    else throw new ValueError(\"<Array> key must be <integer>\");\n\n                    // add key permission\n                    if (INNER_SCOPE.key_perm) {\n                        console.log(\"array key permission\", INNER_SCOPE.waiting_key, INNER_SCOPE.key_perm, el);\n                        if (!INNER_SCOPE.active_object[DX_PERMISSIONS]) INNER_SCOPE.active_object[DX_PERMISSIONS] = {};\n                        INNER_SCOPE.active_object[DX_PERMISSIONS][INNER_SCOPE.waiting_key] = INNER_SCOPE.key_perm;\n                        delete INNER_SCOPE.key_perm;\n                    }\n\n                    delete INNER_SCOPE.waiting_key;\n                }\n\n                // internal slot \n                else if ('waiting_internal_slot' in INNER_SCOPE) {\n                    if (!INNER_SCOPE.active_object[DX_SLOTS]) INNER_SCOPE.active_object[DX_SLOTS] = new Map<number,any>();\n                    INNER_SCOPE.active_object[DX_SLOTS].set(INNER_SCOPE.waiting_internal_slot, el);\n                    delete INNER_SCOPE.waiting_internal_slot;\n                }\n\n                // insert normally into array\n                else INNER_SCOPE.active_object.push(el)\n            }\n            \n            // inside Tuple\n            else if (INNER_SCOPE.active_object && (INNER_SCOPE.active_object instanceof Tuple)) {\n                // collapse ...\n                if (INNER_SCOPE.waiting_collapse) {\n                    INNER_SCOPE.waiting_collapse = false;\n\n                    if (el instanceof Iterator) INNER_SCOPE.active_object.push(...(await el.collapse()).toArray());\n                    else if (el instanceof Tuple) INNER_SCOPE.active_object.spread(el);\n                    else if (el instanceof Array) INNER_SCOPE.active_object.push(...el);\n                    else throw new ValueError(\"Cannot collapse value\")\n                }\n\n                // key insert\n                else if ('waiting_key' in INNER_SCOPE) {\n                    INNER_SCOPE.active_object.set(INNER_SCOPE.waiting_key, el);\n\n                    // add key permission\n                    if (INNER_SCOPE.key_perm) {\n                        console.log(\"tuple key permission\", INNER_SCOPE.waiting_key, INNER_SCOPE.key_perm, el);\n                        if (!INNER_SCOPE.active_object[DX_PERMISSIONS]) INNER_SCOPE.active_object[DX_PERMISSIONS] = {};\n                        INNER_SCOPE.active_object[DX_PERMISSIONS][INNER_SCOPE.waiting_key] = INNER_SCOPE.key_perm;\n                        delete INNER_SCOPE.key_perm;\n                    }\n\n                    delete INNER_SCOPE.waiting_key;\n                }\n\n                // internal slot \n                else if ('waiting_internal_slot' in INNER_SCOPE) {\n                    if (!INNER_SCOPE.active_object[DX_SLOTS]) INNER_SCOPE.active_object[DX_SLOTS] = new Map<number,any>();\n                    INNER_SCOPE.active_object[DX_SLOTS].set(INNER_SCOPE.waiting_internal_slot, el);\n                    delete INNER_SCOPE.waiting_internal_slot;\n                }\n\n                // push\n                else {\n                    INNER_SCOPE.active_object.push(el);\n                }\n                \n            }\n            \n            // inside Object / Tuple and has key\n            else if (INNER_SCOPE.active_object && (INNER_SCOPE.waiting_collapse || 'waiting_key' in INNER_SCOPE || 'waiting_internal_slot' in INNER_SCOPE)) {\n\n                // collapse ...\n                if (INNER_SCOPE.waiting_collapse) {\n                    INNER_SCOPE.waiting_collapse = false;\n\n                    if (el instanceof Tuple) Object.assign(INNER_SCOPE.active_object, el.toObject());\n                    else if (Type.ofValue(el) == Type.std.Object || Type.ofValue(el) == Type.js.NativeObject) Object.assign(INNER_SCOPE.active_object, el)\n                    else throw new ValueError(\"Cannot collapse value\")\n                }\n\n                // key insert\n                else if ('waiting_key' in INNER_SCOPE) {\n                    if (typeof INNER_SCOPE.waiting_key == \"string\") INNER_SCOPE.active_object[INNER_SCOPE.waiting_key] = el;\n                    else throw new ValueError(\"<Object> key must be <text>\");\n\n                    // add key permission\n                    if (INNER_SCOPE.key_perm) {\n                        console.log(\"object key permission\", INNER_SCOPE.waiting_key, INNER_SCOPE.key_perm, el);\n                        if (!INNER_SCOPE.active_object[DX_PERMISSIONS]) INNER_SCOPE.active_object[DX_PERMISSIONS] = {};\n                        INNER_SCOPE.active_object[DX_PERMISSIONS][INNER_SCOPE.waiting_key] = INNER_SCOPE.key_perm;\n                        delete INNER_SCOPE.key_perm;\n                    }\n\n                    delete INNER_SCOPE.waiting_key;\n                }\n\n                // internal slot \n                else if ('waiting_internal_slot' in INNER_SCOPE) {\n                    if (!INNER_SCOPE.active_object[DX_SLOTS]) INNER_SCOPE.active_object[DX_SLOTS] = new Map<number,any>();\n                    INNER_SCOPE.active_object[DX_SLOTS].set(INNER_SCOPE.waiting_internal_slot, el);\n                    delete INNER_SCOPE.waiting_internal_slot;\n                }\n   \n            }\n            \n            // jtr or jfa\n            else if (INNER_SCOPE.jmp) {\n                // falsish values: void, null, false, 0, 0.0\n                const is_true = (el !== VOID && el !== false && el !== 0 && el !== 0n && el !== null);\n                if ((INNER_SCOPE.jmp_true && is_true) || (!INNER_SCOPE.jmp_true && !is_true)) {\n                    SCOPE.current_index = INNER_SCOPE.jmp;\n                }\n                await Runtime.runtime_actions.newSubScope(SCOPE);\n            }\n\n            /**\n             * modifications (operations) on a single value (el) =>\n            */\n\n\n            // $$ create pointer (or just proxify if already a pointer)\n            else if (INNER_SCOPE.create_pointer || INNER_SCOPE.delete_pointer) {\n                if (INNER_SCOPE.create_pointer) {\n                    INNER_SCOPE.create_pointer = false;\n                    // TODO: handle pointer permission, currently enabled for all\n                    // if (!SCOPE.impersonation_permission) throw new PermissionError(\"No permission to create pointers on this endpoint\", SCOPE)\n                    INNER_SCOPE.active_value = Pointer.createOrGet(el)\n                }\n          \n                // immediately delete pointer\n                if (INNER_SCOPE.delete_pointer) {\n                    delete INNER_SCOPE.active_value;\n                    INNER_SCOPE.delete_pointer = false;\n                    // TODO: handle pointer permission, currently enabled for all\n                    // if (!SCOPE.impersonation_permission) throw new PermissionError(\"No permission to delete pointers on this endpoint\", SCOPE)\n                    el = Pointer.pointerifyValue(el); // try proxify\n                    // try delete\n                    if (el instanceof Pointer ) el.delete()\n                    else throw new PermissionError(\"Cannot delete non-pointer\", SCOPE)\n                    return;\n                }\n            }\n\n            // sync pointer\n            else if (INNER_SCOPE.sync) {\n                const silent = INNER_SCOPE.sync == \"silent\"; // dont send value back\n                INNER_SCOPE.sync = false;\n                SCOPE.sync = false;\n\n                const pointer = Pointer.pointerifyValue(el);\n\n                if (!(pointer instanceof ReactiveValue) || (pointer instanceof Pointer && pointer.is_anonymous)) {\n                    throw new ValueError(\"sync expects a reference value\", SCOPE);\n                }\n\n                // sync consumer\n                const to = INNER_SCOPE.active_value;\n\n                INNER_SCOPE.active_value = VOID;\n\n                // is an endpoint -> subscribe to pointer updates\n                if (to instanceof Endpoint) {\n                    if (!(pointer instanceof Pointer) || pointer.is_anonymous) throw new ValueError(\"sync expects a pointer value\", SCOPE);\n\n                    \n                    // remote sender, only allowed if endpoint equals sender\n                    if (!Runtime.endpoint.equals(SCOPE.sender) /*remote sender*/ && !SCOPE.sender.equals(to) /** different endpoint than sender */) {\n                        if (!SCOPE.sender.equals(to)) throw new PointerError(\"Sender has no permission to sync pointer to another origin\", SCOPE);\n                    }\n\n                    pointer.addSubscriber(SCOPE.sender);\n                    // workaround to make sure the compiler compiles the full pointer value, not the collapsed id\n                    // alternative would be a full clone, which is inefficient and can lead to loss of information\n                    if (!silent) INNER_SCOPE.active_value = {[DX_RETURN_POINTER_VALUE]: pointer};\n\n                    // }\n                    // // redirect to actual parent\n                    // else {\n                    //     throw new PermissionError(\"Cannot sync pointer with remote origin \" + pointer.origin, SCOPE)\n                    // }\n\n                }\n\n                else if (to instanceof DatexFunction) {\n                    // TODO check function signature?\n                    pointer.observe(<any>to);\n                }\n\n                // convert value to stream (writes to stream everytime the pointer value changes)\n                else if (to instanceof Stream) {\n                    to.write(ReactiveValue.collapseValue(pointer, true, true)); // current value as initial value\n                    pointer.observe((v,k,t)=>{\n                        if (t == ReactiveValue.UPDATE_TYPE.INIT) to.write(v);\n                    });\n                }\n\n                else {\n                    throw new ValueError(\"Value must match <SyncConsumer>\")\n                }\n                \n            }\n\n            // stop sync pointer\n            else if (INNER_SCOPE.stop_sync) {\n                INNER_SCOPE.stop_sync = false;\n\n                let pointer = Pointer.pointerifyValue(el);\n\n                if (!(pointer instanceof ReactiveValue) || (pointer instanceof Pointer && pointer.is_anonymous)) throw new ValueError(\"stop sync expects a reference value\", SCOPE);\n\n                // is a sync consumer\n                const to = INNER_SCOPE.active_value;\n\n                // is an endpoint -> unsubscribe from pointer updates\n                if (to instanceof Endpoint) {\n                    if (!(pointer instanceof Pointer) || pointer.is_anonymous) throw new ValueError(\"stop sync expects a pointer value\", SCOPE);\n\n                    // TODO also check pointer permission for 'to'\n\n                    // request sync endpoint is self, cannot subscribe to own pointers!\n                    if (Runtime.endpoint.equals(to)) {\n                        throw new PointerError(\"Cannot stop sync pointer with own origin\", SCOPE);\n                    }\n                    // remote sender, only allowed if endpoint equals sender\n                    if (!Runtime.endpoint.equals(SCOPE.sender) /*remote sender*/ && !SCOPE.sender.equals(to) /** different endpoint than sender */) {\n                        if (!SCOPE.sender.equals(to)) throw new PointerError(\"Sender has no permission to stop sync pointer to another origin\", SCOPE);\n                    }\n\n                    // not existing pointer or no access to this pointer\n                    if (!pointer.value_initialized) throw new PointerError(\"Pointer does not exist\", SCOPE)\n                    // valid, remove subscriber\n                    else {\n                        pointer.removeSubscriber(SCOPE.sender);\n                        INNER_SCOPE.active_value = VOID;\n                    }\n                    \n                    // // redirect to actual parent\n                    // else {\n                    //     throw new PermissionError(\"Cannot stop sync pointer with remote origin \" + pointer.origin, SCOPE)\n                    // }\n\n                }\n                \n            }\n\n            // else if (INNER_SCOPE.unsubscribe) {\n            //     INNER_SCOPE.unsubscribe = false;\n            //     SCOPE.unsubscribe = false;\n\n            //     let pointer = Pointer.pointerifyValue(el);\n            //     logger.success(SCOPE.sender + \" unsubscribed from \" + pointer);\n            //     if (pointer instanceof Pointer && !pointer.is_anonymous) {\n            //         // is parent of this pointer\n            //         if (pointer.is_origin) {\n            //             pointer.removeSubscriber(SCOPE.sender);\n            //             return;\n            //         }\n            //         // redirect to actual parent\n            //         else {\n            //             throw new PermissionError(\"Cannot unsubscribe from pointer with remote origin\", SCOPE)\n            //         }\n            //     }\n            //     else throw new ValueError(\"Cannot unsubscribe from a non-pointer\", SCOPE);\n            // }\n\n            else if (INNER_SCOPE.copy) {\n                try {\n                    INNER_SCOPE.active_value = await Runtime.cloneValue(el);\n                }\n                catch (e) {\n                    if (e instanceof DatexError) e.addScopeToStack(SCOPE);\n                    throw e;\n                }\n                INNER_SCOPE.copy = false;\n            }\n            else if (INNER_SCOPE.clone) {\n                try {\n                    INNER_SCOPE.active_value = await Runtime.deepCloneValue(el);\n                }\n                catch (e) {\n                    if (e instanceof DatexError) e.addScopeToStack(SCOPE);\n                    throw e;\n                }\n                INNER_SCOPE.clone = false;\n            }\n\n            else if (INNER_SCOPE.clone_collapse) {\n                try {\n                    INNER_SCOPE.active_value = await Runtime.collapseCloneValue(el);\n                }\n                catch (e) {\n                    if (e instanceof DatexError) e.addScopeToStack(SCOPE);\n                    throw e;\n                }\n                INNER_SCOPE.clone_collapse = false;\n            }\n\n            else if (INNER_SCOPE.collapse) {\n                try {\n                    INNER_SCOPE.active_value = Logical.collapse(el, Target);\n                }\n                catch (e) {\n                    if (e instanceof DatexError) e.addScopeToStack(SCOPE);\n                    throw e;\n                }\n                INNER_SCOPE.collapse = false;\n            }\n\n            else if (INNER_SCOPE.get_type) {\n                INNER_SCOPE.active_value = Type.ofValue(el); // get type for value\n                INNER_SCOPE.get_type = false;\n            }\n\n            else if (INNER_SCOPE.get_origin) {\n                INNER_SCOPE.get_origin = false;\n                let pointer = Pointer.pointerifyValue(el);\n                if (pointer instanceof Pointer && !pointer.is_anonymous) {\n                    INNER_SCOPE.active_value = pointer.origin;\n                }\n                else throw new ValueError(\"Cannot get origin of a non-pointer\", SCOPE);\n            }\n\n            else if (INNER_SCOPE.get_subscribers) {\n                INNER_SCOPE.get_subscribers = false;\n                let pointer = Pointer.pointerifyValue(el);\n                if (pointer instanceof Pointer && !pointer.is_anonymous) {\n                    INNER_SCOPE.active_value = pointer.subscribers;\n                }\n                else throw new ValueError(\"Cannot get subscribers of a non-pointer\", SCOPE);\n            }\n\n            // <Type> extends <ParentType>\n            else if (INNER_SCOPE.wait_extends) {\n                INNER_SCOPE.wait_extends = false;\n                if (INNER_SCOPE.active_value instanceof Type && el instanceof Type) {\n                    INNER_SCOPE.active_value = el.template && DatexObject.extends(INNER_SCOPE.active_value.template, el.template);\n                }\n                else if (typeof INNER_SCOPE.active_value == \"object\") {\n                    INNER_SCOPE.active_value = DatexObject.extends(INNER_SCOPE.active_value, el);\n                }\n                else if (\"active_value\" in INNER_SCOPE && Type.ofValue(INNER_SCOPE.active_value).is_primitive) throw new RuntimeError(\"A primitive value cannot extend a value\", SCOPE);\n                else if (\"active_value\" in INNER_SCOPE) INNER_SCOPE.active_value = false;\n                else throw new RuntimeError(\"Invalid 'extends' command\", SCOPE);\n            }\n\n            // value matches <Type>, @alias matches filter\n            else if (INNER_SCOPE.wait_matches) {\n                INNER_SCOPE.wait_matches = false;\n                // TODO: how to handle the matches command (currently different for types and everything else:)\n                if (el instanceof Type) {\n                    INNER_SCOPE.active_value = el.matches(INNER_SCOPE.active_value);\n                }\n                else {\n                    INNER_SCOPE.active_value = Logical.matches(INNER_SCOPE.active_value, el);\n                }\n                // else if (INNER_SCOPE.active_value instanceof Endpoint && el instanceof Logical) {\n                //     // TODO\n                // }\n                // else if (el instanceof Logical) {\n                //     INNER_SCOPE.active_value = Type.matches(INNER_SCOPE.active_value, el);\n                // }\n                // else if (INNER_SCOPE.active_value instanceof Endpoint && el instanceof Endpoint) {\n                //     INNER_SCOPE.active_value = el.equals(INNER_SCOPE.active_value);\n                // }\n                // else if (!(\"active_value\" in INNER_SCOPE)) throw new RuntimeError(\"Invalid 'matches' command\", SCOPE);\n                // else throw new RuntimeError(\"Invalid values for 'matches' command\", SCOPE);\n            }\n\n            // <Type> implements <ParentType>\n            else if (INNER_SCOPE.wait_implements) {\n                INNER_SCOPE.wait_implements = false;\n                if (INNER_SCOPE.active_value instanceof Type && el instanceof Type) {\n                    INNER_SCOPE.active_value = el.matchesType(INNER_SCOPE.active_value)\n                }\n                else if ((INNER_SCOPE.active_value instanceof Logical || INNER_SCOPE.active_value instanceof Type) && (el instanceof Logical || el instanceof Type)) {\n                    INNER_SCOPE.active_value = Type.matchesType(INNER_SCOPE.active_value, el);\n                }\n                else throw new RuntimeError(\"'implements' must check a <Type> against a <Type>\", SCOPE);\n                //else if (!(\"active_value\" in INNER_SCOPE)) throw new RuntimeError(\"Invalid 'implements' command\", SCOPE);\n            }\n\n\n            // [1,2,3] has 1 \n            else if (INNER_SCOPE.has) {\n                INNER_SCOPE.active_value = await Runtime.runtime_actions.has(SCOPE, INNER_SCOPE.active_value, el);\n                delete INNER_SCOPE.has;\n            }\n\n            else if (INNER_SCOPE.wait_freeze) {\n                INNER_SCOPE.wait_freeze = false;\n                if (Type.ofValue(el).is_primitive) throw new RuntimeError(\"Cannot freeze a primitive value\", SCOPE);\n                else INNER_SCOPE.active_value = DatexObject.freeze(el)\n            }\n\n            else if (INNER_SCOPE.wait_seal) {\n                INNER_SCOPE.wait_seal = false;\n                if (Type.ofValue(el).is_primitive) throw new RuntimeError(\"Cannot seal a primitive value\", SCOPE);\n                else INNER_SCOPE.active_value = DatexObject.seal(el)\n            }\n            // store value in blockchain\n            // else if (INNER_SCOPE.wait_store) {\n            //     const transaction = new BlockchainTransaction({data:el, type:1})\n            //     INNER_SCOPE.active_value = transaction;\n            //     // TODO send to blockchain\n            //     INNER_SCOPE.wait_store = false;\n            // }\n\n            /** \n             * handle multiple other value operations or assignments (using INNER_SCOPE.active_value)\n             */\n\n            // stream\n            else if (SCOPE.inner_scope.stream_consumer) {\n                el = ReactiveValue.collapseValue(el, true, true); // collapse primitive values\n\n                // pipe stream\n                if (el instanceof Stream) {\n                     SCOPE.inner_scope.stream_consumer.pipe(el, SCOPE)\n                     INNER_SCOPE.stream_consumer = el; // set current el as new stream_reader\n                     console.log(\"pipe << \", el)\n                }\n\n                // write next to stream\n                else {\n                    SCOPE.inner_scope.stream_consumer.write(el, SCOPE);\n                }\n            }\n\n            // compare\n            else if (\"compare_type\" in INNER_SCOPE) {\n\n                let is_true = false;\n\n                let a = ReactiveValue.collapseValue(INNER_SCOPE.active_value,true); // only collapse pointer properties, keep primitive pointers\n                let b = ReactiveValue.collapseValue(el,true);\n\n                \n                let compared;\n                // special compare -> strong EQUAL (referening same endpoint, but possibly different values)\n                if (a instanceof Endpoint && b instanceof Endpoint && (INNER_SCOPE.compare_type == BinaryCode.EQUAL || INNER_SCOPE.compare_type == BinaryCode.NOT_EQUAL)) {\n                    switch (INNER_SCOPE.compare_type) {\n                        case BinaryCode.EQUAL:          is_true = a.equals(b); compared = true; break;\n                        case BinaryCode.NOT_EQUAL:      is_true = !a.equals(b); compared = true; break;\n                    } \n                }\n\n\n                // test conditions\n                if (!compared) {\n                    switch (INNER_SCOPE.compare_type) {\n                        // strong equal (reference, same object/value/pointer)\n                        case BinaryCode.EQUAL:           is_true = a === b; break;\n                        case BinaryCode.NOT_EQUAL:       is_true = a !== b; break;\n                        // value equal\n                        case BinaryCode.EQUAL_VALUE:     is_true = await Runtime.equalValues(a,b); break;\n                        case BinaryCode.NOT_EQUAL_VALUE: is_true = ! (await Runtime.equalValues(a,b)); break;\n                        // comparison based on values\n\n                        case BinaryCode.GREATER:      \n                        case BinaryCode.GREATER_EQUAL:  \n                        case BinaryCode.LESS:    \n                        case BinaryCode.LESS_EQUAL: {\n                            const typeA = Type.ofValue(a);\n                            const typeB = Type.ofValue(b);\n\n                            if (! ((typeA==Type.std.decimal || typeA==Type.std.integer) && (typeB == Type.std.decimal || typeB == Type.std.integer))) {\n                                if (!typeA.matchesType(typeB)) {\n                                    throw new ValueError(\"Cannot compare values of different types\")\n                                }\n                                const comp = typeA.handleCompare(a,b);\n                                if (comp != NOT_EXISTING) { a = comp; b = 0;} // override a and b for custom type comparison\n                                else throw new ValueError(\"Values of type \"+typeA+\" cannot be compared\");\n                            }\n\n                            switch (INNER_SCOPE.compare_type) {\n                                case BinaryCode.GREATER:         is_true = a >   b; break;\n                                case BinaryCode.GREATER_EQUAL:   is_true = a >=  b; break;\n                                case BinaryCode.LESS:            is_true = a <   b; break;\n                                case BinaryCode.LESS_EQUAL:      is_true = a <=  b; break;\n                            }\n                            break;\n                        }\n                       \n                        default: throw new RuntimeError(\"Invalid comparison, TODO invalid state\")\n                    }\n                }   \n                \n                // reset\n                delete INNER_SCOPE.compare_type;\n                // new active value\n                INNER_SCOPE.active_value = is_true;\n            }\n    \n            // also handle + and - if current active value is not defined (interpret as 0)\n            // +\n            else if (INNER_SCOPE.operator === BinaryCode.ADD || INNER_SCOPE.operator === BinaryCode.SUBTRACT) {\n\n                el = ReactiveValue.collapseValue(el, true, true); // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n\n                // negate for subtract\n                if (INNER_SCOPE.operator === BinaryCode.SUBTRACT && (typeof el == \"number\" || typeof el == \"bigint\")) el = -el;\n\n                if (typeof val == \"bigint\" && typeof el == \"bigint\") {\n                    INNER_SCOPE.active_value += el;\n                }\n                else if ((typeof val == \"number\" || typeof val == \"bigint\") && (typeof el == \"number\" || typeof el == \"bigint\")) {\n                    INNER_SCOPE.active_value = Number(val);\n                    INNER_SCOPE.active_value += Number(el);\n                }\n                else if (INNER_SCOPE.operator === BinaryCode.ADD && typeof val == \"string\" && typeof el == \"string\") {\n                    INNER_SCOPE.active_value += el;\n                }\n                else {\n\n                    // try custom operator overloading\n                    const res = (INNER_SCOPE.operator === BinaryCode.ADD) ?\n                        Type.ofValue(INNER_SCOPE.active_value).handleOperatorAdd(INNER_SCOPE.active_value, el):\n                        Type.ofValue(INNER_SCOPE.active_value).handleOperatorSubtract(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = (INNER_SCOPE.operator === BinaryCode.ADD) ?\n                            Type.ofValue(el).handleOperatorAdd(INNER_SCOPE.active_value, el):\n                            Type.ofValue(el).handleOperatorSubtract(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for \"+(INNER_SCOPE.operator === BinaryCode.ADD ? \"add\" : \"subtract\")+\" operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid \"+(INNER_SCOPE.operator === BinaryCode.ADD ? \"add\" : \"subtract\")+\" operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n            // &\n            else if (INNER_SCOPE.operator === BinaryCode.AND) {\n\n                // collapse primitive values\n                const val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n                // logical\n                if (val instanceof Logical) {\n                    INNER_SCOPE.active_value = val.and(el);\n                }\n                else if (val instanceof Target || el instanceof Target || val instanceof Type || el instanceof Type || val instanceof Assertion || el instanceof Assertion) {\n                    INNER_SCOPE.active_value = new Conjunction(val, el)           \n                }\n                \n                // booleans\n                else if (typeof val == \"boolean\" && typeof el == \"boolean\"){\n                    INNER_SCOPE.active_value = val && el;\n                }\n\n                \n                else {\n\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorAnd(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorAnd(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for logical OR operation\", SCOPE)\n                        else if (res == NOT_EXISTING) {\n\n                            // create conjunctive (&) value by extending\n                            const base_type = Type.ofValue(val);\n                            const base = Runtime.collapseValueCast(await base_type.createDefaultValue());\n                            DatexObject.extend(base, val);\n                            DatexObject.extend(base, el);\n                            INNER_SCOPE.active_value = base;\n\n                        }\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n\n                \n                }\n\n                // else {\n                //     throw new ValueError(\"Cannot perform a logic AND operation on this value\", SCOPE)               \n                // }\n                delete INNER_SCOPE.operator;\n            }\n\n            // |\n            else if (INNER_SCOPE.operator === BinaryCode.OR) {\n                \n                // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n\n                // logical\n                if (val instanceof Logical) {\n                    INNER_SCOPE.active_value = val.or(el);\n                }\n                else if (val instanceof Target || el instanceof Target || val instanceof Type || el instanceof Type) {\n                    INNER_SCOPE.active_value = new Disjunction(val, el)           \n                }\n\n                // booleans\n                else if (typeof val == \"boolean\" && typeof el == \"boolean\"){\n                    INNER_SCOPE.active_value = val || el;\n                }\n                else {\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorOr(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorOr(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for logical OR operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid logical OR operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n\n            // *\n            else if (INNER_SCOPE.operator === BinaryCode.MULTIPLY) {\n                \n                // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n                if (typeof val == \"bigint\" && typeof el == \"bigint\") {\n                    INNER_SCOPE.active_value *= el;\n                }\n                else if ((typeof val == \"number\" || typeof val == \"bigint\") && (typeof el == \"number\" || typeof el == \"bigint\")) {\n                    INNER_SCOPE.active_value = Number(INNER_SCOPE.active_value);\n                    INNER_SCOPE.active_value *= Number(el);\n                }\n                else if (typeof val == \"string\" && typeof el == \"bigint\") {\n                    INNER_SCOPE.active_value = val.repeat(Number(el));\n                }\n                else if (typeof val == \"bigint\" && typeof el == \"string\") {\n                    INNER_SCOPE.active_value = el.repeat(Number(val));\n                }\n                // repeat tuples n times\n                else if (val instanceof Tuple && typeof el == \"bigint\") {\n                    if (el<0) throw new ValueError(\"Cannot multiply <Tuple> with negative <integer>\", SCOPE)\n                    INNER_SCOPE.active_value = new Tuple(new Array(Number(el)).fill(val).flat()).seal();\n                }\n                else if (typeof val == \"bigint\" && el instanceof Tuple) {\n                    if (val<0) throw new ValueError(\"Cannot multiply <Tuple> with negative <integer>\", SCOPE)\n                    INNER_SCOPE.active_value = new Tuple(new Array(Number(val)).fill(el).flat()).seal();\n                }\n                // repeat void n times\n                else if (val === VOID && typeof el == \"bigint\") {\n                    if (el<0) throw new ValueError(\"Cannot multiply <Tuple> with negative <integer>\", SCOPE)\n                    INNER_SCOPE.active_value = new Tuple(new Array(Number(el)).fill(VOID)).seal();\n                }\n                else if (typeof val == \"bigint\" && el === VOID) {\n                    console.log(\"multiple\", val ,el)\n                    if (val<0) throw new ValueError(\"Cannot multiply <Tuple> with negative <integer>\", SCOPE)\n                    INNER_SCOPE.active_value = new Tuple(new Array(Number(val)).fill(VOID)).seal();\n                }\n                else {\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorMultiply(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorMultiply(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for multiply operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid multiply operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n            // /\n            else if (INNER_SCOPE.operator === BinaryCode.DIVIDE) {\n\n                // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n                if (typeof val == \"bigint\" && typeof el == \"bigint\") {\n                    if (el === 0n) throw new ValueError(\"Division by zero\", SCOPE);\n                    INNER_SCOPE.active_value /= el;\n                }\n                else if ((typeof val == \"number\" || typeof val == \"bigint\") && (typeof el == \"number\" || typeof el == \"bigint\")) {\n                    INNER_SCOPE.active_value = Number(INNER_SCOPE.active_value);\n                    INNER_SCOPE.active_value /= Number(el);\n                }\n                else {\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorDivide(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorDivide(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for divide operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid divide operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n            // ^\n            else if (INNER_SCOPE.operator === BinaryCode.POWER) {\n                \n                // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n                if (typeof val == \"bigint\" && typeof el == \"bigint\") {\n                    if (el < 0) throw new ValueError(\"Cannot use a negative exponent with an integer\")\n                    else INNER_SCOPE.active_value **= el;\n                }\n                else if ((typeof val == \"number\" || typeof val == \"bigint\") && (typeof el == \"number\" || typeof el == \"bigint\")) {\n                    INNER_SCOPE.active_value = Number(INNER_SCOPE.active_value);\n                    INNER_SCOPE.active_value **= Number(el);\n                }\n                else {\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorPower(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorPower(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for power operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid power operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n            // %\n            else if (INNER_SCOPE.operator === BinaryCode.MODULO) {\n    \n                // collapse primitive values\n                let val = ReactiveValue.collapseValue(INNER_SCOPE.active_value, true, true);\n                el = ReactiveValue.collapseValue(el, true, true); \n\n                if (typeof val == \"bigint\" && typeof el == \"bigint\") {\n                    INNER_SCOPE.active_value %= el;\n                }\n                else if ((typeof val == \"number\" || typeof val == \"bigint\") && (typeof el == \"number\" || typeof el == \"bigint\")) {\n                    INNER_SCOPE.active_value = Number(INNER_SCOPE.active_value);\n                    INNER_SCOPE.active_value %= Number(el);\n                }\n                else {\n                    // try custom operator overloading\n                    const res = Type.ofValue(INNER_SCOPE.active_value).handleOperatorModulo(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) {\n                        const res = Type.ofValue(el).handleOperatorModulo(INNER_SCOPE.active_value, el);\n                        if (res == INVALID) throw new ValueError(\"Invalid operands for modulo operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else if (res == NOT_EXISTING) throw new ValueError(\"Invalid modulo operation (types \"+Type.ofValue(INNER_SCOPE.active_value)+\" and \"+Type.ofValue(el)+\")\", SCOPE)\n                        else INNER_SCOPE.active_value = res;\n                    }\n                    else INNER_SCOPE.active_value = res;\n                }\n                delete INNER_SCOPE.operator;\n            }\n\n            // special function-like operators\n\n            // throw error\n            else if (INNER_SCOPE.operator === BinaryCode.YEET) {\n                // add SCOPE to error stack\n                if (el instanceof DatexError) el.addScopeToStack(SCOPE);\n                throw el;\n            }\n            \n            // about xy\n            else if (INNER_SCOPE.about) {\n                INNER_SCOPE.active_value = Runtime.getAbout(el);\n                delete INNER_SCOPE.about;\n            }\n\n            // new \n            else if (INNER_SCOPE.new_type) {\n                INNER_SCOPE.active_value = INNER_SCOPE.new_type.cast(el);\n                console.log(\"cast \",INNER_SCOPE.new_type,el,INNER_SCOPE.active_value);\n                delete INNER_SCOPE.new_type;\n            }\n\n\n            // count [1,2,3]\n            else if (INNER_SCOPE.count) {\n                INNER_SCOPE.active_value = Runtime.runtime_actions.countValue(el);\n                delete INNER_SCOPE.count;\n            }\n\n            // keys x\n            else if (INNER_SCOPE.keys) {\n                INNER_SCOPE.active_value = Runtime.runtime_actions.getKeys(el);\n                delete INNER_SCOPE.keys;\n            }\n\n            // get 'file://'...\n            else if (INNER_SCOPE.get) {\n                if (el instanceof Target || el instanceof Logical) {\n                    if (!SCOPE.impersonation_permission && !(el instanceof Endpoint && SCOPE.sender.equals(el) && SCOPE.header.signed)) { \n                        throw new PermissionError(\"No permission to execute scopes on external endpoints\", SCOPE)\n                    }\n                    if (el instanceof Endpoint) INNER_SCOPE.active_value = await el.getEntrypoint();\n                    else {\n                        logger.warn(\"TODO: entrypoint from non-endpoint target?\")\n                    }\n                }\n                else if (el instanceof URL) {\n                    INNER_SCOPE.active_value = await Runtime.getURLContent(el, false, true);\n                }\n                // else ignore, continue with current value\n                else INNER_SCOPE.active_value = el;\n                delete INNER_SCOPE.get;\n            }\n\n            // handle other active value cases (no operators)\n            else if (\"active_value\" in INNER_SCOPE) {\n                let val = INNER_SCOPE.active_value;\n\n                // handle all ValueConsumers (<Function>, <Type> TODO?, ...)\n                if (val instanceof DatexFunction || val instanceof Target /*|| val instanceof Filter*/ || val instanceof Assertion) {\n                    // insert <Tuple>el or [el], or [] if el==VOID (call without parameters)                    \n                    if (val.handleApply) INNER_SCOPE.active_value = await val.handleApply(ReactiveValue.collapseValue(el), SCOPE);\n                    else throw new ValueError(\"Cannot apply values to this value\", SCOPE);\n                }\n\n\n                else {\n                    const res = await Type.ofValue(INNER_SCOPE.active_value).handleApply(INNER_SCOPE.active_value, el);\n                    if (res == INVALID || res == NOT_EXISTING) throw new ValueError(`Cannot apply ${Runtime.valueToDatexString(el)} to ${Runtime.valueToDatexString(val)}`, SCOPE)\n                    else INNER_SCOPE.active_value = res;\n                } \n\n                // apply / function call return value -> give access permission to current endpoint\n                const ptr = Pointer.pointerifyValue(INNER_SCOPE.active_value);\n                if (Runtime.OPTIONS.PROTECT_POINTERS && SCOPE.sender !== Runtime.endpoint && ptr instanceof Pointer) {\n                    ptr.grantAccessTo(SCOPE.sender);\n                }\n\n            }\n\n\n\n            else {\n                INNER_SCOPE.active_value = el;\n            }            \n            \n        },\n\n    }\n\n    static createNewInitialScope(header?:dxb_header, internal_vars?:{[name:string|number]:any}, context?:Object, it?:any, context_location?:URL, compiler_context = false):datex_scope {\n\n        context_location = context_location ?? new URL(header ? (header.sender + ':' + header?.sid) : '@@local', baseURL);\n        if (compiler_context) context_location = new URL(context_location.toString() + '.@@compiler');\n\n        const persistent_memory = Runtime.getScopeMemory(context_location.toString());\n\n        const scope:datex_scope = {\n            sid: header?.sid,\n            header: header,\n            sender: header?.sender,\n            origin: header?.sender,\n    \n            current_index: 0,\n            start_index: 0,\n\n            index_offset: 0,\n    \n            internal_vars: {...persistent_memory, ...(internal_vars??{})},\n            persistent_vars: persistent_memory ? Object.keys(persistent_memory): [],\n\n            execution_permission: header?.executable, // allow execution?\n            impersonation_permission: Runtime.endpoint?.equals(header?.sender), // at the moment: only allow endpoint to impersonate itself\n    \n            inner_scope: null, // has to be copied from sub_scopes[0]\n        \n            sub_scopes: [],\n    \n            result: VOID, // -> internal variable __result\n\n            context: context,\n            context_location:  context_location,\n            it: it,\n\n            meta: {},\n            remote: {},\n\n            buffer_views: {}\n        }\n\n        //console.log(\"scope root\", scope.root);\n        // default meta data\n        Object.defineProperty(scope.meta, 'encrypted', {value: header?.encrypted, writable: false, enumerable:true});\n        Object.defineProperty(scope.meta, 'signed', {value: header?.signed, writable: false, enumerable:true});\n        Object.defineProperty(scope.meta, 'sender', {value: header?.sender, writable: false, enumerable:true});\n        Object.defineProperty(scope.meta, 'caller', {value: header?.sender, writable: false, enumerable:true});\n        Object.defineProperty(scope.meta, 'timestamp', {value: header?.timestamp, writable: false, enumerable:true});\n        Object.defineProperty(scope.meta, 'type', {value: header?.type, writable: false, enumerable:true});\n\n        return scope;\n    }\n\n\n    /** call before running a scope with new data */\n\n    static updateScope(scope:datex_scope, datex_body_buffer:ArrayBuffer, header:dxb_header) {\n        // merge new block with previous, also if cache_after_index is < current index\n        if (scope.cache_previous || (typeof scope.cache_after_index == \"number\" && scope.current_index+scope.index_offset>=scope.cache_after_index)) {\n            const new_uint8 = new Uint8Array(scope.buffer_views.buffer.byteLength + datex_body_buffer.byteLength);\n            new_uint8.set(new Uint8Array(scope.buffer_views.buffer), 0);\n            new_uint8.set(new Uint8Array(datex_body_buffer), scope.buffer_views.buffer.byteLength);\n            scope.buffer_views.buffer = new_uint8.buffer;\n        }\n        // (re)set buffer if previous block(s) not cached\n        else {\n            scope.buffer_views.buffer    = datex_body_buffer;\n            scope.index_offset += scope.current_index; // update index offset\n            scope.current_index = 0; // only reset index to start of new block \n        }\n        \n        scope.buffer_views.uint8     = new Uint8Array(scope.buffer_views.buffer);     // default      - 1 byte\n        scope.buffer_views.data_view = new DataView(scope.buffer_views.buffer);       // works with all typed arrays \n\n        // update/set header\n        scope.header = header;\n\n        scope.execution_permission = header?.executable // allow execution?\n        scope.impersonation_permission = Runtime.endpoint?.equals(header?.sender) // at the moment: only allow endpoint to impersonate itself\n\n        // enter outer scope ?\n        if (scope.sub_scopes.length == 0) {\n            scope.inner_scope = {};\n            scope.sub_scopes.push(scope.inner_scope);\n            scope.inner_scope.is_outer_scope = true; // is outer scope\n        }\n     \n        scope.cache_previous = false; // reset\n    }\n\n\n    /** parses a datex block, keeps track of the current scope, executes actions */\n    static async run(SCOPE:datex_scope):Promise<void> {\n\n        // workaround using decompiler:\n        // pre-extract all pointers from script and pre-fetch pointer origin online states\n        if (communicationHub.connected) {\n            try {\n                const content = MessageLogger.decompile(SCOPE.buffer_views.buffer, false, false)\n                const origins = [\n                    ...new Set(content.match(/\\$((?:[A-Fa-f0-9]{2}|[xX][A-Fa-f0-9]){1,26})/gm)?.map(p => {\n                        try {\n                            return Pointer.getOriginFromPointerId(p.replace(\"$\",\"\"));\n                        }\n                        catch {}\n                    }).filter(o => o && !(o.equals(Runtime.endpoint) || o.equals(SCOPE.sender))))\n                ];\n                if (origins.length > 1) {\n                    logger.debug(\"pre-fetching online state for \"+ origins.length + \" endpoints\")\n                    await Promise.race([\n                        Promise.all(origins.map(origin => origin.isOnline())),\n                        new Promise(resolve => setTimeout(resolve, 10_000))\n                    ])\n                }\n            }\n            catch {}\n        }\n        \n\n        // loop through instructions\n        while (true) {\n\n            // pause scope - not necessarily end\n            if (SCOPE.current_index>=SCOPE.buffer_views.uint8.byteLength) {\n                return;\n            }\n\n            // auto exit subscope?\n            if (SCOPE.inner_scope.auto_exit == 2 /* && DatexRuntime.END_BIN_CODES.includes(SCOPE.buffer_views.uint8[SCOPE.current_index])*/) {\n                await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n            }\n            else if (SCOPE.inner_scope.auto_exit == 1 && !(SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET || SCOPE.buffer_views.uint8[SCOPE.current_index] == BinaryCode.CHILD_GET_REF)) {\n                SCOPE.inner_scope.auto_exit = 2;\n            }\n\n            // keep track of index to jump back to if the buffer is not yet loaded up to a required position\n            SCOPE.start_index = SCOPE.current_index;\n\n            let token = SCOPE.buffer_views.uint8[SCOPE.current_index++]\n\n            // ASSIGN_SET = \n            switch (token) {\n\n                // end scope\n                case BinaryCode.EXIT: { \n                    SCOPE.closed = true;\n                    return;\n                }\n\n\n                // STRING\n                case BinaryCode.SHORT_TEXT:\n                case BinaryCode.TEXT: {\n\n                    let length: number;\n\n                    if (token == BinaryCode.SHORT_TEXT) {\n                        /** wait for buffer */\n                        if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                        /********************/\n\n                        length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    }\n                    else {\n                        /** wait for buffer */\n                        if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                        /********************/\n\n                        length = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                        SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    }\n                  \n                    \n                    /** wait for buffer */\n                    if (SCOPE.current_index+length > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    \n                    let string = this.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+length));\n                    SCOPE.current_index += length;\n\n                    await this.runtime_actions.insertToScope(SCOPE, string);\n                    break;\n                }\n\n\n                // BUFFER \n                case BinaryCode.BUFFER: {  \n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let buffer_length = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    \n                    /** wait for buffer */\n                    if (SCOPE.current_index+buffer_length > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let buffer = SCOPE.buffer_views.buffer.slice(SCOPE.current_index, SCOPE.current_index+buffer_length);\n                    SCOPE.current_index += buffer_length;\n                    // console.warn(\"buffer length\", buffer_length, _buffer);\n\n                    // media stream\n                    \n                    await this.runtime_actions.insertToScope(SCOPE, buffer);\n                    break;\n                }\n\n                // CHILD_GET\n                case BinaryCode.CHILD_GET: {\n                    SCOPE.inner_scope.waiting_for_child = 1;\n                    break;\n                }\n\n                // CHILD_GET_REF\n                case BinaryCode.CHILD_GET_REF: { \n                    SCOPE.inner_scope.waiting_for_child = 2;\n                    break;\n                }\n        \n                // CHILD SET =\n                case BinaryCode.CHILD_SET: { \n                    SCOPE.inner_scope.waiting_for_child_action = -1;\n                    break;\n                }\n\n                // CHILD ACTION (+=, -=, ...)\n                case BinaryCode.CHILD_ACTION: { \n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    // set action specifier\n                    SCOPE.inner_scope.waiting_for_child_action =  SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    break;\n                }\n\n\n                // RANGE ..\n                case BinaryCode.RANGE: {             \n                    SCOPE.inner_scope.waiting_range = [];\n                    break;\n                }\n\n                // SPREAD ...\n                case BinaryCode.EXTEND: {             \n                    SCOPE.inner_scope.inner_spread = true; // remember spread\n                    break;\n                }\n\n                // ERROR\n                case BinaryCode.YEET: {\n                    SCOPE.inner_scope.operator = BinaryCode.YEET;\n                    break;\n                }\n\n                // COMPARE\n                case BinaryCode.EQUAL_VALUE:\n                case BinaryCode.EQUAL:\n                case BinaryCode.NOT_EQUAL_VALUE:\n                case BinaryCode.GREATER:\n                case BinaryCode.GREATER_EQUAL:\n                case BinaryCode.LESS:\n                case BinaryCode.LESS_EQUAL: {\n                    SCOPE.inner_scope.compare_type = token;\n                    break;\n                }\n                                        \n                // CACHE POINTS\n                case BinaryCode.CACHE_POINT: {\n                    SCOPE.cache_after_index = SCOPE.current_index + SCOPE.index_offset;\n                    break;\n                }\n                case BinaryCode.CACHE_RESET: {\n                    delete SCOPE.cache_after_index;\n                    break;\n                }\n\n                // JMPS\n                case BinaryCode.JMP: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let index = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    await Runtime.runtime_actions.newSubScope(SCOPE)\n                    SCOPE.current_index = index;\n                    break;\n                }\n\n                case BinaryCode.JTR: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let index = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    SCOPE.inner_scope.jmp = index;\n                    SCOPE.inner_scope.jmp_true = true;\n                    break;\n                }\n\n                case BinaryCode.JFA: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let index = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    SCOPE.inner_scope.jmp = index;\n                    SCOPE.inner_scope.jmp_true = false;\n                    break;\n                }\n                \n              \n\n                // INTERNAL_VAR  \n                case BinaryCode.INTERNAL_VAR: { \n                    const name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n\n                    // get var \n                    else {\n                        \n                        let val:any;\n                        // read special internal variables\n                        if (name == \"result\")           val = SCOPE.result;\n                        else if (name == \"sub_result\")  val = SCOPE.inner_scope.result;\n                        else if (name == \"sender\")      val = SCOPE.header.sender;\n                        else if (name == \"current\")     val = Runtime.endpoint;\n                        else if (name == \"timestamp\")   val = SCOPE.header.timestamp\n                        else if (name == \"encrypted\")   val = SCOPE.header.encrypted\n                        else if (name == \"signed\")      val = SCOPE.header.signed\n                        else if (name == \"public\")      val = StaticScope.scopes;\n                        else if (name == \"meta\")        val = SCOPE.meta;\n                        else if (name == \"remote\")      val = SCOPE.remote;\n                        else if (name == \"this\")        val = SCOPE.context;\n                        else if (name == \"it\")          val = SCOPE.it;\n\n                        // all other internal variables\n                        else if (name in SCOPE.internal_vars) val = SCOPE.internal_vars[name];\n                        // object internal slot\n                        else if (typeof name == \"number\" && name >= 0xfa00 && name < 0xfeff && SCOPE.context[DX_SLOTS]?.has(name)) {\n                            val = SCOPE.context[DX_SLOTS].get(name);\n                        }\n                        else {\n                            throw new RuntimeError(\"Internal variable \"+Runtime.formatVariableName(name, '#')+\" does not exist\", SCOPE);\n                        }\n                        // insert to scope\n                        await this.runtime_actions.insertToScope(SCOPE, val);\n                    }\n                    break;\n                }\n\n                // SET_INTERNAL_VAR  \n                case BinaryCode.SET_INTERNAL_VAR: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    if (!Runtime.readonly_internal_vars.has(name)) {\n                        if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                        SCOPE.inner_scope.waiting_internal_vars.add([name, BinaryCode.SET_INTERNAL_VAR]);\n                    }\n                    else {\n                        throw new RuntimeError(\"Internal variable \"+Runtime.formatVariableName(name, '#')+\" is readonly\", SCOPE);\n                    }\n                    break;\n                }\n\n\n                // SET_INTERNAL_VAR_REFERENCE  \n                case BinaryCode.SET_INTERNAL_VAR_REFERENCE: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    if (!Runtime.readonly_internal_vars.has(name)) {\n                        if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                        SCOPE.inner_scope.waiting_internal_vars.add([name, BinaryCode.SET_INTERNAL_VAR_REFERENCE]);\n                    }\n                    else {\n                        throw new RuntimeError(\"Internal variable \"+Runtime.formatVariableName(name, '#')+\" is readonly\", SCOPE);\n                    }\n                    break;\n                }\n\n\n                // INIT_INTERNAL_VAR  \n                case BinaryCode.INIT_INTERNAL_VAR: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const init_block_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n\t\t\t\t\tSCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    // already exists?\n                    if (name in SCOPE.internal_vars) {\n                        SCOPE.current_index += init_block_size; // jump to end of init block\n                    }\n\n                    // init new\n                    else {\n                        if (!Runtime.readonly_internal_vars.has(name)) {\n                            if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                            SCOPE.inner_scope.waiting_internal_vars.add([name, BinaryCode.SET_INTERNAL_VAR_REFERENCE, true /* save in persistant memory */]);\n                        }\n                        else {\n                            throw new RuntimeError(\"Internal variable \"+Runtime.formatVariableName(name, '#')+\" is readonly\", SCOPE);\n                        }\n                    }\n                    \n                    break;\n                }\n\n                // INTERNAL_VAR_ACTION  \n                case BinaryCode.INTERNAL_VAR_ACTION: { \n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n\n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    if (!Runtime.readonly_internal_vars.has(name)) {\n                        if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                        SCOPE.inner_scope.waiting_internal_vars.add([name, action]);\n                    }\n                    else {\n                        throw new RuntimeError(\"Internal variable '\"+name+\"' is readonly\", SCOPE);\n                    }\n                    break;\n                }\n\n\n                // INTERNAL VAR shorthands\n                case BinaryCode.VAR_RESULT: { \n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.result);\n                    break;\n                }\n                case BinaryCode.VAR_SUB_RESULT: {\n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.inner_scope.result);\n                    break;\n                }\n                // case BinaryCode.VAR_ENCRYPTED: { \n                //     await this.runtime_actions.insertToScope(SCOPE, SCOPE.meta.encrypted);\n                //     break;\n                // }\n                // case BinaryCode.VAR_SIGNED: { \n                //     await this.runtime_actions.insertToScope(SCOPE, SCOPE.meta.signed);\n                //     break;\n                // }\n                case BinaryCode.VAR_ENTRYPOINT: { \n                    await this.runtime_actions.insertToScope(SCOPE, Runtime.endpoint_entrypoint);\n                    break;\n                }\n                case BinaryCode.VAR_ORIGIN: { \n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.meta.sender);\n                    break;\n                }\n                case BinaryCode.VAR_ENDPOINT: { \n                    await this.runtime_actions.insertToScope(SCOPE, Runtime.endpoint);\n                    break;\n                }\n                case BinaryCode.VAR_LOCATION: { \n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.context_location);\n                    break;\n                }\n                case BinaryCode.VAR_ENV: { \n                    await this.runtime_actions.insertToScope(SCOPE, Runtime.ENV);\n                    break;\n                }\n\n                // case BinaryCode.VAR_TIMESTAMP: { \n                //     await this.runtime_actions.insertToScope(SCOPE, SCOPE.meta.timestamp);\n                //     break;\n                // }\n                case BinaryCode.VAR_META: {\n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.meta);\n                    break;\n                }\n                case BinaryCode.VAR_REMOTE: {\n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.remote);\n                    break;\n                }\n                case BinaryCode.VAR_PUBLIC: {\n                    await this.runtime_actions.insertToScope(SCOPE, StaticScope.scopes);\n                    break;\n                }\n                case BinaryCode.VAR_STD: {\n                    await this.runtime_actions.insertToScope(SCOPE, Runtime.STD_STATIC_SCOPE);\n                    break;\n                }\n                case BinaryCode.VAR_VOID: {\n                    await this.runtime_actions.insertToScope(SCOPE, undefined);\n                    break;\n                }\n                case BinaryCode.VAR_THIS: {\n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.context);\n                    break;\n                }\n                case BinaryCode.VAR_IT: {\n                    await this.runtime_actions.insertToScope(SCOPE, SCOPE.it);\n                    break;\n                }\n\n                case BinaryCode.SET_VAR_IT: { \n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['it', BinaryCode.SET_INTERNAL_VAR]);\n                    break;\n                }\n\n                case BinaryCode.SET_VAR_RESULT: { \n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['result', BinaryCode.SET_INTERNAL_VAR]);\n                    break;\n                }\n                case BinaryCode.SET_VAR_SUB_RESULT: {\n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['sub_result', BinaryCode.SET_INTERNAL_VAR]);\n                    break;\n                }\n                case BinaryCode.SET_VAR_VOID: {\n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['void', BinaryCode.SET_INTERNAL_VAR]);\n                    break;\n                }\n\n                case BinaryCode.VAR_RESULT_ACTION: { \n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    \n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['result', action]);\n                    break;\n                }\n                case BinaryCode.VAR_SUB_RESULT_ACTION: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    \n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['sub_result', action]);\n                    break;\n                }\n              \n                case BinaryCode.VAR_REMOTE_ACTION: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n\n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['remote', action]);\n                    break;\n                }\n\n                case BinaryCode.VAR_IT_ACTION: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n\n                    if (!SCOPE.inner_scope.waiting_internal_vars) SCOPE.inner_scope.waiting_internal_vars = new Set();\n                    SCOPE.inner_scope.waiting_internal_vars.add(['it', action]);\n                    break;\n                }\n\n \n                // LABEL  \n                case BinaryCode.LABEL: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const pointer = Pointer.getByLabel(name);\n\n                    await this.runtime_actions.insertToScope(SCOPE, pointer)\n\n                    break;\n                }\n\n                // LABEL_ACTION  \n                case BinaryCode.LABEL_ACTION: { \n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // get pointer\n                    const pointer = Pointer.getByLabel(name);\n\n                    if (!SCOPE.inner_scope.waiting_ptrs) SCOPE.inner_scope.waiting_ptrs = new Set();\n                    SCOPE.inner_scope.waiting_ptrs.add([pointer, action]); // assign next value to pointer;\n                    break;\n                }\n\n                // SET_LABEL  \n                case BinaryCode.SET_LABEL: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    if (!SCOPE.impersonation_permission) {\n                        throw new PermissionError(\"No permission to create labels on this endpoint\", SCOPE)\n                    }\n\n                    if (!SCOPE.inner_scope.waiting_labels) SCOPE.inner_scope.waiting_labels = new Set();\n                    SCOPE.inner_scope.waiting_labels.add(name);\n                    break;\n                }\n\n\n                // INIT_LABEL  \n                case BinaryCode.INIT_LABEL: { \n                    let name = Runtime.runtime_actions.extractVariableName(SCOPE)\n                    /** wait for buffer */\n                    if (name === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    if (!SCOPE.impersonation_permission) {\n                        throw new PermissionError(\"No permission to create labels on this endpoint\", SCOPE)\n                    }\n\n                    const init_block_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n\t\t\t\t\tSCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    // already exists?\n                    if (Pointer.labelExists(name)) {\n                        SCOPE.current_index += init_block_size; // jump to end of init block\n                    }\n                    \n                    else {\n                        if (!SCOPE.inner_scope.waiting_labels) SCOPE.inner_scope.waiting_labels = new Set();\n                        SCOPE.inner_scope.waiting_labels.add(name);\n                    }\n                   \n                    break;\n                }\n\n                // COMMAND END  \n                case BinaryCode.CLOSE_AND_STORE: {  \n                    // switch to new sub scope between commands\n                    await this.runtime_actions.newSubScope(SCOPE); \n                    break;\n                }\n\n                // CODE_BLOCK \n                case BinaryCode.SCOPE_BLOCK: {  \n\n                    const INNER_SCOPE = SCOPE.inner_scope;\n                    \n                    let buffer = this.runtime_actions.extractScopeBlock(SCOPE);\n                    if (buffer === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    const code_block = buffer ? new Scope(INNER_SCOPE.scope_block_vars, buffer, true): null;\n\n                    // TRANSFORM (always)\n                    if (INNER_SCOPE.scope_block_for == BinaryCode.TRANSFORM) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const waiting = [...SCOPE.inner_scope.waiting_ptrs??[]].at(-1);\n                        // assign always() to init ($xxx := always(...))\n                        if (waiting && typeof waiting[1] == \"object\") {  // is init \n                            const ptr = waiting[0]\n                            ptr.handleTransformAsync(INNER_SCOPE.scope_block_vars, code_block);\n                            // resolve\n                            if (waiting[1]?.resolve) {\n                                waiting[1].resolve(ptr)\n                                Pointer.loading_pointers.delete(ptr.id); // TODO: only workaround, automatically handle delete, but leads to promise rejection errors\n                            }\n                            SCOPE.inner_scope.waiting_ptrs!.delete(waiting)\n                        }\n                        else {\n                            await this.runtime_actions.insertToScope(\n                                SCOPE,\n                                ReactiveValue.collapseValue(await Pointer.createTransformAsync(INNER_SCOPE.scope_block_vars, code_block))\n                            )\n                        }\n                        \n                    }\n\n                    // ASSERT\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.ASSERT) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const assertion = Assertion.get(code_block);\n                        await this.runtime_actions.insertToScope(SCOPE, assertion);\n                    }\n\n                    // RESPONSE\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.RESPONSE) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const response = new DatexResponse(code_block);\n                        await this.runtime_actions.insertToScope(SCOPE, response);\n                    }\n\n                    // RUN\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.RUN) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const task = $$(new Task(code_block));\n                        task.run(SCOPE.sender, INNER_SCOPE.ctx_intern);\n                        await this.runtime_actions.insertToScope(SCOPE, task);\n                    }\n\n                    // DO\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.DO) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const result = await code_block.execute(SCOPE.sender);\n                        await this.runtime_actions.insertToScope(SCOPE, result);\n                    }\n\n                    // DEFERRED\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.DEFER) {\n                        INNER_SCOPE.scope_block_for = null;\n                        const deferred = new Deferred(code_block, SCOPE.sender);\n                        await this.runtime_actions.insertToScope(SCOPE, deferred);\n                    }\n\n                    // SCOPE\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.PLAIN_SCOPE) {\n                        INNER_SCOPE.scope_block_for = null;\n                        await this.runtime_actions.insertToScope(SCOPE, code_block);\n                    }\n\n\n                    // ITERATOR\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.ITERATOR) {\n                        // TODO\n                        await this.runtime_actions.insertToScope(SCOPE, new IteratorFunction()); // TODO code_block, undefined, undefined, undefined, SCOPE.context\n                    }\n\n\n                    // FUNCTION\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.FUNCTION) {\n                        INNER_SCOPE.scope_block_for = null;\n                        \n                        if (!(SCOPE.inner_scope.active_value instanceof Tuple || SCOPE.inner_scope.active_value === VOID)) {\n                            throw new RuntimeError(\"Invalid function declaration: parameters must be empty or of type <Tuple>\")\n                        }\n                        const args = INNER_SCOPE.active_value ?? new Tuple();\n                        delete INNER_SCOPE.active_value;\n\n                        await this.runtime_actions.insertToScope(SCOPE, DatexFunction.createFromDatexScope(code_block, SCOPE.context, undefined, undefined, undefined, args));\n                    }\n\n                    // REMOTE\n                    else if (INNER_SCOPE.scope_block_for == BinaryCode.REMOTE) {\n                        INNER_SCOPE.scope_block_for = null;\n\n                        if (!(INNER_SCOPE.active_value instanceof Logical || INNER_SCOPE.active_value instanceof Endpoint)) {\n                            throw new RuntimeError(\"Invalid remote execution declaration: target must be of type Endpoint or a composition\")\n                        }\n                        // TODO handle complex target compositions\n                        const remote:Disjunction<Endpoint> = Logical.collapse(INNER_SCOPE.active_value, Target);\n                        delete INNER_SCOPE.active_value;\n\n                        if (!SCOPE.impersonation_permission && !(remote.size == 1 && [...remote][0] instanceof Endpoint && SCOPE.sender.equals([...remote][0]) && SCOPE.header.signed)) {\n                            throw new PermissionError(\"No permission to execute scopes on external endpoints\", SCOPE)\n                        }\n               \n                        // merge dxb with original dxb\n                        if (INNER_SCOPE.scope_block_vars.length) {\n                            // insert variables from this scope with additional dx\n                            const variables_insert_code = Object.keys(INNER_SCOPE.scope_block_vars).map((_, i)=>`#${i}=?;`).join(\"\");\n\n                            // has to be arraybuffer (a single dxb block)\n                            const var_dxb = <ArrayBuffer> await Compiler.compile(variables_insert_code, INNER_SCOPE.scope_block_vars, undefined, false, false, false, undefined, Infinity)\n                        \n                            const tmp = new Uint8Array(var_dxb.byteLength + buffer.byteLength);\n                            tmp.set(new Uint8Array(var_dxb), 0);\n                            tmp.set(new Uint8Array(buffer), var_dxb.byteLength);\n                            buffer = tmp.buffer\n                        }\n\n                        \n                        const sid = Compiler.generateSID();\n                        const full_dxb = await Compiler.appendHeader(buffer, \n                            true,\n                            Runtime.endpoint, //sender\n                            remote,  // to\n                            false, // flood\n                            SCOPE.remote.type ?? undefined, // type\n                            SCOPE.remote.sign ?? true, // sign\n                            SCOPE.remote.encrypt ?? false, // encrypt\n                            undefined,\n                            undefined, \n                            true,\n                            sid\n                        );\n\n                        // datex out to filter\n                        const res = await Runtime.datexOut(full_dxb, remote, sid, true, undefined, (scope, header, error)=>{\n                            // const forked_scope = DatexRuntime.runtime_actions.forkScope(SCOPE);\n                            // forked_scope.inner_scope.active_value = scope.result; // set received active value\n                            // console.log(\"callback from \" + header.sender + \":\",scope.result, forked_scope);\n                            // DatexRuntime.run(forked_scope);\n                        }, false, SCOPE.remote.timeout?Number(SCOPE.remote.timeout):undefined);\n                        // await new Promise<void>(()=>{});\n                        // return;\n\n                        await this.runtime_actions.insertToScope(SCOPE, res);\n                    }\n\n                    SCOPE.inner_scope.scope_block_vars = null;\n\n                    break;\n                }\n\n                // NULL\n                case BinaryCode.NULL: {\n                    await this.runtime_actions.insertToScope(SCOPE, null);\n                    break;\n                }\n\n                // VOID\n                case BinaryCode.VOID: {\n                    await this.runtime_actions.insertToScope(SCOPE, VOID);\n                    break;\n                }\n\n                // WILDCARD\n                case BinaryCode.WILDCARD: {\n                    await this.runtime_actions.insertToScope(SCOPE, WILDCARD);\n                    break;\n                }\n\n                // RETURN\n                case BinaryCode.RETURN: {\n                    SCOPE.inner_scope.return = true;\n                    break;\n                }\n\n                // ABOUT\n                case BinaryCode.ABOUT: {\n                    SCOPE.inner_scope.about = true;\n                    break;\n                }\n\n                // COUNT\n                case BinaryCode.COUNT: {\n                    SCOPE.inner_scope.count = true;\n                    break;\n                }\n\n                // KEYS\n                case BinaryCode.KEYS: {\n                    SCOPE.inner_scope.keys = true;\n                    break;\n                }\n\n                // TEMPLATE\n                case BinaryCode.TEMPLATE: {\n                    SCOPE.inner_scope.template = true;\n                    break;\n                }\n\n                // OBSERVE\n                case BinaryCode.OBSERVE: {\n                    SCOPE.inner_scope.observe = true;\n                    break;\n                }\n\n                // TRANSFORM\n                case BinaryCode.TRANSFORM: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.TRANSFORM;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // SCOPE\n                case BinaryCode.PLAIN_SCOPE: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.PLAIN_SCOPE;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // RUN\n                case BinaryCode.RUN: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.RUN;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // DO\n                case BinaryCode.DO: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.DO;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // ITERATOR\n                case BinaryCode.ITERATOR: {\n                    SCOPE.inner_scope.wait_iterator = true;\n                    break;\n                }\n\n                // NEXT\n                case BinaryCode.NEXT: {\n                    SCOPE.inner_scope.wait_next = true;\n                    break;\n                }\n\n\n                // ASSERT\n                case BinaryCode.ASSERT: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.ASSERT;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // RESPONSE\n                case BinaryCode.RESPONSE: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.RESPONSE;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // FUNCTION\n                case BinaryCode.FUNCTION: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.FUNCTION;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // REMOTE\n                case BinaryCode.REMOTE: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.REMOTE;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // AWAIT\n                case BinaryCode.AWAIT: {\n                    SCOPE.inner_scope.wait_await = true;\n                    break;\n                }\n\n                // MAYBE\n                case BinaryCode.DEFER: {\n                    SCOPE.inner_scope.scope_block_for = BinaryCode.DEFER;\n                    SCOPE.inner_scope.scope_block_vars = [];\n                    break;\n                }\n\n                // HAS\n                case BinaryCode.HAS: {\n                    SCOPE.inner_scope.has = true;\n                    break;\n                }\n\n                // SEAL\n                case BinaryCode.SEAL: {\n                    SCOPE.inner_scope.wait_seal = true;\n                    break;\n                }\n                // FREEZE\n                case BinaryCode.FREEZE: {\n                    SCOPE.inner_scope.wait_freeze = true;\n                    break;\n                }\n\n                // EXTENDS\n                case BinaryCode.EXTENDS: {\n                    SCOPE.inner_scope.wait_extends = true;\n                    break;\n                }\n\n                // IMPLEMENTS\n                case BinaryCode.IMPLEMENTS: {\n                    SCOPE.inner_scope.wait_implements = true;\n                    break;\n                }\n\n\n                // MATCHES\n                case BinaryCode.MATCHES: {\n                    SCOPE.inner_scope.wait_matches = true;\n                    break;\n                }\n\n\n                // DEFAULT\n                case BinaryCode.DEFAULT: {\n                    const init_block_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    // get default value\n                    if (SCOPE.inner_scope.active_value === null || SCOPE.inner_scope.active_value === VOID) {\n                        delete SCOPE.inner_scope.active_value; // delete null/void active value\n                    } \n                    // ignore default\n                    else {\n                        SCOPE.current_index += init_block_size; // jump to end of default block\n                    }\n\n                    break;\n                }\n\n                // DEBUG\n                case BinaryCode.DEBUGGER: {\n                    Runtime.handleScopeDebuggerSession(SCOPE);\n                    break;\n                }\n\n                case BinaryCode.NEW: {\n                    SCOPE.inner_scope.wait_new = true;\n                    break;\n                }\n\n                // get\n                case BinaryCode.GET: {\n                    SCOPE.inner_scope.get = true;\n                    break;\n                }\n\n                // URL\n                case BinaryCode.URL: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let length = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    \n                    /** wait for buffer */\n                    if (SCOPE.current_index+length > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let url = new URL(this.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+length)), SCOPE.context_location);\n                    SCOPE.current_index += length;\n\n                    await this.runtime_actions.insertToScope(SCOPE, url);\n                    break;\n                }\n\n                // RESOLVE_RELATIVE_PATH\n                case BinaryCode.RESOLVE_RELATIVE_PATH: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Uint32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let length = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    \n                    /** wait for buffer */\n                    if (SCOPE.current_index+length > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    \n                    const path = this.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+length));\n                    const url = new URL(path, SCOPE.context_location);\n\n                    SCOPE.current_index += length;\n\n                    await this.runtime_actions.insertToScope(SCOPE, url);\n                    break;\n                }\n\n                // ARRAY_START\n                case BinaryCode.ARRAY_START: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // empty array\n                    if (SCOPE.buffer_views.uint8[SCOPE.current_index] === BinaryCode.ARRAY_END) {\n                        SCOPE.current_index++;\n                        await this.runtime_actions.insertToScope(SCOPE, []);\n                    }\n                    else {\n                        this.runtime_actions.enterSubScope(SCOPE); // outer array scope\n                        SCOPE.inner_scope.active_object = []; // generate new array\n                        SCOPE.inner_scope.active_object_new = true;\n                    }\n                    break;\n                }\n\n                // TUPLE_START\n                case BinaryCode.TUPLE_START: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // empty array\n                    if (SCOPE.buffer_views.uint8[SCOPE.current_index] === BinaryCode.TUPLE_END) {\n                        SCOPE.current_index++;\n                        await this.runtime_actions.insertToScope(SCOPE, new Tuple().seal());\n                    }\n                    else {\n                        this.runtime_actions.enterSubScope(SCOPE); // outer array scope\n                        SCOPE.inner_scope.active_object = new Tuple(); // generate new tuple\n                        SCOPE.inner_scope.active_object_new = true;\n                    }\n                    break;\n                }\n\n                // OBJECT_START\n                case BinaryCode.OBJECT_START: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    // empty object\n                    if (SCOPE.buffer_views.uint8[SCOPE.current_index] === BinaryCode.OBJECT_END) {\n                        SCOPE.current_index++;\n                        await this.runtime_actions.insertToScope(SCOPE, {});\n                    }\n                    else {\n                        this.runtime_actions.enterSubScope(SCOPE); // outer object scope\n                        SCOPE.inner_scope.active_object = {}; // generate new object\n                        SCOPE.inner_scope.active_object_new = true;\n                    }\n                    break;\n                }\n\n                // // RECORD_START\n                // case BinaryCode.RECORD_START: {\n                //     /** wait for buffer */\n                //     if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                //     /********************/\n                //     // empty object\n                //     if (SCOPE.buffer_views.uint8[SCOPE.current_index] === BinaryCode.RECORD_END) {\n                //         SCOPE.current_index++;\n                //         await this.runtime_actions.insertToScope(SCOPE, DatexObject.seal(new Record()));\n                //     }\n                //     else {\n                //         this.runtime_actions.enterSubScope(SCOPE); // outer object scope\n                //         SCOPE.inner_scope.active_object = new Record(); // generate new record\n                //         SCOPE.inner_scope.active_object_new = true;\n                //     }\n                //     break;\n                // }\n\n                // list element with key\n                case BinaryCode.ELEMENT_WITH_KEY: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let length = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    let key = Runtime.utf8_decoder.decode(SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+length));\n                    SCOPE.current_index += length;\n\n                    const key_perm = SCOPE.inner_scope.key_perm;\n             \n                    // insert previous value\n                    if (!SCOPE.inner_scope.active_object_new) await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n                    SCOPE.inner_scope.active_object_new = false;\n\n                    // add key for next value\n                    SCOPE.inner_scope.waiting_key = key;       \n                    // add key permission\n                    if (key_perm) SCOPE.inner_scope.key_perm = key_perm;\n\n                    this.runtime_actions.enterSubScope(SCOPE);    \n\n                 \n                    break;\n                }\n\n                case BinaryCode.ELEMENT_WITH_INT_KEY: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let key = BigInt(SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true));\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    const key_perm = SCOPE.inner_scope.key_perm;\n             \n                    // insert previous value\n                    if (!SCOPE.inner_scope.active_object_new) await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n                    SCOPE.inner_scope.active_object_new = false;\n\n                    // add key for next value\n                    SCOPE.inner_scope.waiting_key = key;       \n                    // add key permission\n                    if (key_perm) SCOPE.inner_scope.key_perm = key_perm;\n\n                    this.runtime_actions.enterSubScope(SCOPE);    \n\n                 \n                    break;\n                }\n\n                // list element with dynamic key\n                case BinaryCode.ELEMENT_WITH_DYNAMIC_KEY: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // insert previous value\n                    if (!SCOPE.inner_scope.active_object_new) await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n                    SCOPE.inner_scope.active_object_new = false;\n\n                    // wait for dynamic key\n                    SCOPE.inner_scope.wait_dynamic_key = true;\n                    break;\n                }\n\n                // key permission\n                case BinaryCode.KEY_PERMISSION: {\n                    SCOPE.inner_scope.waiting_for_key_perm = true;\n                    break;\n                }\n\n\n                // keyless list element \n                case BinaryCode.ELEMENT: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // insert previous value\n                    if (!SCOPE.inner_scope.active_object_new) await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n                    SCOPE.inner_scope.active_object_new = false;\n\n                    this.runtime_actions.enterSubScope(SCOPE);    \n\n                    break;\n                }\n\n\n                case BinaryCode.INTERNAL_OBJECT_SLOT: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const index = SCOPE.buffer_views.data_view.getUint16(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint16Array.BYTES_PER_ELEMENT;\n             \n                    // insert previous value\n                    if (!SCOPE.inner_scope.active_object_new) await this.runtime_actions.insertToScope(SCOPE, await this.runtime_actions.exitSubScope(SCOPE), true);\n                    SCOPE.inner_scope.active_object_new = false;\n\n                    // add key for next value\n                    SCOPE.inner_scope.waiting_internal_slot = index;       \n\n                    this.runtime_actions.enterSubScope(SCOPE);    \n                 \n                    break;\n                }\n              \n                // ARRAY_END, OBJECT_END, TUPLE_END, RECORD_END\n                case BinaryCode.ARRAY_END:\n                case BinaryCode.OBJECT_END:\n                case BinaryCode.TUPLE_END: {\n\n                    // now handle object content\n                    let result = await this.runtime_actions.exitSubScope(SCOPE);\n                    SCOPE.current_index--; // assume still in tuple\n                    await this.runtime_actions.insertToScope(SCOPE, result, true);\n                    SCOPE.current_index++;\n\n                    let new_object = SCOPE.inner_scope.active_object; // newest tuple closed\n                    let scope_result = await this.runtime_actions.exitSubScope(SCOPE); // outer array scope\n                    \n                    // set scope result as object value\n                    if (scope_result instanceof Tuple) {\n                        // clear object\n                        Object.keys(new_object).forEach(key => delete new_object[key])\n                        // assign scope result\n                        Object.assign(new_object, scope_result.toObject());\n                    }\n                    else if (scope_result != VOID && !(new_object instanceof Array)) {\n                        throw new ValueError(\"Cannot cast non-tuple value to object\")\n                    }\n\n                    // modifiy final object/array\n                    if (new_object instanceof Array) Runtime.runtime_actions.trimArray(new_object);\n                    // seal record/tuple (DISABLED BECAUSE OF $$ properties)\n                    // if (new_object instanceof Tuple) DatexObject.seal(new_object);\n\n                    // insert\n                    await this.runtime_actions.insertToScope(SCOPE, new_object);\n                    break;\n                }\n\n                // STD SHORT TYPES\n                case BinaryCode.STD_TYPE_TEXT: \n                case BinaryCode.STD_TYPE_INT:\n                case BinaryCode.STD_TYPE_FLOAT:\n                case BinaryCode.STD_TYPE_BOOLEAN:\n                case BinaryCode.STD_TYPE_NULL:\n                case BinaryCode.STD_TYPE_VOID:\n                case BinaryCode.STD_TYPE_BUFFER:\n                case BinaryCode.STD_TYPE_CODE_BLOCK:\n                case BinaryCode.STD_TYPE_UNIT:\n                case BinaryCode.STD_TYPE_ARRAY:\n                case BinaryCode.STD_TYPE_OBJECT:\n                case BinaryCode.STD_TYPE_SET:\n                case BinaryCode.STD_TYPE_MAP:\n                case BinaryCode.STD_TYPE_TUPLE:\n                case BinaryCode.STD_TYPE_STREAM:\n                case BinaryCode.STD_TYPE_ANY:\n                case BinaryCode.STD_TYPE_ASSERTION:\n                case BinaryCode.STD_TYPE_TASK:\n                case BinaryCode.STD_TYPE_ITERATOR:\n                case BinaryCode.STD_TYPE_TIME:\n                case BinaryCode.STD_TYPE_URL:\n                case BinaryCode.STD_TYPE_FUNCTION: {\n                    await this.runtime_actions.insertToScope(SCOPE, Type.short_types[token]);\n                    break;\n                }\n\n                // INCREMENT (++)\n                case BinaryCode.INCREMENT: {\n                    // TODO\n                    break;\n                }\n\n                // DECREMENT (--)\n                case BinaryCode.DECREMENT: {\n                    // TODO\n                    break;\n                }\n\n                // ADD (+)\n                case BinaryCode.ADD: {\n                    SCOPE.inner_scope.operator = BinaryCode.ADD;\n                    break;\n                }\n\n                // SUBTRACT (-)\n                case BinaryCode.SUBTRACT: {\n                    SCOPE.inner_scope.operator = BinaryCode.SUBTRACT;\n                    break;\n                }\n\n                // MULTIPLY (*)\n                case BinaryCode.MULTIPLY: {\n                    SCOPE.inner_scope.operator = BinaryCode.MULTIPLY;\n                    break;\n                }\n\n                // DIVIDE (/)\n                case BinaryCode.DIVIDE: {\n                    SCOPE.inner_scope.operator = BinaryCode.DIVIDE;\n                    break;\n                }\n\n                // POWER (^)\n                case BinaryCode.POWER: {\n                    SCOPE.inner_scope.operator = BinaryCode.POWER;\n                    break;\n                }\n\n                // MODULO (%)\n                case BinaryCode.MODULO: {\n                    SCOPE.inner_scope.operator = BinaryCode.MODULO;\n                    break;\n                }\n\n                // AND (&)\n                case BinaryCode.AND: {\n                    SCOPE.inner_scope.operator = BinaryCode.AND;\n                    break;\n                }\n\n                // OR (|)\n                case BinaryCode.OR: {\n                    SCOPE.inner_scope.operator = BinaryCode.OR;\n                    break;\n                }\n\n                // NOT (~)\n                case BinaryCode.NOT: {\n                    SCOPE.inner_scope.negate_operator = true;\n                    break;\n                }\n\n                // CONJUNCTION\n                case BinaryCode.CONJUNCTION: {\n                    this.runtime_actions.enterSubScope(SCOPE)\n                    SCOPE.inner_scope.connective = new Conjunction();\n                    SCOPE.inner_scope.connective_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    break;\n                }\n\n                // DISJUNCTION\n                case BinaryCode.DISJUNCTION: {\n                    this.runtime_actions.enterSubScope(SCOPE)\n                    SCOPE.inner_scope.connective = new Disjunction();\n                    SCOPE.inner_scope.connective_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n                    SCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n                    break;\n                }\n\n                // SUBSCOPE_START\n                case BinaryCode.SUBSCOPE_START: {\n                    this.runtime_actions.enterSubScope(SCOPE)\n                    break;\n                }\n                // SUBSCOPE_END\n                case BinaryCode.SUBSCOPE_END: {   \n                    const res = await this.runtime_actions.exitSubScope(SCOPE);\n                    await this.runtime_actions.insertToScope(SCOPE, res);\n                    break;\n                }\n            \n                // TRUE\n                case BinaryCode.TRUE: {\n                    await this.runtime_actions.insertToScope(SCOPE, true);\n                    break;\n                }\n\n                // FALSE\n                case BinaryCode.FALSE: {\n                    await this.runtime_actions.insertToScope(SCOPE, false);\n                    break;\n                }\n\n                // QUANTITY\n                case BinaryCode.QUANTITY: {\n\n                    const sign = SCOPE.buffer_views.uint8[SCOPE.current_index++] == 0 ? -1n : 1n;  // 0 for negative, 1 for positive (and 0)\n\n                    // buffer sizes\n                    const num_size = SCOPE.buffer_views.data_view.getUint16(SCOPE.current_index, true)\n                    SCOPE.current_index+=Uint16Array.BYTES_PER_ELEMENT;\n                    const den_size = SCOPE.buffer_views.data_view.getUint16(SCOPE.current_index, true)\n                    SCOPE.current_index+=Uint16Array.BYTES_PER_ELEMENT;\n\n                    // numerator\n                    const num_buffer = SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=num_size);\n                    const den_buffer = SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=den_size)\n\n                    const num = Quantity.bufferToBigInt(num_buffer) * sign;\n                    const den = Quantity.bufferToBigInt(den_buffer);\t\n\n                    const factor_count = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                    const unit_factors = [];\n                    for (let i=0; i<factor_count; i++) {\n                        const code = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n                        const exponent = SCOPE.buffer_views.data_view.getInt8(SCOPE.current_index++)\n                        unit_factors.push([code, exponent]);\n                    }\n\n                    let unit = new Quantity([num, den], unit_factors);\n\n                    await this.runtime_actions.insertToScope(SCOPE, unit);\n                    break;\n                }\n\n                // BIG_INT\n                case BinaryCode.BIG_INT: {\n\n                    const sign = SCOPE.buffer_views.uint8[SCOPE.current_index++] == 0 ? -1n : 1n;  // 0 for negative, 1 for positive (and 0)\n\n                    // buffer size\n                    const size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true)\n                    SCOPE.current_index+=Uint32Array.BYTES_PER_ELEMENT;\n                    \n                    /** wait for buffer */\n                    if (SCOPE.current_index+size > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    // bigint from buffer\n                    const bigint_buffer = SCOPE.buffer_views.uint8.subarray(SCOPE.current_index, SCOPE.current_index+=size);\n                    const bigint = Quantity.bufferToBigInt(bigint_buffer) * sign;\n\n                    await this.runtime_actions.insertToScope(SCOPE, bigint);\n                    break;\n                }\n\n                // INT_8\n                case BinaryCode.INT_8: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int8Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let integer:bigint|number = SCOPE.buffer_views.data_view.getInt8(SCOPE.current_index);\n                    if (Runtime.OPTIONS.USE_BIGINTS) integer = BigInt(integer);\n                    SCOPE.current_index += Int8Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, integer);\n                    break;\n                }\n\n                // INT_16\n                case BinaryCode.INT_16: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int16Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let integer:bigint|number = SCOPE.buffer_views.data_view.getInt16(SCOPE.current_index, true);\n                    if (Runtime.OPTIONS.USE_BIGINTS) integer = BigInt(integer);\n                    SCOPE.current_index += Int16Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, integer);\n                    break;\n                }\n\n                // INT_32\n                case BinaryCode.INT_32: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let integer:bigint|number = SCOPE.buffer_views.data_view.getInt32(SCOPE.current_index, true);\n                    if (Runtime.OPTIONS.USE_BIGINTS) integer = BigInt(integer);\n                    SCOPE.current_index += Int32Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, integer);\n                    break;\n                }\n\n                // INT_64\n                case BinaryCode.INT_64: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+BigInt64Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let integer:bigint|number = SCOPE.buffer_views.data_view.getBigInt64(SCOPE.current_index, true);\n                    if (!Runtime.OPTIONS.USE_BIGINTS) integer = Number(integer);\n                    SCOPE.current_index += BigInt64Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, integer);\n                    break;\n                }\n                \n\n                // FLOAT\n                case BinaryCode.FLOAT_64: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Float64Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    let float = SCOPE.buffer_views.data_view.getFloat64(SCOPE.current_index, true);\n                    SCOPE.current_index += Float64Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, float);\n                    break;\n                }\n\n            \n                // FLOAT_AS_INT_32\n                case BinaryCode.FLOAT_AS_INT_32: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    const float = SCOPE.buffer_views.data_view.getInt32(SCOPE.current_index, true);\n                    SCOPE.current_index += Int32Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, float);\n                    break;\n                }\n\n                // FLOAT_AS_INT_8\n                case BinaryCode.FLOAT_AS_INT_8: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int8Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    const float = SCOPE.buffer_views.data_view.getInt8(SCOPE.current_index);\n                    SCOPE.current_index += Int8Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, float);\n                    break;\n                }\n\n                // TIME\n                case BinaryCode.TIME: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Int32Array.BYTES_PER_ELEMENT > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    let millis = SCOPE.buffer_views.data_view.getBigInt64(SCOPE.current_index, true);\n                    SCOPE.current_index += BigUint64Array.BYTES_PER_ELEMENT;\n\n                    await this.runtime_actions.insertToScope(SCOPE, new Time(Number(millis)));\n                    break;\n                }\n\n                // TYPE\n                case BinaryCode.TYPE: {\n                    const type = this.runtime_actions.extractType(SCOPE);\n                    if (type === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /** wait for buffer (needed in insertToScope) */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    \n                    // ignore outer type cast\n                    if (SCOPE.outer_serialized) {\n                        SCOPE.outer_serialized = false;\n                        break;\n                    }\n\n                    await this.runtime_actions.insertToScope(SCOPE, type);\n                    break;\n                }\n\n\n                // EXTENDED_TYPE\n                case BinaryCode.EXTENDED_TYPE: {\n                    const type_info = this.runtime_actions.extractType(SCOPE, true);\n                    if (type_info === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /** wait for buffer (needed in insertToScope) */\n                    if (SCOPE.current_index+1 > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    // has parameters\n                    if (type_info[1]) SCOPE.inner_scope.waiting_ext_type = type_info[0];\n                    // only variation, no parameters\n                    else await this.runtime_actions.insertToScope(SCOPE, type_info[0]);\n                    break;\n                }\n\n    \n                // ENDPOINTS / ALIASES\n                case BinaryCode.PERSON_ALIAS: \n                case BinaryCode.PERSON_ALIAS_WILDCARD:\n                case BinaryCode.INSTITUTION_ALIAS:\n                case BinaryCode.INSTITUTION_ALIAS_WILDCARD:\n                case BinaryCode.BOT:\n                case BinaryCode.BOT_WILDCARD:\n                case BinaryCode.ENDPOINT:\n                case BinaryCode.ENDPOINT_WILDCARD:\n                {\n                    const f = this.runtime_actions.constructFilterElement(SCOPE, token);\n                    if (f === false) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    await this.runtime_actions.insertToScope(SCOPE, f);\n                    break;\n                }\n               \n                // POINTER\n                case BinaryCode.POINTER: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Pointer.MAX_POINTER_ID_SIZE > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const id = SCOPE.buffer_views.uint8.slice(SCOPE.current_index, SCOPE.current_index+=Pointer.MAX_POINTER_ID_SIZE);\n                    const [knows_pointer, has_hash] = this.convertByteToNumbers([1,1,6], SCOPE.buffer_views.uint8[SCOPE.current_index++])\n\n                    const ptr = await Pointer.load(id, SCOPE, false, knows_pointer?true:false);\n                    await this.runtime_actions.insertToScope(SCOPE, ptr);\n\n                    break;\n                }\n\n\n                // SET_POINTER\n                case BinaryCode.SET_POINTER: {\n\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Pointer.MAX_POINTER_ID_SIZE > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const id = SCOPE.buffer_views.uint8.slice(SCOPE.current_index, SCOPE.current_index+=Pointer.MAX_POINTER_ID_SIZE);\n                    const [knows_pointer, has_hash] = this.convertByteToNumbers([1,1,6], SCOPE.buffer_views.uint8[SCOPE.current_index++])\n\n                    try {\n                        const pointer = await Pointer.load(id, SCOPE, false, knows_pointer?true:false);\n\n                        if (!SCOPE.inner_scope.waiting_ptrs) SCOPE.inner_scope.waiting_ptrs = new Set();\n                        SCOPE.inner_scope.waiting_ptrs.add([pointer]); // assign next value to pointer;\n                    }\n                    catch (e) {\n                        throw new PointerError(\"Could not get or create pointer: $\" + Pointer.normalizePointerId(id));\n                    }\n\n                    break;\n                }\n\n                // INIT_POINTER\n                case BinaryCode.INIT_POINTER: {\n\n                    /** wait for buffer */\n                    if (SCOPE.current_index+Pointer.MAX_POINTER_ID_SIZE > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n\n                    const id = SCOPE.buffer_views.uint8.slice(SCOPE.current_index, SCOPE.current_index+=Pointer.MAX_POINTER_ID_SIZE);\n                    const [knows_pointer, has_hash] = this.convertByteToNumbers([1,1,6], SCOPE.buffer_views.uint8[SCOPE.current_index++])\n\n\n                    const init_block_size = SCOPE.buffer_views.data_view.getUint32(SCOPE.current_index, true);\n\t\t\t\t\tSCOPE.current_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    const {promise: lockedPointerPromise, resolve: lockedPointerResolve, reject: lockedPointerReject} = Promise.withResolvers<Pointer>();\n\n                    // pointer exists\n                    try {\n                        let pointer = Pointer.create(id);\n                        // when remote pointer is initialized by owner endpoint, it does not have to be loaded here from the remote endpoint, because the content is loaded in the initialization\n                        // TODO: currently the initialization block is always used, even if it was not sent by the pointer owner, because SCOPE.sender?.equals(pointer.origin) does not work with ids and aliases of remote endpoints\n                        const only_load_local = true; //pointer.is_origin || SCOPE.sender?.equals(pointer.origin);\n                        pointer = await Pointer.load(id, SCOPE, only_load_local, knows_pointer?true:false, false, lockedPointerPromise);\n                        // console.log(\"has $\" + Pointer.normalizePointerId(id), jmp_index, buffer2hex(SCOPE.buffer_views.uint8.slice(jmp_index), \" \"));\n                        // pointer.is_persistent = true;\n                        SCOPE.current_index += init_block_size; // jump to end of init block\n                        lockedPointerResolve(pointer);\n                    }\n                    // does not exist: init, or no permission\n                    catch (e) {\n\n                        // pointer does exist but no permission\n                        if (e instanceof PermissionError) {\n                            throw e;\n                        }\n\n                        // pointer does not exist\n                        else {\n                            if (!SCOPE.inner_scope.waiting_ptrs) SCOPE.inner_scope.waiting_ptrs = new Set();\n                            const tmp_ptr = Pointer.create(id);\n                            Pointer.addLoadingPointerPromise(id, lockedPointerPromise, SCOPE);\n                            // TODO: make sure resolve or reject is called at some point or the promise is removed\n                            SCOPE.inner_scope.waiting_ptrs.add([tmp_ptr, {resolve: lockedPointerResolve, reject: lockedPointerReject}]); // assign next value to pointer;\n                        }\n\n                    }\n\n                    break;\n                }\n\n                // // DELETE_POINTER TODO remove?\n                // case BinaryCode.DELETE_POINTER: {\n                //     SCOPE.inner_scope.delete_pointer = true;\n                //     break;\n                // }\n\n                // SYNC\n                case BinaryCode.SYNC: {\n                    SCOPE.inner_scope.sync = true;\n                    SCOPE.sync = true; // to know if currently waiting for subscribe anywhere in parent\n                    break;\n                }\n\n                // _SYNC_SILENT\n                case BinaryCode._SYNC_SILENT: {\n                    SCOPE.inner_scope.sync = 'silent';\n                    SCOPE.sync = true; // to know if currently waiting for subscribe anywhere in parent\n                    break;\n                }\n\n                // STOP_SYNC\n                case BinaryCode.STOP_SYNC: {\n                    SCOPE.inner_scope.stop_sync = true;\n                    break;\n                }\n\n                // COPY\n                case BinaryCode.COPY: {\n                    SCOPE.inner_scope.copy = true;\n                    break;\n                }\n                // CLONE\n                case BinaryCode.CLONE: {\n                    SCOPE.inner_scope.clone = true;\n                    break;\n                }\n                // CLONE_COLLAPSE\n                case BinaryCode.CLONE_COLLAPSE: {\n                    SCOPE.inner_scope.clone_collapse = true;\n                    break;\n                }\n\n                // COLLAPSE\n                case BinaryCode.COLLAPSE: {\n                    SCOPE.inner_scope.collapse = true;\n                    break;\n                }\n\n                // GET_TYPE\n                case BinaryCode.GET_TYPE: {\n                    SCOPE.inner_scope.get_type = true;\n                    break;\n                }\n                // ORIGIN\n                case BinaryCode.ORIGIN: {\n                    SCOPE.inner_scope.get_origin = true;\n                    break;\n                }\n                // SUBSCRIBERS\n                case BinaryCode.SUBSCRIBERS: {\n                    SCOPE.inner_scope.get_subscribers = true;\n                    break;\n                }\n\n                // POINTER_ACTION\n                case BinaryCode.POINTER_ACTION: {\n                    /** wait for buffer */\n                    if (SCOPE.current_index+1+Pointer.MAX_POINTER_ID_SIZE > SCOPE.buffer_views.uint8.byteLength) return Runtime.runtime_actions.waitForBuffer(SCOPE);\n                    /********************/\n                    const action = SCOPE.buffer_views.uint8[SCOPE.current_index++];\n\n                    const id = SCOPE.buffer_views.uint8.slice(SCOPE.current_index, SCOPE.current_index+=Pointer.MAX_POINTER_ID_SIZE);\n                    const [knows_pointer, has_hash] = this.convertByteToNumbers([1,1,6], SCOPE.buffer_views.uint8[SCOPE.current_index++])\n\n                    // get pointer\n                    const ptr = await Pointer.load(id, SCOPE, false, knows_pointer?true:false);\n                    // let ptr = Pointer.get(id);\n                    // if (!ptr) throw new PointerError(\"Pointer does not exist\", SCOPE);\n\n                    if (!SCOPE.inner_scope.waiting_ptrs) SCOPE.inner_scope.waiting_ptrs = new Set();\n                    SCOPE.inner_scope.waiting_ptrs.add([ptr, action]); // assign next value to pointer;\n                    break;\n                }\n\n                // CREATE_POINTER ($ ())\n                case BinaryCode.CREATE_POINTER: {\n                    SCOPE.inner_scope.create_pointer = true;\n                    break;\n                }\n\n                \n                \n                // STREAM (<<)\n                case BinaryCode.STREAM: {\n\n                    // if not already has a stream_consumer, set the active value as a stream_consumer\n                    if (!SCOPE.inner_scope.stream_consumer) {\n                        if (!SCOPE.inner_scope.active_value) throw new RuntimeError(\"Missing stream consumer\", SCOPE)\n                        // implements StreamConsumer\n                        if (!Type.std.StreamConsumer.matches(SCOPE.inner_scope.active_value)) throw new TypeError(\"<StreamConsumer> expected\");\n\n                        SCOPE.inner_scope.stream_consumer = SCOPE.inner_scope.active_value;\n                        delete SCOPE.inner_scope.active_value;\n                    }\n                  \n                    break;\n                }\n\n\n                default: {\n                    //logger.error(\"Invalid Binary Token at index \"+SCOPE.current_index+\": \" + token)\n                    console.log(MessageLogger.decompile(SCOPE.buffer_views.buffer, false, true));\n                    throw new DatexError(\"Invalid Binary Token: \" + token.toString(16), SCOPE);\n                }\n\n            }\n                    \n        }\n\n    }\n}\n\ntry {\n    Runtime.VERSION = (await import(\"../VERSION.ts\")).default\n}\ncatch {\n    console.error(\"Could not determine DATEX version\")\n}\n\n// if (globalThis.HTMLImageElement) {\n//     Runtime.MIME_TYPE_MAPPING[\"image/*\"] = <mime_type_definition<globalThis.HTMLImageElement>>{\n//         class:globalThis.HTMLImageElement, \n//         generator(value) {\n//             const image = new Image();\n//             image.src = URL.createObjectURL(value);\n//             return image\n//         }\n//     }\n// }\n\n\n\nLogger.setRuntime(Runtime); // workaround to prevent circular imports\nLogger.setType(Type); // workaround to prevent circular imports\nLogger.setPointer(Pointer); // workaround to prevent circular imports\n\n\n\nRuntime.onEndpointChanged(initPublicStaticClasses)\n\n\n\n\n// @ts-ignore\nif (globalThis.navigator?.userAgentData?.brands) {\n    // @ts-ignore\n    for (let brand of globalThis.navigator.userAgentData.brands) {\n        if (!brand.brand.startsWith(\"Not\")) {\n            Runtime.HOST_ENV = (brand.brand??\"\") + \" \" + (brand.version??\"\");\n            break;\n        }\n    }\n}\nelse {\n    if (globalThis.navigator?.userAgent?.match(/firefox|fxios/i)) Runtime.HOST_ENV = \"Firefox\";\n    else if(globalThis.navigator?.userAgent?.match(/safari/i)) Runtime.HOST_ENV = \"Safari\";\n    else if(globalThis.navigator?.userAgent?.match(/opr\\//i)) Runtime.HOST_ENV = \"Opera\";\n    else if(globalThis.navigator?.userAgent?.match(/edg/i)) Runtime.HOST_ENV = \"Edge\";\n    else if (client_type === \"deno\") Runtime.HOST_ENV = \"Deno\";\n}\n// version\n// @ts-ignore\nif (globalThis.navigator?.userAgentData) Runtime.HOST_ENV += (Runtime.HOST_ENV?' / ':'') + globalThis.navigator.userAgentData.platform;\nelse if (globalThis.navigator?.platform) Runtime.HOST_ENV += (Runtime.HOST_ENV?' / ':'') + globalThis.navigator?.platform;\n\n// TODO node.js env version\n\nglobalThis.parseDatexData = Runtime.parseDatexData;\n\n\nglobalThis.DatexRuntime = Runtime;\n/** end DatexRuntime static initializations*/\n\nRuntimePerformance.marker(\"main runtime loading time\", \"main_runtime_loaded\", \"modules_loaded\");\n\n\n\n// define measurement groups\nRuntimePerformance.createMeasureGroup(\"compile time\", [\n    \"header\",\n    \"body\"\n])\n\n\n// automatically sync newly added pointers if they are in the storage\nPointer.onPointerAdded(async (pointer)=>{\n    // assume that already synced if createdInContext and stored in storage\n    if (!pointer.createdInContext && await Storage.hasPointer(pointer)) {\n        Storage.syncPointer(pointer);\n    }\n})\n\nRuntimePerformance.marker(\"pseudoclass loading time\", \"pseudo_classes_loaded\", \"main_runtime_loaded\");\nRuntimePerformance.marker(\"runtime initialization time\", \"initialized\", \"main_runtime_loaded\");\nRuntimePerformance.marker(\"startup time\", \"runtime_ready\", \"runtime_start\");\n\n\n\n// currently not working in unit.ts file\n\nType.std.quantity.setJSInterface({\n\n    class: Quantity,\n\n    cast(value, type, context, origin) {\n        console.log(\"cast\",value,type);\n\n        if (typeof value != \"number\" && typeof value != \"bigint\" && value != VOID) {\n            throw new TypeError(\"Cannot cast value to quantity\"); // TODO: generalize for cast method (special return values)\n        }\n\n        if (type.parameters.length == 1) {\n            if (!(type.parameters[0] instanceof Quantity)) {\n                throw new TypeError(\"Invalid param for quantity value\"); // TODO: generalize for cast method (special return values)\n            }\n            else {\n                return new Quantity(value, type.parameters?.[0].unit);\n            }\n        }\n        else if (type.parameters.length > 1) {\n            throw new TypeError(\"Invalid params for quantity value\"); // TODO: generalize for cast method (special return values)\n        }\n        else return new Quantity(value);\n    },\n\n    get_type(value:Quantity) {\n        return Type.std.quantity.getParametrized([value.base_value]);\n    },\n\n\n    type_params_match(params, against_params) {\n        return params.length == 1 && \n            against_params.length == 1 && \n            params[0] instanceof Quantity && \n            against_params[0] instanceof Quantity &&\n            params[0].equals(against_params[0]);\n    },\n\n    override_silently(ref, value) {\n        console.log(\"os\",ref,value)\n        ref.value = value.value;\n    },\n\n    operator_add(first, second) {\n        console.log(\"add\",first,second)\n        if (first instanceof Quantity && second instanceof Quantity) return first.sum(second)\n        else return INVALID;\n    },\n\n    operator_subtract(first, second) {\n        if (first instanceof Quantity && second instanceof Quantity) return first.difference(second)\n        else return INVALID;\n    },\n\n    operator_multiply(first, second) {\n        if (first instanceof Quantity && (typeof second == \"number\"||typeof second == \"bigint\")) return first.product(second)\n        else if (second instanceof Quantity && (typeof first == \"number\"||typeof first == \"bigint\")) return second.product(first);\n        else if (first instanceof Quantity && second instanceof Quantity) return first.product(second)\n        else return INVALID;\n    },\n\n    operator_divide(first, second) {\n        if (first instanceof Quantity && (typeof second == \"number\"||typeof second == \"bigint\")) return first.quotient(second)\n        else if (second instanceof Quantity && (typeof first == \"number\"||typeof first == \"bigint\")) return new Quantity(first, 'x').quotient(second);\n        else if (first instanceof Quantity && second instanceof Quantity) return first.quotient(second)\n        else return INVALID;\n    },\n\n    operator_power(first, second) {\n        if (first instanceof Quantity && (typeof second == \"number\"||typeof second == \"bigint\")) return first.power(second)\n        else return INVALID;\n    },\n\n    compare(first:Quantity, second:Quantity) {\n        return Quantity.compare(first, second);\n    },\n\n    action_add(value:Quantity, second, silently) { // TODO silent/not silent update handling\n        if (second instanceof Quantity) value.add(second)\n        else return INVALID;\n    },\n\n    action_subtract(value:Quantity, second, silently) {\n        if (second instanceof Quantity) value.subtract(second)\n        else return INVALID;\n    },\n\n    action_multiply(value:Quantity, second, silently) {\n        if (typeof second == \"number\" || typeof second == \"bigint\") value.multiply(second)\n        else return INVALID;\n    },\n\n    action_divide(value:Quantity, second, silently) {\n        if (typeof second == \"number\" || typeof second == \"bigint\") value.divide(second)\n        else return INVALID;\n    },\n\n\n});\n\n\nType.std.time.setJSInterface({\n\n    class: Time,\n\n    operator_add(first, second) {\n        if (first instanceof Time && second instanceof Quantity) return first.plus(second)\n        if (second instanceof Time && first instanceof Quantity) return second.plus(first)\n        else return INVALID;\n    },\n\n    operator_subtract(first, second) {\n        if (first instanceof Time && second instanceof Quantity) return first.minus(second)\n        if (second instanceof Time && first instanceof Quantity) return second.minus(first)\n        else return INVALID;\n    },\n\n\n    action_add(value:Time, second, silently) { // TODO silent/not silent update handling\n        if (second instanceof Quantity && (second.hasBaseUnit('s')||second.hasBaseUnit('Cmo'))) value.add(second)\n        else return INVALID;\n    },\n    action_subtract(value:Time, second, silently) { // TODO silent/not silent update handling\n        if (second instanceof Quantity && (second.hasBaseUnit('s')||second.hasBaseUnit('Cmo'))) value.subtract(second)\n        else return INVALID;\n    },\n\n})\n\nType.std.MatchCondition.setJSInterface({\n    class: MatchCondition,\n    visible_children: new Set([\n        \"type\",\n        \"data\"\n    ])\n})\n\n\nType.get<JSTransferableFunction>(\"js:Function\").setJSInterface({\n\n    class: JSTransferableFunction,\n    visible_children: new Set([\n        \"source\",\n        \"deps\"\n    ]),\n    cast(value,type,context,origin) {\n        return JSTransferableFunction.recreate(value.source, value.deps)\n    },\n\n    apply_value(parent, args = []) {\n        if (args instanceof Tuple) return parent.handleCall(...args.toArray())\n        else return parent.handleCall(args)\n    },\n\n});\n\nType.get(\"std:Iterator\").setJSInterface({\n    class: Iterator,\n    is_normal_object: true,\n    proxify_children: true,\n    visible_children: new Set(['val', 'next']),\n})\n\n// displayClear();\n"],"names":["globalThis","performance","mark","BigInt","prototype","toJSON","String","Symbol","Compiler","PrecompiledDXB","ProtocolDataTypesMap","DatexResponse","Pointer","PointerProperty","ReactiveValue","UpdateScheduler","BROADCAST","Endpoint","LOCAL_ENDPOINT","Target","WildcardTarget","RuntimePerformance","NetworkError","PermissionError","PointerError","RuntimeError","SecurityError","ValueError","Error","DatexError","CompilerError","TypeError","SyntaxError","AssertionError","Function","DatexFunction","MatchCondition","Storage","Observers","BinaryCode","Markdown","Type","Tuple","DatexObject","Crypto","ProtocolDataType","arrayBufferToBase64","base64ToArrayBuffer","buffer2hex","getFileContent","IOHandler","DX_PERMISSIONS","DX_SLOTS","DX_RETURN_POINTER_VALUE","DX_TYPE","DX_SERIALIZED","DX_VALUE","INVALID","MAX_UINT_16","NOT_EXISTING","UNKNOWN_TYPE","VOID","WILDCARD","SLOT_WRITE","SLOT_READ","SLOT_GET","SLOT_SET","baseURL","DEFAULT_HIDDEN_OBJECT_PROPERTIES","logger","TypedArray","client_type","MessageLogger","JSInterface","Stream","Quantity","Scope","IterationFunction","IteratorFunction","Iterator","RangeIterator","Assertion","Deferred","Task","DATEX_ERROR","Conjunction","Disjunction","Logical","Negation","Logger","Debugger","decompile","wasm_decompile","Time","initPublicStaticClasses","JSTransferableFunction","createFunctionWithDependencyInjections","sendDatexViaHTTPChannel","deleteCookie","getCookie","setCookie","addPersistentListener","removePersistentListener","endpoint_config","communicationHub","mime","$$","value","createOrGet","js_value","static_pointer","endpoint","unique_id","label","static_id","getStaticPointerId","pointer","create","addLabel","replace","collapseValue","ReadableStream","marker","ReadableStreamDefaultReader","EXPOSE","StaticScope","STD","scopes","Map","NAME","DOCS","get","name","expose","proxy","proxifyValue","undefined","setWritePermission","ptr","pointerifyValue","grantPublicAccess","getVariable","setVariable","hasVariable","Object","hasOwn","delete","set","docs","TypedValue","constructor","type","toString","UnresolvedValue","WRAPPED_PROMISE","Runtime","OPTIONS","PROTECT_POINTERS","INDIRECT_REFERENCES","DEFAULT_REQUEST_TIMEOUT","GARBAGE_COLLECTION_TIMEOUT","USE_BIGINTS","ERROR_STACK_TRACES","NATIVE_ERROR_STACK_TRACES","NATIVE_ERROR_DEBUG_STACK_TRACES","NATIVE_ERROR_MESSAGES","DATEX_HTTP_ORIGIN","location","origin","USE_DX_CONFIG","USE_PUBLIC_NODES","MIME_TYPE_MAPPING","mime_type_classes","entries","map","x","class","trustedEndpoints","ENV","VERSION","PRECOMPILED_DXB","Blockchain","WeakMap","addTrustedEndpoint","permissions","has","debug","join","getLocalString","local_map","createTransform","lang","getTranslatedLocalString","valueToDatexString","transformMap","getLocalStringFromMap","key","saved_strings","keyVal","value_available","LANG","transformValues","push","string_transform","transformLangValue","Set","add","newLocalStringsMapValues","local_strings_map","val","setDatexTransform","size","auto_translate","text_en","HOST_ENV","_isInitialSetWorkaround","call","_setEndpoint","register","onEndpointChanged","listener","main_node","endpoint_entrypoint","utf8_decoder","TextDecoder","utf8_encoder","TextEncoder","initialized","synchronized","triggerAll","Promise","resolve","datexOutAllSent","then","END_BIN_CODES","CLOSE_AND_STORE","IMPLEMENTS","EXTENDS","MATCHES","DEFAULT","ARRAY_END","SUBSCOPE_END","OBJECT_END","TUPLE_END","ELEMENT","ELEMENT_WITH_KEY","ELEMENT_WITH_INT_KEY","ELEMENT_WITH_DYNAMIC_KEY","KEY_PERMISSION","EQUAL_VALUE","EQUAL","NOT_EQUAL_VALUE","NOT_EQUAL","GREATER","GREATER_EQUAL","LESS","LESS_EQUAL","ADD","SUBTRACT","MULTIPLY","DIVIDE","POWER","OR","AND","MODULO","readonly_internal_vars","callbacks_by_sid","detailed_result_callbacks_by_sid","detailed_result_callbacks_by_sid_multi","setMainNode","STD_STATIC_SCOPE","STD_TYPES_ABOUT","datex_out","data","datexIn","setDatexOutHandler","handler","scope_symmetric_keys","getOwnSymmetricKey","scope_id","sender_map","generateSymmetricKey","getScopeSymmetricKeyForSender","sender","setScopeSymmetricKeyForSender","removeScopeSymmetricKeyForSender","deleteURLCache","url","normalizeDatexExports","module","getByValue","fromEntries","named","getURLContent","url_string","raw","cached","potentialDatexAsJsModule","result","startsWith","URL","protocol","overrideContentType","response","doFetch","endsWith","fetch","method","cache","headers","e","console","error","ok","status","content","arrayBuffer","executeDXBLocally","text","executeDatexLocally","datexOut","sign","encrypt","DATA","json","mime_type","split","collapseValueCast","castValue","filePath","pathname","buffer","JSON","parse","ext","match","getType","warn","slice","parseDatexData","dx","compile","getValueFromBase64DXB","dxb_base64","decodeValueBase64","outer_serialized","conditions","scope","createNewInitialScope","exec_conditions","updateScope","end_of_scope","simpleScopeExecution","decodeValue","dxb","collapseCloneValue","encoded","encodeValue","cloneValue","deepCloneValue","datex","options","context_location","__overrideMeta","overrideMeta","forceLocalExecution","header","dxb_body","res","parseHeader","Array","assign","compileAdvanced","header_options","sid","generateSID","sym_encrypt_key","send_sym_encrypt_key","datexOutPreprocessingFinished","all","createPrepocessingTask","promise","reject","withResolvers","createDatexSendingTask","to","wait_for_result","detailed_result_callback","flood","timeout","socket","finish","equals","NO_OUTPUT","NO_RECEIVERS","unique_sid","return_index","evaluated_receivers","collapse","ArrayBuffer","datexOutSingleBlock","next","reader","getReader","read","done","byteLength","_handleEndpointOffline","isOnline","receivers","catch","finally","t","message","timeoutId","Number","isFinite","setTimeout","evaluateFilter","filter","redirectDatex","routing","ttl","floodDatex","precompile","SET_PROPERTY","SET_PROPERTY_REF","SET_WILDCARD","CLEAR_WILDCARD","STREAM","ownLastEndpoint","lastEndpointUnloadHandler","goodbyeMessage","setActiveEndpoint","endpoints","localStorage","includes","splice","indexOf","stringify","compileGoodByeMessage","endpointName","currentEndpointName","temporary","nonceBase64","nonce","GOODBYE","__routing_ttl","getActiveLocalStorageEndpoints","clearEndpointScopes","removeCount","active_datex_scopes","init","print","createFromJSFunction","params","meta","stdOut","v1","std","Any","v2","v3","v4","v5","v6","printf","stdOutF","printn","log","_logger","dx_logger","success","info","plain","msg_start","msg_end","stdIn","sleep","time_ms","localtext","seal","formatVariableName","prefix","getAbout","about","convertByteToNumbers","bit_distribution","byte","byte_str","padStart","nrs","pos","parseInt","parseHeaderSynchronousPart","encrypted_key","iv","header_data_view","DataView","header_uint8","Uint8Array","routing_info","version","VERSION_2","i","getUint16","Int16Array","BYTES_PER_ELEMENT","prio","signed_encrypted","signed","encrypted","last_index","extractHeaderSenderV2","extractHeaderSender","receiver_size","Uint16Array","id_buffer","subarray","MAX_POINTER_ID_SIZE","target","targets","targets_nr","getInt16","name_length","subspace_number","instance_length","name_binary","ENDPOINT","decode","subspaces","n","length","subspace_name","instance","signature_start","signature_size","getUint32","Uint32Array","inc","main","redirect","_","executable","device_type","timestamp","Date","getBigUint64","BIG_BANG_TIME","BigUint64Array","header_buffer","force_sym_enc_key","force_only_header_info","force_no_redirect","data_buffer","sym_enc_key","extractEncryptedKey","j","signature","verify","decryptSymmetric","handleDatexIn","handleContinuousBlockStream","dxb_stream_reader","full_scope_callback","variables","header_callback","current_block","current_block_size","overflow_block","new_block","index","newValue","_overflow_block","releaseLock","run","enableCryptoProxy","proxiedEndpoint","keys","receivedMessagesHistory","checkDuplicate","identifier","getValueHashString","isDuplicate","shift","updateEndpointOnlineState","setOnline","clearEndpointSubscriptions","data_uint8","handleScopeError","HELLO","activateEndpoint","public_keys","TRACE","TRACE_BACK","trace","destinationReached","localHops","entry","RESPONSE","active","scope_map","_header","_data","_dxb","callbacks","clearTimeout","has_error","closed","persistent_vars","saveScopeMemoryValue","internal_vars","handleScopeResult","MAX_BLOCK","handleScopeDebuggerSession","deb","DEBUGGER","REQUEST","fromJSError","addScopeToStack","LOCAL","UPDATE","return_value","source","traceStack","interfaceProperties","keys_updated","bindKeys","destReached","handleScopeFinished","persistent_memory","scope_identifier","getAuto","getScopeMemory","context","no_fetch","assigningPtrId","old_type","ofValue","old_value","new_value","namespace","js","NativeObject","RegExp","MediaStream","File","root_type","uncollapsed_old_value","void","null","Blob","decimal","isNaN","integer","Math","floor","boolean","Boolean","fromStringAsync","toObject","serializeValue","toArray","lastModified","variation","Int8Array","Int32Array","BigInt64Array","Float32Array","Float64Array","WebRTCInterface","getMediaStream","encode","WeakRef","deref","load","time","now","matchesType","dependencies","intermediateFn","parameters","external_variables","setType","createFromDatexScope","application","image","audio","video","model","full_mime_type","mapping","generator","blob","hasMatchingJSClassOrPrototype","template","cast","loadTypeConfiguration","cacheValue","receiver","flags","id","ntarget","js_source","js_deps","body","serialized","code","datex_stack","clone","visible_children","shadow_object","equalValues","a","b","hashA","hashB","FORMAT_INDENT","TEXT_KEY","escapeString","string","formatted","valueToDatexStringExperimental","colorized","deep_clone","collapse_value","resolve_slots","compiled","collapse_pointers","deep_collapse","pointer_anchors","_valueToDatexString","depth","_serialized","parents","is_anonymous","original_value","Infinity","is","isInteger","spaces","idString","string_value","not","el","indexed","first","k","v","brackets","is_primitive","is_complex","quantity","runtime_actions","waitForBuffer","SCOPE","jump_to_index","shift_current_index","current_index","start_index","cache_previous","constructFilterElement","target_list","buffer_views","uint8","name_is_binary","ENDPOINT_WILDCARD","trimArray","array","new_length","getTrimmedArrayLength","returnValue","enterSubScope","inner_scope","ctx_intern","active_object","sub_scopes","exitSubScope","closeSubScopeAssignments","inner_spread","pop","waiting_collapse","newSubScope","is_outer_scope","INNER_SCOPE","type_casts","active_value","did_assignment","assertEndpointCanRead","waiting_ptrs","p","isSet","isInit","excludeEndpointFromUpdates","forceMove","supportsIndirectRefs","setValue","is_origin","finalizeSubscribe","subscribeForPointerUpdates","loading_pointers","handleAssignAction","enableUpdatesForAll","waiting_labels","waiting_for_action","action","waiting_internal_vars","SET_INTERNAL_VAR","setInternalVarValue","SET_INTERNAL_VAR_REFERENCE","setInternalVarReference","parent","return","reference","save_persistent","isReference","it","remote","setVal","action_type","current_val","setProperty","assignAction","checkValueReadPermission","matches","canReadProperty","checkValueUpdatePermission","canUpdateProperty","countValue","count","handleCount","getKeys","array_indices_as_numbers","handleKeys","handleHas","hasValue","values","getReferencedProperty","createOrGetLazy","getProperty","o_parent","doesValueHaveProperties","child","new_obj","handleGetProperty","isSealed","isFrozen","assigned","externalUpdatesBlocked","hasPseudoClass","handleClear","extend","N","iterator","current_value","handleDeleteProperty","handleSetProperty","isPropertyAllowed","assertPropertyValueAllowed","_keys","current_val_prim","value_prim","currentValIsIntegerRef","currentValIsDecimalRef","handleActionAdd","_removeItemFromArray","handleActionSubtract","handleActionMultiply","handleActionDivide","handleActionPower","handleActionModulo","handleActionAnd","handleActionOr","CREATE_POINTER","arr","extractScopeBlock","buffer_length","data_view","_buffer","extractVariableName","extractType","is_extended_type","has_parameters","varation","ns_length","variation_length","ns","forkScope","forked_scope","index_offset","cache_after_index","sync","execution_permission","impersonation_permission","s","last_insert_value","auto_obj_index","active_object_new","waiting_key","waiting_internal_slot","waiting_ext_type","waiting_for_child","waiting_for_child_action","waiting_range","compare_type","create_pointer","delete_pointer","copy","get_type","get_origin","get_subscribers","auto_exit","stream_consumer","jmp","jmp_true","operator","negate_operator","insertToScope","literal_value","setTemplate","wait_new","new_type","scope_block_for","CHILD_GET_REF","scope_block_vars","wait_dynamic_key","wait_iterator","wait_await","task","wait_next","connective_size","connective","getParametrized","CHILD_GET","ptrId","subscopePtrs","at","waitingPtr","waiting_for_key_perm","key_perm","spread","is_true","silent","addSubscriber","observe","write","UPDATE_TYPE","INIT","stop_sync","value_initialized","removeSubscriber","clone_collapse","subscribers","wait_extends","extends","wait_matches","wait_implements","wait_freeze","freeze","wait_seal","pipe","compared","typeA","typeB","comp","handleCompare","handleOperatorAdd","handleOperatorSubtract","and","handleOperatorAnd","base_type","base","createDefaultValue","or","handleOperatorOr","repeat","fill","flat","handleOperatorMultiply","handleOperatorDivide","handleOperatorPower","handleOperatorModulo","YEET","getEntrypoint","handleApply","grantAccessTo","compiler_context","defineProperty","writable","enumerable","datex_body_buffer","new_uint8","connected","origins","getOriginFromPointerId","o","race","token","EXIT","SHORT_TEXT","TEXT","BUFFER","CHILD_SET","CHILD_ACTION","RANGE","EXTEND","CACHE_POINT","CACHE_RESET","JMP","JTR","JFA","INTERNAL_VAR","INIT_INTERNAL_VAR","init_block_size","INTERNAL_VAR_ACTION","VAR_RESULT","VAR_SUB_RESULT","VAR_ENTRYPOINT","VAR_ORIGIN","VAR_ENDPOINT","VAR_LOCATION","VAR_ENV","VAR_META","VAR_REMOTE","VAR_PUBLIC","VAR_STD","VAR_VOID","VAR_THIS","VAR_IT","SET_VAR_IT","SET_VAR_RESULT","SET_VAR_SUB_RESULT","SET_VAR_VOID","VAR_RESULT_ACTION","VAR_SUB_RESULT_ACTION","VAR_REMOTE_ACTION","VAR_IT_ACTION","LABEL","getByLabel","LABEL_ACTION","SET_LABEL","INIT_LABEL","labelExists","SCOPE_BLOCK","code_block","TRANSFORM","waiting","handleTransformAsync","createTransformAsync","ASSERT","assertion","RUN","DO","execute","DEFER","deferred","PLAIN_SCOPE","ITERATOR","FUNCTION","args","REMOTE","variables_insert_code","var_dxb","tmp","full_dxb","appendHeader","NULL","RETURN","ABOUT","COUNT","KEYS","TEMPLATE","OBSERVE","NEXT","AWAIT","HAS","SEAL","FREEZE","NEW","GET","RESOLVE_RELATIVE_PATH","ARRAY_START","TUPLE_START","OBJECT_START","INTERNAL_OBJECT_SLOT","new_object","scope_result","forEach","STD_TYPE_TEXT","STD_TYPE_INT","STD_TYPE_FLOAT","STD_TYPE_BOOLEAN","STD_TYPE_NULL","STD_TYPE_VOID","STD_TYPE_BUFFER","STD_TYPE_CODE_BLOCK","STD_TYPE_UNIT","STD_TYPE_ARRAY","STD_TYPE_OBJECT","STD_TYPE_SET","STD_TYPE_MAP","STD_TYPE_TUPLE","STD_TYPE_STREAM","STD_TYPE_ANY","STD_TYPE_ASSERTION","STD_TYPE_TASK","STD_TYPE_ITERATOR","STD_TYPE_TIME","STD_TYPE_URL","STD_TYPE_FUNCTION","short_types","INCREMENT","DECREMENT","NOT","CONJUNCTION","DISJUNCTION","SUBSCOPE_START","TRUE","FALSE","QUANTITY","num_size","den_size","num_buffer","den_buffer","num","bufferToBigInt","den","factor_count","unit_factors","exponent","getInt8","unit","BIG_INT","bigint_buffer","bigint","INT_8","INT_16","INT_32","getInt32","INT_64","getBigInt64","FLOAT_64","float","getFloat64","FLOAT_AS_INT_32","FLOAT_AS_INT_8","TIME","millis","TYPE","EXTENDED_TYPE","type_info","PERSON_ALIAS","PERSON_ALIAS_WILDCARD","INSTITUTION_ALIAS","INSTITUTION_ALIAS_WILDCARD","BOT","BOT_WILDCARD","f","POINTER","knows_pointer","has_hash","SET_POINTER","normalizePointerId","INIT_POINTER","lockedPointerPromise","lockedPointerResolve","lockedPointerReject","tmp_ptr","addLoadingPointerPromise","SYNC","_SYNC_SILENT","STOP_SYNC","COPY","CLONE","CLONE_COLLAPSE","COLLAPSE","GET_TYPE","ORIGIN","SUBSCRIBERS","POINTER_ACTION","StreamConsumer","default","setRuntime","setPointer","navigator","userAgentData","brands","brand","userAgent","platform","DatexRuntime","createMeasureGroup","onPointerAdded","createdInContext","hasPointer","syncPointer","setJSInterface","base_value","type_params_match","against_params","override_silently","ref","operator_add","second","sum","operator_subtract","difference","operator_multiply","product","operator_divide","quotient","operator_power","power","compare","action_add","silently","action_subtract","subtract","action_multiply","multiply","action_divide","divide","plus","minus","hasBaseUnit","recreate","deps","apply_value","handleCall","is_normal_object","proxify_children"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.15/runtime/","file":"runtime.ts"}