{"version":3,"sources":["compiler.ts"],"sourcesContent":["// deno-lint-ignore-file no-cond-assign\n/**\n ╔══════════════════════════════════════════════════════════════════════════════════════╗\n ║  Datex Compiler                                                                      ║\n ╠══════════════════════════════════════════════════════════════════════════════════════╣\n ║  Compiles datex to binary                                                            ║\n ║  Visit https://docs.unyt.org/datex for more information                              ║\n ╠═════════════════════════════════════════╦════════════════════════════════════════════╣\n ║  © 2020 unyt.org                        ║                                            ║\n ╚═════════════════════════════════════════╩════════════════════════════════════════════╝\n */\n\nimport { Logger } from \"../utils/logger.ts\";\nconst logger = new Logger(\"datex compiler\");\n\nimport { ReadableStream, Runtime } from \"../runtime/runtime.ts\";\nimport { Endpoint, IdEndpoint, Target, WildcardTarget, Institution, Person, BROADCAST, target_clause, endpoints, LOCAL_ENDPOINT } from \"../types/addressing.ts\";\nimport { Pointer, PointerProperty, ReactiveValue } from \"../runtime/pointers.ts\";\nimport { CompilerError, RuntimeError, Error as DatexError, ValueError } from \"../types/errors.ts\";\nimport { Function as DatexFunction } from \"../types/function.ts\";\n\nimport { crypto, Crypto } from \"../runtime/crypto.ts\";\nimport { Stream } from \"../types/stream.ts\";\nimport { Type } from \"../types/type.ts\";\nimport { Tuple } from \"../types/tuple.ts\";\nimport { BinaryCode } from \"./binary_codes.ts\";\nimport { Scope } from \"../types/scope.ts\";\nimport { ProtocolDataType } from \"./protocol_types.ts\";\nimport { Quantity } from \"../types/quantity.ts\";\nimport { EXTENDED_OBJECTS, INHERITED_PROPERTIES, VOID, SLOT_WRITE, SLOT_READ, SLOT_EXEC, NOT_EXISTING, SLOT_GET, SLOT_SET, DX_IGNORE, DX_BOUND_LOCAL_SLOT, DX_REPLACE, DX_PTR } from \"../runtime/constants.ts\";\nimport { arrayBufferToBase64, base64ToArrayBuffer, buffer2hex, hex2buffer } from \"../utils/utils.ts\";\nimport { RuntimePerformance } from \"../runtime/performance_measure.ts\";\nimport { Conjunction, Disjunction, Logical, Negation } from \"../types/logic.ts\";\nimport { Regex } from \"./tokens_regex.ts\";\nimport { baseURL, TypedArray } from \"../utils/global_values.ts\";\nimport type { datex_scope } from \"../utils/global_types.ts\";\nimport { unit_symbol } from \"./unit_codes.ts\";\nimport { Time } from \"../types/time.ts\";\n\n// WASM\nimport wasm_init, {init_runtime as wasm_init_runtime, compile as wasm_compile, decompile as wasm_decompile} from \"../wasm/adapter/pkg/datex_wasm.js\";\nimport { MessageLogger } from \"../utils/message_logger.ts\";\nimport { JSTransferableFunction } from \"../types/js-function.ts\";\nimport { client_type } from \"../utils/constants.ts\";\nimport { normalizePath } from \"../utils/normalize-path.ts\";\nimport { VolatileMap } from \"../utils/volatile-map.ts\";\n\n// await wasm_init();\n// wasm_init_runtime();\n\nlet WebRTCInterface: undefined|typeof import(\"../network/communication-interfaces/webrtc-interface.ts\").WebRTCInterface;\n\nexport const activePlugins:string[] = [];\n\n// for actions on variables, pointers, ...\nenum ACTION_TYPE {\n    GET, \n    SET, // =\n    INIT, // :=\n    OTHER, // +=, -=, ...\n    SET_REFERENCE // $= for variables\n}\n\n// Raw DATEX as return type\nexport class DatexResponse<T> {\n    constructor(public datex:string|URL|Scope, public data?:unknown[]) {}\n\n    async evaluate():Promise<T> {\n        if (this.datex instanceof URL) {\n            return <T>(await Runtime.getURLContent(this.datex))[0]\n        }\n        else if (typeof this.datex == \"string\") {\n            return <Promise<T>>Runtime.executeDatexLocally(this.datex, this.data);\n        }\n        else if (this.datex instanceof Scope) {\n            return this.datex.execute(Runtime.endpoint);\n        }\n        else throw new Error(\"Invalid DATEX Response data\");\n    }\n}\n\n\n\nexport const ProtocolDataTypesMap = [\n    \"REQUEST\", \"RESPONSE\", \"DATA\", \"TMP_SCOPE\", \"LOCAL\", \"HELLO\", \"DEBUGGER\", \"SOURCE_MAP\", \"UPDATE\", \"GOODBYE\", \"TRACE\", \"TRACE_BACK\"\n]\n\n\ntype compiler_sub_scope = {\n    last_value_index: number,  // byte index of last, pointer, var, object, ...\n    first_value_index?: number, // byte index of first value in subscope\n    start_index: number, // index for the opening bracket of the subscope\n    wait_for_add: boolean,\n    in_template_string: boolean,\n    path_info_index: number,\n    while?: number, // start_index, indicate that currently in a while loop\n    iterate?: 0|1, // indicate that currently in a iterate loop, two steps\n    loop_start?: number, // index indicates loop start\n    jfa_index?: number,\n    if?: number, // start_index, indicate that currently in a if condition\n    else?: boolean, // currently waiting for else\n    value_count?: number, // count inserted values\n    if_end_indices?: number[], // contains indices inside if statements to jump to the end\n    param_type_close?: boolean, // wait for parameterized type end: )>\n    function?: number,\n    use_parent_index?: number, // use (x,y,z) declartion finish after sub scope close\n    imported_vars?: [string, string?][],\n\n    try_start?:number, // inner start index of try scope block\n    try_close?:boolean, // auto close try scope block\n\n    exports?:Object,\n\n    object_slot_index?: number,\n    object_slots?: Map<string, number>,\n\n    comma_indices?: number[], // contains all indices where a comma was inserted\n\n    has_ce?: boolean, // subscope contains ;\n    ce_index?: number, // index of last ;\n    first_element_pos?: number, // last element had key\n    parent_type?: BinaryCode, // Array or Object or empty\n    auto_close_scope?: BinaryCode, // does a tuple need to be auto-closed?\n\n    vars?: {[name:string]: [type:'val'|'var'|'ref'|'const', slot:number]}\n};\n\n\ntype extract_var_scope = {\n    _is_extract_var_scope: true,\n\n    buffer: ArrayBuffer,\n    uint8: Uint8Array,\n    data_view: DataView,\n    b_index: number,\n    inner_scope: compiler_sub_scope,\n    inserted_values: Map<unknown, [number]>,\n    dynamic_indices: [number][],\n    preemptive_pointers: Map<string, compiler_scope|extract_var_scope>\n    options: compiler_options,\n    assignment_end_indices: Set<number>,\n    var_index?: number,\n\n    stack: [Endpoint, string?][]\n}\n\nexport type compiler_scope = {\n\n    _is_extract_var_scope: false,\n\n    datex: string,\n\n    return_data?: {datex:string},\n\n    data?: unknown[],\n    options: compiler_options,\n\n    preemptive_pointers: Map<string, compiler_scope|extract_var_scope>,\n    \n    jmp_label_indices:  {[label:string]:[number]}, // jmp label -> binary index\n    indices_waiting_for_jmp_lbl: {[label:string]:[number][]}, // jmp instructions waiting for resolved label indices\n\n    assignment_end_indices: Set<number>, // contains a list of all indices at which a assignment ends (x = .), needed for inserted value indexing\n\n    inserted_values: Map<unknown, [number]>, // save start indices of all inserted values\n\n    used_lbls: string[], // already used lbls\n\n    addJSTypeDefs?: boolean, // should add url() imports for types to load via JS modules\n\n    last_cache_point?: number, // index of last cache point (at LBL)\n\n    add_header: boolean,\n    is_child_scope_block?: boolean, // allow \\x,\\y,\\z, \\(...), execute in parent scope during runtime\n    extract_pointers?: boolean, // extract pointers/labels from scope, required for transform\n    extract_var_index?: number\n    extract_var_indices?: Map<BinaryCode, Map<string|number, number>>\n    extract_var_scope?:extract_var_scope\n    precompiled?: PrecompiledDXB, // save precompiled in precompiled object if provided\n    last_precompiled?: number, // index from where to split last_precompiled buffer part\n\n    var_index?:number,\n\n\n    buffer: ArrayBuffer,\n    uint8: Uint8Array,\n    data_view: DataView,\n\n    // pre-generated for header\n    receiver_buffer?: ArrayBuffer, // already generated buffer containing the receivers filter\n    sender_buffer?: ArrayBuffer, // already generated buffer containing the sender\n\n    full_dxb_size?: number\n    pre_header_size?: number\n    signed_header_size?: number\n\n    stack: [Endpoint, string?][],\n\n    unused_plugins?: Set<string>, // set of all plugins used in the script, to check against options.required_plugins\n\n    b_index: number,\n\n    streaming?: ReadableStreamDefaultReader<unknown>,\n\n    max_block_size?: number, // max size of each block, if not Infinity (default), dxb might be split into multiple blocks\n\n    internal_var_index: [number] // count up for every new internal variable\n    internal_vars: WeakMap<Record<string, unknown>, number> // save variables for values with an internal variable\n    internal_primitive_vars: WeakMap<Record<string, unknown>, number> // save variables for primitive values with an internal variable\n\n    serialized_values: WeakMap<Record<string, unknown>, unknown> // cache serialized versions of values (if they are used multiple times)\n    dynamic_indices: [number][], // contains all dynamic index [number] arrays\n    jmp_indices: [number][], // contains all positions (as dynamic indices) at which a jmp to xy index exists (and might need to be updated if a buffer shift occurs)\n\n    current_data_index?: number,\n\n    current_line_nr: number,\n    end: boolean,\n\n    is_outer_insert?: boolean,\n\n    last_command_end?: boolean,\n\n    subscopes: compiler_sub_scope[],\n    inner_scope: compiler_sub_scope,\n\n    // for compile instructions\n    compile_datex_scope?: datex_scope\n    compile_compiler_scope?: compiler_scope\n\n    _code_block_type?: number // 0/undefined: no code block, 1: () code block, 2: single line code block\n}\n\nexport type compiler_options = {\n    /** Header options */\n    sid?:number,     // scope id\n    return_index?: number // unique block return index\n    inc?: number, // incremenented block index (should not be changed)\n    end_of_scope?:boolean, // is last block for this scope id\n    from?: Endpoint,  // sender\n    to?: target_clause|Pointer<target_clause>, // receivers\n    flood?: boolean, // no receiver, flood to all\n    type?: ProtocolDataType,    // what kind of data is in the body?\n    sign?: boolean,  // sign the header + body\n    encrypt?: boolean, // encrypt the body?\n    sym_encrypt_key?: CryptoKey, // encrypt with the provided symmetric encryption key\n    send_sym_encrypt_key?: boolean, // send the encrypted encryption key to all receivers (only send once for a session per default)\n    allow_execute?:boolean, // allow calling functions, per default only allowed for datex requests\n    \n    plugins?: string[] // list of enabled plugins\n    required_plugins?: string[] // list of enabled plugins that must be used\n\n    stream_abort_signal?: AbortSignal // abort signal for stream\n\n    // for routing header\n    __routing_ttl?:number,\n    __routing_prio?:number,\n    __routing_to?: endpoints|Pointer<target_clause>\n\n    // for special compiler info\n    inserted_ptrs?: Set<Pointer>\n    force_id?: boolean // use endpoint id as sender, also if other identifier available\n    collapse_pointers?: boolean // collapse all pointers to their actual values (not pointers injected into a scope)\n    keep_external_pointers?: boolean, // if true and collapse_pointers is true, non-origin pointers are not collapsed\n    collapse_injected_pointers?: boolean // collapse pointers injected to a scope \n    collapse_first_inserted?: boolean // collapse outer pointer to actual value\n    _first_insert_done?: boolean // set to true after first insert\n    keep_first_transform?: boolean // if collapse_first_inserted is true, the outer transform is not collapsed (restored as transform)\n    no_create_pointers?: boolean // don't add $$ to clone pointers (useful for value comparison)\n    parent_scope?: compiler_scope, // reference to parent scope, required for val var ref\n    pseudo_parent?: boolean, // if true, handle variables from parent_scope like normal variables (no reindexing), required for init blocks, ...\n    only_leak_inserts?: boolean, // only __insert__ placeholder variables from parent scope are accessible\n    no_duplicate_value_optimization?: boolean, // dont collapse multiple identical primitive ´´ values to a single reference (only relevant for rendering as datex script, mostly for strings)\n\n    preemptive_pointer_init?: boolean, // directly sent the pointer values for owned pointers\n    init_scope?: boolean, // is not a real subscope, only a init block\n    context_location?: URL, // location of the dx file\n\n    // used by insert commands, shared over multiple dx file compilations\n    insert_header?: {\n        buffer: ArrayBuffer,\n        index: number,\n        cache:  Map<string,string>, // insert value (url, enpoint string) -> variable\n        vars?: {[name:string]: [type:'val'|'var'|'ref', slot:number]}, // reference to the vars of the most outer parent scope\n        var_index: number,\n        root_scope: compiler_scope // most outer parent scope\n    }\n\n\n    __v2?: boolean\n}\n\nconst utf8_decoder = new TextDecoder();\n\nexport const INSERT_MARK = '\\u0001\\udddd\\uaaaa\\ueeee\\u0001'\n\nexport class Compiler {\n\n    static readonly VERSION_NUMBER = 1;\n\n    static SIGN_DEFAULT = true; // can be changed\n\n    static BIG_BANG_TIME = Date.UTC(2024, 0, 0, 0, 0, 0, 0)\n    static MAX_INT_32 = 2_147_483_647;\n    static MIN_INT_32 = -2_147_483_648;\n\n    static MIN_INT_64 = -9223372036854775808n;\n    static MAX_INT_64 = 9223372036854775807n;\n\n    static MAX_INT_8 = 127;\n    static MIN_INT_8 = -128;\n\n    static MAX_INT_16 = 32_767;\n    static MIN_INT_16 = -32_768;\n\n    static MAX_UINT_16 = 65_535;\n    static MAX_UINT_32 = 4_294_967_295;\n\n    static readonly signature_size = 96 // 256;\n\n    static _buffer_block_size = 64;\n\n    private static utf8_encoder = new TextEncoder();\n\n    private static local_url = new URL('@@local', baseURL);\n\n    private static getBaseStack(context_location:URL = this.local_url):[Endpoint, string] {\n        return [Runtime.endpoint, 'compiler' + (context_location ? ': ' + context_location?.toString() : '')]\n    }\n\n    private static combineBuffers(buffer1:ArrayBuffer, buffer2:ArrayBuffer) {\n        const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n        tmp.set(new Uint8Array(buffer1), 0);\n        tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n        return tmp.buffer;\n    }\n\n    private static sid_return_indices = new VolatileMap<number,number>();\n    private static sid_incs = new VolatileMap<number,number>();\n    private static sid_incs_remote:Map<Target, VolatileMap<number,number>> = new Map();\n\n    public static readonly MAX_SID = 4_294_967_295;\n    public static readonly MAX_BLOCK = 65_535;\n\n    public static readonly MAX_DXB_BLOCK_SIZE = Compiler.MAX_UINT_16; // default max block size (Infinity)\n\n    /** create a new random SID */\n    public static generateSID(keepalive = false):number{\n        let sid:number;\n        // get unique SID\n        do {\n            sid = Math.round(Math.random() * this.MAX_SID);\n        } while (this.sid_return_indices.has(sid));\n\n        this.sid_return_indices.set(sid,0);\n        this.sid_incs.set(sid,0);\n\n        // TODO: alternative solution? at some point, the map max size will be reached\n        if (keepalive) {\n            this.sid_return_indices.keepalive(sid, Infinity)\n            this.sid_incs.keepalive(sid, Infinity)\n        }\n        return sid;\n    }\n\n    /** get return index ++ for a specific SID */\n    public static getNextReturnIndexForSID(sid:number):number {\n        if (!this.sid_return_indices.has(sid)) {this.sid_return_indices.set(sid,0);this.sid_incs.set(sid,0);} // sid not yet loaded?\n        let c = <number>this.sid_return_indices.keepalive(sid);\n        if (c > this.MAX_BLOCK) c = 0;\n        this.sid_return_indices.set(sid, c+1);\n        return c; \n    }\n\n    private static getBlockInc(sid:number):number {\n        if (!this.sid_return_indices.has(sid)) {this.sid_return_indices.set(sid,0);this.sid_incs.set(sid,0);} // sid not yet loaded?\n\n        let c = <number>this.sid_incs.keepalive(sid);\n        if (c > this.MAX_BLOCK) c = 0;\n        this.sid_incs.set(sid, c+1);\n        return c;\n    }\n\n    // count up inc individually for different remote receivers (important for RESPONSE dxb)\n    private static getBlockIncForRemoteSID(sid: number, remote_endpoint:Endpoint, reset_inc = false) {\n        if (!(remote_endpoint instanceof Target)) throw new CompilerError(\"Can only send datex responses to endpoint targets\");\n        if (!this.sid_incs_remote.has(remote_endpoint)) this.sid_incs_remote.set(remote_endpoint, new VolatileMap());\n\n        const sid_incs = this.sid_incs_remote.get(remote_endpoint)!;\n\n        if (!sid_incs.has(sid)) {\n            if (reset_inc) return 0; // don't even bother to create a 0-entry, just return 0 directly\n            sid_incs.set(sid, 0); // sid not yet loaded?\n        }\n\n        let c = sid_incs.keepalive(sid)!;\n        if (c > this.MAX_BLOCK) c = 0;\n        sid_incs.set(sid, c+1);\n        //logger.warn(\"INC for remote SID \" + sid, c, (reset_inc?'RESET':''));\n\n        // reset to 0 if scope is closed (responses are sent with the same scope id again and again, but the inc has to be reset each time)\n        if (reset_inc) sid_incs.set(sid, 0);\n\n        return c;\n    }\n\n    // 0 2 1 5 -> byte\n    public static convertNumbersToByte(bit_distribution:number[], ...nrs:(boolean|number)[]):number {\n        if (bit_distribution.reduce((a,b)=>a+b) > 8) throw Error(\"Bit size bigger than 8 bits\");\n        let binary = \"\";\n        for (let s = bit_distribution.length-1; s>=0; s--) {\n            const size = bit_distribution[s];\n            const nr = Number(nrs[s])||0;\n            if (nr > 2**size - 1) throw Error(\"Number \" + nr + \" is bigger than \" + size + \"  bits\");\n            binary = (nr?.toString(2)||'').padStart(size, '0') + binary;\n        }\n\n        return parseInt(binary, 2);\n    }\n\n\n    // get sender from header\n    public static extractHeaderSender(dx_block: ArrayBuffer, last_byte?:[number], _appspace_byte = true, _start = 8): Endpoint|undefined {\n        const header_uint8 = new Uint8Array(dx_block);\n        let i = _start;\n\n        const sender_type = header_uint8[i++];\n\n        // not anonynmous?\n        if (sender_type != 0) {\n            \n            const name_length = header_uint8[i++]; // get name length\n            const subspace_number = header_uint8[i++]; // get subspace number\n            let instance_length = header_uint8[i++]; // get instance length\n\n            let has_appspace = false;\n            if (_appspace_byte) has_appspace = !!header_uint8[i++];\n\n            if (instance_length == 0) throw new RuntimeError(\"Invalid sender\");\n            else if (instance_length == 255) instance_length = 0;\n\n            const name_binary = header_uint8.subarray(i, i+=name_length);\n            const name = (sender_type == BinaryCode.ENDPOINT || sender_type == BinaryCode.ENDPOINT_WILDCARD) ? name_binary : utf8_decoder.decode(name_binary)  // get name\n\n            const subspaces:string[]= [];\n            for (let n=0; n<subspace_number; n++) {\n                const length = header_uint8[i++];\n                if (length == 0) {\n                    throw new RuntimeError(\"Invalid sender\");\n                }\n                else {\n                    const subspace_name = utf8_decoder.decode(header_uint8.subarray(i, i+=length));\n                    subspaces.push(subspace_name);\n                }\n            }\n\n            const instance = utf8_decoder.decode(header_uint8.subarray(i, i+=instance_length))  // get instance\n            \n            if (last_byte) last_byte[0] = i;\n\n            const appspace = has_appspace ? this.extractHeaderSender(dx_block, last_byte, false, i) : undefined;\n\n            return <Endpoint> Target.get(name, instance, sender_type);\n        }\n\n        if (last_byte) last_byte[0] = i;\n        return undefined;\n    }\n\n     // get sender from header\n     public static extractHeaderSenderV2(dx_block: ArrayBuffer, last_byte?:[number], _appspace_byte = true, _start = 8): Endpoint|undefined {\n        const header_uint8 = new Uint8Array(dx_block);\n        const header_data_view = new DataView(header_uint8.buffer);\n\n        let i = _start;\n\n        const sender_type = header_uint8[i++];\n\n        // not anonynmous?\n        if (sender_type != 0xff) {\n            \n            const name_length = 18;\n            const name_binary = header_uint8.subarray(i, i+=name_length);\n            const name = (sender_type == BinaryCode.ENDPOINT || sender_type == BinaryCode.ENDPOINT_WILDCARD) ? name_binary : utf8_decoder.decode(name_binary).replaceAll(\"\\x00\", \"\")  // get name\n            const instance = header_data_view.getUint16(i, true) || undefined;\n            i += 2;\n\n            if (last_byte) last_byte[0] = i;\n\n            let bin_type = 0;\n            if (sender_type == 0) bin_type = BinaryCode.ENDPOINT;\n            else if (sender_type == 1) bin_type = BinaryCode.PERSON_ALIAS;\n            else if (sender_type == 2) bin_type = BinaryCode.INSTITUTION_ALIAS;\n\n            return <Endpoint> Target.get(name, instance, bin_type);\n        }\n\n        if (last_byte) last_byte[0] = i;\n        return undefined;\n    }\n\n    // dx block can be header or full dxb\n    protected static extractHeaderReceiverDataList(dx_block: ArrayBuffer, start_byte:number):Map<Endpoint, ArrayBuffer> {\n\n        const header_uint8 = new Uint8Array(dx_block);\n        let i = start_byte;\n\n        const targets_map = new Map<Endpoint, ArrayBuffer>();\n        const targets_nr = header_uint8[i++];\n        const target_list = [];\n\n        // same as in Runtime\n        for (let n=0; n<targets_nr; n++) {\n            const type = header_uint8[i++];\n\n            // is pointer\n            if (type == BinaryCode.POINTER) {\n                // TODO get receivers from pointer\n            }\n\n            // filter target\n            else {\n                \n                const name_length = header_uint8[i++]; // get name length\n                const subspace_number = header_uint8[i++]; // get subspace number\n                const instance_length = header_uint8[i++]; // get instance length\n    \n                const name_binary = header_uint8.subarray(i, i+=name_length);\n                const name = type == BinaryCode.ENDPOINT ? name_binary : utf8_decoder.decode(name_binary)  // get name\n    \n                const subspaces = [];\n                for (let n=0; n<subspace_number; n++) {\n                    const length = header_uint8[i++];\n                    const subspace_name = utf8_decoder.decode(header_uint8.subarray(i, i+=length));\n                    subspaces.push(subspace_name);\n                }\n    \n                const instance = utf8_decoder.decode(header_uint8.subarray(i, i+=instance_length))  // get instance\n\n                const target = <Endpoint> Target.get(name, instance, type);\n\n                target_list.push(target)\n    \n                // get attached symmetric key?\n                const has_key = header_uint8[i++];\n                if (has_key) {\n                    // add to keys\n                    targets_map.set(target, header_uint8.slice(i, i+512));\n                    i += 512;\n                }\n            }\n            \n        }\n        return targets_map;\n    }\n\n    /** Set receivers of header of existing block */\n    public static updateHeaderReceiver(dx_block:ArrayBuffer, to:Disjunction<Endpoint>):ArrayBuffer|void {\n        // create receiver buffer, create new\n        // extract keys\n\n        // TODO extract and recombine more efficient!\n        // first get keys from old receiver header\n        const last_byte:[number] = [0];\n        const _sender = Compiler.extractHeaderSender(dx_block, last_byte);\n        //console.log(\"> sender\", sender, last_byte[0]);\n        const keys = Compiler.extractHeaderReceiverDataList(dx_block, last_byte[0]+2);\n\n        // now add the required keys back into the old header\n        const receiver_buffer = Compiler.targetsToDXB(to, keys, true);\n        \n        if (!receiver_buffer) {\n            logger.error(\"could not get receiver buffer\");\n            return;\n        }\n\n        const receiver_start_index = last_byte[0];\n\n        // get dimensions - create new buffers\n        const routing_header_size = receiver_start_index + Uint16Array.BYTES_PER_ELEMENT + new DataView(dx_block).getUint16(receiver_start_index, true);\n\n        let uint8 = new Uint8Array(dx_block);\n        const routing_part = uint8.slice(0, receiver_start_index);\n        const main_part = uint8.slice(routing_header_size);\n\n        // calculate new dimensions\n        const total_header_size = receiver_start_index+Uint16Array.BYTES_PER_ELEMENT+receiver_buffer.byteLength;\n        const total_size = total_header_size + main_part.byteLength;\n\n        const new_dx_block = new ArrayBuffer(total_size);\n        const data_view = new DataView(new_dx_block);\n        uint8 = new Uint8Array(new_dx_block);\n        \n        // re-write to new buffer\n        uint8.set(routing_part);\n        uint8.set(main_part, total_header_size);\n\n        data_view.setUint16(receiver_start_index, receiver_buffer.byteLength, true);\n        uint8.set(new Uint8Array(receiver_buffer), receiver_start_index+Uint16Array.BYTES_PER_ELEMENT);\n\n        return new_dx_block;\n    }\n\n    /** Add a header to a Datex block */\n    public static DEFAULT_TTL = 10;\n\n    private static device_types = {\n        \"default\": 0,\n        \"mobile\": 1,\n        \"network\": 2,\n        \"embedded\": 3,\n        \"virtual\": 4\n    }\n\n    /** return the total size of the (not yet generated) block (including the header); also saves sizes and receiver_buffer to SCOPE */\n    public static async getScopeBlockSize(SCOPE:compiler_scope) {\n        if (SCOPE.full_dxb_size) return SCOPE.full_dxb_size; // alreadx calculated\n\n        const [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size] = await this.generateScopeBlockMetaInfo(\n            SCOPE.options.to,\n            SCOPE.options.from,\n            SCOPE.options.sign,\n            SCOPE.options.encrypt,\n            SCOPE.options.flood,\n            SCOPE.options.send_sym_encrypt_key,\n            SCOPE.options.sym_encrypt_key,\n            SCOPE.buffer.byteLength,\n            SCOPE.options.force_id\n        );\n\n        // save in scope\n        SCOPE.receiver_buffer = receiver_buffer;\n        SCOPE.sender_buffer = sender_buffer;\n        SCOPE.pre_header_size = pre_header_size;\n        SCOPE.signed_header_size = signed_header_size;\n        SCOPE.full_dxb_size = full_dxb_size;\n\n        return SCOPE.full_dxb_size;\n    }\n\n    public static async generateScopeBlockMetaInfo(\n        to: target_clause|Pointer<target_clause>, // receivers\n        from: Endpoint = Runtime.endpoint, // sender\n        sign: boolean = Compiler.SIGN_DEFAULT,  // sign the header + body\n        encrypt = false, // encrypt (sym_encrypt_key must be provided)\n        flood = false, // flood to all\n        send_sym_encrypt_key = true, // add encryption key info to header\n        sym_encrypt_key: CryptoKey, // send encryption key to receivers\n        dxb_block_length:number,\n        force_id = false // force sender endpoint id\n    ):Promise<[receiver_buffer:ArrayBuffer, sender_buffer:ArrayBuffer, pre_header_size:number, signed_header_size:number, full_dxb_size:number]> {\n        let receiver_buffer: ArrayBuffer =  new ArrayBuffer(0);\n\n        // generate dynamic receivers buffer\n        if (!flood && to) {\n            let evaluated_endpoints: Pointer<target_clause>|Disjunction<Endpoint>;\n\n            // encrypted keys map\n            const endpoint_key_map = new Map<Endpoint, ArrayBuffer>();\n            \n            // pointer\n            if (to instanceof Pointer) evaluated_endpoints = to;\n            \n            // endpoint or list of endpoints\n            else {\n                evaluated_endpoints = <Disjunction<Endpoint>> Logical.collapse(to, Target);\n                //console.log(\"evaluate\", to, evaluated_endpoints);\n\n                // get enc keys?\n                if (send_sym_encrypt_key && sym_encrypt_key) {\n                    for (const endpoint of evaluated_endpoints) {\n                        endpoint_key_map.set(endpoint, await Crypto.encryptSymmetricKeyForEndpoint(sym_encrypt_key, endpoint));\n                    }\n                }\n            }\n\n            receiver_buffer = Compiler.targetsToDXB(evaluated_endpoints, endpoint_key_map, true);\n        }\n\n        // if (force_id && from) from = from.id_endpoint; \n\n        // generate sender buffer\n        const sender_buffer = from ? this.endpointToDXB(from) : new ArrayBuffer(1);\n\n        const pre_header_size = 10 + sender_buffer.byteLength + (receiver_buffer.byteLength??0) + (sign?Crypto.SIGN_BUFFER_SIZE:0);\n        const signed_header_size = 18 + (encrypt ? Crypto.IV_BUFFER_SIZE : 0);\n        \n        const full_dxb_size = pre_header_size + signed_header_size + dxb_block_length;\n\n        return [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size];\n    }\n\n    /** return a buffer containing the header and the scope dx_block */\n    public static async appendHeader(\n        dx_block:ArrayBuffer = new ArrayBuffer(0), \n        end_of_scope = true, // is last block for this scope id\n        from: Endpoint = Runtime.endpoint,  // sender\n        to?: target_clause|Pointer<target_clause>, // receivers\n        flood = false, // flood to all\n        type: ProtocolDataType = ProtocolDataType.REQUEST,    // what kind of data is in the body?\n        sign: boolean = Compiler.SIGN_DEFAULT,  // sign the header + body\n        encrypt = false, // encrypt (sym_encrypt_key must be provided)\n        send_sym_encrypt_key = true, // add encryption key info to header\n        sym_encrypt_key?: CryptoKey, // send encryption key to receivers\n        allow_execute = type == ProtocolDataType.REQUEST || type == ProtocolDataType.LOCAL, // allow calling functions, per default only allowed for datex requests\n       \n        sid:number = type == ProtocolDataType.RESPONSE ? -1 : (type == ProtocolDataType.DATA ? 0 : this.generateSID()),     // scope id \n        return_index = 0,  // generated index or fixed value\n        block_inc: number = type == ProtocolDataType.RESPONSE ? this.getBlockIncForRemoteSID(sid, <Endpoint>to, end_of_scope) : this.getBlockInc(sid), // should not be overriden; count up block for unique order, if response unique inc for different receivers\n\n        force_id = false,\n\n        // for routing header\n        __routing_ttl:number = Compiler.DEFAULT_TTL,\n        __routing_prio = 0,\n        __routing_to?: endpoints|Pointer<target_clause>,\n\n        // can be provided if it already exists in the SCOPE (gets generated otherwise)\n        receiver_buffer?:ArrayBuffer,\n        sender_buffer?: ArrayBuffer,\n        pre_header_size?: number,\n        signed_header_size?: number,\n        full_dxb_size?: number\n    ) {\n\n        const compile_measure = RuntimePerformance.startMeasure(\"compile time\", \"header\")\n\n        // cannot generate new sid if type is RESPONSE\n        if (sid == -1) throw new CompilerError(\"Cannot generate a new SID for a RESPONSE\");\n\n        // scope header data not yet generated\n        if (full_dxb_size == undefined) {\n            [receiver_buffer, sender_buffer, pre_header_size, signed_header_size, full_dxb_size] = await this.generateScopeBlockMetaInfo(\n                to,\n                from,\n                sign,\n                encrypt,\n                flood, \n                send_sym_encrypt_key,\n                sym_encrypt_key,\n                dx_block.byteLength,\n                force_id\n            )\n        }\n\n        // get device type\n        const device_type = this.device_types.mobile;\n\n        // encryption\n        let iv;\n        if (encrypt) {\n            if (!sym_encrypt_key) throw new CompilerError(\"No symmetric encryption key provided\");\n            [dx_block, iv] = await Crypto.encryptSymmetric(dx_block, sym_encrypt_key);\n        }\n       \n        // init buffers\n        // not-signed header part\n        const pre_header = new ArrayBuffer(pre_header_size!); // unsigned part, includes 'dxb' and routing information\n        const pre_header_data_view = new DataView(pre_header);\n        const pre_header_uint8     = new Uint8Array(pre_header); \n        // potentially signed header part\n       \n        const header = new ArrayBuffer(signed_header_size!);\n        const header_data_view = new DataView(header);\n        const header_uint8     = new Uint8Array(header); \n\n        let i = 0;\n\n        // Magic number (\\01d)\n        pre_header_uint8[i++] = 0x01;\n        pre_header_uint8[i++] = 0x64;\n\n        // version number\n        pre_header_uint8[i++] = this.VERSION_NUMBER;\n        \n        // Full Block size (set at the end)\n        i += 2;\n     \n        // ROUTING HEADER /////////////////////////////////////////////////\n        // ttl\n        pre_header_uint8[i++] = __routing_ttl;\n        // initial ttl (originally: prio, currently unused)\n        pre_header_uint8[i++] = __routing_ttl; //__routing_prio;\n\n        // signed = 1, encrypted+signed = 2, encrypted = 3, others = 0\n        pre_header_uint8[i++] = sign && !encrypt ? 1: (sign && encrypt ? 2 : (!sign && encrypt ? 3 : 0));\n\n        // sender\n        pre_header_uint8.set(new Uint8Array(sender_buffer!), i);\n        i += sender_buffer!.byteLength;\n\n        // receivers\n        if (!flood && to) {\n            // receivers buffer size\n            pre_header_data_view.setUint16(i, receiver_buffer!.byteLength, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n      \n            // add receiver buffer\n            pre_header_uint8.set(new Uint8Array(receiver_buffer!), i);\n            i+=receiver_buffer!.byteLength;\n        }\n\n        // flood to all, ignore receiver if provided\n        else if (flood) {\n            pre_header_data_view.setUint16(i, Compiler.MAX_UINT_16, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n        }\n\n        // no receivers\n        else {\n            pre_header_data_view.setUint16(i, 0, true);\n            i+=Uint16Array.BYTES_PER_ELEMENT;\n        }\n\n        ///////////////////////////////////////////////////////////////////\n        \n\n        const signature_index = i;\n\n        i = 0;\n\n        // sid\n        header_data_view.setUint32(i, sid, true);\n        i+=Uint32Array.BYTES_PER_ELEMENT\n\n        // block index\n        header_data_view.setUint16(i, return_index, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT\n\n        // block inc\n        header_data_view.setUint16(i, block_inc, true);\n        i+=Uint16Array.BYTES_PER_ELEMENT\n\n        // type \n        header_uint8[i++] = type;\n\n        // flags encrypted - executable - end_of_scope - device_type (5 bits)\n        header_uint8[i++] = this.convertNumbersToByte([1,1,1,5], encrypt, allow_execute, end_of_scope, device_type);\n        \n        // timestamp (current time)\n        header_data_view.setBigUint64(i, BigInt(Date.now()-this.BIG_BANG_TIME), true);\n        i+=BigUint64Array.BYTES_PER_ELEMENT\n        \n        // symmetric encryption initialization vector (if exists)\n        if (encrypt && iv) {\n            header_uint8.set(iv, i);\n            i+=iv.byteLength;\n        }\n       \n        const header_and_body = this.combineBuffers(header, dx_block);\n\n        // signature\n        if (sign) pre_header_uint8.set(new Uint8Array(await Crypto.sign(header_and_body)), signature_index)  // add signature to pre header\n\n        // combine all header + body\n        // set block size\n        const block_size = pre_header.byteLength + header_and_body.byteLength;\n        if (block_size > this.MAX_DXB_BLOCK_SIZE) {\n            pre_header_data_view.setUint16(3, 0, true);\n            logger.debug(\"DXB block size exceeds maximum size of \" + this.MAX_DXB_BLOCK_SIZE + \" bytes\")\n        }\n        else pre_header_data_view.setUint16(3, block_size, true);\n\n        // return as ArrayBuffer or [ArrayBuffer]\n        const buffer = this.combineBuffers(pre_header, header_and_body);\n        if (RuntimePerformance.enabled) RuntimePerformance.endMeasure(compile_measure)\n        return buffer;\n    }\n\n    public static endpointToDXB(target:Endpoint) {\n        // targets buffer part\n        let target_buffer = new ArrayBuffer(50) // estimated size\n        let target_uint8 = new Uint8Array(target_buffer);\n        let i = 0;\n\n        function handleRequiredBufferSize(size_in_bytes:number) {\n            if (size_in_bytes>=target_buffer.byteLength-1) {\n                const new_size = (target_buffer.byteLength??0) + Math.ceil((size_in_bytes-target_buffer.byteLength)/8)*8;\n                const old_uint8 = target_uint8;\n                target_buffer    = new ArrayBuffer(new_size);\n                target_uint8    = new Uint8Array(target_buffer);  // default                 \n                target_uint8.set(old_uint8); // copy from old buffer\n            }\n        }\n\n        const name_bin = (target instanceof IdEndpoint) ? target.binary : this.utf8_encoder.encode(target.name); \n        const instance_bin = this.utf8_encoder.encode(target.instance); \n\n        target_uint8[i++] = target.type;\n        target_uint8[i++] = name_bin.byteLength; // write name length to buffer\n        target_uint8[i++] = 0//target.subspaces.length; // write subspace number to buffer\n        target_uint8[i++] = instance_bin.byteLength == 0 ? 255 : instance_bin.byteLength;  // write instance length to buffer, 0 = wildcard, 255 = no instance\n        target_uint8[i++] = 0; // has appspace?\n        target_uint8.set(name_bin, i);  // write name to buffer\n        i += name_bin.byteLength;\n\n        // for (const subspace of target.subspaces ?? []) {\n        //     const subspace_bin = Compiler.utf8_encoder.encode(subspace); \n        //     handleRequiredBufferSize(i+1+subspace_bin.byteLength);\n        //     target_uint8[i++] = subspace_bin.length;  // write subspace length to buffer\n        //     target_uint8.set(subspace_bin, i);  // write subspace_bin to buffer\n        //     i += subspace_bin.byteLength;\n        // }\n\n        handleRequiredBufferSize(instance_bin.length);\n        target_uint8.set(instance_bin, i);  // write channel to buffer\n        i += instance_bin.byteLength;\n\n        target_buffer = target_buffer.slice(0, i);\n\n        \n        return target_buffer;\n    }\n    \n    // create binary representation of <Filter>, max 255 ands by 255 ors, max 127 different targets in total\n    // also add encrypted keys at the end\n    public static targetsToDXB(clause:Disjunction<Endpoint>|Pointer<target_clause>, keys_map?:Map<Endpoint,ArrayBuffer>, extended_keys = false): ArrayBuffer {\n        const encrypted_key_size = 512;\n\n        if (clause instanceof Pointer) {\n            const buffer = new ArrayBuffer(1 + Pointer.MAX_POINTER_ID_SIZE) // estimated size\n            const uint8 = new Uint8Array(buffer);\n            uint8[0] = 1;\n            uint8.set(clause.id_buffer, 1);   // write pointer id to buffer\n            return clause.id_buffer;\n        }\n\n        else if (clause instanceof Disjunction) {\n            const list = clause;\n            \n            let buffer = new ArrayBuffer(3 + list.size*30) // estimated size\n            let dataview = new DataView(buffer);\n            let uint8 = new Uint8Array(buffer);\n\n            function handleRequiredBufferSize(size_in_bytes:number) {\n                if (size_in_bytes>=buffer.byteLength-1) {\n                    let new_size = (buffer.byteLength??0) + Math.ceil((size_in_bytes-buffer.byteLength)/8)*8;\n                    let old_uint8 = uint8;\n                    buffer    = new ArrayBuffer(new_size);\n                    uint8    = new Uint8Array(buffer);  // default                 \n                    uint8.set(old_uint8); // copy from old buffer\n                }\n            }\n\n\n            // indicate endpoint list\n            let i = 0;\n            uint8[i++] = 0;\n\n            // endpoint number\n            dataview.setInt16(1, list.size, true);\n            i += Int16Array.BYTES_PER_ELEMENT;\n\n            for (let endpoint of list) {\n                let key = (endpoint instanceof Endpoint) ? keys_map?.get(endpoint) : null;\n                let name_bin = (endpoint instanceof IdEndpoint) ? endpoint.binary : this.utf8_encoder.encode(endpoint.name); \n                let instance_bin = this.utf8_encoder.encode(endpoint.instance); \n                handleRequiredBufferSize(i+4+name_bin.length)\n                uint8[i++] = endpoint.type;\n                uint8[i++] = name_bin.byteLength; // write name length to buffer\n                uint8[i++] = 0//endpoint.subspaces.length; // write subspace number to buffer\n                uint8[i++] = instance_bin.byteLength;  // write instance length to buffer\n                uint8.set(name_bin, i);  // write name to buffer\n                i += name_bin.byteLength;\n\n                // for (let subspace of endpoint.subspaces ?? []) {\n                //     let subspace_bin = Compiler.utf8_encoder.encode(subspace); \n                //     handleRequiredBufferSize(i+1+subspace_bin.byteLength);\n                //     uint8[i++] = subspace_bin.length;  // write subspace length to buffer\n                //     uint8.set(subspace_bin, i);  // write subspace_bin to buffer\n                //     i += subspace_bin.byteLength;\n                // }\n\n                handleRequiredBufferSize(i+instance_bin.length+1+(key?encrypted_key_size+1:0));\n                uint8.set(instance_bin, i);  // write channel to buffer\n                i += instance_bin.byteLength;\n\n                if (extended_keys) {\n                    // has key?\n                    uint8[i++] = key?1:0;  \n                    if (key) { // add key\n                        uint8.set(new Uint8Array(key), i);\n                        i += key.byteLength;\n                    }\n                }\n            }\n\n            return buffer.slice(0, i); // slice target buffer\n        }\n\n        else throw new CompilerError(\"Invalid target list\")\n\n    }\n\n    /** compiler builder functions */\n\n    static builder = {\n\n        // resize buffer by given amount of bytes, or create new\n        resizeBuffer: (add_bytes:number=Compiler._buffer_block_size, SCOPE:compiler_scope|extract_var_scope) => {\n            let new_size = (SCOPE.buffer?.byteLength??0)+add_bytes;\n            //logger.info(\"extending buffer size to \" + new_size + \" bytes\");\n            let old_uint8 = SCOPE.uint8;\n            SCOPE.buffer    = new ArrayBuffer(new_size);\n            SCOPE.uint8     = new Uint8Array(SCOPE.buffer);  // default \n            SCOPE.data_view = new DataView(SCOPE.buffer);\n            \n            if (old_uint8) SCOPE.uint8.set(old_uint8); // copy from old buffer\n        },\n\n        // auto resize buffer it too smol\n        handleRequiredBufferSize: (size_in_bytes:number, SCOPE:compiler_scope|extract_var_scope) => {\n            if (size_in_bytes>=SCOPE.buffer.byteLength-1) \n                Compiler.builder.resizeBuffer(Math.max(Compiler._buffer_block_size, Math.ceil((size_in_bytes-SCOPE.buffer.byteLength)/8)*8), SCOPE);\n        },\n\n\n\n        // insert during compile time\n        compilerInsert: async (SCOPE:compiler_scope, value:URL|Blob|DatexResponse<unknown>) => {\n\n            let compiled_script:ArrayBuffer;\n            let cache_var: string;\n            // cache for internal variables of existing inserted values\n            const insert_header = SCOPE.options.insert_header!;\n            const cache = insert_header.cache;\n\n            try {\n\n                // raw datex url\n                if (value instanceof DatexResponse && value.datex instanceof URL) value = value.datex;\n\n                // URL already in insert cache\n                if (value instanceof URL && cache.has(value.toString())) {\n                    cache_var = cache.get(value.toString())!;\n                    // logger.debug(\"insert cached: ? ?\", value, cache_var);\n                    await Compiler.builder.insertValVarRef(SCOPE, cache_var, ACTION_TYPE.GET);\n                }\n\n                // create new  \n                else {\n                    cache_var = `__insert__${cache.size}` // placeholder var __insert__\n                    // logger.debug(\"insert: ?\", cache_var);\n\n                    const var_index = insert_header.var_index++;\n                    cache.set(value.toString(), cache_var);\n                    if (!insert_header.vars) throw new CompilerError(\"Insert resolution error\");\n                    insert_header.vars[cache_var] = [\"var\", var_index]; // points to the SCOPE.inner_scope.vars of the most outer parent scope\n    \n                    // get script/resource from url\n                    if (value instanceof URL)  {\n                        // logger.debug(\"url: ?\", value);\n                        compiled_script = await Compiler.builder.urlToDXB(value, insert_header);\n                    }\n                    // text/datex or application/json(5)\n                    else if (value instanceof Blob) {\n                        compiled_script = await Compiler.builder.blobToDXB(value, insert_header);\n                    }\n   \n                    // raw datex script text\n                    else if (value instanceof DatexResponse) {\n                        if (typeof value.datex == \"string\") compiled_script = await Compiler.builder.scriptToDXB(value.datex, value.data, undefined, insert_header);\n                        else throw new CompilerError(\"Invalid raw DATEX\");\n                    }\n        \n                    // TODO endpoint default?\n    \n                    else {\n                        throw new CompilerError(\"Cannot insert value\");\n                    }\n\n                    // insert compiled script into insert buffer\n                    if (compiled_script) {\n\n                        // special insert buffer that goes to the top of the dxb\n                        let insert_buffer = insert_header.buffer;\n                        let insert_uint8 = new Uint8Array(insert_buffer);\n                        let insert_dataview = new DataView(insert_buffer);\n\n                        const handleRequiredBufferSize = (size_in_bytes:number) => {\n                            const add_bytes = Math.max(Compiler._buffer_block_size, Math.ceil((size_in_bytes-insert_buffer.byteLength)/8)*8);\n                            if (size_in_bytes>=insert_buffer.byteLength-1) {\n                                const new_size = (insert_buffer?.byteLength??0)+add_bytes;\n                                const old_uint8 = insert_uint8;\n                                insert_header.buffer = insert_buffer = new ArrayBuffer(new_size);\n                                insert_uint8     = new Uint8Array(insert_buffer);  // default \n                                insert_dataview = new DataView(insert_buffer);\n                                \n                                if (old_uint8) insert_uint8.set(old_uint8); // copy from old buffer\n                            }        \n                        }\n\n                        // create new entry in insert buffer\n                        handleRequiredBufferSize(insert_header.index+20+compiled_script.byteLength);\n\n                        // #x =\n      \n                        insert_uint8[insert_header.index++] = BinaryCode.SET_INTERNAL_VAR;\n                        insert_uint8[insert_header.index++] = 0;\n                        insert_dataview.setUint16(insert_header!.index, var_index, true);\n                        insert_header.index += Uint16Array.BYTES_PER_ELEMENT;\n\n                        // add do\n                        insert_uint8[insert_header.index++] = BinaryCode.DO;\n\n                        insert_uint8.set(new Uint8Array(compiled_script), insert_header.index)\n                        insert_header.index += compiled_script.byteLength;\n                        insert_uint8[insert_header.index++] = BinaryCode.CLOSE_AND_STORE;\n                    }\n\n\n                    // resolve from cache_var name\n                    const [_type, index, _parent_var] = await Compiler.builder.resolveValVarRef(SCOPE, cache_var);\n                    // variable not found\n                    if (index == -1) throw new CompilerError(\"Error during insert resolution\", SCOPE.stack);\n\n                    // insert internal var containing insert value\n                    Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR)\n\n                }\n                \n            } catch (e) {\n                    if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                    throw e;\n            }\n        },\n\n        // __ToDXB: used for compile time inserts from different resources\n\n        /**\n         * Resolve URL and compile content to dxb (if datex script or json), with references to parent scope\n         * @param url URL to datex script or json\n         * @param parent_scope\n         * @returns compiled dxb array\n         */\n        urlToDXB: async (url:URL, insert_header:compiler_options[\"insert_header\"]) => {\n            const [data,type] = await Runtime.getURLContent(url, true);\n\n            // DATEX Script file\n            if (type?.startsWith(\"text/datex\") || url.toString().endsWith(\".dx\")) return Compiler.builder.scriptToDXB(<string>data, [], url, insert_header);\n            // JSON file\n            else if (type?.startsWith(\"application/json\") || url.toString().endsWith(\".json\")) return Compiler.builder.scriptToDXB(<string>data, [], url, insert_header);\n            // DATEX Binary file\n            else if (type == \"application/datex\" || url.toString().endsWith(\".dxb\")) {\n                // remove header\n                const res = Runtime.parseHeaderSynchronousPart(<ArrayBuffer>data);\n                if (!(res instanceof Array)) throw new CompilerError(\"Invalid DATEX Binary resource\");\n                return res[1].buffer;\n            }\n\n            else throw new CompilerError(\"Cannot compile resource type to dxb: '\" + type + \"'\");\n        },\n\n        /**\n         * Compiles blob content to dxb (if datex or json), with references to parent scope\n         * @param blob Blob containing JSON or DATEX Script data\n         * @param parent_scope \n         * @returns compiled dxb array\n         */\n        blobToDXB: async (blob:Blob, insert_header:compiler_options[\"insert_header\"]) => {\n            // text/datex or application/json(5)\n            if (blob.type == \"text/datex\" || blob.type.startsWith(\"application/json\")) {\n                const script = await blob.text();\n                return Compiler.builder.scriptToDXB(script, [], undefined, insert_header);\n            }\n            else throw new CompilerError(\"Cannot compile mime type to dxb: <\" + blob.type + \">\");\n        },\n\n        /**\n         * Compiles datex script to dxb, with references to parent scope\n         * @param script DATEX Script text\n         * @param data compiler insert data\n         * @param context_location\n         * @param parent_scope \n         * @returns compiled dxb array\n         */\n        scriptToDXB: (script:string, data:unknown[]|undefined, context_location:URL|undefined, insert_header:compiler_options[\"insert_header\"]) => {\n            return <Promise<ArrayBuffer>> this.compile(script, data, {context_location, insert_header, parent_scope:insert_header!.root_scope, only_leak_inserts:true}, false, true);\n        },\n\n        getAssignAction: (assign_string:string): [ACTION_TYPE, BinaryCode|undefined] => {\n            let action_type = ACTION_TYPE.GET; \n            let action_specifier:BinaryCode|undefined;\n\n            // is =, +=, -=\n            if (assign_string) {\n                assign_string = assign_string.replace(/ /g, '');\n\n                if (assign_string == \"=\") action_type = ACTION_TYPE.SET;\n                else if (assign_string == \"$=\") action_type = ACTION_TYPE.SET_REFERENCE; // only for variables\n                else if (assign_string == \":=\") action_type = ACTION_TYPE.INIT;\n                \n                else if (assign_string == \"+=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.ADD\n                }\n                else if (assign_string == \"-=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.SUBTRACT\n                }\n                else if (assign_string == \"*=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.MULTIPLY\n                }\n                else if (assign_string == \"/=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.DIVIDE\n                }\n                else if (assign_string == \"&=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.AND\n                }\n                else if (assign_string == \"|=\") {\n                    action_type = ACTION_TYPE.OTHER;\n                    action_specifier = BinaryCode.OR\n                }\n\n            }\n\n            return [action_type, action_specifier]\n        },\n\n        // getArgsTemplate(args_string: string, SCOPE:compiler_scope):Datex.code_block_args_template {\n        //     const args_template = []\n        //     const arg_names = []\n        //     let in_multi_with = false;\n        //     for (let arg of args_string.split(\",\")) {\n        //         arg = arg.trim()\n        //         if (in_multi_with || arg.match(/^with *\\(/)) { // with multiple variables\n        //             in_multi_with = true;\n        //             // end of multi with?\n        //             if (arg.includes(')')) in_multi_with = false;\n        //             args_template.push([Datex.WITH, arg.replace('with', '').replace(/[() ]/g, '')])\n        //         }\n        //         else if (arg.startsWith('with ')) args_template.push([Datex.WITH, arg.replace('with ', '')]) // with\n        //         else if (arg.startsWith('<')) {\n        //             let m = arg.match(Regex.TYPE)\n        //             if (!m) throw new SyntaxError(\"Invalid token on line \"+SCOPE.current_line_nr);\n        //             args_template.push([Type.get(m[1], m[2], m[3]), arg.replace(m[0],'').trim()])\n        //         }\n        //         else args_template.push([null, arg]);\n\n        //         // last name double?\n        //         if (arg_names.includes(args_template[args_template.length-1][1])) throw new CompilerError(\"Duplicate code block argument variable names are not allowed\");\n        //     }\n        //     return args_template\n        // },\n\n        // update last_value_index / set first_value_index\n        valueIndex: (SCOPE:compiler_scope|extract_var_scope) => {\n\n            // if child value for path, it is not an actual value\n            if (SCOPE.inner_scope.path_info_index != -1 && SCOPE.inner_scope.path_info_index === SCOPE.b_index-1) return;\n\n            if ('value_count' in SCOPE.inner_scope) SCOPE.inner_scope.value_count!--; // update value count\n\n            SCOPE.inner_scope.last_value_index = SCOPE.b_index;\n            if (SCOPE.inner_scope.first_value_index === undefined) SCOPE.inner_scope.first_value_index = SCOPE.b_index;\n        },\n\n        // save all indices where commas (ELEMENT) where inserted (trailing commas can be removed on scope exit)\n        commaIndex: (index:number, SCOPE:compiler_scope) => {\n            if (!SCOPE.inner_scope.comma_indices) SCOPE.inner_scope.comma_indices = [];\n            SCOPE.inner_scope.comma_indices.push(index);\n        },\n\n        // add index where an assignment ends\n        assignmentEndIndex: (SCOPE:compiler_scope|extract_var_scope, index?:number) => {\n            SCOPE.assignment_end_indices.add(index ?? SCOPE.b_index);\n        },\n\n        // index that gets updated if the buffer is shifted within\n\n        getDynamicIndex: (index:number, SCOPE:compiler_scope): [number] => {\n            const dyn_index:[number] = [index];\n            SCOPE.dynamic_indices.push(dyn_index);\n            return dyn_index;\n        },\n\n\n        // shift dynamic indices & jmp indices correctly (all indices after a specific index)\n        shiftDynamicIndices: (SCOPE:compiler_scope, shift:number, after:number) => {\n            // update dynamic indices\n            for (const i of SCOPE.dynamic_indices) {\n                if (i[0] > after) i[0] += shift;\n            }\n\n            // update jmp_indices\n            try {\n                for (const [i] of SCOPE.jmp_indices) {\n                    if (i > after) {\n                        const jmp_to = SCOPE.data_view.getUint32(i, true);\n                        if (jmp_to > after) SCOPE.data_view.setUint32(i, jmp_to + shift, true); // shift current jmp_to index in buffer\n                    }\n                }\n            }\n            // bug investigation https://github.com/unyt-org/datex-core-js-legacy/issues/23\n            catch (e) {\n                console.error(\"jmp_indices error (https://github.com/unyt-org/datex-core-js-legacy/issues/23)\", e);\n            }\n\n            // update assignment_end_indices\n            const new_end_indices = new Set<number>();\n            for (const i of SCOPE.assignment_end_indices) {\n                 new_end_indices.add(i > after ? i+shift : i);\n            }\n            SCOPE.assignment_end_indices = new_end_indices;\n\n            // shift other internal indices\n            if (SCOPE.b_index > after) SCOPE.b_index += shift;\n            if (SCOPE.inner_scope.last_value_index > after) SCOPE.inner_scope.last_value_index += shift;\n            if (SCOPE.inner_scope.first_value_index > after) SCOPE.inner_scope.first_value_index += shift;\n        },\n\n        insertByteAtIndex: (byte:number, index:number|[number], SCOPE:compiler_scope) => {\n            // get value from dynamic index\n            if (index instanceof Array) index = index[0];\n\n            // is current b_index (no shift needed, normal insert)\n            if (index == SCOPE.b_index) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = byte;\n                return;\n            }\n\n            // shift for gap\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE); // buffer overflowing to right\n            SCOPE.uint8.copyWithin(index+1, index);\n\n            SCOPE.uint8[index++] = byte;\n\n            // update indices\n            Compiler.builder.shiftDynamicIndices(SCOPE, 1, index-2); // shift starting at correct index\n        },\n\n        // add sub_result=_1234=... at a specific index (for recursive objects)\n        createInternalVariableAtIndex: (index:number|[number], SCOPE:compiler_scope, val?:any):number => {\n\n            if (!SCOPE.internal_vars) {\n                // DEBUG message since CDN prod crashes here\n                console.error(\"Scope is missing internal_vars (https://github.com/unyt-org/datex-core-js-legacy/issues/23)\", new Error().stack);\n            }\n            // already has an internal variable reference?\n            if (SCOPE.internal_vars.has((val))) return SCOPE.internal_vars.get(val)!;\n            if (SCOPE.internal_primitive_vars?.has((val))) return SCOPE.internal_primitive_vars.get(val)!;\n\n            // get value from dynamic index\n            if (index instanceof Array) index = index[0];\n            \n            const var_number = SCOPE.internal_var_index[0]++;\n            const add_scope_global = !SCOPE.assignment_end_indices.has(index); // only add if not already an assignment before\n            const gap = Uint16Array.BYTES_PER_ELEMENT + 2 + (add_scope_global?1:0);\n\n            // shift for gap\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+gap, SCOPE); // buffer overflowing to right\n            SCOPE.uint8.copyWithin(index+gap, index);\n\n            // update indices\n            Compiler.builder.shiftDynamicIndices(SCOPE, gap, index);\n\n            // #sub_result = \n            if (add_scope_global) SCOPE.uint8[index++] = BinaryCode.SET_VAR_SUB_RESULT;\n    \n            // #1234 = \n            Compiler.builder.insertVariable(SCOPE, var_number, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR, index);\n\n      \n\n            // save for future requests\n            // not primitive\n            if (typeof val == \"object\" || typeof val == \"function\") SCOPE.internal_vars.set(val, var_number)\n            // primitive\n            else  SCOPE.internal_primitive_vars.set(val, var_number)\n\n            return var_number;\n        },\n\n\n        resolveInternalProxyName: (SCOPE:compiler_scope, name:string):number => {\n            // in current scope\n            if (SCOPE.inner_scope.object_slots?.has(name)) return SCOPE.inner_scope.object_slots!.get(name)!;\n\n            // check parent scope\n            else if (SCOPE.options.parent_scope) {\n                return Compiler.builder.resolveInternalProxyName(SCOPE.options.parent_scope, name); \n            }\n\n            throw new CompilerError(`Internal variable #${name} does not exist in this context`, SCOPE.stack)\n        },\n\n        /******* Some recursive insanity to trace the correct var/ref/val names from parent compiler_scopes */\n\n        insertValVarRef: async (SCOPE:compiler_scope, name:string, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode) => {\n            // get variable or get proxy for parent variable\n            const [type, index, parent_var] = await Compiler.builder.resolveValVarRef(SCOPE, <string>name);\n                        \n            // variable not found\n            if (index == -1) {\n                // readonly - #std variable? (#std.name)\n                if (action_type == ACTION_TYPE.GET && Runtime.STD_STATIC_SCOPE && name in Runtime.STD_STATIC_SCOPE) {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, BinaryCode.VAR_STD, undefined);\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    Compiler.builder.addText(name, SCOPE);\n                    return;\n                }\n                // readonly - #std.type?\n                if (action_type == ACTION_TYPE.GET && Type.has('std', name)) {\n                    Compiler.builder.addTypeByNamespaceAndName(SCOPE, 'std', name);\n                    return;\n                }\n                else throw new CompilerError(\"Variable '\"+name+\"' was not declared in scope\", SCOPE.stack);\n            }\n\n            // cannot set reference ($=) of ref variable\n            if (action_type == ACTION_TYPE.SET_REFERENCE && type === \"ref\") {\n                throw new CompilerError(\"Cannot override the reference of the reference variable '\"+name+\"'\")\n            }\n\n            // cannot set reference ($=) of val variable\n            if (action_type == ACTION_TYPE.SET_REFERENCE && type === \"val\") {\n                throw new CompilerError(\"Cannot override the reference of the value variable '\"+name+\"'\")\n            }\n\n            // val variables from parent scope are readonly\n            if (action_type != ACTION_TYPE.GET && parent_var && type === \"val\"){\n                throw new CompilerError(\"The value variables '\"+name+\"' borrowed from the parent scope is readonly\")\n            }\n\n            // const is readonly\n            if ((action_type == ACTION_TYPE.SET_REFERENCE || action_type == ACTION_TYPE.SET) && type === \"const\") {\n                throw new CompilerError(\"The const variable '\"+name+\"' is readonly\")\n            }\n\n            // insert at current position of scope\n            await Compiler.builder.insertVariable(SCOPE, index, action_type, action_specifier, BinaryCode.INTERNAL_VAR);\n        },\n\n        // recursively generates right variable index for val var ref\n        // resolve pseudo variable var,ref,val, recursively update parents\n        resolveValVarRef: async (SCOPE:compiler_scope, name:string): Promise<[type:'val'|'var'|'ref'|'const'|null, index:number, parent_var:boolean]> => {\n\n            // is direct scope variable, can just insert\n            if (SCOPE.inner_scope.vars && name in SCOPE.inner_scope.vars) {\n                // return variable\n                return [SCOPE.inner_scope.vars[name][0], SCOPE.inner_scope.vars[name][1], false]\n            }\n            // might be a parent variable, recurse TODO: better placeholder than __insert__, prevent accidental leaks\n            else if (SCOPE.options.parent_scope && (!SCOPE.options.only_leak_inserts || name.startsWith(\"__insert__\"))) {\n                // variable index in parent scope\n                const [type, index] = await Compiler.builder.resolveValVarRef(SCOPE.options.parent_scope, name); \n                // variable not found\n                if (index == -1) return [null, -1, true];\n                // map parent variable to scope variable (keep if pseudo_parent) and return\n                else return [type, SCOPE.options.pseudo_parent ? index : Compiler.builder.getExtractedVariable(SCOPE, BinaryCode.INTERNAL_VAR, index), true]\n            }\n            // no parent scope, stop\n            else return [null, -1, false];\n            \n        },\n\n        getExtractedVariable: (SCOPE:compiler_scope, base_type:BinaryCode, v_name:string|number)=> {\n            let index:number\n            let insert_new = false;\n\n\n            if (!SCOPE.extract_var_indices) throw new CompilerError(\"Cannot extract variable in non child scope block\")\n            if (!SCOPE.extract_var_scope) throw new CompilerError(\"Cannot extract variable in non child scope block\")\n\n            if (!SCOPE.extract_var_indices.has(base_type)) throw new CompilerError(\"Invalid variable base type\");\n\n            if (SCOPE.extract_var_indices.get(base_type)!.has(v_name)) {\n                index = SCOPE.extract_var_indices.get(base_type)!.get(v_name)!;\n            }\n            else {\n                index = SCOPE.extract_var_index!++;\n                SCOPE.extract_var_indices.get(base_type)!.set(v_name, index);\n                insert_new = true;\n            }\n\n            // insert at top of scope dxb if new\n            if (insert_new) {\n                // pointer\n                if (base_type == BinaryCode.POINTER) Compiler.builder.addPointerByID(SCOPE.extract_var_scope, <string>v_name, ACTION_TYPE.GET, undefined, undefined, NOT_EXISTING); // sync\n                // variable/label\n                else Compiler.builder.insertVariable(SCOPE.extract_var_scope, v_name, ACTION_TYPE.GET, undefined, base_type)\n            }\n\n            return index;\n        },\n\n        // insert #0, #1, instead of variable/pointer/..., inserts variable into the extract_var_scope at the top of the dxb, returns index #0, #1, ...\n        insertExtractedVariable: (SCOPE:compiler_scope, base_type:BinaryCode, v_name:string|number)=> {\n            // create or get proxy internal var for the requested variable/pointer\n            const index = Compiler.builder.getExtractedVariable(SCOPE, base_type, v_name);\n            // insert at current position of scope\n            Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n            return index;\n        },\n\n        // v: variable name or empty, action type: set/get/delete/other, action_specifier: for other actions (+=,-=,...), base_type: e.g. BinaryCode.VAR\n        // returns promise if action_type is ACTION_TYPE.INIT (TODO probably could convert to sync)\n        insertVariable: (SCOPE:compiler_scope|extract_var_scope, v?:string|number, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?: BinaryCode, base_type:BinaryCode=BinaryCode.INTERNAL_VAR,  index:number=SCOPE.b_index, init_brackets = false, prefix_action?: BinaryCode):void|Promise<void> => {\n            \n            const is_b_index = index==SCOPE.b_index; // index is same as scope index\n\n            if (is_b_index) Compiler.builder.handleRequiredBufferSize(index, SCOPE);\n            SCOPE.uint8[index++] = base_type + action_type;\n\n            if (action_specifier != undefined) {\n                if (is_b_index) Compiler.builder.handleRequiredBufferSize(index, SCOPE);\n                SCOPE.uint8[index++] = action_specifier;\n            }\n          \n            // has a variable name/id (is empty for predefined internal variables with custom binary codes)\n            if (v != undefined) {\n                let v_name_bin:Uint8Array\n                const is_number = typeof v == \"number\";\n                if (!is_number) {\n                    v_name_bin = this.utf8_encoder.encode(v);  // convert var name to binary\n                    if (is_b_index) Compiler.builder.handleRequiredBufferSize(index+v_name_bin.byteLength+1, SCOPE);\n                }\n                else {\n                    if (is_b_index) Compiler.builder.handleRequiredBufferSize(index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n                }\n\n                SCOPE.uint8[index++] = is_number ? 0 : v_name_bin!.byteLength; // set length or 0 if hex variable\n\n                if (is_number) { // write hex var name to buffer\n                    if (v > 65535) { // does not fit in Uint16\n                        throw new CompilerError(\"Invalid variable id: \" + v + \" (too big)\", SCOPE.stack);\n                    }\n                    SCOPE.data_view.setUint16(index, v, true);\n                    index += Uint16Array.BYTES_PER_ELEMENT;\n                }\n                else {\n                    SCOPE.uint8.set(v_name_bin!, index);   // write var name to buffer\n                    index+=v_name_bin!.byteLength;\n                }\n            }\n\n            // is assignment end\n            if (action_type != ACTION_TYPE.GET) Compiler.builder.assignmentEndIndex(SCOPE, index);\n\n            if (is_b_index) SCOPE.b_index = index; // update scope index\n\n            if (action_type == ACTION_TYPE.INIT) return Compiler.builder.addInitBlock(<compiler_scope>SCOPE, init_brackets); // might be a promise\n            else if (prefix_action != undefined) SCOPE.uint8[SCOPE.b_index++] = prefix_action;\n        },\n\n\n        handleStream: (stream:Stream|ReadableStream, SCOPE:compiler_scope) => {\n            SCOPE.streaming = stream.getReader();\n        },\n\n        // add jmp or jfa / jtr - auto change jmp index if buffer is shifted later on\n        addJmp: (SCOPE:compiler_scope, type:BinaryCode.JMP|BinaryCode.JTR|BinaryCode.JFA, to_index?: number) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = type;\n\n            // already has a jmp index\n            if (to_index != undefined) SCOPE.data_view.setUint32(SCOPE.b_index, to_index, true);  // set jmp index\n            SCOPE.jmp_indices.push(Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE)) // store current position of jmp index\n            \n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n        },\n\n        // add data types\n        addText: (s:string, SCOPE:compiler_scope|extract_var_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            let str_bin = Compiler.utf8_encoder.encode(s);  // convert string to binary\n            let short_string = str_bin.byteLength < 256;\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(short_string?1:Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = short_string ? BinaryCode.SHORT_TEXT : BinaryCode.TEXT;\n            // write string length to buffer\n            if (short_string) {\n                SCOPE.uint8[SCOPE.b_index++] = str_bin.byteLength // 1 byte length\n            }\n            else {\n                SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n                SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n            }\n          \n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addDisjunction: (elements:Set<any>, SCOPE:compiler_scope) => {\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DISJUNCTION;\n            Compiler.builder.addConnective(elements, SCOPE);\n        },\n\n        addConjunction: (elements:Set<any>, SCOPE:compiler_scope) => {\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CONJUNCTION;\n            Compiler.builder.addConnective(elements, SCOPE);\n        },\n\n        addConnective: (elements:Set<any>, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n\n            SCOPE.data_view.setUint32(SCOPE.b_index, elements.size, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;   // 4 byte length\n            \n            for (let el of elements) {\n                Compiler.builder.insert(el, SCOPE);\n            }\n        },\n\n        addUrl: (url_string:string, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            let str_bin = Compiler.utf8_encoder.encode(url_string);  // convert string to binary\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.URL;\n            // write url length to buffer\n            SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n\n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addRelativePath: (path:string, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            const str_bin = Compiler.utf8_encoder.encode(path);  // convert string to binary\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+str_bin.byteLength+(Uint32Array.BYTES_PER_ELEMENT)+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RESOLVE_RELATIVE_PATH;\n            // write url length to buffer\n            SCOPE.data_view.setUint32(SCOPE.b_index, str_bin.byteLength, true); // 4 byte length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; \n\n            SCOPE.uint8.set(str_bin, SCOPE.b_index);   // write string to buffer\n            SCOPE.b_index+=str_bin.byteLength;\n        },\n\n        addBoolean: (b:boolean, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = b ? BinaryCode.TRUE : BinaryCode.FALSE;\n        },\n        addInt: (i:bigint|number, SCOPE:compiler_scope) => {\n            if (i<=Compiler.MAX_INT_8 && i>=Compiler.MIN_INT_8)   return Compiler.builder.addInt8(i, SCOPE); // INT8\n            if (i<=Compiler.MAX_INT_16 && i>=Compiler.MIN_INT_16) return Compiler.builder.addInt16(i, SCOPE); // INT16\n            if (i<=Compiler.MAX_INT_32 && i>=Compiler.MIN_INT_32) return Compiler.builder.addInt32(i, SCOPE); // INT32\n            else if (i<=Compiler.MAX_INT_64 && i>=Compiler.MIN_INT_64) return Compiler.builder.addInt64(i, SCOPE); // INT64\n            else return Compiler.builder.addBigInt(i, SCOPE); // BIG_INT\n        },\n        addInt8: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int8Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_8;\n            SCOPE.data_view.setInt8(SCOPE.b_index, Number(i));\n            SCOPE.b_index+=Int8Array.BYTES_PER_ELEMENT;\n        },\n        addInt16: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int16Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_16;\n            SCOPE.data_view.setInt16(SCOPE.b_index, Number(i), true);\n            SCOPE.b_index+=Int16Array.BYTES_PER_ELEMENT;\n        },\n        addInt32: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int32Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_32;\n            SCOPE.data_view.setInt32(SCOPE.b_index, Number(i), true);\n            SCOPE.b_index+=Int32Array.BYTES_PER_ELEMENT;\n        },\n        addInt64: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigInt64Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INT_64;\n            SCOPE.data_view.setBigInt64(SCOPE.b_index, BigInt(i), true);\n            SCOPE.b_index+=BigInt64Array.BYTES_PER_ELEMENT;\n        },\n        addBigInt: (i:bigint|number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigInt64Array.BYTES_PER_ELEMENT+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.BIG_INT;\n            \n            SCOPE.uint8[SCOPE.b_index++] = i < 0 ? 0 : 1; // 0 for negative, 1 for positive (and 0)\n\n            const bigint_buffer = Quantity.bigIntToBuffer(BigInt(i < 0 ? -i : i));\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+bigint_buffer.byteLength, SCOPE);\n\n            // invalid bigint size\n            if (bigint_buffer.byteLength > Compiler.MAX_UINT_32) throw new CompilerError(\"Integer too big\");\n\n            // buffer size\n            SCOPE.data_view.setUint32(SCOPE.b_index, bigint_buffer.byteLength, true)\n            SCOPE.b_index+=Uint32Array.BYTES_PER_ELEMENT;\n\n            // bigint\n            SCOPE.uint8.set(bigint_buffer, SCOPE.b_index);\n            SCOPE.b_index += bigint_buffer.byteLength;\n        },\n        addQuantity: (u:Quantity, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Float64Array.BYTES_PER_ELEMENT+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.QUANTITY;\n\n            const sign = u.sign;\n            SCOPE.uint8[SCOPE.b_index++] = sign == -1 ? 0 : 1; // 0 for negative, 1 for positive (and 0)\n\n            const num_buffer = Quantity.bigIntToBuffer(u.numerator);\n            const den_buffer = Quantity.bigIntToBuffer(u.denominator);\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+(Uint16Array.BYTES_PER_ELEMENT*2)+den_buffer.byteLength+num_buffer.byteLength, SCOPE);\n\n            // buffer sizes\n            SCOPE.data_view.setUint16(SCOPE.b_index, num_buffer.byteLength, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n            SCOPE.data_view.setUint16(SCOPE.b_index, den_buffer.byteLength, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n\n            // numerator\n            SCOPE.uint8.set(num_buffer, SCOPE.b_index);\n            SCOPE.b_index += num_buffer.byteLength;\n\n            // denominator\n            SCOPE.uint8.set(den_buffer, SCOPE.b_index);\n            SCOPE.b_index += den_buffer.byteLength;\n\n            // unit\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+u.unit_binary.byteLength, SCOPE);\n            SCOPE.uint8.set(new Uint8Array(u.unit_binary), SCOPE.b_index)\n            SCOPE.b_index+=u.unit_binary.byteLength;\n        },\n\n        // TODO\n        addTime: (t:Time, SCOPE:compiler_scope) => {\n            Compiler.builder.valueIndex(SCOPE);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+BigUint64Array.BYTES_PER_ELEMENT+1, SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TIME;\n\n            SCOPE.data_view.setBigInt64(SCOPE.b_index, BigInt(isNaN(t.getTime()) ? 0 : Number(t.getTime())), true)\n            SCOPE.b_index+=BigUint64Array.BYTES_PER_ELEMENT;\n        },\n\n        addFloat64: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Float64Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_64;\n            SCOPE.data_view.setFloat64(SCOPE.b_index, f, true);\n            SCOPE.b_index+=Float64Array.BYTES_PER_ELEMENT;\n        },\n        addFloatAsInt32: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int32Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_AS_INT_32;\n            SCOPE.data_view.setInt32(SCOPE.b_index, f, true);\n            SCOPE.b_index+=Int32Array.BYTES_PER_ELEMENT;\n        },\n        addFloatAsInt8: (f:number, SCOPE:compiler_scope) => {    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Int8Array.BYTES_PER_ELEMENT+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FLOAT_AS_INT_8;\n            SCOPE.data_view.setInt8(SCOPE.b_index, f);\n            SCOPE.b_index+=Int8Array.BYTES_PER_ELEMENT;\n        },\n\n        // get +/- as immediate operators (no space inbetween) before next token\n        tryPlusOrMinus: (SCOPE:compiler_scope) => {\n            // + but not ++\n            if (SCOPE.datex[0] == \"+\" && SCOPE.datex[1] != \"+\") {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD; \n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n            // - but not -> or --\n            else if (SCOPE.datex[0] == \"-\" && SCOPE.datex[1] != \"-\" && SCOPE.datex[1] != \">\") {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBTRACT; \n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n        },\n\n        addFloat: (f:number, SCOPE:compiler_scope) => {\n            // can be saved as Int32 (is an integer within the Int32 bounds and not -0)\n            const isInt = Number.isInteger(f) && !Object.is(f, -0);\n            if (isInt && f<=Compiler.MAX_INT_8 && f>= Compiler.MIN_INT_8) return Compiler.builder.addFloatAsInt8(f, SCOPE); // float as int8\n            else if (isInt && f<=Compiler.MAX_INT_32 && f>= Compiler.MIN_INT_32) return Compiler.builder.addFloatAsInt32(f, SCOPE); // float as int32\n            else return Compiler.builder.addFloat64(f, SCOPE); // FLOAT_64\n        },\n\n        getFullObject(obj:Record<string, unknown>) {\n            const fullObj:Record<string, unknown> = {};\n            for (const prop in obj) {\n                fullObj[prop] = obj[prop];\n            }\n            return fullObj;\n        },\n\n        addScopeBlock: async (type:BinaryCode, brackets:boolean, extract_pointers: boolean, SCOPE:compiler_scope) => {\n\n            const return_data:{datex:string} = {datex: SCOPE.datex}; \n\n            const compiled = <ArrayBuffer> await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, extract_pointers, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n            SCOPE.datex = return_data.datex; // update position in current datex script\n\n            // insert scope block\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+compiled.byteLength, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = type;\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n        insertScopeBlock: (type:BinaryCode, value:Scope, SCOPE:compiler_scope)=>{\n            // insert scope block\n              \n            SCOPE.uint8[SCOPE.b_index++] = type;\n\n            // injected vars\n            // collapse injected var pointers only if collapse_bound_pointers is true\n            for (const v of value.internal_vars) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.insert(v, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+(value.compiled?.byteLength??0), SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            SCOPE.data_view.setUint32(SCOPE.b_index, value.compiled?.byteLength??0, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT\n            if (value.compiled) {\n                SCOPE.uint8.set(new Uint8Array(value.compiled), SCOPE.b_index)\n                SCOPE.b_index += value.compiled.byteLength;\n            }\n        },\n\n        // addCodeBlock: (compiled:ArrayBuffer, args_template:Datex.code_block_args_template=[], SCOPE:compiler_scope) => {\n\n        \n        //     if (!compiled) {\n        //         throw new CompilerError(\"Code block has no content\");\n        //     }\n            \n        //     DatexCompiler.builder.valueIndex(SCOPE);\n\n        //     DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            \n        //     // injected variables (args)\n        //     SCOPE.data_view.setUint16(SCOPE.b_index, args_template.length, true);   // # of params\n        //     SCOPE.b_index += Uint16Array.BYTES_PER_ELEMENT;\n\n        //     for (let param of args_template) {\n        //         DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //         if (param[0] instanceof Type) {\n        //             DatexCompiler.builder.addTypeByNamespaceAndName(SCOPE, param[0].namespace, param[0].name);\n        //         }\n        //         else if (param[0] == Datex.WITH) {SCOPE.uint8[SCOPE.b_index++] = 1} // use variable from outer scope ('with')\n        //         else {SCOPE.uint8[SCOPE.b_index++] = 0} // no type specified\n\n        //         let v_name_bin = DatexCompiler.utf8_encoder.encode(param[1]);  // convert var name to binary\n        //         DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+v_name_bin.byteLength+2, SCOPE);\n        //         SCOPE.uint8[SCOPE.b_index++] = v_name_bin.byteLength;\n        //         SCOPE.uint8.set(v_name_bin, SCOPE.b_index);   // write var name to buffer\n        //         SCOPE.b_index+=v_name_bin.byteLength;\n        //     }\n\n        //     // Buffer\n        //     DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n\n        //     //console.log(\"codec \" + codec, \"buffer\",buffer);\n        //     SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);   // buffer length\n        //     SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n        //     SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index);\n        //     SCOPE.b_index += compiled.byteLength;\n        // },\n\n\n        // insertGeneratedDatex: async (generator_function:()=>Promise<ArrayBuffer>, SCOPE:compiler_scope) => {\n        //     // TODO improve\n        //     DatexCompiler.builder.addCodeBlock(await generator_function(), [], SCOPE);\n        // },\n\n\n        addKey: (k:string|number|bigint, SCOPE:compiler_scope) => {\n            \n            // string key\n            if (typeof k == \"string\") {\n                const key_bin = Compiler.utf8_encoder.encode(k);  // convert key to binary\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+key_bin.byteLength+2, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_KEY\n                SCOPE.uint8[SCOPE.b_index++] = key_bin.byteLength;  // write key length to buffer\n                SCOPE.uint8.set(key_bin, SCOPE.b_index);   // write key to buffer\n                SCOPE.b_index+=key_bin.byteLength;\n            }\n            // int key\n            else {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_INT_KEY\n                SCOPE.data_view.setUint32(SCOPE.b_index, Number(k), true)\n                SCOPE.b_index+=Uint32Array.BYTES_PER_ELEMENT;\n            }\n\n        },\n\n        addObjectSlot:  (k:string, SCOPE:compiler_scope) => {\n            if (!SCOPE.inner_scope.object_slot_index) SCOPE.inner_scope.object_slot_index = 0xfa00;\n            if (!SCOPE.inner_scope.object_slots) SCOPE.inner_scope.object_slots = new Map();\n            let slot:number;\n            if (k == \"write\") slot = SLOT_WRITE;\n            else if (k == \"read\")  slot = SLOT_READ;\n            else if (k == \"exec\")  slot = SLOT_EXEC;\n            else if (k == \"get\")  slot = SLOT_GET;\n            else if (k == \"set\")  slot = SLOT_SET;\n            else slot = SCOPE.inner_scope.object_slot_index++;\n\n            SCOPE.inner_scope.object_slots.set(k, slot);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint16Array.BYTES_PER_ELEMENT+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INTERNAL_OBJECT_SLOT;\n            SCOPE.data_view.setUint16(SCOPE.b_index, slot, true)\n            SCOPE.b_index+=Uint16Array.BYTES_PER_ELEMENT;\n        },\n\n\n        addNull: (SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NULL;\n        },\n        addVoid: (SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n        },\n\n\n        addFilterTargetFromParts: (type:BinaryCode, name:string|Uint8Array, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+4, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            const type_index = SCOPE.b_index;\n            SCOPE.uint8[SCOPE.b_index++] = instance == \"*\" ? type+1 : type;\n            const name_bin = (name instanceof Uint8Array) ? name : Compiler.utf8_encoder.encode(name); \n            const instance_bin = Compiler.utf8_encoder.encode(instance); \n            SCOPE.uint8[SCOPE.b_index++] = name_bin.byteLength; // write name length to buffer\n            SCOPE.uint8[SCOPE.b_index++] = 0;  // write subspace number to buffer\n            // instance length == 0 => wildcard, instance length == 255 => any instance\n            SCOPE.uint8[SCOPE.b_index++] = instance ? (instance == \"*\" ? 0 : instance_bin.byteLength) : 255;  // write instance length to buffer\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+name_bin.byteLength, SCOPE);\n            SCOPE.uint8.set(name_bin, SCOPE.b_index);  // write name to buffer\n            SCOPE.b_index+=name_bin.byteLength;\n\n            // for (const subspace of subspaces ?? []) {\n            //     // wildcard\n            //     if (subspace == \"*\") {\n            //         SCOPE.uint8[SCOPE.b_index++] = 0;\n            //         SCOPE.uint8[type_index] = type + 1;\n            //     }\n            //     else {\n            //         const subspace_bin = Compiler.utf8_encoder.encode(subspace); \n            //         Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+subspace_bin.byteLength, SCOPE);\n            //         SCOPE.uint8[SCOPE.b_index++] = subspace_bin.byteLength;  // write subspace length to buffer\n            //         SCOPE.uint8.set(subspace_bin, SCOPE.b_index);  // write subspace_bin to buffer\n            //         SCOPE.b_index+=subspace_bin.byteLength;\n            //     }\n            // }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+instance_bin.byteLength, SCOPE);\n\n            // add instance if not wildcard\n            if (instance != \"*\") {\n                SCOPE.uint8.set(instance_bin, SCOPE.b_index);  // write instance to buffer\n                SCOPE.b_index+=instance_bin.byteLength;\n            }\n\n\n            // // append appspace?\n            // if (appspace) Compiler.builder.addTarget(appspace, SCOPE);\n        },\n        \n        addPersonByNameAndChannel: (name:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.PERSON_ALIAS, name, instance, SCOPE);\n        },\n      \n     \n        addInstitutionByNameAndChannel: (name:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.INSTITUTION_ALIAS, name, instance, SCOPE);\n        },\n       \n        addIdEndpointByIdAndChannel: (id:Uint8Array|string, instance:string, SCOPE:compiler_scope) => {\n            Compiler.builder.addFilterTargetFromParts(BinaryCode.ENDPOINT, id, instance, SCOPE);\n        },\n\n        addBuffer: (buffer:Uint8Array, SCOPE:compiler_scope) => {\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+buffer.byteLength, SCOPE);\n\n            //console.log(\"codec \" + codec, \"buffer\",buffer);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.BUFFER; \n            SCOPE.data_view.setUint32(SCOPE.b_index, buffer.byteLength, true);   // buffer length\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n            SCOPE.uint8.set(buffer, SCOPE.b_index);\n            SCOPE.b_index += buffer.byteLength;\n        },\n\n        addTarget: (el:Target, SCOPE:compiler_scope) => {\n            if (el instanceof Institution) Compiler.builder.addInstitutionByNameAndChannel(el.binary, el.instance, SCOPE);\n            else if (el instanceof Person) Compiler.builder.addPersonByNameAndChannel(el.binary, el.instance, SCOPE);\n            else if (el instanceof IdEndpoint) Compiler.builder.addIdEndpointByIdAndChannel(el.binary, el.instance, SCOPE);\n        },\n\n\n        addTypeByNamespaceAndName: (SCOPE:compiler_scope, namespace:string, name:string, variation?:string, parameters?:any[]|true, jsTypeDefModule?:string|URL) => {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n\n            Compiler.builder.valueIndex(SCOPE);\n\n            // remember if js type def modules should be added to this scope\n            if (SCOPE.addJSTypeDefs == undefined) {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                SCOPE.addJSTypeDefs = receiver != Runtime.endpoint && receiver != LOCAL_ENDPOINT;\n            }\n\n            const addTypeDefs = SCOPE.addJSTypeDefs && jsTypeDefModule;\n\n            if (addTypeDefs) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+4, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n                if (jsTypeDefModule instanceof URL) Compiler.builder.addUrl(jsTypeDefModule.toString(), SCOPE);\n                else {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_URL;\n                    Compiler.builder.addText(jsTypeDefModule.toString(), SCOPE);\n                }\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n            }\n\n            const is_extended_type = !!(variation || parameters);\n\n            // short binary codes for std types\n            if ((namespace == \"std\" || !namespace) && !is_extended_type) {\n                switch (name) {\n                    case \"text\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TEXT;return;\n                    case \"integer\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_INT;return;\n                    case \"decimal\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FLOAT;return;\n                    case \"boolean\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_BOOLEAN;return;\n                    case \"null\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_NULL;return;\n                    case \"void\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_VOID;return;\n                    case \"buffer\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_BUFFER;return;\n                    case \"datex\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_CODE_BLOCK;return;\n                    case \"unit\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_UNIT;return;\n                    case \"time\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TIME;return;\n                    case \"url\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_URL;return;\n                    case \"Array\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ARRAY;return;\n                    case \"Object\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_OBJECT;return;\n                    case \"Set\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_SET;return;\n                    case \"Map\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_MAP;return;\n                    case \"Tuple\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TUPLE;return;\n                    case \"Function\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FUNCTION;return;\n                    case \"Stream\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_STREAM;return;\n                    case \"Any\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ANY;return;\n                    case \"Task\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_TASK;return;\n                    case \"Assertion\": SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ASSERTION;return;\n                }\n            }\n\n            const name_bin = Compiler.utf8_encoder.encode(name);  // convert type name to binary\n            const ns_bin = Compiler.utf8_encoder.encode(namespace);  // convert type namespace to binary\n            const variation_bin = variation ? Compiler.utf8_encoder.encode(variation) : undefined;  // convert type namespace to binary\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+name_bin.byteLength+ns_bin.byteLength+4+(variation_bin ? variation_bin.byteLength : 0)+(is_extended_type?2:0), SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = is_extended_type ? BinaryCode.EXTENDED_TYPE : BinaryCode.TYPE;  \n            SCOPE.uint8[SCOPE.b_index++] = ns_bin.byteLength;\n            SCOPE.uint8[SCOPE.b_index++] = name_bin.byteLength;\n\n            if (is_extended_type) {\n                SCOPE.uint8[SCOPE.b_index++] = variation_bin ? variation_bin.byteLength : 0;\n                SCOPE.uint8[SCOPE.b_index++] = parameters ? 1 : 0;\n            }\n\n            SCOPE.uint8.set(ns_bin, SCOPE.b_index);  // write type namespace to buffer\n            SCOPE.b_index+=ns_bin.byteLength;\n            SCOPE.uint8.set(name_bin, SCOPE.b_index);  // write type name to buffer\n            SCOPE.b_index+=name_bin.byteLength;\n            if (variation) {\n                SCOPE.uint8.set(variation_bin!, SCOPE.b_index);  // write type variation to buffer\n                SCOPE.b_index+=variation_bin!.byteLength;\n            }\n            // insert parameters directly\n            if (parameters instanceof Array) {\n                Compiler.builder.addTuple(new Tuple(parameters), SCOPE);\n            }\n\n            if (addTypeDefs) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n        },\n\n        \n        addPointerBodyByID: (id:string|Uint8Array, SCOPE:compiler_scope|extract_var_scope) => {\n            const id_bin = id instanceof Uint8Array ? id : hex2buffer(id, Pointer.MAX_POINTER_ID_SIZE, true);  // convert pointer name to binary\n            if (id_bin.byteLength > Pointer.MAX_POINTER_ID_SIZE) {\n                throw new CompilerError(\"Pointer ID size must not exceed \" + Pointer.MAX_POINTER_ID_SIZE + \" bytes\", SCOPE.stack);\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Pointer.MAX_POINTER_ID_SIZE+1, SCOPE);\n            SCOPE.uint8.set(id_bin, SCOPE.b_index);   // write pointer name to buffer\n            SCOPE.b_index+=Pointer.MAX_POINTER_ID_SIZE;\n\n            // add flags\n            const knows_pointer = Pointer.get(id)?.value_initialized ?? false;\n            const has_hash = false\n            SCOPE.uint8[SCOPE.b_index++] = this.convertNumbersToByte([1,1,6], knows_pointer, has_hash);\n        },\n\n\n        // for internal vars / pointers / labels init \n        // assumes that uint32 gap is left before b_index to be set to jmp index\n        addInitBlock: async (SCOPE:compiler_scope, brackets = false) => {\n\n            const return_data:{datex:string} = {datex: SCOPE.datex}; \n            const compiled = <ArrayBuffer> await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n            SCOPE.datex = return_data.datex; // update position in current datex script\n\n            // remove redundant \";\"\n            if (SCOPE.datex[0] == ';') SCOPE.datex = SCOPE.datex.slice(1);\n\n            // insert scope block\n            Compiler.builder.insertInitBlock(SCOPE, compiled);\n        },\n\n        addInitBlockForValue: (SCOPE:compiler_scope|extract_var_scope, value:any) => {\n\n            //const compiled = <ArrayBuffer> this.compile(\"?\", [value], {parent_scope:SCOPE, abs_offset, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true}, false, false, false, undefined, Infinity); // sync           \n            const compiled = this.compileValue(value, {parent_scope: SCOPE, preemptive_pointer_init:SCOPE.options.preemptive_pointer_init==false?false:true, pseudo_parent:true, collapse_first_inserted:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false);\n\n            // insert scope block\n            Compiler.builder.insertInitBlock(SCOPE, compiled);\n        },\n\n        insertInitBlock: (SCOPE:compiler_scope|extract_var_scope, compiled:ArrayBuffer) => {\n\n            // > max uint8\n            if (compiled.byteLength > 0xff_ff_ff_ff) throw new CompilerError(\"pointer init block it too large\");\n         \n            // insert scope block\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n                            \n            SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; // leave space for JMP\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n        insertInitBlockPlaceholder: (SCOPE: compiler_scope|extract_var_scope) => {\n            const insertIndex = SCOPE.b_index; \n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT; // leave space for JMP\n            return insertIndex\n        },\n\n        addValVarRefDeclaration: async (name:string, type:'val'|'var'|'ref'|'const', SCOPE:compiler_scope, init = false, init_brackets = false) => {\n            const INNER_SCOPE = SCOPE.inner_scope;\n\n            if (!INNER_SCOPE.vars) INNER_SCOPE.vars = {}\n\n            // TODO replace with Object.hasOwn\n            if (Object.hasOwn(INNER_SCOPE.vars, name)) throw new CompilerError(\"Cannot redeclare \"+type+\" '\"+name + \"'\", SCOPE.stack);\n            else {\n                if (SCOPE.var_index==undefined) SCOPE.var_index = 0x0100; // 0x00 - 0xff reserved for extracted variables for function, do, ...\n                const index = SCOPE.var_index++;\n                if (name!=undefined) INNER_SCOPE.vars[name] = [type, index];\n\n                let prefix_action: BinaryCode;\n                if (type == \"ref\") prefix_action = BinaryCode.CREATE_POINTER;  \n                else if (type == \"val\") prefix_action = BinaryCode.COPY;  \n\n                await Compiler.builder.insertVariable(SCOPE, index, init ? ACTION_TYPE.INIT : ACTION_TYPE.SET_REFERENCE, undefined, BinaryCode.INTERNAL_VAR, undefined, init_brackets, prefix_action);\n\n                return index;\n            }\n        },\n\n        addPointerByID: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value?:any):Promise<void>|void => {\n\n            // insert preemptive pointer\n            const id_buffer = typeof id == \"string\" ? hex2buffer(id, Pointer.MAX_POINTER_ID_SIZE, true) : id;\n            const pointer_origin = (id_buffer[0]==BinaryCode.ENDPOINT || id_buffer[0]==BinaryCode.PERSON_ALIAS || id_buffer[0]==BinaryCode.INSTITUTION_ALIAS) ? <IdEndpoint> Target.get(id_buffer.slice(1,19), id_buffer.slice(19,21), id_buffer[0]) : null;\n            \n            const singleReceiver = \n                SCOPE.options.to instanceof Endpoint ? \n                    SCOPE.options.to :\n                    (\n                        (\n                            SCOPE.options.to instanceof Disjunction && \n                            SCOPE.options.to.size == 1 && \n                            [...SCOPE.options.to][0] instanceof Endpoint\n                        ) ? \n                        [...SCOPE.options.to][0] as Endpoint :\n                        null\n                    )\n\n            if (\n                pointer_origin && \n                SCOPE.options.preemptive_pointer_init !== false && // preemptive_pointer_init enabled\n                action_type == ACTION_TYPE.GET && // is get\n                Runtime.endpoint.equals(pointer_origin) &&  // is own pointer\n                SCOPE.options.to != Runtime.endpoint && // not sending to self\n                !(singleReceiver && Pointer.get(id)?.subscribers?.has(singleReceiver)) // receiver is subscribed to pointer - assume it already has the current pointer value\n            ) {\n                return Compiler.builder.addPreemptivePointer(SCOPE, id)\n            }\n\n            // normal insert\n            return Compiler.builder.addPointerNormal(SCOPE, id, action_type, action_specifier, init_brackets, value);\n        },\n\n        // just $aabbcc = \n        addPointerNormal: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode, init_brackets = false, value?:any, transform_scope?: Scope<any>):Promise<void>|void => {\n        \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.POINTER + action_type;\n            if (action_specifier != undefined) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = action_specifier;\n            }\n            Compiler.builder.addPointerBodyByID(id, SCOPE);\n            \n            if (action_type == ACTION_TYPE.INIT) {\n                \n                if (value == NOT_EXISTING) {\n                    if (!SCOPE.datex) throw new CompilerError(\"cannot insert init block in scope, missing datex source code\");\n                    return Compiler.builder.addInitBlock(<compiler_scope>SCOPE, init_brackets) // async\n                }\n                else if (transform_scope) {\n                    const insertIndex = Compiler.builder.insertInitBlockPlaceholder(SCOPE);\n                    Compiler.builder.insert_transform_scope(SCOPE, transform_scope);\n                    const size = SCOPE.b_index-insertIndex-Uint32Array.BYTES_PER_ELEMENT;\n                    SCOPE.data_view.setUint32(insertIndex, size, true);\n                }\n                else return Compiler.builder.addInitBlockForValue(SCOPE, value) // sync\n            }\n        },\n\n        // ($aabb := [...]; $aabb)\n        addPreemptivePointer: (SCOPE:compiler_scope|extract_var_scope, id:string|Uint8Array)=>{\n            const normalized_id = Pointer.normalizePointerId(id);\n            const ptr = Pointer.get(normalized_id);\n\n            let parentScope:compiler_scope|extract_var_scope = SCOPE;\n            const ancestorScopes = new Set<compiler_scope|extract_var_scope>()\n            while (parentScope.options.parent_scope) {\n                parentScope = parentScope.options.parent_scope;\n                ancestorScopes.add(parentScope)\n            }\n            const alreadyInitializing = parentScope.preemptive_pointers.has(normalized_id) ?? false;\n\n            let deferSizeIndex = -1;\n\n            // TODO: enable\n            const defer = false // alreadyInitializing && ancestorScopes.has(parentScope.preemptive_pointers.get(normalized_id)!); // defer if already loading pointer in direct ancestor\n\n\n            // preemptive value already exists and was not yet initialized in scope\n            if (ptr?.value_initialized && !alreadyInitializing) {\n\n                parentScope.preemptive_pointers.set(normalized_id, SCOPE);\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr, (ptr.force_local_transform && ptr.transform_scope) ? ptr.transform_scope : undefined); // sync\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.GET, undefined, undefined, ptr.val); // sync\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                // auto add receivers as subscribers for preemptively loaded pointers\n                // they don't have to explicitly subscribe to the pointer after it was loaded\n                if (ptr.is_origin && SCOPE.options.to) {\n                    for (const endpoint of Logical.collapse(SCOPE.options.to, Target)) {\n                        // should not happen\n                        if (!(endpoint instanceof Endpoint)) {\n                            logger.error(\"Not a valid endpoint:\" + endpoint);\n                            continue;\n                        }\n                        // subscribing to own pointers is not allowed\n                        // should not happen because pointers are not sent with preemptive loading to own endpoint anyway\n                        if (Runtime.endpoint.equals(endpoint) || endpoint.equals(LOCAL_ENDPOINT)) continue;\n                        logger.debug(\"auto subscribing \" + endpoint + \" to \" + ptr.idString());\n                        ptr.addSubscriber(endpoint);\n                    }\n                }\n\n            }\n            // just add normal pointer\n            else {\n                if (defer) {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEFER;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    deferSizeIndex = SCOPE.b_index;\n                    SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n                }\n                Compiler.builder.addPointerNormal(SCOPE, id, ACTION_TYPE.GET, undefined, undefined, NOT_EXISTING); // sync\n                if (defer) SCOPE.data_view.setUint32(deferSizeIndex, SCOPE.b_index-deferSizeIndex-Uint32Array.BYTES_PER_ELEMENT, true);\n            }\n        },\n\n        addPointer: (p:Pointer, SCOPE:compiler_scope|extract_var_scope, action_type:ACTION_TYPE = ACTION_TYPE.GET, action_specifier?:BinaryCode):Promise<void>|void => {\n\n            // pointer get\n            if (SCOPE.options.inserted_ptrs && action_type == ACTION_TYPE.GET) SCOPE.options.inserted_ptrs.add(p)\n\n            // ignore value - insert void\n            if (p.value_initialized && p.val?.[DX_IGNORE]) {\n                Compiler.builder.addVoid(SCOPE);\n                return;\n            }\n\n            // pointer is sent to receiver, so he gets access (TODO: improve)\n            if (Runtime.OPTIONS.PROTECT_POINTERS) {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                if (receiver !== Runtime.endpoint) {\n                    if (receiver instanceof Endpoint) p.grantAccessTo(receiver)\n                    else if (receiver instanceof Disjunction) {\n                        for (const endpoint of receiver) {\n                            if (endpoint instanceof Endpoint) p.grantAccessTo(endpoint)\n                            else logger.error(\"Can't grant access to receiver:\" + endpoint);\n                        }\n                    }\n                    else logger.error(\"Can't grant access to receivers:\" + receiver);\n                }\n            }\n            \n            // pre extract per default\n            if ((<compiler_scope>SCOPE).extract_pointers && action_type == ACTION_TYPE.GET) {\n                Compiler.builder.insertExtractedVariable(<compiler_scope>SCOPE, BinaryCode.POINTER, buffer2hex(p.id_buffer));\n            }\n            // add normally\n            else return Compiler.builder.addPointerByID(SCOPE, p.id_buffer, action_type, action_specifier, undefined, NOT_EXISTING)\n        },\n\n        // add <Array>\n        addArray: (a:Array<any>, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0]) => {\n    \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = a instanceof Tuple ? BinaryCode.TUPLE_START : BinaryCode.ARRAY_START;\n\n            // trim array (don't send unnecessary empty elements)\n            const trimmed_length = Runtime.runtime_actions.getTrimmedArrayLength(a);\n\n            let parent_var:number|undefined;\n\n            // shadow object?\n            a = <Array<any>><unknown>Pointer.getByValue(a)?.shadow_object ?? a;\n\n            // iterate over array elements\n            for (let i = 0; i<trimmed_length; i++) {\n\n                let val = a[i];\n\n                // ignore in DATEX\n                if (val?.[DX_IGNORE]) {\n                    continue;\n                }\n            \n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, a)\n                    // get variable for the already-existing value\n                    const value_index = SCOPE.inserted_values.get(val);\n                    const existing_val_var = val == a ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, BigInt(i), existing_val_var])\n                    val = VOID; // insert void instead (array has to be filled at the right indices, need to insert some value at this index)\n                }\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n\n                // TODO: // compress multiple identical values (at least 4)\n                // if (i+4 < trimmed_length && a[i+1]===val && a[i+2]===val && a[i+3]===val && a[i+4]===val) {\n                //     const start = i;\n                //     let end = i+4;\n                //     for (end; end<trimmed_length; end++) {\n                //         if (a[end] !== val) break;\n                //     }\n                //     i = end;\n                //     // ...(var x = []; iterate (0..10)(x+=0);x)\n                //     /// ...(var x = [];\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTEND;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     Compiler.builder.insertVariable(SCOPE, SCOPE.internal_var_index++, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ARRAY_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ARRAY_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n\n                //     // (#iterator = $$<Iterator>\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     Compiler.builder.insertVariable(SCOPE, SCOPE.internal_var_index++, ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ITERATOR;\n\n                //     // (start..end);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RANGE;\n                //     Compiler.builder.addInt(BigInt(start), SCOPE);\n                //     Compiler.builder.addInt(BigInt(end), SCOPE);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n\n                //     Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n                //     // index-\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;\n                //     Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n\n                //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                //     console.log(\"compress\",val,start,end)\n                // }\n\n                Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = a instanceof Tuple ? BinaryCode.TUPLE_END : BinaryCode.ARRAY_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        // add tuple\n        addTuple: (o:Tuple, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0]) => {\n\n            const entries = o.entries();\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TUPLE_START;\n\n            let parent_var:number;\n        \n\n            for (const [key,val] of entries) {\n\n                if (o[INHERITED_PROPERTIES]?.has(key)) continue; // ignore inherited properties\n\n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, o)\n                    // get variable for the already-existing value\n                    let value_index = SCOPE.inserted_values.get(val);\n                    let existing_val_var = val == o ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, key, existing_val_var])\n                }\n                else {\n                    // non-key property (number index)\n                    if (typeof key == \"number\" || typeof key == \"bigint\") SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT; \n                    // key property\n                    else Compiler.builder.addKey(key, SCOPE);\n                    Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n                }\n               \n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TUPLE_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        // add object or tuple\n        addObject: (o:Object, SCOPE:compiler_scope, is_root=true, parents:Set<any>=new Set(), unassigned_children:[number, any, number][]=[], start_index:[number]=[0]) => {\n\n            const entries = Object.entries(Pointer.getByValue(o)?.shadow_object ?? o);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_START;\n\n            let parent_var:number;\n\n            for (let i = 0; i<entries.length; i++) {\n                const [key,val] = entries[i];\n\n                if (o[INHERITED_PROPERTIES]?.has(key)) continue; // ignore inherited properties\n\n                // is recursive value?\n                if (SCOPE.inserted_values.has(val) && parents.has(val)) {\n                    // make sure variable for parent exists\n                    parent_var = parent_var ?? Compiler.builder.createInternalVariableAtIndex(start_index, SCOPE, o)\n                    // get variable for the already-existing value\n                    const value_index = SCOPE.inserted_values.get(val);\n                    const existing_val_var = val == o ? parent_var : Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, val)\n                    unassigned_children.push([parent_var, key, existing_val_var])\n                }\n                else {\n                    Compiler.builder.addKey(key, SCOPE);\n                    Compiler.builder.insert(val, SCOPE, false, new Set(parents), unassigned_children); // shallow clone parents set\n                }\n               \n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_END;\n\n            if (is_root && unassigned_children.length) Compiler.builder.addChildrenAssignments(unassigned_children, SCOPE, start_index)\n        },\n\n        addChildrenAssignments: (unassigned_children:[number, any, number][], SCOPE:compiler_scope, root_start_index:[number]) => {\n            // adds __123.xy = _456 - if has recursive assignments\n            \n            Compiler.builder.insertByteAtIndex(BinaryCode.SUBSCOPE_START, root_start_index, SCOPE) // add (\n            for (const assignment of unassigned_children) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                Compiler.builder.insertVariable(SCOPE, assignment[0], ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR); // parent\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_SET;\n                Compiler.builder.insert(assignment[1], SCOPE, true, undefined, undefined, false, false);  // insert key (don't save insert index for key value)\n                Compiler.builder.insertVariable(SCOPE, assignment[2], ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR); // value\n            }\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;  // add )\n        },\n\n\n        check_perm_prefix: (SCOPE:compiler_scope) => {\n            // check if permission prefix (@xy x: ...)\n            // start index is either last comma index or scope start index if no comma\n            const start_index = (SCOPE.inner_scope.comma_indices ? SCOPE.inner_scope.comma_indices[SCOPE.inner_scope.comma_indices.length-1] : SCOPE.inner_scope.start_index) + 1;\n            const permission_prefix = (SCOPE.b_index - start_index) != 0 && SCOPE.uint8[SCOPE.b_index-1] != BinaryCode.CLOSE_AND_STORE; // not a permission_prefix if command before (;)\n\n            // console.log(start_index, SCOPE.inner_scope.comma_indices, SCOPE.b_index)\n\n            if (permission_prefix) {\n                // replace ELEMENT byte (is not an element, but a permission prefix)\n                if (SCOPE.uint8[start_index-1] == BinaryCode.ELEMENT) SCOPE.uint8[start_index-1] = BinaryCode.KEY_PERMISSION;\n                // else insert byte (start of object/tuple)\n                else Compiler.builder.insertByteAtIndex(BinaryCode.KEY_PERMISSION, start_index, SCOPE);\n            }\n            return permission_prefix;\n        },\n\n\n        // detect Record\n        detect_record: (SCOPE:compiler_scope) => {\n            if (SCOPE.inner_scope.parent_type==undefined || SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START) {\n                // last ( bracket can be replaced with record bracket (if no commands before)\n                if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && !SCOPE.inner_scope.has_ce) {\n                    Compiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.TUPLE_START)\n                }\n                // create new subscope\n                else {\n                    Compiler.builder.enter_subscope(SCOPE, BinaryCode.TUPLE_START);\n                    SCOPE.inner_scope.auto_close_scope = BinaryCode.TUPLE_END;\n                }\n            }\n        },\n\n        insert_exports: (SCOPE:compiler_scope) => {\n            if (SCOPE.uint8[SCOPE.b_index-1] != BinaryCode.CLOSE_AND_STORE) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; // add ;\n            // TODO: use tuple, object just workaround for better compatibility\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_START;\n\n            for (const [key, int] of Object.entries(SCOPE.inner_scope.exports)) {\n                Compiler.builder.addKey(key, SCOPE);\n                Compiler.builder.insertVariable(SCOPE, int, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n            }\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBJECT_END;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n        },\n\n        enter_subscope: (SCOPE:compiler_scope, type:BinaryCode|null = BinaryCode.SUBSCOPE_START, start_index?:number) => {\n\n            // update parent scope value indices\n            const parent_scope = SCOPE.subscopes[SCOPE.subscopes.length-1];\n            parent_scope.last_value_index = SCOPE.b_index;  // last 'value' in parent scope is the new scope\n            if (parent_scope.first_value_index == undefined) parent_scope.first_value_index = SCOPE.b_index;  // last 'value' in parent scope is the new scope\n            if ('value_count' in parent_scope) parent_scope.value_count--; // update value count\n\n\n            if (type !== null) {\n                // start at current position\n                if (start_index == undefined) {\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = type;\n                }\n                // start at another position (earlier)\n                else {\n                    Compiler.builder.insertByteAtIndex(type, start_index, SCOPE);\n                }\n            }\n\n            SCOPE.inner_scope = {\n                last_value_index: -1,\n                start_index: start_index !=undefined ? start_index : SCOPE.b_index-1,\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1,\n                parent_type: type,\n                vars: Object.create(parent_scope?.vars??{}),\n                loop_start: parent_scope.loop_start // copy information from outer loop until overriden\n            };\n            SCOPE.subscopes.push(SCOPE.inner_scope);\n        },\n\n        has_open_subscopes: (SCOPE:compiler_scope) => {\n            // check for missing object brackets\n            for (const scope of SCOPE.subscopes) {\n                if (scope.parent_type == BinaryCode.OBJECT_START) return true;\n                if (scope.parent_type == BinaryCode.ARRAY_START) return true;\n                if (scope.parent_type == BinaryCode.SUBSCOPE_START) return true;\n            }\n            return false;\n        },\n\n        exit_subscope: (SCOPE:compiler_scope, type:BinaryCode = BinaryCode.SUBSCOPE_END) => {\n\n\n            // auto-close subscopes here?\n            while (SCOPE.inner_scope.auto_close_scope!=undefined) {\n                const type = SCOPE.inner_scope.auto_close_scope;\n                delete SCOPE.inner_scope.auto_close_scope;\n                Compiler.builder.exit_subscope(SCOPE, type);\n            }\n\n\n            \n            // check if code block close after outer ')'\n            if (type == BinaryCode.SUBSCOPE_END && SCOPE._code_block_type==1 && SCOPE.subscopes.length == 1) {\n                SCOPE.end = true;\n                return true;\n            } \n\n            // override subscope with tuple/record end bracket\n            if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START && type == BinaryCode.SUBSCOPE_END) type = BinaryCode.TUPLE_END;\n\n            if (SCOPE.inner_scope.parent_type == BinaryCode.OBJECT_START && type != BinaryCode.OBJECT_END) throw new SyntaxError(\"Missing closing object bracket\");\n            if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START && type != BinaryCode.ARRAY_END)  throw new SyntaxError(\"Missing closing array bracket\");\n            if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && type != BinaryCode.SUBSCOPE_END)  throw new SyntaxError(\"Missing closing bracket\");\n\n            // cannot close subscope (already in outer scope)\n            if (SCOPE.subscopes.length == 1) {\n                if (type == BinaryCode.OBJECT_END) throw new SyntaxError(\"Invalid closing object bracket\");\n                if (type == BinaryCode.ARRAY_END)  throw new SyntaxError(\"Invalid closing array bracket\");\n                if (type == BinaryCode.SUBSCOPE_END)  throw new SyntaxError(\"Invalid closing bracket\");\n            }\n\n            // exports\n            if (SCOPE.inner_scope.exports) Compiler.builder.insert_exports(SCOPE);\n\n            if (type !== null) {\n\n                // override trailing comma(s) if <Array>, <Tuple>, <Record> or <Object>\n                if (SCOPE.inner_scope.comma_indices?.length && type !== BinaryCode.SUBSCOPE_END) {\n                    let _comma_index:number | undefined;\n                    while ((_comma_index = SCOPE.inner_scope.comma_indices.pop()) == SCOPE.b_index-1) SCOPE.b_index--;\n                }\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = type;\n            }\n\n\n\n            SCOPE.subscopes.pop();\n            SCOPE.inner_scope = SCOPE.subscopes[SCOPE.subscopes.length-1];\n        },\n\n        change_inner_scope_parent_type: (SCOPE:compiler_scope, type:BinaryCode = BinaryCode.TUPLE_START) => {\n            SCOPE.inner_scope.parent_type = type;\n            SCOPE.uint8[SCOPE.inner_scope.start_index] = type;\n        },\n\n        // \\n -> \\u00A,  \\ -> '',  \\\\ -> \\\n        unescape_string: (str:string):string => str\n            // special escape characters\n            .replace(Regex.ESCAPE_BACKSPACE, '\\b') \n            .replace(Regex.ESCAPE_LINE_FEED, '\\n')\n            .replace(Regex.ESCAPE_FORM_FEED, '\\f')\n            .replace(Regex.ESCAPE_CARRIAGE_RETURN, '\\r')\n            .replace(Regex.ESCAPE_HORIZONTAL_TAB, '\\t')\n            .replace(Regex.ESCAPE_VERTICAL_TAB, '\\v')\n            \n            .replace(Regex.ESCAPE_OCTAL, (_,x)=>{  // \\nnn\n                let code = parseInt(x,8);\n                if (code >= 256) return x; // max octal representation, just return string (TODO not properly handled, should return valid part of octal escape code)\n                return String.fromCharCode(code)\n            })\n            .replace(Regex.ESCAPE_UNICODE, (_,x)=>{  // \\unnnn\n                let code = parseInt(x,16);\n                if (isNaN(code) || x.length!=4 || !x.match(Regex.HEX_STRING)) throw new SyntaxError(\"Invalid Unicode escape sequence\");\n                return String.fromCharCode(code)\n            })\n            .replace(Regex.ESCAPE_HEX, (_,x)=>{  // \\xnn\n                let code = parseInt(x,16);\n                if (isNaN(code) || x.length!=2 || !x.match(Regex.HEX_STRING)) throw new SyntaxError(\"Invalid hexadecimal escape sequence\");\n                return String.fromCharCode(code)\n            })\n            // ignore all other sequences, just return the character\n            .replace(Regex.ESCAPE_SEQUENCE, '$1'),\n\n\n        // serialize values, but use cached values for this scope\n        serializeValue: (v:any, SCOPE:compiler_scope):any => {\n            if (SCOPE.serialized_values.has(v)) return SCOPE.serialized_values.get(v);\n            else {\n                const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n                const s = Runtime.serializeValue(v, receiver);\n                SCOPE.serialized_values.set(v,s);\n                return s;\n            }\n        },\n        \n        getScopeReceiver: (SCOPE: compiler_scope) => {\n            let receiver:target_clause = Runtime.endpoint;\n            let options:compiler_options | undefined = SCOPE.options;\n            while(options) {\n                if (options.to) {\n                    receiver = options.to as target_clause;\n                    break;\n                }\n                options = options.parent_scope?.options;\n            }\n            if (!SCOPE.options?.to) SCOPE.options.to = receiver;\n            return receiver;\n        },\n\n        // // insert Maybe\n        // insertMaybe: async (maybe:Maybe, SCOPE:compiler_scope) => {\n\n        // },\n\n        insert_transform_scope: (SCOPE: compiler_scope|extract_var_scope, transform_scope: Scope<any>) => {\n            const compiled = transform_scope.compiled;\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TRANSFORM;\n\n            for (const v of transform_scope.internal_vars) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                Compiler.builder.insert(v, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT+compiled.byteLength, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n            SCOPE.data_view.setUint32(SCOPE.b_index, compiled.byteLength, true);\n            SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT\n            SCOPE.uint8.set(new Uint8Array(compiled), SCOPE.b_index)\n            SCOPE.b_index += compiled.byteLength;\n        },\n\n\n        // insert any value besides Maybes\n\n        insert: (value:any, SCOPE:compiler_scope, is_root=true, parents?:Set<any>, unassigned_children?:[number, any, number][], replace_optimization = true, register_insert_index = true) => {\n\n            if (value?.[DX_REPLACE]) value = value[DX_REPLACE];\n\n            const indirectReferencePtr = (value instanceof Pointer && value.indirectReference) ? true : false;\n\n            // make sure normal pointers are collapsed (ignore error if uninitialized pointer is passed in)\n            try {\n                value = ReactiveValue.collapseValue(value);\n            }\n            catch {}\n\n            const receiver = Compiler.builder.getScopeReceiver(SCOPE);\n            // bound local slot? (eg. #env) - only when sending to remote\n            const toRemote = receiver && receiver!==Runtime.endpoint && receiver !== LOCAL_ENDPOINT;\n\n            if (toRemote && value?.[DX_BOUND_LOCAL_SLOT]) {\n                const v_name = value[DX_BOUND_LOCAL_SLOT];\n                if (typeof v_name !== \"string\") throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT, must be of type string\");\n                const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE);\n                if (typeof mapped == \"number\") {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped);\n                }\n                else {\n                    throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT: \" + v_name);\n                }\n                return;\n            }\n            // bound pointer property (eg. #env->LANG) - only when sending to remote\n            if (toRemote && value instanceof PointerProperty && value.pointer.val?.[DX_BOUND_LOCAL_SLOT]) {\n                const v_name = value.pointer.val?.[DX_BOUND_LOCAL_SLOT];\n                if (typeof v_name !== \"string\") throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT, must be of type string\");\n                const mapped = Compiler.builder.mapInternalVarNameToByteCode(v_name, ACTION_TYPE.GET, SCOPE);\n                if (typeof mapped == \"number\") {\n                    Compiler.builder.insertVariable(SCOPE, undefined, ACTION_TYPE.GET, undefined, mapped);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET_REF\n                    Compiler.builder.insert(value.key, SCOPE, undefined, undefined, undefined, undefined, false);\n                }\n                else {\n                    throw new Error(\"Invalid DX_BOUND_LOCAL_SLOT: \" + v_name);\n                }\n                return;\n            }\n\n\n            // handle <Stream> and ReadableStream, if streaming (<<)\n            if ((value instanceof Stream || value instanceof ReadableStream) && SCOPE.uint8[SCOPE.b_index-1] == BinaryCode.STREAM) return Compiler.builder.handleStream(value, SCOPE); \n\n            // same value already inserted -> refer to the value with an internal variable\n            if (replace_optimization && SCOPE.inserted_values?.has(value)) {\n                // get variable for the already-existing value\n                const value_index = SCOPE.inserted_values.get(value)!;\n                const existing_val_var = Compiler.builder.createInternalVariableAtIndex(value_index, SCOPE, value)\n                // set internal var at current index\n                Compiler.builder.insertVariable(SCOPE, existing_val_var, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                SCOPE.options._first_insert_done = true;\n                return;\n            }\n    \n            // get dynamic index for start of value\n            const start_index = Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE);\n\n            // add original value to inserted values map (only if useful, exclude short values like boolean and null)\n            if (register_insert_index && !indirectReferencePtr && !(SCOPE.options.no_duplicate_value_optimization && \n                (typeof value == \"bigint\" || typeof value == \"number\" || typeof value == \"string\")) && value!==VOID && \n                value !==null && \n                typeof value != \"boolean\" &&\n                !((typeof value == \"bigint\" || typeof value == \"number\") && value<=Compiler.MAX_INT_32 && value>=Compiler.MIN_INT_32)\n            ) {\n                SCOPE.inserted_values.set(value, start_index) \n            }\n\n            let type:Type|undefined\n            const original_value = value;\n \n            // exception for functions: convert to Datex.Function & create Pointer reference (proxifyValue required!)\n            if (value instanceof Function && !(value instanceof DatexFunction) && !(value instanceof JSTransferableFunction)) value = Pointer.proxifyValue(DatexFunction.createFromJSFunction(value));\n\n            // excpetion for MediaStream: always register as WebRTC mediastream when transmitting\n            if (globalThis.MediaStream && value instanceof MediaStream) {\n                if (!WebRTCInterface) throw new Error(\"Cannot bind MediaStream to WebRTCInterface (not yet initialized)\")\n                WebRTCInterface.registerMediaStream(value);\n            }\n\n            // streams: always create pointer binding\n            if (value instanceof Stream) value = Pointer.proxifyValue(value);\n\n            // exception for Date: convert to Time (TODO: different approach?)\n            if (value instanceof Date && !(value instanceof Time)) {\n                try {\n                    value = new Time(value);\n                }\n                catch (e) {\n                    console.log(\"failed to convert Date to Time\",e);\n                }\n            }\n\n            // is not a Datex.Error -> convert to Datex.Error\n            if (value instanceof Error && !(value instanceof DatexError)) {\n                value = DatexError.fromJSError(value);\n            }\n\n            // proxify to pointer \n            value = Pointer.pointerifyValue(value);\n\n            const skip_first_collapse = !SCOPE.options._first_insert_done&&SCOPE.options.collapse_first_inserted;\n\n            const option_collapse = SCOPE.options.collapse_pointers && !(SCOPE.options.keep_external_pointers && value instanceof Pointer && !value.is_origin);\n            const no_proxify = value instanceof ReactiveValue && (((value instanceof Pointer && value.is_anonymous) || option_collapse) || skip_first_collapse);\n\n            // proxify pointer exceptions:\n            if (no_proxify) {\n               \n                // handle pointers with transform (always ...)\n \n                // only if not ignore_first_collapse or, if ignore_first_collapse and keep_first_transform is enabled\n                if (!SCOPE.options.no_create_pointers && value instanceof Pointer && (value.force_local_transform || !skip_first_collapse || SCOPE.options.keep_first_transform)) {\n                    \n                    if (value.transform_scope) {\n                        SCOPE.options._first_insert_done = true; // set to true before next insert\n                        Compiler.builder.insert_transform_scope(SCOPE, value.transform_scope);\n                        return;\n                    }\n\n                    else if (value.smart_transform_method) {\n                        console.warn(\"DATEX serialization of JS transforms is not yet supported: \", value.smart_transform_method.toString())\n                        // TODO:\n                        // const isTransferableFn = value.smart_transform_method instanceof JSTransferableFunction;\n                        // const transferableFn = isTransferableFn ? value.smart_transform_method as unknown as JSTransferableFunction : JSTransferableFunction.create(value.smart_transform_method);\n                        // if (!isTransferableFn) transferableFn.source = `() => always(${transferableFn.source})`;\n\n                        // value.smart_transform_method = transferableFn;\n                        // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n                        // Compiler.builder.insert(transferableFn, SCOPE, is_root, parents, unassigned_children);\n                        // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                        // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n                        // return;\n                    }\n                    \n                }\n\n                // indirect reference pointer\n                if (indirectReferencePtr) {\n                    SCOPE.options._first_insert_done = true;\n                    Compiler.builder.insert(ReactiveValue.collapseValue(value, true), SCOPE, is_root, parents, unassigned_children);\n                    return;\n                }\n\n\n                value = value.val; // don't proxify anonymous pointers or serialize ptr\n                // add $$ operator, not if no_create_pointers enabled or skip_first_collapse\n                if (option_collapse && !SCOPE.options.no_create_pointers && !skip_first_collapse) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n            }\n\n            // temporary to find errors: throw if a cloned html element without a unique ptr id\n            if (globalThis.HTMLElement && value instanceof HTMLElement && value.hasAttribute(\"uix-ptr\") && !(value as any)[DX_PTR]) console.error(\"Invalid cloned HTMLElement \" + value.tagName + (value.hasAttribute(\"id\")?\"#\"+value.getAttribute(\"id\"):\"\"));\n\n\n            // first value was collapsed (if no_proxify == false, it was still collapsed because it's not a pointer reference)\n            // if (SCOPE.options.collapse_first_inserted)  SCOPE.options.collapse_first_inserted = false; // reset\n            SCOPE.options._first_insert_done = true;\n\n            // console.log(\"INS\",value)\n                \n            // serialize if not pointer\n            if (!(value instanceof Pointer)) {\n                // Check for Complex types\n                // get datex type first\n                type = Type.ofValue(value);\n                \n                if (!type) throw new ValueError(\"Cannot get type for value \" + value)\n\n                // convert to <type> + serialized object ; also always for type variations\n                // exception for explicit type quantity, type variation is always included in primitive representation without explicit cast\n                if (type?.is_complex || type.root_type !== type && !Type.std.quantity.matchesType(type)) {\n                    Compiler.builder.addTypeByNamespaceAndName(SCOPE, type.namespace, type.name, type.variation, type.parameters, type.jsTypeDefModule);\n                    value = Compiler.builder.serializeValue(value, SCOPE);\n                }\n                else if (type?.serializable_not_complex) { // for UintArray Buffers\n                    value = Compiler.builder.serializeValue(value, SCOPE);\n                }\n\n                // try to proxify serialized value again to pointer (proxify exceptions!) \n                if (!no_proxify) value = Pointer.pointerifyValue(value);\n            }\n\n            // ignore value - insert void\n            if (value?.[DX_IGNORE]) {\n                Compiler.builder.addVoid(SCOPE);\n            }\n            \n            // only fundamentals here:\n            else if (value instanceof Quantity)              Compiler.builder.addQuantity(value, SCOPE); // UNIT\n            else if (value===VOID)                           Compiler.builder.addVoid(SCOPE); // Datex.VOID\n            else if (value===null)                           Compiler.builder.addNull(SCOPE); // NULL\n            else if (typeof value == 'bigint')               Compiler.builder.addInt(value, SCOPE); // INT\n            else if (typeof value == 'number')               Compiler.builder.addFloat(value, SCOPE); // FLOAT\n            else if (typeof value == \"string\")               Compiler.builder.addText(value, SCOPE); // STRING\n            else if (typeof value == \"boolean\")              Compiler.builder.addBoolean(value, SCOPE); // BOOLEAN\n            else if (value instanceof URL)                   Compiler.builder.addUrl(value.href, SCOPE); // URL\n            else if (value instanceof Time)                  Compiler.builder.addTime(value, SCOPE); // Time\n            else if (value instanceof Disjunction)           Compiler.builder.addDisjunction(value, SCOPE); // |\n            else if (value instanceof Conjunction)           Compiler.builder.addConjunction(value, SCOPE); // &\n            else if (value instanceof Negation) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT; \n                Compiler.builder.insert(value.not(), SCOPE, is_root, parents, unassigned_children); // shallow clone parents set\n            }\n            else if (value instanceof DatexResponse) {\n                // raw datex script response not allowed in insert method, must use async compilerInsert method\n                if (!(value.datex instanceof Scope)) throw new CompilerError(\"Insertion of non-compiled raw DATEX Response currently not possible when using optimized (synchronous) DATEX compilation\");\n                else Compiler.builder.insertScopeBlock(BinaryCode.DO, value.datex, SCOPE);\n            }\n\n            else if (value instanceof PointerProperty) {\n                const _SCOPE = SCOPE.extract_pointers ? SCOPE.extract_var_scope! : SCOPE;\n                // $pointer\n                Compiler.builder.addPointer(value.pointer, _SCOPE);\n                // ->\n                Compiler.builder.handleRequiredBufferSize(_SCOPE.b_index, _SCOPE);\n                _SCOPE.inner_scope.path_info_index = _SCOPE.b_index++;\n                _SCOPE.uint8[_SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET_REF;\n                // key\n                Compiler.builder.insert(value.key, <compiler_scope>_SCOPE, undefined, undefined, undefined, undefined, false); // TODO cast to compiler_scope might ignore uninitialized scope properties\n                \n                // insert injected var if extract pointers\n                if (SCOPE.extract_pointers) {\n                    const index = SCOPE.extract_var_index!++;\n                    Compiler.builder.insertVariable(SCOPE, index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                }\n            \n            }\n            else if (value instanceof Pointer)      {\n                // pointer action follows (if not a path property)?\n                if (SCOPE.inner_scope.path_info_index == -1) {\n                    let m:RegExpMatchArray|null;\n                    let action_type:ACTION_TYPE = ACTION_TYPE.GET;\n                    let action_specifier:number|undefined = undefined;\n                    SCOPE.datex = SCOPE.datex?.replace(/^[^\\S\\n]+/, \"\"); // clear whitespaces\n                    // match =, +=, -=\n                    if ((m = SCOPE.datex?.match(Regex.ASSIGN_SET)) && SCOPE.datex[1]!=\"=\") { // make sure it is '=', not '=='\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.SET;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_ADD)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.ADD;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_SUB)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.SUBTRACT;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_MUTIPLY)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.MULTIPLY;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_DIVIDE)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.DIVIDE;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_AND)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.AND;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_OR)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.OR;\n                    }\n                    else if (m = SCOPE.datex?.match(Regex.ASSIGN_REFERENCE)) {\n                        SCOPE.datex = SCOPE.datex.substring(m[0].length);\n                        action_type = ACTION_TYPE.OTHER;\n                        action_specifier = BinaryCode.CREATE_POINTER;\n                    }\n                    Compiler.builder.addPointer(value, SCOPE, action_type, action_specifier); // POINTER (assignment)\n                }\n                else {\n                    Compiler.builder.addPointer(value, SCOPE); // POINTER\n                }\n            }\n            else if (value instanceof WildcardTarget)   Compiler.builder.addTarget(value.target, SCOPE); // Filter Target: ORG, APP, LABEL, ALIAS\n            else if (value instanceof Endpoint)         Compiler.builder.addTarget(value, SCOPE); // Filter Target: ORG, APP, LABEL, ALIAS\n            else if (value instanceof Type) {\n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, value.namespace, value.name, value.variation, value.parameters, value.jsTypeDefModule); // Type\n            }\n            else if (value instanceof Uint8Array)        Compiler.builder.addBuffer(value, SCOPE); // Uint8Array\n            else if (value instanceof ArrayBuffer)       Compiler.builder.addBuffer(new Uint8Array(value), SCOPE); // Buffer\n            else if (value instanceof Scope) { // Datex Scope\n                // insert scope block\n                Compiler.builder.insertScopeBlock(BinaryCode.PLAIN_SCOPE, value, SCOPE);\n            }\n\n            // complex objects (with recursion)\n            else if (value instanceof Array) { \n\n                // byte array (optimized)\n                if (type?.variation == \"8\") Compiler.builder.addBuffer(new Uint8Array(new Int8Array(value).buffer), SCOPE);\n                else if (type?.variation == \"16\") Compiler.builder.addBuffer(new Uint8Array(new Int16Array(value).buffer), SCOPE);\n                else if (type?.variation == \"32\") Compiler.builder.addBuffer(new Uint8Array(new Int32Array(value).buffer), SCOPE);\n                else if (type?.variation == \"64\") Compiler.builder.addBuffer(new Uint8Array(new BigInt64Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u8\") Compiler.builder.addBuffer(new Uint8Array(value), SCOPE);\n                else if (type?.variation == \"u16\") Compiler.builder.addBuffer(new Uint8Array(new Uint16Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u32\") Compiler.builder.addBuffer(new Uint8Array(new Uint32Array(value).buffer), SCOPE);\n                else if (type?.variation == \"u64\") Compiler.builder.addBuffer(new Uint8Array(new BigUint64Array(value).buffer), SCOPE);\n\n                // normal array\n                else {\n                    // add current value to parents list\n                    if (!parents) parents = new Set();\n                    parents.add(original_value);\n                    Compiler.builder.addArray(value, SCOPE, is_root, parents, unassigned_children, start_index);\n                }\n            } \n            else if (value instanceof Tuple)  {\n                // add current value to parents list\n                if (!parents) parents = new Set();\n                parents.add(original_value);         \n                Compiler.builder.addTuple(value, SCOPE, is_root, parents, unassigned_children, start_index);\n            }\n            else if (typeof value == \"object\")  {\n                // add current value to parents list\n                if (!parents) parents = new Set();\n                parents.add(original_value);         \n                Compiler.builder.addObject(value, SCOPE, is_root, parents, unassigned_children, start_index);\n            }\n\n            // convert symbols to Datex.VOID (not supported) TODO create pointers for symbols (custom class)?\n            else if (typeof value == \"symbol\") {\n                Compiler.builder.addVoid(SCOPE); // Datex.VOID\n            }\n            else {\n                console.error(\"Unsupported native value\", value);\n                throw new ValueError(\"Failed to compile an unsupported native type\")\n            }\n\n            // add extended values\n            // TODO handle correctly when extending frozen object\n            // first add extended objects if extended object\n            if (value?.[EXTENDED_OBJECTS]) {\n                for (let ext of value[EXTENDED_OBJECTS]||[]){\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;\n                    Compiler.builder.insert(ext, SCOPE, is_root, parents, unassigned_children); // shallow clone parents set\n                }\n            }\n        },\n\n        mapInternalVarNameToByteCode: (v_name: string, action_type: ACTION_TYPE, SCOPE: compiler_scope) => {\n            if (v_name == \"result\") return BinaryCode.VAR_RESULT\n            else if (v_name == \"sub_result\") return BinaryCode.VAR_SUB_RESULT\n            else if (v_name == \"_origin\") return BinaryCode._VAR_ORIGIN\n            else if (v_name == \"it\") return BinaryCode.VAR_IT\n            else if (v_name == \"void\") return BinaryCode.VAR_VOID\n\n            else if (v_name == \"origin\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #origin\", SCOPE.stack); return BinaryCode.VAR_ORIGIN}\n            else if (v_name == \"endpoint\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #endpoint\", SCOPE.stack); return BinaryCode.VAR_ENDPOINT}\n            else if (v_name == \"location\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #location\", SCOPE.stack); return BinaryCode.VAR_LOCATION}\n            else if (v_name == \"env\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #env\", SCOPE.stack); return BinaryCode.VAR_ENV}\n            // else if (v_name == \"timestamp\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #timestamp\", SCOPE.stack); base_type = BinaryCode.VAR_TIMESTAMP; v_name = undefined}\n            // else if (v_name == \"encrypted\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #encrypted\", SCOPE.stack); base_type = BinaryCode.VAR_ENCRYPTED; v_name = undefined}\n            // else if (v_name == \"signed\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #signed\", SCOPE.stack); base_type = BinaryCode.VAR_SIGNED; v_name = undefined}\n            else if (v_name == \"meta\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #meta\", SCOPE.stack); return BinaryCode.VAR_META}\n            else if (v_name == \"public\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #public\", SCOPE.stack); return BinaryCode.VAR_PUBLIC}\n            else if (v_name == \"this\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #this\", SCOPE.stack); return BinaryCode.VAR_THIS}\n            else if (v_name == \"remote\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #remote\", SCOPE.stack); return BinaryCode.VAR_REMOTE}\n            else if (v_name == \"entrypoint\") {if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #entrypoint\", SCOPE.stack); return BinaryCode.VAR_ENTRYPOINT}\n            else if (v_name == \"std\") {  if (action_type != ACTION_TYPE.GET) throw new CompilerError(\"Invalid action on internal variable #std\", SCOPE.stack); return BinaryCode.VAR_STD}\n\n            return v_name;\n        }\n\n    }\n\n\n    static async parseNextExpression (SCOPE:compiler_scope) {\n        let m:RegExpMatchArray|null;\n\n        const last_command_end = SCOPE.last_command_end; // remember last command\n\n        SCOPE.datex = SCOPE.datex.replace(/^[^\\S\\n]+/, \"\"); //(/^[^\\S\\r\\n]+/\n        SCOPE.last_command_end = false; // reset 'last command was ;'\n        \n        let isEffectiveValue = false;\n\n        // END \n        if (!SCOPE.datex) {\n            SCOPE.end = true;\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }\n\n        else if (m = SCOPE.datex.match(Regex.URL)) {   \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const url = m[0].replace(/\\\\(.)/, '$1')\n            Compiler.builder.addUrl(url, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // SEPERATOR\n        else if (m = SCOPE.datex.match(Regex.SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n        }\n\n        // INSERT data (?)\n        else if (m = SCOPE.datex.match(Regex.INSERT)) {     \n            SCOPE.datex = SCOPE.datex.substring(m[0].length); \n\n            if (SCOPE.current_data_index == undefined) SCOPE.current_data_index = 0;\n\n            const d_index = m[1] ? parseInt(m[1]) : SCOPE.current_data_index++;\n\n            // precompiling, don't insert a value\n            if (SCOPE.precompiled) {\n                // add buffer if not size 0\n                if (SCOPE.b_index-(SCOPE.last_precompiled??0) != 0) SCOPE.precompiled.appendBufferPlaceholder(SCOPE.last_precompiled??0,SCOPE.b_index);\n                SCOPE.precompiled.appendDataIndex(d_index);\n                SCOPE.last_precompiled = SCOPE.b_index;\n                return;\n            }\n\n            else {\n                const d = SCOPE.data?.[d_index];\n\n                // special exception: insert raw datex script (dxb Scope can be inserted normally (synchronous))\n                if (d instanceof DatexResponse && !(d.datex instanceof Scope)) await Compiler.builder.compilerInsert(SCOPE, d);\n                else Compiler.builder.insert(d, SCOPE, undefined, undefined, undefined, undefined, false); // disable replace optimization for now to prevent invalid replacement, e.g. for path properties\n            }\n            isEffectiveValue = true;\n        }\n         \n        /**\n         * INSERT inline command\n         * value resolution similar to 'get'\n         *   * resolves URL value\n         *   * resolve endpoint #default\n         *   * inserts scope as script code\n         * Similar to 'compile get', but actual datex script execution happens on receiver endpoint(s)\n         */\n\n        else if (m = SCOPE.datex.match(Regex.INSERT_COMMAND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // COMPILE:\n            // TODO add a 'return' command somehow\n            const return_data:{datex:string} = {datex: SCOPE.datex};\n    \n            // create compiler scope first time\n            if (!SCOPE.compile_compiler_scope) {\n                SCOPE.compile_compiler_scope = this.createCompilerScope(return_data, SCOPE.data, {}, false, false, false, undefined, Infinity, m[1]?1:2, SCOPE.current_data_index)\n            }\n            // reset scope for next DATEX script snippet\n            else {\n                this.resetScope(SCOPE.compile_compiler_scope, return_data, m[1]?1:2);\n            }\n            // compile snippet in compiler scope\n            const compiled = <ArrayBuffer> await this.compileLoop(SCOPE.compile_compiler_scope);\n            // update position in current datex script\n            //console.log(\"new datex\",return_data.datex)\n            SCOPE.datex = return_data.datex;\n\n\n            // RUN:\n\n            try {\n                // create datex scope to run\n                if (!SCOPE.compile_datex_scope) {\n                    SCOPE.compile_datex_scope = Runtime.createNewInitialScope(undefined, undefined, undefined, undefined, SCOPE.options.context_location, true);\n                }\n                // set dxb as scope buffer\n                Runtime.updateScope(SCOPE.compile_datex_scope, compiled, {sender:Runtime.endpoint, executable:true})\n                \n                // execute scope -> get script from path                \n                const value = await Runtime.simpleScopeExecution(SCOPE.compile_datex_scope);\n                // insert\n                await Compiler.builder.compilerInsert(SCOPE, value);\n\n            } catch (e) {\n                if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                throw e;\n            }\n     \n        }\n\n        // COMPILE inline script\n        // run at compile time\n        // insert values literally, but collapse pointer references\n        else if (m = SCOPE.datex.match(Regex.COMPILE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n\n            // COMPILE:\n            // compiles and injects result directly\n            // if value is scope, the compiled scope value is injected\n            // TODO add a 'return' command somehow\n            let return_data:{datex:string} = {datex: SCOPE.datex};\n    \n            // create compiler scope first time\n            if (!SCOPE.compile_compiler_scope) {\n                SCOPE.compile_compiler_scope = this.createCompilerScope(return_data, SCOPE.data, {}, false, false, false, undefined, Infinity, !!m[1]?1:2, SCOPE.current_data_index)\n            }\n            // reset scope for next DATEX script snippet\n            else {\n                this.resetScope(SCOPE.compile_compiler_scope, return_data, !!m[1]?1:2);\n            }\n            // compile snippet in compiler scope\n            let compiled = <ArrayBuffer> await this.compileLoop(SCOPE.compile_compiler_scope);\n            // update position in current datex script\n            //console.log(\"new datex\",return_data.datex)\n            SCOPE.datex = return_data.datex;\n\n            try {\n                // create datex scope to run\n                if (!SCOPE.compile_datex_scope) {\n                    SCOPE.compile_datex_scope = Runtime.createNewInitialScope(undefined, undefined, undefined, undefined, SCOPE.options.context_location, true);\n                }\n                // set dxb as scope buffer\n                Runtime.updateScope(SCOPE.compile_datex_scope, compiled, {sender:Runtime.endpoint, executable:true})\n                \n                // execute scope -> get script from path\n                let value:any\n                \n                value = await Runtime.simpleScopeExecution(SCOPE.compile_datex_scope)\n\n                // already compiled in <Scope>\n                if (value instanceof Scope) {\n                    let compiled_script = value.compiled;\n\n                    // add scope header\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DO;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    SCOPE.data_view.setUint32(SCOPE.b_index, compiled_script.byteLength, true);\n                    SCOPE.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+10+compiled_script.byteLength, SCOPE);\n                    SCOPE.uint8.set(new Uint8Array(compiled_script), SCOPE.b_index)\n                    SCOPE.b_index += compiled_script.byteLength;\n                }\n                else Compiler.builder.insert(value, SCOPE);\n\n            } catch (e) {\n                    if (e instanceof DatexError) e.pushToStack(...SCOPE.stack);\n                    throw e;\n            }\n\n        }\n\n        // KEY  (check before variable and keywords!, only if not in :: filter)\n        else if (m = SCOPE.datex.match(Regex.KEY)) {   \n            //if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Invalid key in <Array>\");\n            // // convert tuple to record\n            // if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START) DatexCompiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.RECORD_START)\n            // if (SCOPE.inner_scope.auto_close_scope == BinaryCode.TUPLE_END) SCOPE.inner_scope.auto_close_scope = BinaryCode.RECORD_END;\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const key = m[0].substring(0,m[0].length-1).trim(); // get key\n            const int_key = Number.isInteger(Number(key)) ? Number(key) : null;\n\n            // check/add  permission prefix (@xy x: ...)\n            const permission_prefix = false // TODO: Compiler.builder.check_perm_prefix(SCOPE);\n\n            // override current BinaryCode.ELEMENT\n            if (!permission_prefix && SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n\n            Compiler.builder.detect_record(SCOPE);\n\n            if (key.startsWith(\"#\")) Compiler.builder.addObjectSlot(key.slice(1), SCOPE); // object slot\n            else Compiler.builder.addKey(int_key??key, SCOPE); // normal key\n\n            isEffectiveValue = true;\n        }\n\n\n        // EXIT\n        else if (m = SCOPE.datex.match(Regex.EXIT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXIT;\n        }\n\n        // RESOLVE\n        else if (m = SCOPE.datex.match(Regex.GET)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        // COUNT\n        else if (m = SCOPE.datex.match(Regex.COUNT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COUNT;\n        }\n\n        // ABOUT\n        else if (m = SCOPE.datex.match(Regex.ABOUT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ABOUT;\n        }\n\n        // RETURN\n        else if (m = SCOPE.datex.match(Regex.RETURN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.RETURN;\n        }\n\n        // ITERATOR\n        else if (m = SCOPE.datex.match(Regex.ITERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ITERATOR;\n        }\n\n        // SKIP\n        else if (m = SCOPE.datex.match(Regex.SKIP)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            if (!('loop_start' in  SCOPE.inner_scope)) throw new CompilerError(\"Invalid 'skip' command\", SCOPE.stack);\n            Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start);\n            Compiler.builder.valueIndex(SCOPE);\n        }\n\n        // LEAVE\n        else if (m = SCOPE.datex.match(Regex.LEAVE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // TODO jump to end\n        }\n\n        // ITERATE\n        else if (m = SCOPE.datex.match(Regex.ITERATE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.inner_scope.iterate = 0;\n            SCOPE.inner_scope.value_count = 1; \n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n\n            // #iter = iterator\n            Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ITERATOR;\n        }\n\n        // WHILE\n        else if (m = SCOPE.datex.match(Regex.WHILE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            SCOPE.inner_scope.while = SCOPE.b_index+1;\n            SCOPE.inner_scope.loop_start = SCOPE.b_index+1;\n            SCOPE.inner_scope.value_count = 2; \n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n            // add jfa\n            Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n        }\n\n        // IF\n        else if (m = SCOPE.datex.match(Regex.ELSE_IF)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n\n            // is else if \n            if (m[1]) {\n                // no previous if\n                if (!SCOPE.inner_scope.if_end_indices?.length) throw new CompilerError(\"Invalid else-if statement - no preceding if statement\", SCOPE.stack);\n                SCOPE.b_index--; // override SUBSCOPE_END\n            }\n\n            // is only if\n            else {\n                Compiler.builder.valueIndex(SCOPE); // new value start\n            }\n\n            SCOPE.inner_scope.value_count = 2;\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1+Uint32Array.BYTES_PER_ELEMENT, SCOPE);\n            if (!m[1]) SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START; // start subscope only if first 'if'\n\n            SCOPE.inner_scope.if = SCOPE.b_index;\n \n            // add jfa\n            Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n        }\n\n        // ELSE\n        else if (m = SCOPE.datex.match(Regex.ELSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n\n            // is no previous if\n            if (!SCOPE.inner_scope.if_end_indices?.length) throw new CompilerError(\"Invalid else statement - no preceding if statement\", SCOPE.stack);\n\n            SCOPE.b_index--; // override previous SUBSCOPE_END\n\n            SCOPE.inner_scope.else = true;\n            SCOPE.inner_scope.value_count = 1; \n        }\n\n        // FUN\n        else if (m = SCOPE.datex.match(Regex.FUN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove fun\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_FUNCTION;\n            isEffectiveValue = true;\n        }\n\n        // \\n\n        else if (m = SCOPE.datex.match(/^\\n/)) {\n            SCOPE.current_line_nr++;\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }           \n     \n\n        // DOC_COMMENT - before ASSIGN, ...\n        else if (m = SCOPE.datex.match(Regex.DOC_COMMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove comment\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            SCOPE.last_command_end = last_command_end; // last command still valid\n\n            const doc_comment = m[3]??m[2];\n            // TODO: reenable? replace with markdown insertion\n            // SCOPE.datex = `<text/markdown> '${doc_comment.replace(/\\'/g, \"\\\\'\")}';\\n` + SCOPE.datex;\n        }\n\n        // COMMENT - before ASSIGN, ...\n        else if (m = SCOPE.datex.match(Regex.COMMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // remove comment\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            SCOPE.last_command_end = last_command_end; // last command still valid\n        }\n\n        \n        // Datex.VOID (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.VOID)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addVoid(SCOPE);\n            isEffectiveValue = true;\n        }\n\n\n        // REMOTE CALL (::) \n        else if (m = SCOPE.datex.match(Regex.REMOTE_CALL)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            await Compiler.builder.addScopeBlock(BinaryCode.REMOTE, !!m[1], false, SCOPE)\n        }\n\n        // TRANSFORM\n        else if (m = SCOPE.datex.match(Regex.ALWAYS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.TRANSFORM, !!m[1], true, SCOPE)\n        }\n\n\n        // Datex.VOID (empty brackets)\n        else if (m = SCOPE.datex.match(Regex.QUASI_VOID)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addVoid(SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // SUBSCOPE START\n        else if (m = SCOPE.datex.match(Regex.SUBSCOPE_START)) {        \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n         \n            Compiler.builder.enter_subscope(SCOPE);\n        } \n\n    \n        // SYNC_SILENT (<==:)\n        else if (m = SCOPE.datex.match(Regex.SYNC_SILENT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode._SYNC_SILENT;\n        }\n\n        // SYNC (<==)\n        else if (m = SCOPE.datex.match(Regex.SYNC)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SYNC;\n        }\n\n\n        // STOP_SYNC (</=)\n        else if (m = SCOPE.datex.match(Regex.STOP_SYNC)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STOP_SYNC;\n        }\n\n        \n        // STREAM (before type and <=)\n        else if (m = SCOPE.datex.match(Regex.STREAM)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STREAM;\n        }\n\n        // STOP_STREAM\n        else if (m = SCOPE.datex.match(Regex.STOP_STREAM)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STOP_STREAM;\n        }\n\n        // TYPE (before <)\n        // if function arg parsing (42), don't allow type definitions\n        else if (\n            (SCOPE._code_block_type==42 && (m = SCOPE.datex.match(Regex.TYPE_FUNCTION_ARG_COMPAT))) || \n            (SCOPE._code_block_type!=42 && (m = SCOPE.datex.match(Regex.TYPE)))\n        ) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // is parameterized type\n            if (m[4] == \"(\") {\n                SCOPE.datex = \"(\" + SCOPE.datex;\n                SCOPE.inner_scope.param_type_close = true;\n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1), true);\n            }\n            // is type definition\n            else if (m[5]) {\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TEMPLATE;  \n                Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1))\n            }\n            // normal type\n            else Compiler.builder.addTypeByNamespaceAndName(SCOPE, m[1], m[2], m[3]?.slice(1))\n        }\n\n        // COMPARE \n        // ===\n        else if (m = SCOPE.datex.match(Regex.EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EQUAL;\n        }\n        // ~==\n        else if (m = SCOPE.datex.match(Regex.NOT_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT_EQUAL;\n        }\n        // ==\n        else if (m = SCOPE.datex.match(Regex.EQUAL_VALUE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EQUAL_VALUE;\n        }\n        // ~=\n        else if (m = SCOPE.datex.match(Regex.NOT_EQUAL_VALUE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT_EQUAL_VALUE;\n        }\n        // >=\n        else if (m = SCOPE.datex.match(Regex.GREATER_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GREATER_EQUAL;\n        }\n        // <=\n        else if (m = SCOPE.datex.match(Regex.LESS_EQUAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.LESS_EQUAL;\n        }\n        // >\n        else if (m = SCOPE.datex.match(Regex.GREATER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // is type close )>, ignore\n            if (SCOPE.inner_scope.param_type_close) {\n                SCOPE.inner_scope.param_type_close = false;\n            }\n            // is greater >\n            else {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GREATER;\n            }\n        }\n      \n        // <\n        else if (m = SCOPE.datex.match(Regex.LESS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.LESS;\n        }\n      \n        // YEET\n        else if (m = SCOPE.datex.match(Regex.YEET)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.YEET;  \n        }\n        \n        \n        // TRY\n        else if (m = SCOPE.datex.match(Regex.TRY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // no opening scope, add closing\n            if (!m[1]) SCOPE.inner_scope.try_close = true;\n\n            Compiler.builder.enter_subscope(SCOPE);\n            SCOPE.inner_scope.try_start = SCOPE.b_index\n        }\n\n        // ACCEPT\n        else if (m = SCOPE.datex.match(Regex.ACCEPT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // TODO\n        }\n\n\n        // RELATIVE_PATH (before ..)\n        else if (m = SCOPE.datex.match(Regex.RELATIVE_PATH)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const path = m[0].replace(/\\\\(.)/, '$1')\n            Compiler.builder.addRelativePath(path, SCOPE);\n        }\n\n        // SPREAD (...) = <Tuple>/<Record>\n        else if (m = SCOPE.datex.match(Regex.SPREAD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTEND;\n        }\n\n        // Range (..) => <Tuple>\n        else if (m = SCOPE.datex.match(Regex.RANGE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.insertByteAtIndex(BinaryCode.RANGE, SCOPE.inner_scope.last_value_index, SCOPE)\n        }\n  \n        // PATH_SEPERATOR (.)\n        else if (m = SCOPE.datex.match(Regex.PATH_SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n         \n            //SCOPE.inner_scope.current_path_depth++;\n            //DatexCompiler.builder.handle_path(SCOPE);\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.inner_scope.path_info_index = SCOPE.b_index++;\n            SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET;\n\n            // if '.' before:  WILDCARD (.*)\n            if (m = SCOPE.datex.match(Regex.WILDCARD)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.WILDCARD;\n                isEffectiveValue = true;\n            }\n            // default property key (string)\n            else if (m = SCOPE.datex.match(Regex.PROPERTY)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.addText(m[0], SCOPE);\n                isEffectiveValue = true;\n            }\n        }\n\n        // PATH_REF_SEPERATOR (->)\n        else if (m = SCOPE.datex.match(Regex.PATH_REF_SEPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            const wildcard = SCOPE.datex.match(Regex.WILDCARD);\n\n            // normal scope or extract_var_scope\n            const _SCOPE = (SCOPE.extract_pointers && !wildcard) ? SCOPE.extract_var_scope! : SCOPE;\n\n            Compiler.builder.handleRequiredBufferSize(_SCOPE.b_index, _SCOPE);\n            _SCOPE.inner_scope.path_info_index = _SCOPE.b_index++;\n            _SCOPE.uint8[_SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_GET_REF;\n\n            // if '->' before:  WILDCARD (->*)\n            if (wildcard) {               \n                SCOPE.datex = SCOPE.datex.substring(wildcard[0].length);  // pop datex\n                \n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.WILDCARD;\n            }\n            // default property key (string)\n            else if (m = SCOPE.datex.match(Regex.PROPERTY)) {               \n                SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n                \n                Compiler.builder.addText(m[0], _SCOPE);\n            }\n        }\n\n\n        // JMP instructions\n        else if (m = SCOPE.datex.match(Regex.JUMP)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let jmp_label = m[2]\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+5, SCOPE);\n            \n            Compiler.builder.valueIndex(SCOPE);\n\n            let jmp_to:number|undefined;\n            let type = m[1] == \"jmp\" ?  BinaryCode.JMP : ( m[1] == \"jtr\" ? BinaryCode.JTR : BinaryCode.JFA);\n\n            // label was before\n            if (Object.keys(SCOPE.jmp_label_indices).includes(jmp_label)) {\n                SCOPE.used_lbls.push(jmp_label)\n                jmp_to = SCOPE.jmp_label_indices[jmp_label][0];\n            }\n            // wait until label index resolved\n            else { \n                if (!SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) SCOPE.indices_waiting_for_jmp_lbl[jmp_label] = []\n                SCOPE.indices_waiting_for_jmp_lbl[jmp_label].push(Compiler.builder.getDynamicIndex(SCOPE.b_index+1, SCOPE)); \n            }\n            \n            // add jmp\n            Compiler.builder.addJmp(SCOPE, type, jmp_to);\n        }\n\n        // JMP label\n        else if (m = SCOPE.datex.match(Regex.JUMP_LBL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let jmp_label = m[1]\n            SCOPE.jmp_label_indices[jmp_label] = Compiler.builder.getDynamicIndex(SCOPE.b_index, SCOPE);\n\n            if (SCOPE.used_lbls.includes(jmp_label)) throw new CompilerError(\"Multiple use of label: \" + jmp_label, SCOPE.stack);\n            \n            // resolve index for earlier jumps\n            if (SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) {\n                for (let [i] of SCOPE.indices_waiting_for_jmp_lbl[jmp_label]) {\n                    SCOPE.data_view.setUint32(i, SCOPE.b_index, true); // insert label index  \n                }\n                delete SCOPE.indices_waiting_for_jmp_lbl[jmp_label];\n                SCOPE.used_lbls.push(jmp_label)\n            }\n\n            // cache dxb from here on when executing (might need to jump to this position later on)\n            if (SCOPE.last_cache_point == undefined) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.last_cache_point = SCOPE.b_index\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CACHE_POINT;\n            }\n\n        }\n\n        // USE static scope (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.USE_PROPS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            SCOPE.inner_scope.use_parent_index = await Compiler.builder.addValVarRefDeclaration(undefined, 'var', SCOPE);\n            SCOPE.inner_scope.imported_vars = <[string, string?][]> m[1].split(\",\").map(v=>v.trim().split(/ +as +/))\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n\n        else if (m = SCOPE.datex.match(Regex.USE_ALL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1]\n\n            await Compiler.builder.addValVarRefDeclaration(name, 'var', SCOPE)\n\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        else if (m = SCOPE.datex.match(Regex.USE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.insertVariable(SCOPE, 'void', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET;\n        }\n\n        \n        // BOOLEAN (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.BOOLEAN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addBoolean(m[0] == \"true\" ? true : false, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // NULL (check before variable!)\n        else if (m = SCOPE.datex.match(Regex.NULL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addNull(SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // EMPTY_ARRAY (shortcut)\n        else if (m = SCOPE.datex.match(Regex.EMPTY_ARRAY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_ARRAY;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n            isEffectiveValue = true;\n        }\n\n        // EMPTY_OBJECT (shortcut)\n        else if (m = SCOPE.datex.match(Regex.EMPTY_OBJECT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+2, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.STD_TYPE_OBJECT;\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.VOID;\n            isEffectiveValue = true;\n        }\n\n\n        // ARRAY_START\n        else if (m = SCOPE.datex.match(Regex.ARRAY_START)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.enter_subscope(SCOPE, BinaryCode.ARRAY_START);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index;\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n\n        }\n\n        // ARRAY_END\n        else if (m = SCOPE.datex.match(Regex.ARRAY_END)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            } \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            Compiler.builder.exit_subscope(SCOPE, BinaryCode.ARRAY_END);\n            isEffectiveValue = true;\n            //DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n        }\n\n\n        // TEMPLATE STRING (before OBJECT_END) '... (\n        else if (!SCOPE.inner_scope.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_START))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n            \n\n            SCOPE.inner_scope.in_template_string = true;\n\n            Compiler.builder.enter_subscope(SCOPE); // outer subscope\n\n            // add string if it is not empty\n            if (str.length) {\n                Compiler.builder.addText(str, SCOPE);\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            }\n  \n            Compiler.builder.addTypeByNamespaceAndName(SCOPE, \"std\", \"text\");\n            Compiler.builder.enter_subscope(SCOPE);\n        }\n\n        // ) ... (\n        else if (SCOPE.subscopes[SCOPE.subscopes.length-3]?.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_B_CLOSE))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n\n            Compiler.builder.exit_subscope(SCOPE);\n\n            if (str.length) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n                Compiler.builder.addText(str, SCOPE);\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            Compiler.builder.addTypeByNamespaceAndName(SCOPE, \"std\", \"text\");\n\n            Compiler.builder.enter_subscope(SCOPE);\n        }\n\n        // ) ... '\n        else if (SCOPE.subscopes[SCOPE.subscopes.length-3]?.in_template_string && (m = SCOPE.datex.match(Regex.TSTRING_END))) {                            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            const escaped_string = m[0].substring(1,m[0].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            const str = Compiler.builder.unescape_string(escaped_string);\n\n            Compiler.builder.exit_subscope(SCOPE);\n\n            // only add string if not empty\n            if (str.length) {\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;\n            \n                Compiler.builder.addText(str, SCOPE);\n            }\n          \n\n            Compiler.builder.exit_subscope(SCOPE); // outer subscope\n\n            SCOPE.inner_scope.in_template_string = false;\n            isEffectiveValue = true;\n        }\n\n\n        // OBJECT_START\n        else if (m = SCOPE.datex.match(Regex.OBJECT_START)) {           \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.enter_subscope(SCOPE, BinaryCode.OBJECT_START);\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index;\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n        }\n\n        // OBJECT_END\n        else if (m = SCOPE.datex.match(Regex.OBJECT_END)) {\n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.exit_subscope(SCOPE, BinaryCode.OBJECT_END);\n            isEffectiveValue = true;\n            //DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n        }\n\n        // COMMA\n        else if (m = SCOPE.datex.match(Regex.COMMA)) {      \n            if (SCOPE._code_block_type!>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            \n            // detect TUPLE\n            if (SCOPE.inner_scope.parent_type==undefined || SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START) {\n                // last ( bracket can be replaced with tuple bracket\n                if (SCOPE.inner_scope.parent_type == BinaryCode.SUBSCOPE_START && SCOPE.inner_scope.start_index == SCOPE.inner_scope.first_value_index-1) {\n                    Compiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.TUPLE_START)\n                    Compiler.builder.commaIndex(SCOPE.inner_scope.start_index+1, SCOPE);\n                    Compiler.builder.insertByteAtIndex(BinaryCode.ELEMENT, SCOPE.inner_scope.start_index+1, SCOPE); // also add first ELEMENT\n                }\n                // create new subscope\n                else {\n\n                    const index = Math.max(SCOPE.inner_scope.ce_index??0, SCOPE.inner_scope.first_value_index); // save index from current sub scope\n                    if (index === -1) throw new SyntaxError(\"Invalid leading comma\") // value must exist before\n                    Compiler.builder.commaIndex(index, SCOPE);\n                    Compiler.builder.insertByteAtIndex(BinaryCode.ELEMENT, index, SCOPE); // also add first ELEMENT\n                    Compiler.builder.enter_subscope(SCOPE, BinaryCode.TUPLE_START, index);\n                    SCOPE.inner_scope.auto_close_scope = BinaryCode.TUPLE_END;\n                }\n            }\n\n            // always add BinaryCode.ELEMENT (migh be overriden with BinaryCode.ELEMENT_WITH_KEY)\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.inner_scope.first_element_pos = SCOPE.b_index; // set first element index\n            Compiler.builder.commaIndex(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT;  \n        }\n\n\n        // BUFFER\n        else if (m = SCOPE.datex.match(Regex.BUFFER)) {              \n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let content = m[1];\n            let buffer:Uint8Array;\n\n            try {\n                buffer = hex2buffer(content);\n            }\n            catch(e) {\n                throw new ValueError(\"Invalid <Buffer> format (base 16)\");\n            }\n\n            Compiler.builder.addBuffer(buffer, SCOPE);\n            isEffectiveValue = true;\n        }\n\n       \n\n        // CLOSE_AND_STORE\n        else if ((m = SCOPE.datex.match(Regex.CLOSE_AND_STORE)) !== null) {     \n            if (SCOPE._code_block_type>=2 && !Compiler.builder.has_open_subscopes(SCOPE)) {\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n\n            SCOPE.current_line_nr += m[0].split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // auto-close subscopes here?\n            while (SCOPE.inner_scope.auto_close_scope!=undefined) {\n                const type = SCOPE.inner_scope.auto_close_scope;\n                delete SCOPE.inner_scope.auto_close_scope;\n                Compiler.builder.exit_subscope(SCOPE, type);\n            }\n\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n            // remember ; in inner scope\n            SCOPE.inner_scope.has_ce = true;\n            SCOPE.inner_scope.ce_index = SCOPE.b_index;\n\n            SCOPE.last_command_end = true;\n\n            // finish 'use' command (TODO just temporary position)\n            if (SCOPE.inner_scope.imported_vars && SCOPE.inner_scope.use_parent_index!=undefined) {\n                for (let v of SCOPE.inner_scope.imported_vars) {\n    \n                    await Compiler.builder.addValVarRefDeclaration(v[1]??v[0], 'var', SCOPE)\n                    Compiler.builder.insertVariable(SCOPE, SCOPE.inner_scope.use_parent_index, ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    Compiler.builder.addText(v[0], SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;\n                }\n                delete SCOPE.inner_scope.imported_vars;\n                delete SCOPE.inner_scope.use_parent_index;\n\n            }\n           \n        }\n\n        // INFINITY\n        else if (m = SCOPE.datex.match(Regex.INFINITY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(m[1]?.[0]=='-' ? -Infinity : +Infinity, SCOPE)\n            isEffectiveValue = true;\n        }\n                \n        // NAN\n        else if (m = SCOPE.datex.match(Regex.NAN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(NaN, SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // PERSON\n        else if (m = SCOPE.datex.match(Regex.PERSON_ALIAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addPersonByNameAndChannel(m[1], m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // INSTITUTION\n        else if (m = SCOPE.datex.match(Regex.INSTITUTION_ALIAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addInstitutionByNameAndChannel(m[1], m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // ID_ENDPOINT\n        else if (m = SCOPE.datex.match(Regex.ENDPOINT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            // const subspace_string = m[2].substring(1);\n            // const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            const endpoint = IdEndpoint.get('@@'+m[1])\n            Compiler.builder.addIdEndpointByIdAndChannel(endpoint.binary, m[3], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // BROADCAST_ENDPOINT TODO: how to use this with new subspaces?\n        else if (m = SCOPE.datex.match(Regex.BROADCAST_ENDPOINT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const subspace_string = m[2].substring(1);\n            const subspaces = subspace_string ? subspace_string.split(\":\") : null;\n            Compiler.builder.addIdEndpointByIdAndChannel(BROADCAST.binary, m[6], SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // STRING or ESCAPED_KEY\n        else if (m = SCOPE.datex.match(Regex.STRING_OR_ESCAPED_KEY)) {                                  \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const escaped_string = m[1].substring(1,m[1].length-1);\n            SCOPE.current_line_nr += escaped_string.split(/\\r\\n|\\r|\\n/).length - 1 // add nr of lines\n            let string_or_key = Compiler.builder.unescape_string(escaped_string) // get key and format\n\n            // is escaped key\n            if (m[2]) {\n                if (SCOPE.inner_scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Invalid key in <Array>\");\n                // // convert tuple to record\n                // if (SCOPE.inner_scope.parent_type == BinaryCode.TUPLE_START) DatexCompiler.builder.change_inner_scope_parent_type(SCOPE, BinaryCode.RECORD_START)\n                // if (SCOPE.inner_scope.auto_close_scope == BinaryCode.TUPLE_END) SCOPE.inner_scope.auto_close_scope = BinaryCode.RECORD_END;\n                \n                // check/add  permission prefix (@xy x: ...)\n                const permission_prefix = false // TODO: Compiler.builder.check_perm_prefix(SCOPE);\n\n                // override current BinaryCode.ELEMENT\n                if (!permission_prefix && SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n                Compiler.builder.detect_record(SCOPE);\n                Compiler.builder.addKey(string_or_key, SCOPE);\n            }\n            // is string\n            else Compiler.builder.addText(string_or_key, SCOPE);\n            isEffectiveValue = true;\n        }\n\n        // DYNAMIC_KEY_END\n        else if (m = SCOPE.datex.match(Regex.DYNAMIC_KEY_END)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            // closing )\n            Compiler.builder.exit_subscope(SCOPE);\n\n            // override current BinaryCode.ELEMENT\n            const current_b_index = SCOPE.b_index;\n            if (SCOPE.inner_scope.first_element_pos!=undefined) SCOPE.b_index = SCOPE.inner_scope.first_element_pos;\n            Compiler.builder.detect_record(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ELEMENT_WITH_DYNAMIC_KEY;\n            SCOPE.b_index = current_b_index;\n        }\n\n        // SUBSCOPE_END\n        else if (m = SCOPE.datex.match(Regex.SUBSCOPE_END)) {\n            if (SCOPE._code_block_type>=2 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            } \n\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            let end = Compiler.builder.exit_subscope(SCOPE);\n            // was block close -> end compilation at this point\n            if (end && last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n\n            // block close (TODO still required?)\n            /*else if (SCOPE.subscopes.length == 1) {\n\n                DatexCompiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COMMAND_END;\n                SCOPE.last_command_end = true;\n                // reset\n                DatexCompiler.builder.close_current_path(SCOPE); // new path scope\n            }*/\n            isEffectiveValue = true;\n        }\n\n        // FREEZE\n        else if (m = SCOPE.datex.match(Regex.FREEZE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.FREEZE;  \n        }\n\n        // SEAL\n        else if (m = SCOPE.datex.match(Regex.SEAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SEAL;  \n        }\n\n        // HAS\n        else if (m = SCOPE.datex.match(Regex.HAS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.HAS;  \n        }\n\n        // KEYS\n        else if (m = SCOPE.datex.match(Regex.KEYS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.KEYS;  \n        }\n\n        // DELETE pointer (before VARIABLE)\n        else if (m = SCOPE.datex.match(Regex.DELETE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DELETE_POINTER;  \n        }\n\n        // // SUBSCRIBE to pointer\n        // else if (m = SCOPE.datex.match(Regex.SUBSCRIBE)) {\n        //     SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n        //     Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //     Compiler.builder.valueIndex(SCOPE);\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCRIBE;  \n        // }\n\n        // // UNSUBSCRIBE from pointer\n        // else if (m = SCOPE.datex.match(Regex.UNSUBSCRIBE)) {\n        //     SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n        //     Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n        //     Compiler.builder.valueIndex(SCOPE);\n        //     SCOPE.uint8[SCOPE.b_index++] = BinaryCode.UNSUBSCRIBE;  \n        // }\n        \n        // COPY value\n        else if (m = SCOPE.datex.match(Regex.COPY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COPY;  \n        }\n\n        // CLONE value\n        else if (m = SCOPE.datex.match(Regex.CLONE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLONE;  \n        }\n\n        // CLONE_COLLAPSE value\n        else if (m = SCOPE.datex.match(Regex.CLONE_COLLAPSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLONE_COLLAPSE;  \n        }\n        \n\n        // COLLAPSE logical value\n        else if (m = SCOPE.datex.match(Regex.COLLAPSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.COLLAPSE;  \n        }\n\n        // create new type short command\n        else if (m = SCOPE.datex.match(Regex.CREATE_TYPE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            console.log(\"create type\",m)\n\n            const exporting = !!m[1];\n            const type = \"ref\";\n            const name = m[3];\n            const init_eternal = true;\n            const init_brackets = !!m[4];\n\n            // restore \"(\"\n            if (!init_eternal && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            if (exporting) {\n                if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                // remember internal variable for exports\n                SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n            }\n\n            else await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n        }\n\n        // typeof\n        else if (m = SCOPE.datex.match(Regex.TYPEOF)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.GET_TYPE;  \n        }\n            \n        // ORIGIN of pointer\n        else if (m = SCOPE.datex.match(Regex.ORIGIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ORIGIN;  \n        }\n\n        // SUBSCRIBERS of pointer\n        else if (m = SCOPE.datex.match(Regex.SUBSCRIBERS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCRIBERS;  \n        }\n\n        // NEXT\n        else if (m = SCOPE.datex.match(Regex.NEXT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;  \n        }\n\n        // TEMPLATE\n        else if (m = SCOPE.datex.match(Regex.TEMPLATE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.TEMPLATE;  \n        }\n        \n        // EXTENDS\n        else if (m = SCOPE.datex.match(Regex.EXTENDS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.EXTENDS;  \n        }\n\n        // IMPLEMENTS\n        else if (m = SCOPE.datex.match(Regex.IMPLEMENTS)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.IMPLEMENTS;  \n        }\n\n        // MATCHES\n        else if (m = SCOPE.datex.match(Regex.MATCHES)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MATCHES;  \n        }\n        \n\n        // DEFAULT\n        else if (m = SCOPE.datex.match(Regex.DEFAULT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            const brackets = !!m[1];\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEFAULT;  \n\n            await Compiler.builder.addInitBlock(SCOPE, brackets);\n            Compiler.builder.valueIndex(SCOPE);\n        }\n\n        // DEBUGGER\n        else if (m = SCOPE.datex.match(Regex.DEBUGGER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DEBUGGER;  \n        }\n\n        // NEW\n        else if (m = SCOPE.datex.match(Regex.NEW)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEW;  \n        }\n\n        // CONSTRUCTOR_METHOD\n        else if (m = SCOPE.datex.match(Regex.CONSTRUCTOR_METHOD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            console.log(\"constructor\", m[0]);\n        }\n\n        // SCOPE (plain DATEX Scope)\n        else if (m = SCOPE.datex.match(Regex.SCOPE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.PLAIN_SCOPE, !!m[1], false, SCOPE)  \n        }\n\n        // OBSERVE value\n        else if (m = SCOPE.datex.match(Regex.OBSERVE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OBSERVE;  \n        }\n\n        // FUNCTION\n        else if (m = SCOPE.datex.match(Regex.FUNCTION)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const exporting = !!m[1]\n            const name = m[2];\n            if (name) {\n                if (exporting) {\n                    if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                    // remember internal variable for exports\n                    SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, 'ref', SCOPE);\n                }\n    \n                else await Compiler.builder.addValVarRefDeclaration(name, 'ref', SCOPE);\n            }\n            else if (exporting) {\n                throw new CompilerError(\"Invalid function declaration: cannot export a function without a name (use 'export function NAME()')\")\n            }\n\n            const params:{[name:string]: [named:boolean, type:'val'|'var'|'ref'|'const', type_init:string, default_init:string, exporting:boolean]} = {}\n\n            while (true) {\n                const param = SCOPE.datex.match(Regex.FUNCTION_PARAM);\n\n                if (!param) break; // no param match\n\n                SCOPE.datex = SCOPE.datex.substring(param[0].length);\n                const param_modifiers = param[1]?.trim().split(\" \").map(v=>v.trim()) ?? '';\n                const param_name = param[2];\n                let param_end = param[3]\n\n                if (param_name in params) throw new CompilerError(\"Function variable '\"+param_name+\"' was already declared\")\n                params[param_name] = [param_modifiers.includes(\"named\"), (param_modifiers.includes(\"ref\") ? \"ref\" : (param_modifiers.includes(\"val\") ? \"val\" : \"var\")), \"<Any>\", \"\", param_modifiers.includes(\"export\")];\n\n                if (param_end == \",\") {\n                    continue;\n                }\n\n                if (param_end == \":\") {\n                    // veryyy inefficient way of doing things TODO\n                    let return_data:{datex:string} = {datex: SCOPE.datex}; \n                    // ignore result - very bad\n                    await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 42 /*illegal*/, SCOPE.current_data_index);\n                    params[param_name][2] = SCOPE.datex.replace(return_data.datex, \"\");\n                    if (return_data.datex[0] == \")\") {\n                        SCOPE.datex = return_data.datex;\n                        break;\n                    } // end of parameter list\n                    else if (return_data.datex[0] == \"=\") param_end = \"=\";\n                    SCOPE.datex = return_data.datex.slice(1).trimStart()\n                }\n                \n                \n                if (param_end == \"=\") {\n                    // veryyy inefficient way of doing things TODO\n                    let return_data:{datex:string} = {datex: SCOPE.datex}; \n                    // ignore result - very bad\n                    await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, pseudo_parent:true, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, false, false, undefined, Infinity, 2, SCOPE.current_data_index);\n                    params[param_name][3] = SCOPE.datex.replace(return_data.datex, \"\");\n                    if (return_data.datex[0] == \")\") {\n                        SCOPE.datex = return_data.datex;\n                        break;\n                    } // end of parameter list\n                    SCOPE.datex = return_data.datex.slice(1).trimStart();\n                }\n\n                if (param_end == \")\") {\n                    SCOPE.datex = \")\" + SCOPE.datex; // fake )\n                    break; // end of parameter list\n                }\n          \n            }\n\n            // remove )\n            SCOPE.datex = SCOPE.datex.slice(1).replace(/^(\\s*\\=\\>)?\\s*/, ''); // trim and ignore '=>'\n\n            let has_bracket = SCOPE.datex[0] == \"(\";\n            if (has_bracket) SCOPE.datex = SCOPE.datex.slice(1).trimStart();\n\n            let i = 0;\n\n            let type_signature = '<Function((';\n\n            let init = \"scope (\";\n            for (let [name, [named,type,type_init,default_init,exporting]] of Object.entries(params)) {\n                init += `\\n${exporting?'export ':''}${type} ${name} = (#it.${i++}${default_init ? ' default '+default_init : ''});`\n                type_signature += `${named?name+': ':''}${type_init},`\n            }\n            init += \";\";\n\n            type_signature += '),)>';\n\n            SCOPE.datex = type_signature + init + SCOPE.datex;\n        }\n\n        // PLUGIN\n        else if (m = SCOPE.datex.match(Regex.PLUGIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1];\n\n            \n            // plugin enabled?\n            if (SCOPE.options.plugins?.includes(name) || activePlugins.includes(name) || SCOPE.options.required_plugins?.includes(name)) {\n                SCOPE.unused_plugins?.delete(name);\n                SCOPE.datex = `export const ${name} = (` + SCOPE.datex;\n            }\n\n            // not enabled, ignore\n            else {\n                // compile and ignore (required to find closing bracket)\n                // TODO: optimize this, no full compilation required\n                const brackets = true;\n                const return_data:{datex:string} = {datex: SCOPE.datex}; \n                await this.compile(return_data, SCOPE.data, {parent_scope:SCOPE, to: Compiler.builder.getScopeReceiver(SCOPE)}, false, true, false, undefined, Infinity, brackets?1:2, SCOPE.current_data_index);\n\n                SCOPE.datex = return_data.datex; // update position in current datex script\n            }\n\n        }\n\n        // RUN\n        else if (m = SCOPE.datex.match(Regex.RUN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.RUN, !!m[1], false, SCOPE)  \n        }\n\n        // DO\n        else if (m = SCOPE.datex.match(Regex.DO)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.DO, !!m[1], false, SCOPE)  \n        }\n\n        // ASSERT\n        else if (m = SCOPE.datex.match(Regex.ASSERT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.ASSERT, !!m[1], false, SCOPE)  \n        }\n\n        // RESPONSE\n        else if (m = SCOPE.datex.match(Regex.RESPONSE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.RESPONSE, !!m[1], false, SCOPE)  \n        }\n\n        // DEFER\n        else if (m = SCOPE.datex.match(Regex.DEFER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            await Compiler.builder.addScopeBlock(BinaryCode.DEFER, !!m[1], false, SCOPE)     \n        }\n\n        // AWAIT\n        else if (m = SCOPE.datex.match(Regex.AWAIT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            Compiler.builder.valueIndex(SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AWAIT;  \n        }\n\n        // OR_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.OR_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n         \n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OR;  \n        }\n\n        // AND_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.AND_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;  \n        }\n\n        // NOT_OPERATOR\n        else if (m = SCOPE.datex.match(Regex.NOT_OPERATOR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT;  \n        }\n\n        // POINTER\n        else if (m = SCOPE.datex.match(Regex.POINTER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            let [action_type, action_specifier] = Compiler.builder.getAssignAction(m[2]);\n\n            const id = m[1].replace(/_/g, \"\");\n            const init_brackets = !!m[3];\n\n            // restore \"(\"\n            if (action_type!=ACTION_TYPE.INIT && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            // pre extract\n            if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET) {\n                // TODO handle := INIT here?\n                Compiler.builder.insertExtractedVariable(SCOPE, BinaryCode.POINTER, id)\n            }\n            // insert normally\n            else await Compiler.builder.addPointerByID(SCOPE, id, action_type, action_specifier, init_brackets, NOT_EXISTING)\n            isEffectiveValue = true;\n        }\n\n        // var, ref, (export) val\n        else if (m = SCOPE.datex.match(Regex.VAR_REF_VAL)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const exporting = !!m[1];\n            const type = <\"val\" | \"var\" | \"ref\" | \"const\"> m[2];\n            const name = m[3];\n            const init_eternal = !!m[4];\n            const init_brackets = !!m[5];\n\n            // restore \"(\"\n            if (!init_eternal && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            if (exporting) {\n                if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n                // remember internal variable for exports\n                SCOPE.inner_scope.exports[name] = await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n            }\n\n            else await Compiler.builder.addValVarRefDeclaration(name, type, SCOPE, init_eternal, init_brackets);\n        }\n\n\n        // export x\n        else if (m = SCOPE.datex.match(Regex.DIRECT_EXPORT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const name = m[1];\n            // TODO replace with Object.hasOwn\n            if (!SCOPE.inner_scope.vars.hasOwnProperty(name)) throw new CompilerError(\"Cannot export undeclared variable '\"+name+\"'\");\n\n            if (!SCOPE.inner_scope.exports) SCOPE.inner_scope.exports = {};\n            // remember internal variable index for exports\n            SCOPE.inner_scope.exports[name] = SCOPE.inner_scope.vars[name][1];\n\n        }\n        \n\n        // INTERNAL_VAR or ROOT_VARIABLE or LABELED_POINTER\n        else if ((m = SCOPE.datex.match(Regex.INTERNAL_VAR)) || (m = SCOPE.datex.match(Regex.ROOT_VARIABLE)) || (m = SCOPE.datex.match(Regex.LABELED_POINTER))) {\n            let v_name:string|number|undefined = m[2]; // get var name\n            const is_internal = m[1] == \"#\"; // is internal variable (#)?\n            const is_label = m[1] == \"$\";\n            const is_hex = v_name.match(Regex.HEX_VARIABLE) && (is_internal || is_label);\n            const init_brackets = !!m[4];\n\n            // variable options\n            let base_type = is_internal ? BinaryCode.INTERNAL_VAR : (is_label ? BinaryCode.LABEL : -1); // var or internal var\n    \n            // SCOPE.inner_scope.path_info_index == -1: is child property -> GET action\n            // TODO re-enable is_property? example: 'c = count x;' is not working with this enabled!!?\n            const is_property = false // (SCOPE.inner_scope.path_info_index !== -1);\n\n            if (is_property) SCOPE.datex = SCOPE.datex.substring(m[1].length + m[2].length + m[3].length);  // pop datex (not \"=\" or \"+=\")\n            else SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex (also \"=\" or \"+=\")\n\n            const [action_type, action_specifier] = is_property ? [ACTION_TYPE.GET] : Compiler.builder.getAssignAction(m[3]);\n\n            if (is_hex) v_name = parseInt(v_name.replace(/[-_]/g,''),16) || 0;\n\n            // restore \"(\"\n            if (action_type!=ACTION_TYPE.INIT && init_brackets) SCOPE.datex = \"(\" + SCOPE.datex;\n\n            // is a value\n            if (action_type == ACTION_TYPE.GET) Compiler.builder.valueIndex(SCOPE);\n\n            // default internal variable shorthands\n            if (is_internal) {\n                const mapped = typeof v_name == \"string\" ? Compiler.builder.mapInternalVarNameToByteCode(v_name, action_type, SCOPE) : undefined;\n                if (typeof mapped == \"number\") {\n                    base_type = mapped;\n                    v_name = undefined;\n                }\n                // resolve internal var proxy name\n                else if (typeof v_name == \"string\") {\n                    v_name = Compiler.builder.resolveInternalProxyName(SCOPE, <string>v_name);\n                }\n            }\n\n            // is var,val,ref\n            if (base_type == -1) {\n                await Compiler.builder.insertValVarRef(SCOPE, <string>v_name, action_type, action_specifier);\n            }\n\n            // force extract label/pointer (for transform), recursion not required\n            else if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET && (base_type == BinaryCode.LABEL || base_type == BinaryCode.POINTER)) {\n                Compiler.builder.insertExtractedVariable(SCOPE, base_type, v_name)\n            }\n            // // '->' property follows (property is handled afterwards)\n            // else if (SCOPE.extract_pointers && action_type == ACTION_TYPE.GET &&  SCOPE.datex.trim().startsWith(\"->\")) {\n            //     Compiler.builder.insertExtractedVariable(SCOPE, base_type, v_name)\n            // }\n\n            // insert normally (pointer,label,internal var)\n            else await Compiler.builder.insertVariable(SCOPE, v_name, action_type, action_specifier, base_type, undefined, init_brackets);\n            \n            isEffectiveValue = true;\n        }\n\n\n        // CREATE_POINTER\n        else if (m = SCOPE.datex.match(Regex.CREATE_POINTER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CREATE_POINTER;\n        }\n\n        // HEX (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.HEX)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 16), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // BIN (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.BIN)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 2), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // OCT (before UNIT)\n        else if (m = SCOPE.datex.match(Regex.OCT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addInt(parseInt(m[1].replaceAll('_',''), 8), SCOPE)\n            isEffectiveValue = true;\n        }\n\n\n        // QUANTITY (before FLOAT)\n        else if (m = SCOPE.datex.match(Regex.QUANTITY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const value = m[1];\n            const unit = <unit_symbol>m[2];\n            try {\n                Compiler.builder.addQuantity(new Quantity(value, unit), SCOPE)\n            }\n            catch (e){\n                if (e instanceof DatexError) e.setStack(...SCOPE.stack);\n                throw e;\n            }\n            isEffectiveValue = true;\n        }\n\n        \n        // TIME\n        else if (m = SCOPE.datex.match(Regex.TIME)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            try {\n                Compiler.builder.addTime(new Time(m[0]), SCOPE)\n            }\n            catch (e){\n                if (e instanceof DatexError) e.setStack(...SCOPE.stack);\n                throw e;\n            }\n            isEffectiveValue = true;\n        }\n\n        // FLOAT (before INT)\n        else if (m = SCOPE.datex.match(Regex.FLOAT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.addFloat(parseFloat(m[0].replace(/[_ ]/g, \"\")), SCOPE)\n            isEffectiveValue = true;\n        }\n\n        // INT   \n        else if (m = SCOPE.datex.match(Regex.INT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            const intString = m[0].replace(/[_ ]/g, \"\");\n            let int:number|bigint = parseInt(intString);\n            // use bigint if int is out of range\n            if (!Number.isSafeInteger(int)) int = BigInt(intString);\n            Compiler.builder.addInt(int, SCOPE)\n            isEffectiveValue = true;\n        }\n\n\n        // ASSIGN (=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_SET)) {\n            if (SCOPE._code_block_type==42 && SCOPE.subscopes.length==1) { // in outer scope and single line block?\n                SCOPE.end = true;\n                if (last_command_end) SCOPE.last_command_end = true; // last command is still the last command\n                return;\n            }\n            \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_SET;\n        }\n        \n        // ASSIGN_ADD (+=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_ADD)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.ADD, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_SUBTRACT (-=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_SUB)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.SUBTRACT, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_MUTIPLY (*=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_MUTIPLY)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.MULTIPLY, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_DIVIDE (/=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_DIVIDE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.DIVIDE, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_POWER (^=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_POWER)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.POWER, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_AND (&=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_AND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.AND, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_OR (|=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_OR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else {\n                SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_ACTION;\n                Compiler.builder.insertByteAtIndex(BinaryCode.OR, SCOPE.inner_scope.path_info_index+1, SCOPE); // add action specifier\n            }\n        }\n\n        // ASSIGN_REFERENCE ($=)\n        else if (m = SCOPE.datex.match(Regex.ASSIGN_REFERENCE)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n\n            if (SCOPE.inner_scope.path_info_index == -1) throw new CompilerError(\"Invalid assignment\", SCOPE.stack);\n            else SCOPE.uint8[SCOPE.inner_scope.path_info_index] = BinaryCode.CHILD_SET_REFERENCE;\n        }\n\n        // INCREMENT\n        else if (m = SCOPE.datex.match(Regex.INCREMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.datex = \"+=1\" + SCOPE.datex;\n            // TODO\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.INCREMENT;  \n        }\n\n        // DECREMENT\n        else if (m = SCOPE.datex.match(Regex.DECREMENT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            // TODO\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DECREMENT;  \n        }\n\n        // ADD\n        else if (m = SCOPE.datex.match(Regex.ADD)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.ADD;  \n        }\n\n        // SUBTRACT\n        else if (m = SCOPE.datex.match(Regex.SUBTRACT)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBTRACT;  \n        }\n\n        // MULTIPLY\n        else if (m = SCOPE.datex.match(Regex.MULTIPLY)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MULTIPLY;  \n        }\n\n        // POWER ^\n        else if (m = SCOPE.datex.match(Regex.POWER)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.POWER;  \n        }\n\n        // MODULO ^\n        else if (m = SCOPE.datex.match(Regex.MODULO)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.MODULO;  \n        }\n\n        // DIVIDE\n        else if (m = SCOPE.datex.match(Regex.DIVIDE)) {               \n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.DIVIDE;  \n        }\n    \n        // OR\n        else if (m = SCOPE.datex.match(Regex.OR)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n         \n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.OR;  \n        }\n\n        // AND\n        else if (m = SCOPE.datex.match(Regex.AND)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.AND;  \n        }\n\n        // NOT\n        else if (m = SCOPE.datex.match(Regex.NOT)) {\n            SCOPE.datex = SCOPE.datex.substring(m[0].length);  // pop datex\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NOT;  \n        }\n\n       \n\n        else {\n            throw new SyntaxError(\"Invalid token on line \"+SCOPE.current_line_nr+\" near '\" + SCOPE.datex.split(\"\\n\")[0] + \"'\");\n        }\n\n        // immediate +/- operation possible\n        if (isEffectiveValue) Compiler.builder.tryPlusOrMinus(SCOPE);\n\n\n        // after inserted last value for value_count\n        if (!SCOPE.inner_scope?.value_count) {\n\n            let end_index:number;\n\n            if ('iterate' in SCOPE.inner_scope) {\n                // insert initialisation\n                if (SCOPE.inner_scope.iterate == 0) {\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n                    SCOPE.inner_scope.loop_start = SCOPE.b_index;\n\n                    // ... jtr loop_start (next #i);\n                    SCOPE.inner_scope.jfa_index = SCOPE.b_index+1;\n                    Compiler.builder.addJmp(SCOPE,  BinaryCode.JFA);\n\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_START;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.NEXT;\n                    Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                    // // #it = #iter->val;\n                    // Compiler.builder.insertVariable(SCOPE, 'it', ACTION_TYPE.SET, undefined, BinaryCode.INTERNAL_VAR);\n                    // Compiler.builder.handleRequiredBufferSize(SCOPE.b_index+1, SCOPE);\n                    // Compiler.builder.insertVariable(SCOPE, 'i', ACTION_TYPE.GET, undefined, BinaryCode.INTERNAL_VAR);\n                    // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CHILD_GET;\n                    // Compiler.builder.addString('val', SCOPE);\n                    // SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE;  \n\n                    // now wait for iterate block\n                    SCOPE.inner_scope.iterate = 1;\n                    SCOPE.inner_scope.value_count = 1;\n                }\n                // next() + jump instrution at the end\n                else {\n                    // jmp to start\n                    Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start)\n\n                    // insert end index for jfa end\n                    SCOPE.data_view.setUint32(SCOPE.inner_scope.jfa_index, SCOPE.b_index, true);\n                    \n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                            \n                    delete SCOPE.inner_scope.loop_start;\n                    delete SCOPE.inner_scope.iterate;\n                }\n                \n            }\n\n            else if ('while' in SCOPE.inner_scope) {\n                // jmp start\n                Compiler.builder.addJmp(SCOPE, BinaryCode.JMP, SCOPE.inner_scope.loop_start)\n\n                // insert end index for jfa end\n                SCOPE.data_view.setUint32(SCOPE.inner_scope.loop_start+1, SCOPE.b_index, true);\n\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n\n                delete SCOPE.inner_scope.loop_start;\n                delete SCOPE.inner_scope.while;\n            }\n            else if ('if' in SCOPE.inner_scope) {\n\n                // add if_end_indices\n                if (!SCOPE.inner_scope.if_end_indices) SCOPE.inner_scope.if_end_indices = [];\n                SCOPE.inner_scope.if_end_indices.push(SCOPE.b_index+1);\n                \n                // jmp start\n                Compiler.builder.addJmp(SCOPE, BinaryCode.JMP)\n\n                // insert end index for jfa end -> jump to next else (if) or end\n                SCOPE.data_view.setUint32(SCOPE.inner_scope.if+1, SCOPE.b_index, true);\n                end_index = SCOPE.b_index; // set end_index to before SUBSCOPE_END\n\n                Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END; // assume already end of 'if'-subscope - might be overidden\n            }\n\n            // update end index for all current if/else clauses\n            if ('else' in SCOPE.inner_scope || 'if' in SCOPE.inner_scope) {\n                // set end index for all previous ifs/else ifs\n                end_index = end_index ?? SCOPE.b_index;\n                for (let index of SCOPE.inner_scope.if_end_indices??[]) {\n                    SCOPE.data_view.setUint32(index, end_index, true);\n                }\n\n                // handle only 'else'\n                if ('else' in SCOPE.inner_scope) {\n                    delete SCOPE.inner_scope.if_end_indices;\n                    delete SCOPE.inner_scope.else;\n\n                    // definitly end of 'if'-subscope\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.SUBSCOPE_END;\n                }\n                // delete 'if'\n                else delete SCOPE.inner_scope.if;\n            \n            }\n\n            // reset value_count\n            delete SCOPE.inner_scope.value_count;\n        }\n\n\n        // handle function scope block\n        if (SCOPE.inner_scope.function != null && SCOPE.b_index != SCOPE.inner_scope.function) {\n            // block with brackets ?\n            let has_brackets = false;\n            SCOPE.datex = SCOPE.datex.replace(/^[^\\S\\n]+/, \"\"); //(/^[^\\S\\r\\n]+/\n            if (SCOPE.datex[0] == \"(\") {\n                has_brackets = true;\n                SCOPE.datex = SCOPE.datex.slice(1);\n            }\n            await Compiler.builder.addScopeBlock(BinaryCode.FUNCTION, has_brackets, false, SCOPE);\n            SCOPE.inner_scope.function = null;\n        }\n    }\n\n    static async createBlockFromScope(SCOPE:compiler_scope):Promise<ArrayBuffer> {\n\n        return SCOPE.add_header ? await this.appendHeader(\n            SCOPE.buffer,\n            SCOPE.options.end_of_scope,\n            SCOPE.options.from, //sender\n            SCOPE.options.to, // to\n            SCOPE.options.flood, // flood\n            SCOPE.options.type, // type\n            SCOPE.options.sign, \n            SCOPE.options.encrypt, // encrypt\n            SCOPE.options.send_sym_encrypt_key,\n            SCOPE.options.sym_encrypt_key, // encryption key\n            SCOPE.options.allow_execute, // allow execute\n\n            SCOPE.options.sid,\n            SCOPE.options.return_index,\n            SCOPE.options.inc,\n\n            SCOPE.options.force_id,\n\n            SCOPE.options.__routing_ttl,\n            SCOPE.options.__routing_prio,\n            SCOPE.options.__routing_to,\n\n            SCOPE.receiver_buffer,\n            SCOPE.sender_buffer,\n            SCOPE.pre_header_size,\n            SCOPE.signed_header_size,\n            SCOPE.full_dxb_size\n        ) : SCOPE.buffer;\n    }\n\n    /**\n     * Workaround: recursively cache all blob values in the iterable\n     */\n    static cacheValues(iterable: Iterable<unknown>, promises:Promise<void>[] = []): Promise<void>[] {\n        for (const val of iterable) {\n            if (val instanceof Blob) promises.push(Runtime.cacheValue(val));\n            else if (typeof val == \"object\" && (val as any)?.[Symbol.iterator]) this.cacheValues((val as any), promises);\n        }\n        return promises;\n    }\n\n\n    // compile loop\n    static async compileLoop(SCOPE:compiler_scope):Promise<ArrayBuffer|ReadableStream<ArrayBuffer>>  {\n\n        // make sure WebRTC interface is loaded\n        ({ WebRTCInterface } = await import(\"../network/communication-interfaces/webrtc-interface.ts\"));\n\n        // cache inserted blob values\n        const promises = SCOPE.data ? this.cacheValues(SCOPE.data) : [];\n        if (promises.length) await Promise.all(promises);\n\n        const body_compile_measure = RuntimePerformance.enabled ? RuntimePerformance.startMeasure(\"compile time\", \"body\") : undefined;\n\n        if (!SCOPE.datex) SCOPE.datex = \";\";//throw new CompilerError(\"DATEX Script is empty\");\n\n        // iterate over all tokens / commands, stop if end not reached after 1000 tokens\n        for (let i=0;i<500_000;i++) {            \n            await this.parseNextExpression(SCOPE); // parse and update index in binary\n\n            // streaming, generate multiple blocks as ReadableStream\n            if (SCOPE.streaming) {\n\n                const _end_of_scope = SCOPE.options.end_of_scope;\n                \n                SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  // slice until current index\n                return new ReadableStream<ArrayBuffer>({\n                    async start(controller:ReadableStreamDefaultController<ArrayBuffer>) {\n                        SCOPE.options.end_of_scope = false;\n\n                        // first part of scope until the stream starts\n                        controller.enqueue(await Compiler.createBlockFromScope(SCOPE));\n                                                \n                        // read stream and insert\n                        const reader = SCOPE.streaming!;\n                        let next:ReadableStreamReadResult<any>,\n                            value: any;\n                        while (true) {\n                            if (SCOPE.options.stream_abort_signal?.aborted) {\n                                console.log(`Stream ${SCOPE.options.sid} was aborted`)\n                                break;\n                            }\n                            next = await reader.read()\n                            if (SCOPE.options.stream_abort_signal?.aborted) {\n                                console.log(`Stream ${SCOPE.options.sid} was aborted`)\n                                break;\n                            }\n                            if (next.done) break;\n                            value = next.value;\n                                                \n                            // optimized: create array buffer dxb\n                            if (value instanceof ArrayBuffer || value instanceof TypedArray) {\n                                SCOPE.buffer = new ArrayBuffer(value.byteLength+1+Uint32Array.BYTES_PER_ELEMENT);\n                                SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n                                SCOPE.data_view = new DataView(SCOPE.buffer);\n                                SCOPE.uint8[0] = BinaryCode.BUFFER;\n                                SCOPE.data_view.setUint32(1, value.byteLength, true);   // buffer length\n                                SCOPE.uint8.set(value instanceof Uint8Array ? value : new Uint8Array(value), 1+Uint32Array.BYTES_PER_ELEMENT);\n                            }\n                            // insert another value\n                            else SCOPE.buffer = Compiler.compileValue(value, {}, false);\n\n                            const buffer = await Compiler.createBlockFromScope(SCOPE);\n                            (buffer as any)._is_stream = true; // internal flag, set when the outgoing message is a stream, used to prevent recursive stream logs\n                            controller.enqueue(buffer);\n                        }\n\n                        // continue after stream, reset SCOPE to previous state\n                        // TODO not working properly with jumps, buffers and indices are reset\n                        SCOPE.b_index = 0;\n                        SCOPE.buffer = new ArrayBuffer(400);\n                        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n                        SCOPE.data_view = new DataView(SCOPE.buffer);\n                        SCOPE.options.end_of_scope = _end_of_scope;\n                        SCOPE.streaming = null;\n\n                        let res = await Compiler.compileLoop(SCOPE);\n\n                        // is single block\n                        if (res instanceof ArrayBuffer) {\n                            if (SCOPE.options.end_of_scope) controller.enqueue(new ArrayBuffer(0)); // indicate last block following\n                            controller.enqueue(res);\n                        }\n                        // is another stream of blocks\n                        else {\n                            const reader = res.getReader();\n                            let next:ReadableStreamReadResult<ArrayBuffer>;\n                            while (true) {\n                                next = await reader.read()\n                                if (next.done) break;\n                                controller.enqueue(next.value);\n                            }\n                        }\n\n                        controller.close();\n                    }\n                })\n            }\n\n            // end of scope reached\n            if (SCOPE.end || !SCOPE.datex) { \n\n                // check for required plugins\n                if (SCOPE.unused_plugins?.size) {\n                    const ext = [...SCOPE.unused_plugins];\n                    if (SCOPE.unused_plugins.size == 1) throw new CompilerError(`Plugin \"${ext[0]}\" is required, but not found in script`);\n                    else throw new CompilerError(`Plugins \"${ext.join(\",\")}\" are required, but not found in script`);\n                }\n\n                // check for missing object brackets\n                for (const scope of SCOPE.subscopes) {\n                    if (scope.parent_type == BinaryCode.OBJECT_START) {\n                        console.warn(SCOPE.datex)\n                        throw new SyntaxError(\"Missing closing object bracket\");\n                    }\n                    if (scope.parent_type == BinaryCode.ARRAY_START) throw new SyntaxError(\"Missing closing array bracket\");\n                    if (scope.parent_type == BinaryCode.SUBSCOPE_START) throw new SyntaxError(\"Missing closing bracket\");\n                }\n\n                if (Object.keys(SCOPE.indices_waiting_for_jmp_lbl).length) {\n                    throw new CompilerError(\"Jump to non-existing lbl: \" + Object.keys(SCOPE.indices_waiting_for_jmp_lbl), SCOPE.stack);\n                }\n\n                if (SCOPE.return_data) SCOPE.return_data.datex = SCOPE.datex;\n\n                // add ; if missing (only if end of scope)\n                if (SCOPE.options.end_of_scope!==false && !SCOPE.last_command_end) {\n                    // auto-close subscopes here?\n                    while (SCOPE.inner_scope?.auto_close_scope!=undefined) {\n                        const type = SCOPE.inner_scope.auto_close_scope;\n                        delete SCOPE.inner_scope.auto_close_scope;\n                        Compiler.builder.exit_subscope(SCOPE, type);\n                    }\n\n                    Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n                    SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n                }\n\n                \n                // insert preemptive pointer inits\n                // console.log(\"PRREMITVE\",SCOPE.preemptive_pointers)\n                // if (SCOPE.preemptive_pointers.size) {\n                //     for (const id of SCOPE.preemptive_pointers) {\n                //         const ptr = Pointer.get(id);\n                //         if (ptr) {\n                //             await Compiler.builder.addPointerByID(SCOPE, id, ACTION_TYPE.INIT, undefined, true, ptr.val);\n                //         }\n                //         // otherwise pointer was not yet initialized, cannot be loaded preemptively\n                //     }\n                // }\n                \n                // exports tuple\n                if (SCOPE.inner_scope.exports) Compiler.builder.insert_exports(SCOPE);\n\n                SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  // slice until current index (remove 0s at the end)\n\n                // insert buffer for compile time insertions at top\n                if (SCOPE.options.insert_header && SCOPE.is_outer_insert) {\n                    SCOPE.options.insert_header.buffer = SCOPE.options.insert_header.buffer.slice(0, SCOPE.options.insert_header.index);  // slice until current index (remove 0s at the end)\n                    SCOPE.buffer = Compiler.combineBuffers(SCOPE.options.insert_header.buffer, SCOPE.buffer);\n                }\n\n                // prefix extract_var_scope? -> scope block\n                /*\n                    var1 var2 var3 BinaryCode.SCOPE_BLOCK [SCOPE.buffer.byteLength] [SCOPE.buffer]\n                */\n                if (SCOPE.extract_var_scope) {\n                    SCOPE.extract_var_scope.uint8[SCOPE.extract_var_scope.b_index++] = BinaryCode.SCOPE_BLOCK;\n                    SCOPE.extract_var_scope.data_view.setUint32(SCOPE.extract_var_scope.b_index, SCOPE.buffer.byteLength, true);\n                    SCOPE.extract_var_scope.b_index += Uint32Array.BYTES_PER_ELEMENT;\n\n                    SCOPE.extract_var_scope.buffer = SCOPE.extract_var_scope.buffer.slice(0, SCOPE.extract_var_scope.b_index);  // slice until current index (remove 0s at the end)\n                    SCOPE.buffer = Compiler.combineBuffers(SCOPE.extract_var_scope.buffer, SCOPE.buffer);\n                }\n\n                if (SCOPE.precompiled) {\n                    // add last buffer part to precompiled dxb if available\n                    SCOPE.precompiled.appendBufferPlaceholder(SCOPE.last_precompiled??0,SCOPE.b_index);\n                    // now insert actual buffer data\n                    SCOPE.precompiled.autoInsertBuffer(SCOPE.buffer);\n                }\n\n                // check if max block size exceeded -> return ReadableStream with multiple blocks (only if full block with header)\n                if (SCOPE.add_header && (await this.getScopeBlockSize(SCOPE) >= SCOPE.max_block_size??Compiler.MAX_DXB_BLOCK_SIZE)) {\n                    const original_buffer = SCOPE.buffer;\n                    const total_header_size = SCOPE.pre_header_size + SCOPE.signed_header_size;\n                    const max_body_size = SCOPE.max_block_size - total_header_size;\n                    console.log(\"block too big (\"+await this.getScopeBlockSize(SCOPE)+\" bytes), splitting into parts with body size \" + max_body_size)\n                    let split_index = 0;\n                    // return ReadableStream (could actually just be an array of ArrayBuffers, since all buffers are already known, but ReadableStream is needed anyways)\n                    return new ReadableStream<ArrayBuffer>({\n                        async start(controller:ReadableStreamDefaultController<ArrayBuffer>) {\n                            let last_block = false;\n                            // add block by block\n                            while (!last_block) {\n                                SCOPE.buffer = original_buffer.slice(split_index, split_index + max_body_size);\n                                split_index += max_body_size\n                                SCOPE.full_dxb_size = total_header_size + SCOPE.buffer.byteLength; // update full_dxb_size to new shortened size \n                                last_block = split_index>=original_buffer.byteLength;\n                                SCOPE.options.end_of_scope = last_block // set EOS to true if no more blocks coming, else false\n                                const block = await Compiler.createBlockFromScope(SCOPE);\n                                if (last_block) controller.enqueue(new ArrayBuffer(0)); // indicate last block following\n                                controller.enqueue(block);\n                            }\n\n                            controller.close();\n                        }\n                    })\n                    \n                }\n\n                // return a single block (or split into multiple blocks if too big)\n                else {\n                    if (RuntimePerformance.enabled) RuntimePerformance.endMeasure(body_compile_measure); // compile time for a single block (dxb body) can be measure here\n                    return Compiler.createBlockFromScope(SCOPE);\n                }\n\n            } // end reached\n        }\n\n        // end not reached after 500_000 iterations\n        throw new SyntaxError(\"DATEX Script to big to compile\");\n    }\n\n\n\n    /** create compiled dxb (stored as a string) from any value */\n    static valueToBase64DXB(value:any, inserted_ptrs?:Set<Pointer>):string {\n        const dxb = Compiler.compileValue(value, {inserted_ptrs})\n        return arrayBufferToBase64(dxb);\n    }\n\n    /** create compiled dxb (stored as a string) from a DATEX Script string */\n    static async datexScriptToBase64DXB(dx:string, type = ProtocolDataType.DATA, data = [], options:compiler_options={}):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, data, {sign:false, encrypt: false, type, ...options})\n        return arrayBufferToBase64(dxb);\n    }\n\n    /**\n     * Compile a DATEX Script to a DXB or DX file\n     * The file is saved in storage if runnning on deno, and downloaded if running in a browser\n     * @param script_or_url script or path to script file\n     * @param output_name_or_path full output file path as url (only works with deno) or file name (extension is optional and automatically inferred by default)\n     * @param file_type export file type (dx or dxb)\n     * @param type export file protocol type (only relevant for DATEX Binary file export)\n     * @param data insert data for script\n     */\n    static async compileAndExport(script_or_url:string|URL, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, type = ProtocolDataType.DATA, data = []) {\n        // compile\n        const blob = await this.compileToFile(script_or_url, file_type, type, data);\n        // export\n        return this.export(blob, output_name_or_path, file_type, script_or_url instanceof URL ? script_or_url : undefined)\n    }\n\n    static async exportValue(value: any, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, collapse_pointers = true, collapse_first_inserted = true, keep_external_pointers = true, resolve_slots = true) {\n        // compile value\n        const buffer = await this.compile(\"?\", [value], {collapse_pointers, collapse_first_inserted, keep_external_pointers, no_create_pointers: false, flood: true, to: undefined}) as ArrayBuffer;\n\n        if (file_type[0] == \"application/datex\") {\n            // export\n            return this.export(buffer, output_name_or_path, file_type)\n        }\n        else {\n            return this.export(MessageLogger.decompile(buffer, true, false, resolve_slots), output_name_or_path, file_type)\n        }\n\n    }\n\n    protected static async export(dxb_or_datex_script:Blob|ArrayBuffer|string, output_name_or_path?:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, original_url?:URL) {\n        // compile\n        const blob = dxb_or_datex_script instanceof Blob ? dxb_or_datex_script : new Blob([dxb_or_datex_script], {type:file_type[0]});\n\n        // export\n        if (client_type == \"deno\") {\n            let export_path:URL;\n            // export url\n            if (output_name_or_path instanceof URL) export_path = output_name_or_path;\n            // auto infer export url from import url\n            else if (original_url instanceof URL) {\n                let name:string\n                // name provided\n                if (typeof output_name_or_path == \"string\") name = output_name_or_path;\n                // default filename (remove extension from current url path)\n                else name = original_url.pathname.split('/').pop()!.split('.').slice(0, -1).join('.');\n\n                // normalize file name\n                name = this.normalizeFileName(name, file_type);\n\n                export_path = new URL(name, original_url);\n            }\n            // cannot find a url\n            else throw new CompilerError(\"Cannot export file - import or export URL required\");\n\n            logger.success(\"exporting to \" + export_path);\n\n            await this.saveFile(blob, export_path)\n        }\n        else {\n            let name:string\n            // use filename if url provided\n            if (output_name_or_path instanceof URL) name = output_name_or_path.pathname.split('/').pop()!;\n            else if (output_name_or_path) {\n                name = output_name_or_path;\n            }\n            // default filename\n            else {\n                const date = new Date();\n                const timestamp = `${date.getFullYear()}_${date.getMonth()+1}_${date.getDate()}_${date.getHours().toString().padStart(2,'0')}${date.getMinutes().toString().padStart(2,'0')}${date.getSeconds().toString().padStart(2,'0')}`\n                name = `datex_script_${timestamp}`;\n            }\n\n            // normalize file name\n            name = this.normalizeFileName(name, file_type);\n\n            logger.success(\"downloading \" + name);\n\n            this.downloadFile(blob, name);\n        }\n    }\n\n    private static normalizeFileName(name: string, file_type: DATEX_FILE_TYPE){\n        if (!name.includes(\".\")) name += \".\" + file_type[1];  // auto add file extension\n\n        const extension = name.split(\".\").pop()!;\n        if (\n            extension != file_type[1] && !(extension.startsWith(\"json\") && file_type[1] == \"dx\") // exception: json  TODO: valid JSON output (JSON5 should be valid)\n        ) \n            throw new CompilerError(`Output file extension \".${extension}\" does not match output file type \".${file_type[1]}\"`);\n        return name;\n    }\n\n    /**\n     * Compile a DATEX Script to a DXB or DX file blob\n     * @param script_or_url Path to DATEX Script file or DATEX Script text\n     * @param file_type export file type (dx or dxb)\n     * @param type export file protocol type (only relevant for DATEX Binary file export)\n     * @param data insert data for script\n     * @returns Blob with compiled file\n     */\n    static async compileToFile(script_or_url:string|URL, file_type: DATEX_FILE_TYPE = FILE_TYPE.DATEX_BINARY, type = ProtocolDataType.DATA, data = []):Promise<Blob> {\n\n        let script:string;\n       \n        // DATEX Script as string\n        if (typeof script_or_url == \"string\") script = script_or_url;\n        // Fetch Script from URL\n        else {\n            const [data, type] = await Runtime.getURLContent(script_or_url, true, false);\n            // only DATEX Script and JSON allowed\n            if (!(type?.startsWith(\"text/datex\") || type?.startsWith(\"application/json\") || script_or_url.toString().endsWith(\".dx\") || script_or_url.toString().endsWith(\".json\"))) throw new CompilerError(\"Invalid file type: Only DATEX Script and JSON files can be compiled\");\n            script = <string> data;\n\n        }\n        const context_location = (script_or_url instanceof URL) ? script_or_url : undefined;\n\n        if (file_type[0] == \"application/datex\") {\n            const dxb = <ArrayBuffer> await Compiler.compile(script, data, {sign:false, encrypt: false, type, context_location});\n            return new Blob([dxb], {type: file_type[0]});\n        }\n        else if (file_type[0] == \"text/datex\") {\n            const dxb_no_header = <ArrayBuffer> await Compiler.compile(script, data, {sign:false, encrypt: false, type, context_location}, false);\n            return new Blob([wasm_decompile(new Uint8Array(dxb_no_header), true, false, false)], {type: file_type[0]});\n        }\n        else throw new CompilerError(\"Invalid DATEX File type\");\n    }\n\n    /**\n     * Download a blob file (only works in browsers)\n     * @param file file as blob\n     * @param file_name File name\n     */\n    private static downloadFile(file:Blob, file_name:string) {\n        const a = document.createElement(\"a\");\n        const url = URL.createObjectURL(file);\n        a.href = url;\n        a.download = file_name;\n        document.body.appendChild(a);\n        a.click();\n        a.remove();\n    }\n\n    /**\n     * Save a file in storage (only works on deno)\n     * @param file File name\n     * @param file_path path where the file should be stored\n     */\n     private static async saveFile(file:Blob, file_path:string|URL) {\n        return await Deno.writeFile(normalizePath(file_path), new Uint8Array(await file.arrayBuffer()));\n    }\n\n\n    /** create a dxb file created from a DATEX Script string and convert to data url */\n    static async datexScriptToDataURL(dx:string, type = ProtocolDataType.DATA):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, [], {sign:false, encrypt: false, type})\n\n        const blob = new Blob([dxb], {type: \"text/dxb\"}); // workaround to prevent download\n\n        return new Promise(resolve=>{\n            const a = new FileReader();\n            a.onload = function(e) {resolve(<string>e.target.result);}\n            a.readAsDataURL(blob);\n        });\n    }\n\n    /** create a dxb file created from a DATEX Script string and convert to object url */\n    static async datexScriptToObjectURL(dx:string, type = ProtocolDataType.DATA):Promise<string> {\n        const dxb = <ArrayBuffer> await Compiler.compile(dx, [], {sign:false, encrypt: false, type})\n\n        const blob = new Blob([dxb], {type: \"text/dxb\"}); // workaround to prevent download\n        return URL.createObjectURL(blob);\n    }\n\n    /** does not create a full DXB block, only a buffer containing a dxb encoded value */\n    static encodeValue(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false, no_duplicate_value_optimization = false):ArrayBuffer {\n        // add_command_end -> end_of_scope -> add ; at the end\n        return this.compileValue(value, {inserted_ptrs, collapse_pointers:deep_clone, collapse_injected_pointers:collapse_injected_pointers, collapse_first_inserted:collapse_first_inserted, no_create_pointers:no_create_pointers, keep_first_transform:keep_first_transform, no_duplicate_value_optimization}, add_command_end)\n    }\n\n    /** also adds preemptive pointers */\n    static encodeValueAsync(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false, no_duplicate_value_optimization = false):ArrayBuffer {\n        // add_command_end -> end_of_scope -> add ; at the end\n        return this.compileValue(value, {preemptive_pointer_init: true, inserted_ptrs, collapse_pointers:deep_clone, collapse_injected_pointers:collapse_injected_pointers, collapse_first_inserted:collapse_first_inserted, no_create_pointers:no_create_pointers, keep_first_transform:keep_first_transform, no_duplicate_value_optimization}, add_command_end)\n    }\n\n    static encodeValueBase64(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false):string {\n        return arrayBufferToBase64(this.encodeValue(value, inserted_ptrs, add_command_end, deep_clone, collapse_first_inserted, no_create_pointers, keep_first_transform, collapse_injected_pointers));\n    }\n\n    /** also adds preemptive pointers */\n    static async encodeValueBase64Async(value:any, inserted_ptrs?:Set<Pointer>, add_command_end = true, deep_clone = false, collapse_first_inserted = false, no_create_pointers = false, keep_first_transform = true, collapse_injected_pointers = false):string {\n        return arrayBufferToBase64(await this.encodeValueAsync(value, inserted_ptrs, add_command_end, deep_clone, collapse_first_inserted, no_create_pointers, keep_first_transform, collapse_injected_pointers));\n    }\n\n    // creates a unique hash for a given value\n    static getValueHash(value:any):Promise<ArrayBuffer> {\n        return crypto.subtle.digest('SHA-256', Compiler.encodeValue(value, undefined, true, true, true, true));\n    }\n\n    static async getValueHashString(value:any):Promise<string> {\n        return arrayBufferToBase64(await Compiler.getValueHash(value))\n    }\n\n    /**\n     * returns pointer id for pointer values, hash for primitive values\n     * @param value\n     * @returns \n     */\n    static getUniqueValueIdentifier(value:any): Promise<string>|string {\n        // value is pointer - get id\n        if (value instanceof Pointer) return value.idString();\n        const ptr = Pointer.getByValue(value);\n        if (ptr) return ptr.idString();\n        // get value hash\n        else return this.getValueHashString(value);\n    }\n\n    // same as compile, but accepts a precompiled dxb array instead of a Datex Script string -> faster compilation\n    static compilePrecompiled(precompiled:PrecompiledDXB, data:any[] = [], options:compiler_options={}, add_header=true):Promise<ArrayBuffer>|ArrayBuffer {\n        \n        // get / compile all array buffers\n        const buffers:ArrayBuffer[] = [];\n        const compiled_cache = new Map<any,ArrayBuffer>();\n        let buffer: ArrayBuffer;\n        let total_size = 0;\n\n        for (const part of precompiled) {\n            if (part instanceof ArrayBuffer) buffer = part;\n            else if (part instanceof Array) throw new Error(\"Invalid precompiled dxb\");\n            else if (part in data) {\n                // already compiled, in cache\n                if (compiled_cache.has(data[part])) buffer = compiled_cache.get(data[part])!;\n                // compile value\n                else compiled_cache.set(data[part], buffer = Compiler.compileValue(data[part], options, false));\n            }\n            else throw new CompilerError(\"Missing data value for precompiled dxb\");\n\n            buffers.push(buffer);\n            total_size += buffer.byteLength;\n        }\n\n        // combine array buffers\n        let i = 0;\n        const finalBuffer = new ArrayBuffer(total_size);\n        const finalBufferView = new Uint8Array(finalBuffer);\n\n        for (const buffer of buffers) {\n            finalBufferView.set(new Uint8Array(buffer), i);\n            i += buffer.byteLength;\n        }\n\n        // console.log(MessageLogger.decompile(finalBuffer, false))\n\n        // no header\n        if (!add_header) return finalBuffer;\n\n        // add header\n        return Compiler.appendHeader(\n            finalBuffer,\n            options.end_of_scope,\n            options.force_id ? (options.from??Runtime.endpoint) : options.from, //sender\n            options.to, // to\n            options.flood, // flood\n            options.type, // type\n            options.sign, \n            options.encrypt, // encrypt\n            options.send_sym_encrypt_key,\n            options.sym_encrypt_key, // encryption key\n            options.allow_execute, // allow execute\n\n            options.sid,\n            options.return_index,\n            options.inc,\n\n            options.force_id,\n\n            options.__routing_ttl,\n            options.__routing_prio,\n            options.__routing_to\n        ) \n\n    }\n\n    // force disable encryption + signatures for all blocks (e.g. when using a crypto proxy)\n    static DISABLE_CRYPTO = false;\n\n    /** compiles datex code to binary + adds  data (binary, strings, intergers,...) if provided */\n    static compile(datex:string|{datex:string}|PrecompiledDXB, data:any[] = [], options:compiler_options={}, add_header=true, is_child_scope_block = false, extract_pointers = false, save_precompiled?:PrecompiledDXB, max_block_size?:number, _code_block_type?:0|1|2|42, _current_data_index=0): Promise<ArrayBuffer|ReadableStream<ArrayBuffer>>|ArrayBuffer {\n\n        if (this.DISABLE_CRYPTO) {\n            options.encrypt = false;\n            options.sign = false;\n        }\n\n        // _datex is precompiled dxb\n        if (datex instanceof PrecompiledDXB) {\n            return Compiler.compilePrecompiled(datex, data, options, add_header);\n        }\n\n        // do optimized synchronous single value compilation\n        if (datex === '?' && !add_header) {\n            return Compiler.compileValue(data[0], options);\n        }\n\n        // replace insert marks with explicitly inserted (?) - also works inside strings\n        if (typeof datex == \"string\") datex = datex.replaceAll(INSERT_MARK, '(?)');\n        // @ts-ignore\n        else if (typeof datex?.datex == \"string\") datex.datex = datex.datex.replaceAll(INSERT_MARK, '(?)');\n\n        const SCOPE = this.createCompilerScope(datex, data, options, add_header, is_child_scope_block, extract_pointers, save_precompiled, max_block_size, _code_block_type, _current_data_index);\n\n        return SCOPE.options.__v2 ? base64ToArrayBuffer(btoa(wasm_compile(SCOPE.datex))) : Compiler.compileLoop(SCOPE);\n    }\n\n\n    static createCompilerScope(datex:string|{datex:string}, data:any[] = [], options:compiler_options={}, add_header=true, is_child_scope_block = false, extract_pointers = false, save_precompiled?:PrecompiledDXB, max_block_size?:number, _code_block_type?:0|1|2|42, _current_data_index=0):compiler_scope{\n        \n        const stack = [Compiler.getBaseStack(options.context_location)];\n        \n        // get datex as string\n        let return_data:{datex:string};\n        if (typeof datex == \"object\" && datex) {\n            return_data = datex;\n            datex = datex.datex;\n        }\n        if (typeof datex != \"string\") throw new CompilerError(\"'datex' must be a string or a precompiled dxb\", stack);\n\n        // remove shebang\n        datex = datex.replace(/^#!.*/,'');\n\n        if (save_precompiled) save_precompiled.datex = datex;\n\n        //globalThis.performance?.mark(\"compile_start\");\n\n        if (options.encrypt && !options.sym_encrypt_key) throw new CompilerError(\"Cannot encrypt without a symmetric encryption key\", stack);\n\n\n        // init scope - state variables\n        const SCOPE:compiler_scope = {\n            datex: datex,\n\n            return_data: return_data,\n\n            data: data,\n            options: options,\n\n            stack: stack,\n\n            inserted_values: new Map(),\n\n            jmp_label_indices: {},\n            preemptive_pointers: new Map(),\n            indices_waiting_for_jmp_lbl: {},\n            assignment_end_indices: new Set(),\n            used_lbls: [],\n            \n            jmp_indices: [],\n\n            add_header: add_header,\n            is_child_scope_block: is_child_scope_block,\n            extract_pointers: extract_pointers,\n            precompiled: save_precompiled,\n\n            max_block_size: max_block_size, // might be bigger than MAX_BLOCK_SIZE\n\n            buffer: new ArrayBuffer(400),\n            uint8: null,\n            data_view: null,\n\n            b_index: 0,\n\n            internal_var_index: options.parent_scope?.internal_var_index ?? [0],\n            internal_vars: new WeakMap(),\n            internal_primitive_vars: new Map(),\n\n            serialized_values: new WeakMap(),\n            dynamic_indices: [],\n\n            current_data_index: _current_data_index,\n\n            current_line_nr: 1,\n            end: false,\n\n            subscopes: [{\n                start_index: -1, // has no brackets\n                last_value_index: -1,  // byte index of last, pointer, var, object, ...\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1,\n                vars: {}\n            }],\n            inner_scope: null,\n\n            _code_block_type: _code_block_type\n        };\n\n        // keep track of used extensions\n        if (SCOPE.options.required_plugins?.length) SCOPE.unused_plugins = new Set(SCOPE.options.required_plugins);\n\n        if (!SCOPE.options.insert_header) {\n            SCOPE.options.insert_header = {\n                buffer: new ArrayBuffer(100),\n                index: 0,\n                cache: new Map(),\n                vars: SCOPE.subscopes[0].vars,\n                var_index: 0x0300,\n                root_scope: SCOPE\n            }\n            SCOPE.is_outer_insert = true; // if true, add insert header to current compiled dxb\n        }\n\n        if (is_child_scope_block) {\n            SCOPE.extract_var_index = 0;\n            SCOPE.extract_var_indices = new Map();\n            SCOPE.extract_var_scope = <extract_var_scope>{\n                _is_extract_var_scope: true,\n                b_index: 0,\n                buffer: new ArrayBuffer(400),\n                inner_scope: {},\n                dynamic_indices: [],\n                inserted_values: new Map(),\n                preemptive_pointers: new Map(),\n                assignment_end_indices: new Set(),\n                options: {}\n            }\n            SCOPE.extract_var_scope.uint8 = new Uint8Array(SCOPE.extract_var_scope.buffer);\n            SCOPE.extract_var_scope.data_view = new DataView(SCOPE.extract_var_scope.buffer);\n            SCOPE.extract_var_indices.set(BinaryCode.LABEL, new Map());\n            SCOPE.extract_var_indices.set(BinaryCode.POINTER, new Map());\n            SCOPE.extract_var_indices.set(BinaryCode.INTERNAL_VAR, new Map()); // for parent internal var references\n        }\n\n        SCOPE.inner_scope = SCOPE.subscopes[0];\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n\n        return SCOPE;\n    }\n\n    // reset everything to compile a new datex snippet within the same compiler scope\n    static resetScope(SCOPE:compiler_scope, datex:string|{datex:string}, _code_block_type?:0|1|2|42) {\n        // get datex as string\n        let return_data:{datex:string}|undefined;\n        if (typeof datex == \"object\" && datex) {\n            return_data = datex;\n            datex = datex.datex;\n        }\n        if (typeof datex != \"string\") throw new CompilerError(\"'datex' must be a string or a precompiled dxb\", SCOPE.stack);\n\n        SCOPE.b_index = 0;\n        SCOPE.datex = datex;\n        SCOPE.return_data = return_data;\n        SCOPE.end = false;\n        SCOPE._code_block_type = _code_block_type;\n\n        SCOPE.buffer = new ArrayBuffer(400);\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n    }\n\n\n\n    /** optimized compiler for single value encoding (no header), synchronous! */\n    static compileValue(value:any, options:compiler_options = {}, add_command_end = true):ArrayBuffer{\n\n        if (options.preemptive_pointer_init != true) options.preemptive_pointer_init = false; // default is false\n\n        const SCOPE:compiler_scope = {\n            options: options,\n\n            inserted_values: new Map(),\n\n            jmp_label_indices: {},\n            preemptive_pointers: new Map(),\n            indices_waiting_for_jmp_lbl: {},\n            assignment_end_indices: new Set(),\n            used_lbls: [],\n            \n            stack: [Compiler.getBaseStack(options.context_location)],\n\n            jmp_indices: [],\n\n            is_child_scope_block: false,\n            add_header: false,\n\n            buffer: new ArrayBuffer(500),\n            uint8: null,\n            data_view: null,\n\n            b_index: 0,\n\n            internal_var_index: options.parent_scope?.internal_var_index ?? [0],\n            internal_vars: new WeakMap(),\n            internal_primitive_vars: new Map(),\n\n            serialized_values: new WeakMap(),\n            dynamic_indices: [],\n\n            current_line_nr: 1,\n            end: false,\n\n            subscopes: [{\n                start_index: -1, // has no brackets\n                last_value_index: -1,  // byte index of last, pointer, var, object, ...\n                wait_for_add: false,\n                in_template_string: false,\n                path_info_index: -1\n            }],\n            inner_scope: null\n        };\n\n        SCOPE.inner_scope = SCOPE.subscopes[0];\n        SCOPE.uint8 = new Uint8Array(SCOPE.buffer);\n        SCOPE.data_view = new DataView(SCOPE.buffer);\n\n        // insert value\n        Compiler.builder.insert(value, SCOPE);\n\n        // ;\n        if (add_command_end) {\n            Compiler.builder.handleRequiredBufferSize(SCOPE.b_index, SCOPE);\n            SCOPE.uint8[SCOPE.b_index++] = BinaryCode.CLOSE_AND_STORE; \n        }\n\n        // slice until current index (remove 0s at the end)\n        SCOPE.buffer = SCOPE.buffer.slice(0, SCOPE.b_index);  \n\n        // directly return SCOPE buffer without header\n        return SCOPE.buffer;\n    }\n}\n\n\n/**\n * ! nested PrecompiledDXB (appendPrecompiledDXB): recursive self-reference not allowed!\n */\nexport class PrecompiledDXB extends Array<ArrayBuffer|number|[number,number]> {\n\n    #datex?:string\n    #appended_pdxb: PrecompiledDXB[] = [];\n\n    set datex(datex:string){\n        if (this.#datex == undefined) this.#datex = datex;\n    }\n    get datex(){\n        let d = this.#datex??\"\";\n        for (let a of this.#appended_pdxb) {\n            d += \"\\n\" + a.datex;\n        }\n        return d;\n    }\n\n    private constructor(){super()}\n\n\n    appendBuffer(buffer:ArrayBuffer) {\n        this.push(buffer);\n    }\n\n    // buffer not yet inserted, only remember buffer slice start/end\n    appendBufferPlaceholder(start_index:number, end_index:number) {\n        this.push([start_index, end_index]);\n    }\n\n    // insert buffer at placeholder positions\n    autoInsertBuffer(buffer:ArrayBuffer) {\n        for (let i=0;i<this.length;i++) {\n            if (this[i] instanceof Array) this[i] = buffer.slice(this[i][0], this[i][1]);\n        }\n    }\n\n    appendDataIndex(index:number) {\n        this.push(index);\n    }\n\n    freeze(){\n        Object.freeze(this);\n    }\n\n    // static\n\n    public static async create(datex:string, options:compiler_options={}){\n        const precompiled = new PrecompiledDXB();\n        await Compiler.compile(datex, [], options, false, false, false, precompiled);\n        precompiled.freeze(); // no more changes allowed \n        return precompiled;\n    }\n\n    public static combine(...precompiled_dxbs: PrecompiledDXB[]): PrecompiledDXB {\n        const precompiled = new PrecompiledDXB();\n        precompiled.#appended_pdxb = precompiled_dxbs;\n        precompiled.freeze(); // no more changes allowed \n        return precompiled;\n    }\n \n\n    // custom iterator, also iterate over appended PrecompiledDXB\n\n    *[Symbol.iterator](){\n\n        // map data index of multiple combined precompileddxb (assuming the are all in order, eg. `?0 = ?1 + ?2`, `?0 = ?2 * x` => `?0 = ?1 + ?2; ?3 = ?4 * x`)\n        let dataIndexShift = 0;\n        let lastDataIndex = 0;\n        // remember last data index of current section for shift\n        const collectDataIndex = (val:number|[number, number]|ArrayBuffer) => {\n            if (typeof val == \"number\") lastDataIndex = val;\n            return val;\n        }\n        // add shift if data index\n        const convertIndexShift = (val:number|[number, number]|ArrayBuffer) => {\n            if (typeof val == \"number\") return collectDataIndex(val + dataIndexShift);\n            return collectDataIndex(val);\n        }\n\n        // iterate over this\n        for (let i = 0; i < this.length; i++) yield collectDataIndex(this[i]);\n        dataIndexShift = lastDataIndex == 0 ? 0 : lastDataIndex+1;\n\n        // iterate over appended PrecompiledDXB\n        for (let a = 0; a < this.#appended_pdxb.length; a++) {\n            const pdxb = this.#appended_pdxb[a];\n            // iterate over self (no infinite recursion)\n            if (pdxb == this) {\n                for (let i = 0; i < pdxb.length; i++) yield convertIndexShift(pdxb[i]);\n            }\n            // iterate over another precompiled dxb\n            else {\n                // TODO: nested index shift supported?\n                for (const p of pdxb) yield convertIndexShift(p);\n            }\n            dataIndexShift = lastDataIndex == 0 ? 0 : lastDataIndex+1;\n        }\n    }\n}\n\n// file types: TODO: move?\n\nexport const FILE_TYPE = {\n    DATEX_SCRIPT: [\"text/datex\",        \"dx\"],\n    DATEX_BINARY: [\"application/datex\", \"dxb\"],\n    JSON:         [\"application/json\", \"json\"]\n} as const;\n\nexport type DATEX_FILE_TYPE = typeof FILE_TYPE[keyof typeof FILE_TYPE];\n\n\n// debug:\nsetInterval(()=> {\n    logger.debug(\n        \"SID cache sizes (VolatileMap): \" + \n        Compiler.sid_return_indices.size +  \"- \" +\n        Compiler.sid_incs.size +  \"- \" +\n        Compiler.sid_incs_remote.size +  \"- \"\n    )\n}, 1000*60*30 /*30min*/)"],"names":["ACTION_TYPE","WebRTCInterface","Logger","logger","ReadableStream","Runtime","Endpoint","IdEndpoint","Target","WildcardTarget","Institution","Person","BROADCAST","LOCAL_ENDPOINT","Pointer","PointerProperty","ReactiveValue","CompilerError","RuntimeError","Error","DatexError","ValueError","Function","DatexFunction","crypto","Crypto","Stream","Type","Tuple","BinaryCode","Scope","ProtocolDataType","Quantity","EXTENDED_OBJECTS","INHERITED_PROPERTIES","VOID","SLOT_WRITE","SLOT_READ","SLOT_EXEC","NOT_EXISTING","SLOT_GET","SLOT_SET","DX_IGNORE","DX_BOUND_LOCAL_SLOT","DX_REPLACE","DX_PTR","arrayBufferToBase64","base64ToArrayBuffer","buffer2hex","hex2buffer","RuntimePerformance","Conjunction","Disjunction","Logical","Negation","Regex","baseURL","TypedArray","Time","compile","wasm_compile","decompile","wasm_decompile","MessageLogger","JSTransferableFunction","client_type","normalizePath","VolatileMap","activePlugins","DatexResponse","constructor","datex","data","evaluate","URL","getURLContent","executeDatexLocally","execute","endpoint","ProtocolDataTypesMap","utf8_decoder","TextDecoder","INSERT_MARK","Compiler","VERSION_NUMBER","SIGN_DEFAULT","BIG_BANG_TIME","Date","UTC","MAX_INT_32","MIN_INT_32","MIN_INT_64","MAX_INT_64","MAX_INT_8","MIN_INT_8","MAX_INT_16","MIN_INT_16","MAX_UINT_16","MAX_UINT_32","signature_size","_buffer_block_size","utf8_encoder","TextEncoder","local_url","getBaseStack","context_location","toString","combineBuffers","buffer1","buffer2","tmp","Uint8Array","byteLength","set","buffer","sid_return_indices","sid_incs","sid_incs_remote","Map","MAX_SID","MAX_BLOCK","MAX_DXB_BLOCK_SIZE","generateSID","keepalive","sid","Math","round","random","has","Infinity","getNextReturnIndexForSID","c","getBlockInc","getBlockIncForRemoteSID","remote_endpoint","reset_inc","get","convertNumbersToByte","bit_distribution","nrs","reduce","a","b","binary","s","length","size","nr","Number","padStart","parseInt","extractHeaderSender","dx_block","last_byte","_appspace_byte","_start","header_uint8","i","sender_type","name_length","subspace_number","instance_length","has_appspace","name_binary","subarray","name","ENDPOINT","ENDPOINT_WILDCARD","decode","subspaces","n","subspace_name","push","instance","extractHeaderSenderV2","header_data_view","DataView","replaceAll","getUint16","undefined","bin_type","PERSON_ALIAS","INSTITUTION_ALIAS","extractHeaderReceiverDataList","start_byte","targets_map","targets_nr","target_list","type","POINTER","target","slice","updateHeaderReceiver","to","keys","receiver_buffer","targetsToDXB","error","receiver_start_index","routing_header_size","Uint16Array","BYTES_PER_ELEMENT","uint8","routing_part","main_part","total_header_size","new_dx_block","ArrayBuffer","data_view","setUint16","DEFAULT_TTL","device_types","getScopeBlockSize","SCOPE","full_dxb_size","sender_buffer","pre_header_size","signed_header_size","generateScopeBlockMetaInfo","options","from","sign","encrypt","flood","send_sym_encrypt_key","sym_encrypt_key","force_id","dxb_block_length","evaluated_endpoints","endpoint_key_map","collapse","encryptSymmetricKeyForEndpoint","endpointToDXB","SIGN_BUFFER_SIZE","IV_BUFFER_SIZE","appendHeader","end_of_scope","REQUEST","allow_execute","LOCAL","RESPONSE","DATA","return_index","block_inc","__routing_ttl","__routing_prio","__routing_to","iv","compile_measure","startMeasure","device_type","mobile","encryptSymmetric","pre_header","pre_header_data_view","pre_header_uint8","header","signature_index","setUint32","Uint32Array","setBigUint64","BigInt","now","BigUint64Array","header_and_body","block_size","debug","enabled","endMeasure","target_buffer","target_uint8","handleRequiredBufferSize","size_in_bytes","new_size","ceil","old_uint8","name_bin","encode","instance_bin","clause","keys_map","extended_keys","MAX_POINTER_ID_SIZE","id_buffer","list","dataview","setInt16","Int16Array","key","encrypted_key_size","builder","resizeBuffer","add_bytes","max","compilerInsert","value","compiled_script","cache_var","insert_header","cache","insertValVarRef","var_index","vars","urlToDXB","Blob","blobToDXB","scriptToDXB","insert_buffer","insert_uint8","insert_dataview","index","SET_INTERNAL_VAR","DO","CLOSE_AND_STORE","_type","_parent_var","resolveValVarRef","stack","insertVariable","INTERNAL_VAR","e","pushToStack","url","startsWith","endsWith","res","parseHeaderSynchronousPart","Array","blob","script","text","parent_scope","root_scope","only_leak_inserts","getAssignAction","assign_string","action_specifier","action_type","replace","ADD","SUBTRACT","MULTIPLY","DIVIDE","AND","OR","valueIndex","inner_scope","path_info_index","b_index","value_count","last_value_index","first_value_index","commaIndex","comma_indices","assignmentEndIndex","assignment_end_indices","add","getDynamicIndex","dyn_index","dynamic_indices","shiftDynamicIndices","shift","after","jmp_indices","jmp_to","getUint32","console","new_end_indices","Set","insertByteAtIndex","byte","copyWithin","createInternalVariableAtIndex","val","internal_vars","internal_primitive_vars","var_number","internal_var_index","add_scope_global","gap","SET_VAR_SUB_RESULT","resolveInternalProxyName","object_slots","parent_var","STD_STATIC_SCOPE","VAR_STD","CHILD_GET","addText","addTypeByNamespaceAndName","pseudo_parent","getExtractedVariable","base_type","v_name","insert_new","extract_var_indices","extract_var_scope","extract_var_index","addPointerByID","insertExtractedVariable","v","init_brackets","prefix_action","is_b_index","v_name_bin","is_number","addInitBlock","handleStream","stream","streaming","getReader","addJmp","to_index","str_bin","short_string","SHORT_TEXT","TEXT","addDisjunction","elements","DISJUNCTION","addConnective","addConjunction","CONJUNCTION","el","insert","addUrl","url_string","addRelativePath","path","RESOLVE_RELATIVE_PATH","addBoolean","TRUE","FALSE","addInt","addInt8","addInt16","addInt32","addInt64","addBigInt","Int8Array","INT_8","setInt8","INT_16","Int32Array","INT_32","setInt32","BigInt64Array","INT_64","setBigInt64","BIG_INT","bigint_buffer","bigIntToBuffer","addQuantity","u","Float64Array","QUANTITY","num_buffer","numerator","den_buffer","denominator","unit_binary","addTime","t","TIME","isNaN","getTime","addFloat64","f","FLOAT_64","setFloat64","addFloatAsInt32","FLOAT_AS_INT_32","addFloatAsInt8","FLOAT_AS_INT_8","tryPlusOrMinus","addFloat","isInt","isInteger","Object","is","getFullObject","obj","fullObj","prop","addScopeBlock","brackets","extract_pointers","return_data","compiled","getScopeReceiver","current_data_index","insertScopeBlock","SUBSCOPE_START","SUBSCOPE_END","SCOPE_BLOCK","addKey","k","key_bin","ELEMENT_WITH_KEY","ELEMENT_WITH_INT_KEY","addObjectSlot","slot","object_slot_index","INTERNAL_OBJECT_SLOT","addNull","NULL","addVoid","addFilterTargetFromParts","addPersonByNameAndChannel","addInstitutionByNameAndChannel","addIdEndpointByIdAndChannel","id","addBuffer","BUFFER","addTarget","namespace","variation","parameters","jsTypeDefModule","addJSTypeDefs","receiver","addTypeDefs","GET","STD_TYPE_URL","is_extended_type","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_TIME","STD_TYPE_ARRAY","STD_TYPE_OBJECT","STD_TYPE_SET","STD_TYPE_MAP","STD_TYPE_TUPLE","STD_TYPE_FUNCTION","STD_TYPE_STREAM","STD_TYPE_ANY","STD_TYPE_TASK","STD_TYPE_ASSERTION","ns_bin","variation_bin","EXTENDED_TYPE","TYPE","addTuple","addPointerBodyByID","id_bin","knows_pointer","value_initialized","preemptive_pointer_init","insertInitBlock","addInitBlockForValue","compileValue","collapse_first_inserted","insertInitBlockPlaceholder","insertIndex","addValVarRefDeclaration","init","INNER_SCOPE","hasOwn","CREATE_POINTER","COPY","pointer_origin","singleReceiver","equals","subscribers","addPreemptivePointer","addPointerNormal","transform_scope","insert_transform_scope","normalized_id","normalizePointerId","ptr","parentScope","ancestorScopes","alreadyInitializing","preemptive_pointers","force_local_transform","is_origin","idString","addSubscriber","addPointer","p","inserted_ptrs","OPTIONS","PROTECT_POINTERS","grantAccessTo","addArray","is_root","parents","unassigned_children","start_index","TUPLE_START","ARRAY_START","trimmed_length","runtime_actions","getTrimmedArrayLength","getByValue","shadow_object","inserted_values","value_index","existing_val_var","ELEMENT","TUPLE_END","ARRAY_END","addChildrenAssignments","o","entries","addObject","OBJECT_START","OBJECT_END","root_start_index","assignment","CHILD_SET","check_perm_prefix","permission_prefix","KEY_PERMISSION","detect_record","parent_type","has_ce","enter_subscope","auto_close_scope","change_inner_scope_parent_type","insert_exports","int","exports","subscopes","wait_for_add","in_template_string","create","loop_start","has_open_subscopes","scope","exit_subscope","_code_block_type","end","SyntaxError","pop","unescape_string","str","ESCAPE_BACKSPACE","ESCAPE_LINE_FEED","ESCAPE_FORM_FEED","ESCAPE_CARRIAGE_RETURN","ESCAPE_HORIZONTAL_TAB","ESCAPE_VERTICAL_TAB","ESCAPE_OCTAL","_","x","code","String","fromCharCode","ESCAPE_UNICODE","match","HEX_STRING","ESCAPE_HEX","ESCAPE_SEQUENCE","serializeValue","serialized_values","TRANSFORM","replace_optimization","register_insert_index","indirectReferencePtr","indirectReference","collapseValue","toRemote","mapped","mapInternalVarNameToByteCode","pointer","CHILD_GET_REF","STREAM","_first_insert_done","no_duplicate_value_optimization","original_value","proxifyValue","createFromJSFunction","globalThis","MediaStream","registerMediaStream","log","fromJSError","pointerifyValue","skip_first_collapse","option_collapse","collapse_pointers","keep_external_pointers","no_proxify","is_anonymous","no_create_pointers","keep_first_transform","smart_transform_method","warn","HTMLElement","hasAttribute","tagName","getAttribute","ofValue","is_complex","root_type","std","quantity","matchesType","serializable_not_complex","href","NOT","not","_SCOPE","m","ASSIGN_SET","substring","ASSIGN_ADD","ASSIGN_SUB","ASSIGN_MUTIPLY","ASSIGN_DIVIDE","ASSIGN_AND","ASSIGN_OR","ASSIGN_REFERENCE","PLAIN_SCOPE","ext","VAR_RESULT","VAR_SUB_RESULT","_VAR_ORIGIN","VAR_IT","VAR_VOID","VAR_ORIGIN","VAR_ENDPOINT","VAR_LOCATION","VAR_ENV","VAR_META","VAR_PUBLIC","VAR_THIS","VAR_REMOTE","VAR_ENTRYPOINT","parseNextExpression","last_command_end","isEffectiveValue","SEPERATOR","INSERT","d_index","precompiled","last_precompiled","appendBufferPlaceholder","appendDataIndex","d","INSERT_COMMAND","compile_compiler_scope","resetScope","createCompilerScope","compileLoop","compile_datex_scope","createNewInitialScope","updateScope","sender","executable","simpleScopeExecution","COMPILE","KEY","trim","int_key","first_element_pos","EXIT","COUNT","ABOUT","RETURN","ITERATOR","SKIP","JMP","LEAVE","ITERATE","iterate","STD_TYPE_ITERATOR","WHILE","while","JFA","ELSE_IF","if_end_indices","if","ELSE","else","FUN","current_line_nr","DOC_COMMENT","split","COMMENT","REMOTE_CALL","REMOTE","ALWAYS","QUASI_VOID","SYNC_SILENT","_SYNC_SILENT","SYNC","STOP_SYNC","STOP_STREAM","TYPE_FUNCTION_ARG_COMPAT","param_type_close","TEMPLATE","EQUAL","NOT_EQUAL","EQUAL_VALUE","NOT_EQUAL_VALUE","GREATER_EQUAL","LESS_EQUAL","GREATER","LESS","YEET","TRY","try_close","try_start","ACCEPT","RELATIVE_PATH","SPREAD","EXTEND","RANGE","PATH_SEPERATOR","WILDCARD","PROPERTY","PATH_REF_SEPERATOR","wildcard","JUMP","jmp_label","JTR","jmp_label_indices","includes","used_lbls","indices_waiting_for_jmp_lbl","JUMP_LBL","last_cache_point","CACHE_POINT","USE_PROPS","use_parent_index","imported_vars","map","USE_ALL","USE","BOOLEAN","EMPTY_ARRAY","EMPTY_OBJECT","TSTRING_START","escaped_string","TSTRING_B_CLOSE","TSTRING_END","COMMA","ce_index","content","INFINITY","NAN","NaN","BROADCAST_ENDPOINT","subspace_string","STRING_OR_ESCAPED_KEY","string_or_key","DYNAMIC_KEY_END","current_b_index","ELEMENT_WITH_DYNAMIC_KEY","FREEZE","SEAL","HAS","KEYS","DELETE","DELETE_POINTER","CLONE","CLONE_COLLAPSE","COLLAPSE","CREATE_TYPE","exporting","TYPEOF","GET_TYPE","ORIGIN","SUBSCRIBERS","NEXT","EXTENDS","IMPLEMENTS","MATCHES","DEFAULT","DEBUGGER","NEW","CONSTRUCTOR_METHOD","OBSERVE","FUNCTION","params","param","FUNCTION_PARAM","param_modifiers","param_name","param_end","trimStart","type_signature","named","type_init","default_init","PLUGIN","plugins","required_plugins","unused_plugins","delete","RUN","ASSERT","DEFER","AWAIT","OR_OPERATOR","AND_OPERATOR","NOT_OPERATOR","VAR_REF_VAL","init_eternal","DIRECT_EXPORT","hasOwnProperty","ROOT_VARIABLE","LABELED_POINTER","is_internal","is_label","is_hex","HEX_VARIABLE","LABEL","HEX","BIN","OCT","unit","setStack","FLOAT","parseFloat","INT","intString","isSafeInteger","CHILD_ACTION","ASSIGN_POWER","POWER","CHILD_SET_REFERENCE","INCREMENT","DECREMENT","MODULO","end_index","jfa_index","function","has_brackets","createBlockFromScope","add_header","inc","cacheValues","iterable","promises","cacheValue","Symbol","iterator","Promise","all","body_compile_measure","_end_of_scope","start","controller","next","enqueue","reader","stream_abort_signal","aborted","read","done","_is_stream","close","join","is_outer_insert","autoInsertBuffer","max_block_size","original_buffer","max_body_size","split_index","last_block","block","valueToBase64DXB","datexScriptToBase64DXB","dx","compileAndExport","script_or_url","output_name_or_path","file_type","FILE_TYPE","DATEX_BINARY","compileToFile","export","exportValue","resolve_slots","dxb_or_datex_script","original_url","export_path","pathname","normalizeFileName","success","saveFile","date","timestamp","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","downloadFile","extension","file","file_name","document","createElement","createObjectURL","download","body","appendChild","click","remove","file_path","Deno","writeFile","arrayBuffer","datexScriptToDataURL","resolve","FileReader","onload","result","readAsDataURL","datexScriptToObjectURL","encodeValue","add_command_end","deep_clone","collapse_injected_pointers","encodeValueAsync","encodeValueBase64","encodeValueBase64Async","getValueHash","subtle","digest","getValueHashString","getUniqueValueIdentifier","compilePrecompiled","buffers","compiled_cache","total_size","part","finalBuffer","finalBufferView","DISABLE_CRYPTO","is_child_scope_block","save_precompiled","_current_data_index","PrecompiledDXB","__v2","btoa","WeakMap","_is_extract_var_scope","appendBuffer","freeze","combine","precompiled_dxbs","dataIndexShift","lastDataIndex","collectDataIndex","convertIndexShift","pdxb","DATEX_SCRIPT","JSON","setInterval"],"mappings":"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","sourceRoot":"/lib/datex-core-js-legacy-0.3.9/compiler/","file":"compiler.ts"}