sw_relay.mjs raw

   1  // Package sw-relay
   2  // Generated by TinyJS — TinyGo JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  import * as common$crypto$sha256 from './common_crypto_sha256.mjs';
   7  import * as common$helpers from './common_helpers.mjs';
   8  import * as common$jsbridge$bc from './common_jsbridge_bc.mjs';
   9  import * as common$jsbridge$idb from './common_jsbridge_idb.mjs';
  10  import * as common$jsbridge$subtle from './common_jsbridge_subtle.mjs';
  11  import * as common$jsbridge$sw from './common_jsbridge_sw.mjs';
  12  import * as common$nostr from './common_nostr.mjs';
  13  import * as common$relay from './common_relay.mjs';
  14  
  15  // Package-level variables
  16  export let rpool = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  17  export let writeRelays = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  18  export let bus = { $value: 0, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  19  export let clientSubs = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  20  export let proxySubs = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  21  export let cryptoCBs = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  22  export let nextCryptoID = { $value: 0, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  23  export let fwdBuf = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  24  export let fwdTimer = { $value: 0, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  25  export let myPubkey = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
  26  
  27  $rt.types.registerType('sw-relay.clientSub', {
  28    id: 'sw-relay.clientSub',
  29    kind: 'struct',
  30    methods: new Map(),
  31    fields: [
  32      { name: 'filters', type: '[]*common/nostr.Filter', tag: '', embedded: false },
  33      { name: 'filterRaw', type: 'string', tag: '', embedded: false },
  34      { name: 'clientID', type: 'string', tag: '', embedded: false },
  35    ],
  36    zero: () => ({ filters: null, filterRaw: '', clientID: '' }),
  37  });
  38  $rt.types.registerType('sw-relay.proxySub', {
  39    id: 'sw-relay.proxySub',
  40    kind: 'struct',
  41    methods: new Map(),
  42    fields: [
  43      { name: 'remoteIDs', type: 'map[string]bool', tag: '', embedded: false },
  44      { name: 'relayCount', type: 'int', tag: '', embedded: false },
  45      { name: 'eoseCount', type: 'int', tag: '', embedded: false },
  46      { name: 'timer', type: 'common/jsbridge/sw.Timer', tag: '', embedded: false },
  47      { name: 'done', type: 'bool', tag: '', embedded: false },
  48    ],
  49    zero: () => ({ remoteIDs: null, relayCount: 0, eoseCount: 0, timer: 0, done: false }),
  50  });
  51  $rt.types.registerType('sw-relay.DMRecord', {
  52    id: 'sw-relay.DMRecord',
  53    kind: 'struct',
  54    methods: new Map(),
  55    fields: [
  56      { name: 'ID', type: 'string', tag: '', embedded: false },
  57      { name: 'Peer', type: 'string', tag: '', embedded: false },
  58      { name: 'From', type: 'string', tag: '', embedded: false },
  59      { name: 'Content', type: 'string', tag: '', embedded: false },
  60      { name: 'CreatedAt', type: 'int64', tag: '', embedded: false },
  61      { name: 'Protocol', type: 'string', tag: '', embedded: false },
  62      { name: 'EventID', type: 'string', tag: '', embedded: false },
  63    ],
  64    zero: () => ({ ID: '', Peer: '', From: '', Content: '', CreatedAt: 0, Protocol: '', EventID: '' }),
  65  });
  66  $rt.types.registerType('sw-relay.mw', {
  67    id: 'sw-relay.mw',
  68    kind: 'struct',
  69    methods: new Map(),
  70    fields: [
  71      { name: 's', type: 'string', tag: '', embedded: false },
  72      { name: 'i', type: 'int', tag: '', embedded: false },
  73    ],
  74    zero: () => ({ s: '', i: 0 }),
  75  });
  76  export function init() {
  77    return;
  78  }
  79  
  80  export function initRelayProxy() {
  81    let $t0_1;
  82    $t0_1 = common$relay.NewPool();
  83    rpool.$set($t0_1);
  84    return;
  85  }
  86  
  87  export function getConn(url) {
  88    let $t0_1, $t1_2, $t2_3;
  89    $t0_1 = rpool.$get();
  90    $t1_2 = common$relay.Pool$Connect($t0_1, url);
  91    $t2_3 = wireConn($t1_2, url);
  92    return $t1_2;
  93  }
  94  
  95  export function wireConn(c, url) {
  96    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
  97    $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
  98    $t0_1.$set(url);
  99    $t1_2 = wireConn$1.bind(null, $t0_1);
 100    $t2_3 = common$relay.Conn$SetOnEvent(c, $t1_2);
 101    $t3_4 = common$relay.Conn$SetOnEOSE(c, wireConn$2);
 102    $t4_5 = common$relay.Conn$SetOnOK(c, wireConn$3);
 103    $t5_6 = wireConn$4.bind(null, $t0_1);
 104    $t6_7 = common$relay.Conn$SetOnAuth(c, $t5_6);
 105    $t7_8 = { $get() { return c.$get().ScheduleReconnect; }, $set(v) { const obj = c.$get(); obj.ScheduleReconnect = v; c.$set(obj); } };
 106    $t7_8.$set(wireConn$5);
 107    return;
 108  }
 109  
 110  function wireConn$1(url, _, ev) {
 111    let $t0_1, $t1_2;
 112    $t0_1 = url.$get();
 113    $t1_2 = routerOnRelayEvent($t0_1, ev);
 114    return;
 115  }
 116  
 117  function wireConn$2(subID) {
 118    let $t0_1;
 119    $t0_1 = routerOnRelayEOSE(subID);
 120    return;
 121  }
 122  
 123  function wireConn$3(eventID, ok, msg) {
 124    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
 125    let $block = 0;
 126    while (true) {
 127      switch ($block) {
 128        case 0: {
 129          if (ok) {
 130            $t0_1 = 'true';
 131            $block = 2; break;
 132          }
 133          else {
 134            $block = 1; break;
 135          }
 136          break;
 137        }
 138        case 1: {
 139          $t0_1 = 'false';
 140          $block = 2; break;
 141          break;
 142        }
 143        case 2: {
 144          $t1_2 = jstr(eventID);
 145          $t2_3 = ('["OK",' + $t1_2);
 146          $t3_4 = ($t2_3 + ',');
 147          $t4_5 = ($t3_4 + $t0_1);
 148          $t5_6 = ($t4_5 + ',');
 149          $t6_7 = jstr(msg);
 150          $t7_8 = ($t5_6 + $t6_7);
 151          $t8_9 = ($t7_8 + ']');
 152          $t9_10 = fwdAll($t8_9);
 153          return;
 154          break;
 155        }
 156      }
 157    }
 158  }
 159  
 160  function wireConn$4(url, challenge) {
 161    let $t0_1, $t1_2;
 162    $t0_1 = url.$get();
 163    $t1_2 = onRelayAuth($t0_1, challenge);
 164    return;
 165  }
 166  
 167  function wireConn$5(fn) {
 168    let $t0_1;
 169    $t0_1 = common$jsbridge$sw.SetTimeout(5000, fn);
 170    return;
 171  }
 172  
 173  export function onRelayAuth(relayURL, challenge) {
 174    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27;
 175    let $block = 0;
 176    while (true) {
 177      switch ($block) {
 178        case 0: {
 179          $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
 180          $t0_1.$set(relayURL);
 181          $t1_2 = myPubkey.$get();
 182          $t2_3 = ($t1_2 === '');
 183          if ($t2_3) {
 184            $block = 1; break;
 185          }
 186          else {
 187            $block = 2; break;
 188          }
 189          break;
 190        }
 191        case 1: {
 192          return;
 193          break;
 194        }
 195        case 2: {
 196          $t3_4 = { $value: { ID: '', PubKey: '', CreatedAt: 0, Kind: 0, Tags: null, Content: '', Sig: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 197          $t4_5 = { $get() { return $t3_4.$get().Kind; }, $set(v) { const obj = $t3_4.$get(); obj.Kind = v; $t3_4.$set(obj); } };
 198          $t5_6 = { $get() { return $t3_4.$get().PubKey; }, $set(v) { const obj = $t3_4.$get(); obj.PubKey = v; $t3_4.$set(obj); } };
 199          $t6_7 = myPubkey.$get();
 200          $t7_8 = { $get() { return $t3_4.$get().Content; }, $set(v) { const obj = $t3_4.$get(); obj.Content = v; $t3_4.$set(obj); } };
 201          $t8_9 = { $get() { return $t3_4.$get().Tags; }, $set(v) { const obj = $t3_4.$get(); obj.Tags = v; $t3_4.$set(obj); } };
 202          $t9_10 = { $value: $rt.builtin.makeSlice(2, 2, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 203          $t10_11 = $t9_10.$get().addr(0);
 204          $t11_12 = { $value: $rt.builtin.makeSlice(2, 2, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 205          $t12_13 = $t11_12.$get().addr(0);
 206          $t12_13.$set('relay');
 207          $t13_14 = $t11_12.$get().addr(1);
 208          $t14_15 = $t0_1.$get();
 209          $t13_14.$set($t14_15);
 210          $t15_16 = $rt.builtin.sliceSlice($t11_12.$get(), undefined, undefined, undefined);
 211          $t10_11.$set($t15_16);
 212          $t16_17 = $t9_10.$get().addr(1);
 213          $t17_18 = { $value: $rt.builtin.makeSlice(2, 2, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 214          $t18_19 = $t17_18.$get().addr(0);
 215          $t18_19.$set('challenge');
 216          $t19_20 = $t17_18.$get().addr(1);
 217          $t19_20.$set(challenge);
 218          $t20_21 = $rt.builtin.sliceSlice($t17_18.$get(), undefined, undefined, undefined);
 219          $t16_17.$set($t20_21);
 220          $t21_22 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
 221          $t22_23 = { $get() { return $t3_4.$get().CreatedAt; }, $set(v) { const obj = $t3_4.$get(); obj.CreatedAt = v; $t3_4.$set(obj); } };
 222          $t23_24 = common$jsbridge$sw.NowSeconds();
 223          $t4_5.$set(22242);
 224          $t5_6.$set($t6_7);
 225          $t7_8.$set('');
 226          $t8_9.$set($t21_22);
 227          $t22_23.$set($t23_24);
 228          $t24_25 = common$nostr.Event$ToJSON($t3_4);
 229          $t25_26 = onRelayAuth$1.bind(null, $t0_1);
 230          $t26_27 = cryptoProxy('signEvent', '', $t24_25, $t25_26);
 231          return;
 232          break;
 233        }
 234      }
 235    }
 236  }
 237  
 238  function onRelayAuth$1(relayURL, signedJSON, errMsg) {
 239    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
 240    let $block = 0;
 241    while (true) {
 242      switch ($block) {
 243        case 0: {
 244          $t0_1 = (errMsg !== '');
 245          if ($t0_1) {
 246            $block = 1; break;
 247          }
 248          else {
 249            $block = 3; break;
 250          }
 251          break;
 252        }
 253        case 1: {
 254          return;
 255          break;
 256        }
 257        case 2: {
 258          $t1_2 = rpool.$get();
 259          $t2_3 = relayURL.$get();
 260          $t3_4 = common$relay.Pool$Get($t1_2, $t2_3);
 261          $t4_5 = ($t3_4 !== null);
 262          if ($t4_5) {
 263            $block = 6; break;
 264          }
 265          else {
 266            $block = 5; break;
 267          }
 268          break;
 269        }
 270        case 3: {
 271          $t5_6 = (signedJSON === '');
 272          if ($t5_6) {
 273            $block = 1; break;
 274          }
 275          else {
 276            $block = 2; break;
 277          }
 278          break;
 279        }
 280        case 4: {
 281          $t6_7 = ('["AUTH",' + signedJSON);
 282          $t7_8 = ($t6_7 + ']');
 283          $t8_9 = common$relay.Conn$Send($t3_4, $t7_8);
 284          $block = 5; break;
 285          break;
 286        }
 287        case 5: {
 288          return;
 289          break;
 290        }
 291        case 6: {
 292          $t9_10 = common$relay.Conn$IsOpen($t3_4);
 293          if ($t9_10) {
 294            $block = 4; break;
 295          }
 296          else {
 297            $block = 5; break;
 298          }
 299          break;
 300        }
 301      }
 302    }
 303  }
 304  
 305  export function relayPublish(ev) {
 306    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
 307    let $block = 0;
 308    while (true) {
 309      switch ($block) {
 310        case 0: {
 311          $t0_1 = writeRelays.$get();
 312          $t1_2 = $rt.builtin.len($t0_1);
 313          $t2_3 = -1;
 314          $block = 1; break;
 315          break;
 316        }
 317        case 1: {
 318          $t3_4 = ($t2_3 + 1);
 319          $t4_5 = ($t3_4 < $t1_2);
 320          if ($t4_5) {
 321            $block = 2; break;
 322          }
 323          else {
 324            $block = 3; break;
 325          }
 326          break;
 327        }
 328        case 2: {
 329          $t5_6 = $t0_1.addr($t3_4);
 330          $t6_7 = $t5_6.$get();
 331          $t7_8 = getConn($t6_7);
 332          $t8_9 = common$relay.Conn$Publish($t7_8, ev);
 333          $t2_3 = $t3_4;
 334          $block = 1; break;
 335          break;
 336        }
 337        case 3: {
 338          return;
 339          break;
 340        }
 341      }
 342    }
 343  }
 344  
 345  export function relayPublishExcept(ev, exceptURL) {
 346    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
 347    let $block = 0;
 348    while (true) {
 349      switch ($block) {
 350        case 0: {
 351          $t0_1 = writeRelays.$get();
 352          $t1_2 = $rt.builtin.len($t0_1);
 353          $t2_3 = -1;
 354          $block = 1; break;
 355          break;
 356        }
 357        case 1: {
 358          $t3_4 = ($t2_3 + 1);
 359          $t4_5 = ($t3_4 < $t1_2);
 360          if ($t4_5) {
 361            $block = 2; break;
 362          }
 363          else {
 364            $block = 3; break;
 365          }
 366          break;
 367        }
 368        case 2: {
 369          $t5_6 = $t0_1.addr($t3_4);
 370          $t6_7 = $t5_6.$get();
 371          $t7_8 = ($t6_7 !== exceptURL);
 372          if ($t7_8) {
 373            $block = 4; break;
 374          }
 375          else {
 376            $t2_3 = $t3_4;
 377            $block = 1; break;
 378          }
 379          break;
 380        }
 381        case 3: {
 382          return;
 383          break;
 384        }
 385        case 4: {
 386          $t8_9 = getConn($t6_7);
 387          $t9_10 = common$relay.Conn$Publish($t8_9, ev);
 388          $t2_3 = $t3_4;
 389          $block = 1; break;
 390          break;
 391        }
 392      }
 393    }
 394  }
 395  
 396  export function urlSuffix(url) {
 397    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
 398    let $block = 0;
 399    while (true) {
 400      switch ($block) {
 401        case 0: {
 402          $t0_1 = $rt.builtin.len(url);
 403          $t1_2 = Math.min($t0_1, 8);
 404          $t2_3 = $rt.builtin.makeSlice(0, $t1_2, 0);
 405          $t3_4 = $rt.builtin.len(url);
 406          $t4_5 = ($t3_4 - $t1_2);
 407          $t5_6 = $t2_3;
 408          $t6_7 = $t4_5;
 409          $block = 1; break;
 410          break;
 411        }
 412        case 1: {
 413          $t7_8 = $rt.builtin.len(url);
 414          $t8_9 = ($t6_7 < $t7_8);
 415          if ($t8_9) {
 416            $block = 2; break;
 417          }
 418          else {
 419            $block = 3; break;
 420          }
 421          break;
 422        }
 423        case 2: {
 424          $rt.runtime.boundsCheck($t6_7, $rt.builtin.byteLen(url));
 425          $t9_10 = $rt.builtin.stringByteAt(url, $t6_7);
 426          $t10_11 = ($t9_10 >= 97);
 427          if ($t10_11) {
 428            $block = 7; break;
 429          }
 430          else {
 431            $block = 6; break;
 432          }
 433          break;
 434        }
 435        case 3: {
 436          $t11_12 = $rt.builtin.bytesToString($t5_6);
 437          return $t11_12;
 438          break;
 439        }
 440        case 4: {
 441          $t12_13 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 442          $t13_14 = $t12_13.$get().addr(0);
 443          $t13_14.$set($t9_10);
 444          $t14_15 = $rt.builtin.sliceSlice($t12_13.$get(), undefined, undefined, undefined);
 445          $t15_16 = $rt.builtin.appendSlice($t5_6, $t14_15);
 446          $t16_17 = $t15_16;
 447          $block = 5; break;
 448          break;
 449        }
 450        case 5: {
 451          $t17_18 = ($t6_7 + 1);
 452          $t5_6 = $t16_17;
 453          $t6_7 = $t17_18;
 454          $block = 1; break;
 455          break;
 456        }
 457        case 6: {
 458          $t18_19 = ($t9_10 >= 48);
 459          if ($t18_19) {
 460            $block = 8; break;
 461          }
 462          else {
 463            $t16_17 = $t5_6;
 464            $block = 5; break;
 465          }
 466          break;
 467        }
 468        case 7: {
 469          $t19_20 = ($t9_10 <= 122);
 470          if ($t19_20) {
 471            $block = 4; break;
 472          }
 473          else {
 474            $block = 6; break;
 475          }
 476          break;
 477        }
 478        case 8: {
 479          $t20_21 = ($t9_10 <= 57);
 480          if ($t20_21) {
 481            $block = 4; break;
 482          }
 483          else {
 484            $t16_17 = $t5_6;
 485            $block = 5; break;
 486          }
 487          break;
 488        }
 489      }
 490    }
 491  }
 492  
 493  export function handleRelayInfo(clientID, relayURL) {
 494    let $t0_1, $t1_2, $t2_3, $t3_4;
 495    $t0_1 = jstr(relayURL);
 496    $t1_2 = ('["RELAY_INFO",' + $t0_1);
 497    $t2_3 = ($t1_2 + ',null]');
 498    $t3_4 = fwd(clientID, $t2_3);
 499    return;
 500  }
 501  
 502  export function main() {
 503    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13;
 504    $t0_1 = common$jsbridge$idb.SetVersion('v0.65.57');
 505    $t1_2 = initSharedState();
 506    $t2_3 = initRouter();
 507    $t3_4 = initRelayProxy();
 508    $t4_5 = common$jsbridge$sw.OnInstall(onInstall);
 509    $t5_6 = common$jsbridge$sw.OnActivate(onActivate);
 510    $t6_7 = common$jsbridge$sw.OnFetch(onFetch);
 511    $t7_8 = common$jsbridge$sw.OnMessage(onMessage);
 512    $t8_9 = connectBus();
 513    $t9_10 = jstr('v0.65.57');
 514    $t10_11 = ('["READY",' + $t9_10);
 515    $t11_12 = ($t10_11 + ']');
 516    $t12_13 = busSend('shell', $t11_12);
 517    return;
 518  }
 519  
 520  export function onInstall(event) {
 521    let $t0_1;
 522    $t0_1 = common$jsbridge$sw.WaitUntil(event, onInstall$1);
 523    return;
 524  }
 525  
 526  function onInstall$1(done) {
 527    let $t0_1, $t1_2;
 528    $t0_1 = common$jsbridge$sw.SkipWaiting();
 529    $t1_2 = done();
 530    return;
 531  }
 532  
 533  export function onActivate(event) {
 534    let $t0_1;
 535    $t0_1 = common$jsbridge$sw.WaitUntil(event, onActivate$1);
 536    return;
 537  }
 538  
 539  function onActivate$1(done) {
 540    let $t0_1, $t1_2, $t2_3;
 541    $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 542    $t0_1.$set(done);
 543    $t1_2 = onActivate$1$1.bind(null, $t0_1);
 544    $t2_3 = common$jsbridge$sw.ClaimClients($t1_2);
 545    return;
 546  }
 547  
 548  function onActivate$1$1(done) {
 549    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6;
 550    $t0_1 = jstr('v0.65.57');
 551    $t1_2 = ('["READY",' + $t0_1);
 552    $t2_3 = ($t1_2 + ']');
 553    $t3_4 = busSend('shell', $t2_3);
 554    $t4_5 = done.$get();
 555    $t5_6 = $t4_5();
 556    return;
 557  }
 558  
 559  export function onFetch(event) {
 560    return;
 561  }
 562  
 563  export function onMessage(event) {
 564    return;
 565  }
 566  
 567  export function connectBus() {
 568    let $t0_1;
 569    $t0_1 = common$jsbridge$bc.Open('smesh-bus', connectBus$1);
 570    bus.$set($t0_1);
 571    return;
 572  }
 573  
 574  function connectBus$1(raw) {
 575    let $t0_1;
 576    $t0_1 = onBusMessage(raw);
 577    return;
 578  }
 579  
 580  export function busSend(to, msg) {
 581    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
 582    $t0_1 = bus.$get();
 583    $t1_2 = jstr(to);
 584    $t2_3 = ('{"from":"relay","to":' + $t1_2);
 585    $t3_4 = ($t2_3 + ',"msg":');
 586    $t4_5 = ($t3_4 + msg);
 587    $t5_6 = ($t4_5 + '}');
 588    $t6_7 = common$jsbridge$bc.Send($t0_1, $t5_6);
 589    return;
 590  }
 591  
 592  export function onBusMessage(raw) {
 593    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100;
 594    let $block = 0;
 595    while (true) {
 596      switch ($block) {
 597        case 0: {
 598          $t0_1 = jsonField(raw, 'from');
 599          $t1_2 = ($t0_1 === 'relay');
 600          if ($t1_2) {
 601            $block = 1; break;
 602          }
 603          else {
 604            $block = 2; break;
 605          }
 606          break;
 607        }
 608        case 1: {
 609          return;
 610          break;
 611        }
 612        case 2: {
 613          $t2_3 = jsonField(raw, 'to');
 614          $t3_4 = ($t2_3 !== 'relay');
 615          if ($t3_4) {
 616            $block = 5; break;
 617          }
 618          else {
 619            $block = 4; break;
 620          }
 621          break;
 622        }
 623        case 3: {
 624          return;
 625          break;
 626        }
 627        case 4: {
 628          $t4_5 = jsonFieldRaw(raw, 'msg');
 629          $t5_6 = ($t4_5 === '');
 630          if ($t5_6) {
 631            $block = 6; break;
 632          }
 633          else {
 634            $block = 7; break;
 635          }
 636          break;
 637        }
 638        case 5: {
 639          $t6_7 = ($t2_3 !== '*');
 640          if ($t6_7) {
 641            $block = 3; break;
 642          }
 643          else {
 644            $block = 4; break;
 645          }
 646          break;
 647        }
 648        case 6: {
 649          return;
 650          break;
 651        }
 652        case 7: {
 653          $t7_8 = { $value: { s: '', i: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 654          $t8_9 = newMW($t4_5);
 655          $t7_8.$set($rt.builtin.cloneValue($t8_9));
 656          $t9_10 = mw$str($t7_8);
 657          $t10_11 = ($t9_10 !== 'PING');
 658          if ($t10_11) {
 659            $block = 11; break;
 660          }
 661          else {
 662            $block = 9; break;
 663          }
 664          break;
 665        }
 666        case 8: {
 667          $t11_12 = ('relay: bus→' + $t9_10);
 668          $t12_13 = common$jsbridge$sw.Log($t11_12);
 669          $block = 9; break;
 670          break;
 671        }
 672        case 9: {
 673          $t13_14 = ($t9_10 === 'PING');
 674          if ($t13_14) {
 675            $block = 13; break;
 676          }
 677          else {
 678            $block = 15; break;
 679          }
 680          break;
 681        }
 682        case 10: {
 683          $t14_15 = ($t9_10 !== 'SAVE_DM');
 684          if ($t14_15) {
 685            $block = 8; break;
 686          }
 687          else {
 688            $block = 9; break;
 689          }
 690          break;
 691        }
 692        case 11: {
 693          $t15_16 = ($t9_10 !== 'SAVE_DM_QUIET');
 694          if ($t15_16) {
 695            $block = 10; break;
 696          }
 697          else {
 698            $block = 9; break;
 699          }
 700          break;
 701        }
 702        case 12: {
 703          return;
 704          break;
 705        }
 706        case 13: {
 707          $t16_17 = jstr('v0.65.57');
 708          $t17_18 = ('["READY",' + $t16_17);
 709          $t18_19 = ($t17_18 + ']');
 710          $t19_20 = busSend('shell', $t18_19);
 711          return;
 712          break;
 713        }
 714        case 14: {
 715          $t20_21 = mw$str($t7_8);
 716          $t21_22 = identitySetPubkey($t20_21);
 717          $block = 12; break;
 718          break;
 719        }
 720        case 15: {
 721          $t22_23 = ($t9_10 === 'SET_PUBKEY');
 722          if ($t22_23) {
 723            $block = 14; break;
 724          }
 725          else {
 726            $block = 17; break;
 727          }
 728          break;
 729        }
 730        case 16: {
 731          $t23_24 = identityClearKey();
 732          writeRelays.$set(null);
 733          $block = 12; break;
 734          break;
 735        }
 736        case 17: {
 737          $t24_25 = ($t9_10 === 'CLEAR_KEY');
 738          if ($t24_25) {
 739            $block = 16; break;
 740          }
 741          else {
 742            $block = 19; break;
 743          }
 744          break;
 745        }
 746        case 18: {
 747          $t25_26 = mw$strs($t7_8);
 748          writeRelays.$set($t25_26);
 749          $block = 12; break;
 750          break;
 751        }
 752        case 19: {
 753          $t26_27 = ($t9_10 === 'SET_WRITE_RELAYS');
 754          if ($t26_27) {
 755            $block = 18; break;
 756          }
 757          else {
 758            $block = 21; break;
 759          }
 760          break;
 761        }
 762        case 20: {
 763          $t27_28 = mw$str($t7_8);
 764          $t28_29 = mw$str($t7_8);
 765          $t29_30 = mw$raw($t7_8);
 766          $t30_31 = routerReq($t27_28, $t28_29, $t29_30);
 767          $block = 12; break;
 768          break;
 769        }
 770        case 21: {
 771          $t31_32 = ($t9_10 === 'REQ');
 772          if ($t31_32) {
 773            $block = 20; break;
 774          }
 775          else {
 776            $block = 23; break;
 777          }
 778          break;
 779        }
 780        case 22: {
 781          $t32_33 = mw$str($t7_8);
 782          $t33_34 = routerClose($t32_33);
 783          $block = 12; break;
 784          break;
 785        }
 786        case 23: {
 787          $t34_35 = ($t9_10 === 'CLOSE');
 788          if ($t34_35) {
 789            $block = 22; break;
 790          }
 791          else {
 792            $block = 25; break;
 793          }
 794          break;
 795        }
 796        case 24: {
 797          $t35_36 = mw$str($t7_8);
 798          $t36_37 = mw$raw($t7_8);
 799          $t37_38 = routerPublish($t35_36, $t36_37);
 800          $block = 12; break;
 801          break;
 802        }
 803        case 25: {
 804          $t38_39 = ($t9_10 === 'EVENT');
 805          if ($t38_39) {
 806            $block = 24; break;
 807          }
 808          else {
 809            $block = 27; break;
 810          }
 811          break;
 812        }
 813        case 26: {
 814          $t39_40 = mw$raw($t7_8);
 815          $t40_41 = mw$strs($t7_8);
 816          $t41_42 = routerPublishToRelays($t39_40, $t40_41);
 817          $block = 12; break;
 818          break;
 819        }
 820        case 27: {
 821          $t42_43 = ($t9_10 === 'MLS_RELAY_PUBLISH');
 822          if ($t42_43) {
 823            $block = 26; break;
 824          }
 825          else {
 826            $block = 29; break;
 827          }
 828          break;
 829        }
 830        case 28: {
 831          $t43_44 = mw$str($t7_8);
 832          $t44_45 = mw$str($t7_8);
 833          $t45_46 = mw$raw($t7_8);
 834          $t46_47 = mw$strs($t7_8);
 835          $t47_48 = routerProxy($t43_44, $t44_45, $t45_46, $t46_47);
 836          $block = 12; break;
 837          break;
 838        }
 839        case 29: {
 840          $t48_49 = ($t9_10 === 'PROXY');
 841          if ($t48_49) {
 842            $block = 28; break;
 843          }
 844          else {
 845            $block = 31; break;
 846          }
 847          break;
 848        }
 849        case 30: {
 850          $t49_50 = mw$str($t7_8);
 851          $t50_51 = mw$str($t7_8);
 852          $t51_52 = handleRelayInfo($t49_50, $t50_51);
 853          $block = 12; break;
 854          break;
 855        }
 856        case 31: {
 857          $t52_53 = ($t9_10 === 'RELAY_INFO');
 858          if ($t52_53) {
 859            $block = 30; break;
 860          }
 861          else {
 862            $block = 33; break;
 863          }
 864          break;
 865        }
 866        case 32: {
 867          $t53_54 = mw$str($t7_8);
 868          $t54_55 = mw$str($t7_8);
 869          $t55_56 = mw$raw($t7_8);
 870          $t56_57 = routerSign($t53_54, $t54_55, $t55_56);
 871          $block = 12; break;
 872          break;
 873        }
 874        case 33: {
 875          $t57_58 = ($t9_10 === 'SIGN');
 876          if ($t57_58) {
 877            $block = 32; break;
 878          }
 879          else {
 880            $block = 35; break;
 881          }
 882          break;
 883        }
 884        case 34: {
 885          $t58_59 = mw$str($t7_8);
 886          $t59_60 = mw$str($t7_8);
 887          $t60_61 = mw$strs($t7_8);
 888          $t61_62 = routerBroadcast($t58_59, $t59_60, $t60_61);
 889          $block = 12; break;
 890          break;
 891        }
 892        case 35: {
 893          $t62_63 = ($t9_10 === 'BROADCAST');
 894          if ($t62_63) {
 895            $block = 34; break;
 896          }
 897          else {
 898            $block = 37; break;
 899          }
 900          break;
 901        }
 902        case 36: {
 903          $t63_64 = mw$str($t7_8);
 904          $t64_65 = routerDMList($t63_64);
 905          $block = 12; break;
 906          break;
 907        }
 908        case 37: {
 909          $t65_66 = ($t9_10 === 'DM_LIST');
 910          if ($t65_66) {
 911            $block = 36; break;
 912          }
 913          else {
 914            $block = 39; break;
 915          }
 916          break;
 917        }
 918        case 38: {
 919          $t66_67 = mw$str($t7_8);
 920          $t67_68 = mw$str($t7_8);
 921          $t68_69 = mw$num($t7_8);
 922          $t69_70 = $t68_69;
 923          $t70_71 = mw$num($t7_8);
 924          $t71_72 = routerDMHistory($t66_67, $t67_68, $t69_70, $t70_71);
 925          $block = 12; break;
 926          break;
 927        }
 928        case 39: {
 929          $t72_73 = ($t9_10 === 'DM_HISTORY');
 930          if ($t72_73) {
 931            $block = 38; break;
 932          }
 933          else {
 934            $block = 41; break;
 935          }
 936          break;
 937        }
 938        case 40: {
 939          $t73_74 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
 940          $t74_75 = mw$raw($t7_8);
 941          $t73_74.$set($t74_75);
 942          $t75_76 = $t73_74.$get();
 943          $t76_77 = onBusMessage$1.bind(null, $t73_74);
 944          $t77_78 = cacheSaveDM($t75_76, $t76_77);
 945          $block = 12; break;
 946          break;
 947        }
 948        case 41: {
 949          $t78_79 = ($t9_10 === 'SAVE_DM');
 950          if ($t78_79) {
 951            $block = 40; break;
 952          }
 953          else {
 954            $block = 43; break;
 955          }
 956          break;
 957        }
 958        case 42: {
 959          $t79_80 = mw$raw($t7_8);
 960          $t80_81 = cacheSaveDM($t79_80, onBusMessage$2);
 961          $block = 12; break;
 962          break;
 963        }
 964        case 43: {
 965          $t81_82 = ($t9_10 === 'SAVE_DM_QUIET');
 966          if ($t81_82) {
 967            $block = 42; break;
 968          }
 969          else {
 970            $block = 45; break;
 971          }
 972          break;
 973        }
 974        case 44: {
 975          $t82_83 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
 976          $t83_84 = mw$str($t7_8);
 977          $t82_83.$set($t83_84);
 978          $t84_85 = $t82_83.$get();
 979          $t85_86 = onBusMessage$3.bind(null, $t82_83);
 980          $t86_87 = cacheClearDMsByPeer($t84_85, $t85_86);
 981          $block = 12; break;
 982          break;
 983        }
 984        case 45: {
 985          $t87_88 = ($t9_10 === 'CLEAR_DM_HISTORY');
 986          if ($t87_88) {
 987            $block = 44; break;
 988          }
 989          else {
 990            $block = 47; break;
 991          }
 992          break;
 993        }
 994        case 46: {
 995          $t88_89 = mw$num($t7_8);
 996          $t89_90 = $t88_89;
 997          $t90_91 = mw$str($t7_8);
 998          $t91_92 = mw$str($t7_8);
 999          $t92_93 = cryptoCBs.$get();
1000          { const $r = $rt.builtin.mapLookup($t92_93, $t89_90); $t93_94 = [$r.value, $r.ok]; }
1001          $t94_95 = $t93_94[0];
1002          $t95_96 = $t93_94[1];
1003          if ($t95_96) {
1004            $block = 48; break;
1005          }
1006          else {
1007            $block = 12; break;
1008          }
1009          break;
1010        }
1011        case 47: {
1012          $t96_97 = ($t9_10 === 'CRYPTO_RESULT');
1013          if ($t96_97) {
1014            $block = 46; break;
1015          }
1016          else {
1017            $block = 12; break;
1018          }
1019          break;
1020        }
1021        case 48: {
1022          $t97_98 = cryptoCBs.$get();
1023          $t98_99 = $rt.builtin.mapDelete($t97_98, $t89_90);
1024          $t99_100 = $t94_95($t90_91, $t91_92);
1025          $block = 12; break;
1026          break;
1027        }
1028      }
1029    }
1030  }
1031  
1032  function onBusMessage$1(dmJSON, result) {
1033    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1034    let $block = 0;
1035    while (true) {
1036      switch ($block) {
1037        case 0: {
1038          $t0_1 = (result !== 'duplicate');
1039          if ($t0_1) {
1040            $block = 1; break;
1041          }
1042          else {
1043            $block = 2; break;
1044          }
1045          break;
1046        }
1047        case 1: {
1048          $t1_2 = dmJSON.$get();
1049          $t2_3 = ('["DM_RECEIVED",' + $t1_2);
1050          $t3_4 = ($t2_3 + ']');
1051          $t4_5 = fwdAll($t3_4);
1052          $block = 2; break;
1053          break;
1054        }
1055        case 2: {
1056          return;
1057          break;
1058        }
1059      }
1060    }
1061  }
1062  
1063  function onBusMessage$2(result) {
1064    return;
1065  }
1066  
1067  function onBusMessage$3(peer) {
1068    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1069    $t0_1 = peer.$get();
1070    $t1_2 = jstr($t0_1);
1071    $t2_3 = ('["DM_HISTORY_CLEARED",' + $t1_2);
1072    $t3_4 = ($t2_3 + ']');
1073    $t4_5 = busSend('shell', $t3_4);
1074    return;
1075  }
1076  
1077  export function initRouter() {
1078    let $t0_1, $t1_2;
1079    $t0_1 = $rt.builtin.makeMap('string');
1080    clientSubs.$set($t0_1);
1081    $t1_2 = $rt.builtin.makeMap('string');
1082    proxySubs.$set($t1_2);
1083    return;
1084  }
1085  
1086  export function routerReq(clientID, subID, filterRaw) {
1087    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
1088    let $block = 0;
1089    while (true) {
1090      switch ($block) {
1091        case 0: {
1092          $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
1093          $t0_1.$set(clientID);
1094          $t1_2 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
1095          $t1_2.$set(subID);
1096          $t2_3 = common$nostr.ParseFilter(filterRaw);
1097          $t3_4 = ($t2_3 === null);
1098          if ($t3_4) {
1099            $block = 1; break;
1100          }
1101          else {
1102            $block = 2; break;
1103          }
1104          break;
1105        }
1106        case 1: {
1107          $t4_5 = common$jsbridge$sw.Log('relay-sw: REQ parse filter FAILED');
1108          return;
1109          break;
1110        }
1111        case 2: {
1112          $t5_6 = clientSubs.$get();
1113          $t6_7 = $t1_2.$get();
1114          $t7_8 = { $value: { filters: null, filterRaw: '', clientID: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1115          $t8_9 = { $get() { return $t7_8.$get().filters; }, $set(v) { const obj = $t7_8.$get(); obj.filters = v; $t7_8.$set(obj); } };
1116          $t9_10 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1117          $t10_11 = $t9_10.$get().addr(0);
1118          $t10_11.$set($t2_3);
1119          $t11_12 = $rt.builtin.sliceSlice($t9_10.$get(), undefined, undefined, undefined);
1120          $t12_13 = { $get() { return $t7_8.$get().filterRaw; }, $set(v) { const obj = $t7_8.$get(); obj.filterRaw = v; $t7_8.$set(obj); } };
1121          $t13_14 = { $get() { return $t7_8.$get().clientID; }, $set(v) { const obj = $t7_8.$get(); obj.clientID = v; $t7_8.$set(obj); } };
1122          $t14_15 = $t0_1.$get();
1123          $t8_9.$set($t11_12);
1124          $t12_13.$set(filterRaw);
1125          $t13_14.$set($t14_15);
1126          $rt.builtin.mapUpdate($t5_6, $t6_7, $t7_8);
1127          $t15_16 = routerReq$1.bind(null, $t0_1, $t1_2);
1128          $t16_17 = cacheQuery(filterRaw, $t15_16);
1129          return;
1130          break;
1131        }
1132      }
1133    }
1134  }
1135  
1136  function routerReq$1(clientID, subID, eventsJSON) {
1137    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
1138    let $block = 0;
1139    while (true) {
1140      switch ($block) {
1141        case 0: {
1142          $t0_1 = common$nostr.ParseEventsJSON(eventsJSON);
1143          $t1_2 = $rt.builtin.len($t0_1);
1144          $t2_3 = -1;
1145          $block = 1; break;
1146          break;
1147        }
1148        case 1: {
1149          $t3_4 = ($t2_3 + 1);
1150          $t4_5 = ($t3_4 < $t1_2);
1151          if ($t4_5) {
1152            $block = 2; break;
1153          }
1154          else {
1155            $block = 3; break;
1156          }
1157          break;
1158        }
1159        case 2: {
1160          $t5_6 = $t0_1.addr($t3_4);
1161          $t6_7 = $t5_6.$get();
1162          $t7_8 = clientID.$get();
1163          $t8_9 = subID.$get();
1164          $t9_10 = jstr($t8_9);
1165          $t10_11 = ('["EVENT",' + $t9_10);
1166          $t11_12 = ($t10_11 + ',');
1167          $t12_13 = common$nostr.Event$ToJSON($t6_7);
1168          $t13_14 = ($t11_12 + $t12_13);
1169          $t14_15 = ($t13_14 + ']');
1170          $t15_16 = fwd($t7_8, $t14_15);
1171          $t2_3 = $t3_4;
1172          $block = 1; break;
1173          break;
1174        }
1175        case 3: {
1176          $t16_17 = clientID.$get();
1177          $t17_18 = subID.$get();
1178          $t18_19 = jstr($t17_18);
1179          $t19_20 = ('["EOSE",' + $t18_19);
1180          $t20_21 = ($t19_20 + ']');
1181          $t21_22 = fwd($t16_17, $t20_21);
1182          return;
1183          break;
1184        }
1185      }
1186    }
1187  }
1188  
1189  export function routerClose(subID) {
1190    let $t0_1, $t1_2, $t2_3;
1191    $t0_1 = clientSubs.$get();
1192    $t1_2 = $rt.builtin.mapDelete($t0_1, subID);
1193    $t2_3 = routerCleanupProxy(subID);
1194    return;
1195  }
1196  
1197  export function routerPublish(clientID, eventRaw) {
1198    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
1199    let $block = 0;
1200    while (true) {
1201      switch ($block) {
1202        case 0: {
1203          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1204          $t1_2 = common$nostr.ParseEvent(eventRaw);
1205          $t0_1.$set($t1_2);
1206          $t2_3 = $t0_1.$get();
1207          $t3_4 = ($t2_3 === null);
1208          if ($t3_4) {
1209            $block = 1; break;
1210          }
1211          else {
1212            $block = 2; break;
1213          }
1214          break;
1215        }
1216        case 1: {
1217          return;
1218          break;
1219        }
1220        case 2: {
1221          $t4_5 = routerPublish$1.bind(null, $t0_1);
1222          $t5_6 = cacheStore(eventRaw, $t4_5);
1223          $t6_7 = $t0_1.$get();
1224          $t7_8 = relayPublish($t6_7);
1225          $t8_9 = $t0_1.$get();
1226          $t9_10 = { $get() { return $t8_9.$get().ID; }, $set(v) { const obj = $t8_9.$get(); obj.ID = v; $t8_9.$set(obj); } };
1227          $t10_11 = $t9_10.$get();
1228          $t11_12 = jstr($t10_11);
1229          $t12_13 = ('["OK",' + $t11_12);
1230          $t13_14 = ($t12_13 + ',true,""]');
1231          $t14_15 = fwd(clientID, $t13_14);
1232          return;
1233          break;
1234        }
1235      }
1236    }
1237  }
1238  
1239  function routerPublish$1(ev, saved) {
1240    let $t0_1, $t1_2;
1241    let $block = 0;
1242    while (true) {
1243      switch ($block) {
1244        case 0: {
1245          if (saved) {
1246            $block = 1; break;
1247          }
1248          else {
1249            $block = 2; break;
1250          }
1251          break;
1252        }
1253        case 1: {
1254          $t0_1 = ev.$get();
1255          $t1_2 = pushToMatchingSubs($t0_1);
1256          $block = 2; break;
1257          break;
1258        }
1259        case 2: {
1260          return;
1261          break;
1262        }
1263      }
1264    }
1265  }
1266  
1267  export function routerPublishToRelays(eventRaw, relayURLs) {
1268    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44;
1269    let $block = 0;
1270    while (true) {
1271      switch ($block) {
1272        case 0: {
1273          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1274          $t1_2 = common$nostr.ParseEvent(eventRaw);
1275          $t0_1.$set($t1_2);
1276          $t2_3 = $t0_1.$get();
1277          $t3_4 = ($t2_3 === null);
1278          if ($t3_4) {
1279            $block = 1; break;
1280          }
1281          else {
1282            $block = 2; break;
1283          }
1284          break;
1285        }
1286        case 1: {
1287          $t4_5 = $rt.builtin.len(eventRaw);
1288          $t5_6 = $t4_5;
1289          $t6_7 = common$helpers.Itoa($t5_6);
1290          $t7_8 = ('relay: publishToRelays PARSE FAILED len=' + $t6_7);
1291          $t8_9 = common$jsbridge$sw.Log($t7_8);
1292          return;
1293          break;
1294        }
1295        case 2: {
1296          $t9_10 = $t0_1.$get();
1297          $t10_11 = { $get() { return $t9_10.$get().Kind; }, $set(v) { const obj = $t9_10.$get(); obj.Kind = v; $t9_10.$set(obj); } };
1298          $t11_12 = $t10_11.$get();
1299          $t12_13 = $t11_12;
1300          $t13_14 = common$helpers.Itoa($t12_13);
1301          $t14_15 = ('relay: publishToRelays kind=' + $t13_14);
1302          $t15_16 = ($t14_15 + ' id=');
1303          $t16_17 = $t0_1.$get();
1304          $t17_18 = { $get() { return $t16_17.$get().ID; }, $set(v) { const obj = $t16_17.$get(); obj.ID = v; $t16_17.$set(obj); } };
1305          $t18_19 = $t17_18.$get();
1306          $t19_20 = $rt.builtin.stringSlice($t18_19, undefined, 16);
1307          $t20_21 = ($t15_16 + $t19_20);
1308          $t21_22 = ($t20_21 + ' relays=');
1309          $t22_23 = $rt.builtin.len(relayURLs);
1310          $t23_24 = $t22_23;
1311          $t24_25 = common$helpers.Itoa($t23_24);
1312          $t25_26 = ($t21_22 + $t24_25);
1313          $t26_27 = common$jsbridge$sw.Log($t25_26);
1314          $t27_28 = routerPublishToRelays$1.bind(null, $t0_1);
1315          $t28_29 = cacheStore(eventRaw, $t27_28);
1316          $t29_30 = $rt.builtin.len(relayURLs);
1317          $t30_31 = -1;
1318          $block = 3; break;
1319          break;
1320        }
1321        case 3: {
1322          $t31_32 = ($t30_31 + 1);
1323          $t32_33 = ($t31_32 < $t29_30);
1324          if ($t32_33) {
1325            $block = 4; break;
1326          }
1327          else {
1328            $block = 5; break;
1329          }
1330          break;
1331        }
1332        case 4: {
1333          $t33_34 = relayURLs.addr($t31_32);
1334          $t34_35 = $t33_34.$get();
1335          $t35_36 = getConn($t34_35);
1336          $t36_37 = ('relay: publish to ' + $t34_35);
1337          $t37_38 = ($t36_37 + ' open=');
1338          $t38_39 = common$relay.Conn$IsOpen($t35_36);
1339          $t39_40 = boolStr($t38_39);
1340          $t40_41 = ($t37_38 + $t39_40);
1341          $t41_42 = common$jsbridge$sw.Log($t40_41);
1342          $t42_43 = $t0_1.$get();
1343          $t43_44 = common$relay.Conn$Publish($t35_36, $t42_43);
1344          $t30_31 = $t31_32;
1345          $block = 3; break;
1346          break;
1347        }
1348        case 5: {
1349          return;
1350          break;
1351        }
1352      }
1353    }
1354  }
1355  
1356  function routerPublishToRelays$1(ev, saved) {
1357    let $t0_1, $t1_2;
1358    let $block = 0;
1359    while (true) {
1360      switch ($block) {
1361        case 0: {
1362          if (saved) {
1363            $block = 1; break;
1364          }
1365          else {
1366            $block = 2; break;
1367          }
1368          break;
1369        }
1370        case 1: {
1371          $t0_1 = ev.$get();
1372          $t1_2 = pushToMatchingSubs($t0_1);
1373          $block = 2; break;
1374          break;
1375        }
1376        case 2: {
1377          return;
1378          break;
1379        }
1380      }
1381    }
1382  }
1383  
1384  export function routerProxy(clientID, subID, filterRaw, relayURLs) {
1385    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
1386    let $block = 0;
1387    while (true) {
1388      switch ($block) {
1389        case 0: {
1390          $t0_1 = routerCleanupProxy(subID);
1391          $t1_2 = parseFilters(filterRaw);
1392          $t2_3 = $rt.builtin.len($t1_2);
1393          $t3_4 = ($t2_3 === 0);
1394          if ($t3_4) {
1395            $block = 1; break;
1396          }
1397          else {
1398            $block = 2; break;
1399          }
1400          break;
1401        }
1402        case 1: {
1403          $t4_5 = common$jsbridge$sw.Log('relay-sw: PROXY parse filter FAILED');
1404          return;
1405          break;
1406        }
1407        case 2: {
1408          $t5_6 = clientSubs.$get();
1409          $t6_7 = { $value: { filters: null, filterRaw: '', clientID: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1410          $t7_8 = { $get() { return $t6_7.$get().filters; }, $set(v) { const obj = $t6_7.$get(); obj.filters = v; $t6_7.$set(obj); } };
1411          $t8_9 = { $get() { return $t6_7.$get().filterRaw; }, $set(v) { const obj = $t6_7.$get(); obj.filterRaw = v; $t6_7.$set(obj); } };
1412          $t9_10 = { $get() { return $t6_7.$get().clientID; }, $set(v) { const obj = $t6_7.$get(); obj.clientID = v; $t6_7.$set(obj); } };
1413          $t7_8.$set($t1_2);
1414          $t8_9.$set(filterRaw);
1415          $t9_10.$set(clientID);
1416          $rt.builtin.mapUpdate($t5_6, subID, $t6_7);
1417          $t10_11 = $rt.builtin.makeMap('string');
1418          $t11_12 = ('p_' + subID);
1419          $t12_13 = ($t11_12 + '_');
1420          $t13_14 = proxySubs.$get();
1421          $t14_15 = { $value: { remoteIDs: null, relayCount: 0, eoseCount: 0, timer: 0, done: false }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1422          $t15_16 = { $get() { return $t14_15.$get().remoteIDs; }, $set(v) { const obj = $t14_15.$get(); obj.remoteIDs = v; $t14_15.$set(obj); } };
1423          $t16_17 = { $get() { return $t14_15.$get().relayCount; }, $set(v) { const obj = $t14_15.$get(); obj.relayCount = v; $t14_15.$set(obj); } };
1424          $t17_18 = $rt.builtin.len(relayURLs);
1425          $t15_16.$set($t10_11);
1426          $t16_17.$set($t17_18);
1427          $rt.builtin.mapUpdate($t13_14, subID, $t14_15);
1428          $t18_19 = $rt.builtin.len(relayURLs);
1429          $t19_20 = -1;
1430          $block = 3; break;
1431          break;
1432        }
1433        case 3: {
1434          $t20_21 = ($t19_20 + 1);
1435          $t21_22 = ($t20_21 < $t18_19);
1436          if ($t21_22) {
1437            $block = 4; break;
1438          }
1439          else {
1440            $block = 5; break;
1441          }
1442          break;
1443        }
1444        case 4: {
1445          $t22_23 = relayURLs.addr($t20_21);
1446          $t23_24 = $t22_23.$get();
1447          $t24_25 = urlSuffix($t23_24);
1448          $t25_26 = ($t12_13 + $t24_25);
1449          $rt.builtin.mapUpdate($t10_11, $t25_26, true);
1450          $t26_27 = getConn($t23_24);
1451          $t27_28 = common$relay.Conn$Subscribe($t26_27, $t25_26, $t1_2);
1452          $t19_20 = $t20_21;
1453          $block = 3; break;
1454          break;
1455        }
1456        case 5: {
1457          $t28_29 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
1458          $t28_29.$set(subID);
1459          $t29_30 = proxySubs.$get();
1460          $t30_31 = $rt.builtin.mapLookup($t29_30, subID).value;
1461          $t31_32 = routerProxy$1.bind(null, $t28_29);
1462          $t32_33 = common$jsbridge$sw.SetTimeout(10000, $t31_32);
1463          $t33_34 = { $get() { return $t30_31.$get().timer; }, $set(v) { const obj = $t30_31.$get(); obj.timer = v; $t30_31.$set(obj); } };
1464          $t33_34.$set($t32_33);
1465          return;
1466          break;
1467        }
1468      }
1469    }
1470  }
1471  
1472  function routerProxy$1(proxyID) {
1473    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
1474    let $block = 0;
1475    while (true) {
1476      switch ($block) {
1477        case 0: {
1478          $t0_1 = proxySubs.$get();
1479          $t1_2 = proxyID.$get();
1480          { const $r = $rt.builtin.mapLookup($t0_1, $t1_2); $t2_3 = [$r.value, $r.ok]; }
1481          $t3_4 = $t2_3[0];
1482          $t4_5 = $t2_3[1];
1483          if ($t4_5) {
1484            $block = 3; break;
1485          }
1486          else {
1487            $block = 2; break;
1488          }
1489          break;
1490        }
1491        case 1: {
1492          $t5_6 = { $get() { return $t3_4.$get().done; }, $set(v) { const obj = $t3_4.$get(); obj.done = v; $t3_4.$set(obj); } };
1493          $t5_6.$set(true);
1494          $t6_7 = clientSubs.$get();
1495          $t7_8 = proxyID.$get();
1496          { const $r = $rt.builtin.mapLookup($t6_7, $t7_8); $t8_9 = [$r.value, $r.ok]; }
1497          $t9_10 = $t8_9[0];
1498          $t10_11 = $t8_9[1];
1499          if ($t10_11) {
1500            $block = 4; break;
1501          }
1502          else {
1503            $block = 2; break;
1504          }
1505          break;
1506        }
1507        case 2: {
1508          return;
1509          break;
1510        }
1511        case 3: {
1512          $t11_12 = { $get() { return $t3_4.$get().done; }, $set(v) { const obj = $t3_4.$get(); obj.done = v; $t3_4.$set(obj); } };
1513          $t12_13 = $t11_12.$get();
1514          if ($t12_13) {
1515            $block = 2; break;
1516          }
1517          else {
1518            $block = 1; break;
1519          }
1520          break;
1521        }
1522        case 4: {
1523          $t13_14 = { $get() { return $t9_10.$get().clientID; }, $set(v) { const obj = $t9_10.$get(); obj.clientID = v; $t9_10.$set(obj); } };
1524          $t14_15 = $t13_14.$get();
1525          $t15_16 = proxyID.$get();
1526          $t16_17 = jstr($t15_16);
1527          $t17_18 = ('["EOSE",' + $t16_17);
1528          $t18_19 = ($t17_18 + ']');
1529          $t19_20 = fwd($t14_15, $t18_19);
1530          $block = 2; break;
1531          break;
1532        }
1533      }
1534    }
1535  }
1536  
1537  export function routerCleanupProxy(proxyID) {
1538    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42;
1539    let $block = 0;
1540    while (true) {
1541      switch ($block) {
1542        case 0: {
1543          $t0_1 = proxySubs.$get();
1544          { const $r = $rt.builtin.mapLookup($t0_1, proxyID); $t1_2 = [$r.value, $r.ok]; }
1545          $t2_3 = $t1_2[0];
1546          $t3_4 = $t1_2[1];
1547          if ($t3_4) {
1548            $block = 2; break;
1549          }
1550          else {
1551            $block = 1; break;
1552          }
1553          break;
1554        }
1555        case 1: {
1556          return;
1557          break;
1558        }
1559        case 2: {
1560          $t4_5 = { $get() { return $t2_3.$get().timer; }, $set(v) { const obj = $t2_3.$get(); obj.timer = v; $t2_3.$set(obj); } };
1561          $t5_6 = $t4_5.$get();
1562          $t6_7 = common$jsbridge$sw.ClearTimeout($t5_6);
1563          $t7_8 = { $get() { return $t2_3.$get().done; }, $set(v) { const obj = $t2_3.$get(); obj.done = v; $t2_3.$set(obj); } };
1564          $t8_9 = $t7_8.$get();
1565          if ($t8_9) {
1566            $block = 4; break;
1567          }
1568          else {
1569            $block = 3; break;
1570          }
1571          break;
1572        }
1573        case 3: {
1574          $t9_10 = clientSubs.$get();
1575          { const $r = $rt.builtin.mapLookup($t9_10, proxyID); $t10_11 = [$r.value, $r.ok]; }
1576          $t11_12 = $t10_11[0];
1577          $t12_13 = $t10_11[1];
1578          if ($t12_13) {
1579            $block = 5; break;
1580          }
1581          else {
1582            $block = 4; break;
1583          }
1584          break;
1585        }
1586        case 4: {
1587          $t13_14 = { $get() { return $t2_3.$get().remoteIDs; }, $set(v) { const obj = $t2_3.$get(); obj.remoteIDs = v; $t2_3.$set(obj); } };
1588          $t14_15 = $t13_14.$get();
1589          $t15_16 = { $entries: [...$t14_15.entries()], $pos: 0, next() { if (this.$pos >= this.$entries.length) return [false, null, null]; const [k, v] = this.$entries[this.$pos++]; return [true, k, v]; } };
1590          $block = 6; break;
1591          break;
1592        }
1593        case 5: {
1594          $t16_17 = { $get() { return $t11_12.$get().clientID; }, $set(v) { const obj = $t11_12.$get(); obj.clientID = v; $t11_12.$set(obj); } };
1595          $t17_18 = $t16_17.$get();
1596          $t18_19 = jstr(proxyID);
1597          $t19_20 = ('["EOSE",' + $t18_19);
1598          $t20_21 = ($t19_20 + ']');
1599          $t21_22 = fwd($t17_18, $t20_21);
1600          $block = 4; break;
1601          break;
1602        }
1603        case 6: {
1604          $t22_23 = $t15_16.next();
1605          $t23_24 = $t22_23[0];
1606          if ($t23_24) {
1607            $block = 7; break;
1608          }
1609          else {
1610            $block = 8; break;
1611          }
1612          break;
1613        }
1614        case 7: {
1615          $t24_25 = $t22_23[1];
1616          $t25_26 = rpool.$get();
1617          $t26_27 = common$relay.Pool$URLs($t25_26);
1618          $t27_28 = $rt.builtin.len($t26_27);
1619          $t32_33 = -1;
1620          $block = 9; break;
1621          break;
1622        }
1623        case 8: {
1624          $t28_29 = proxySubs.$get();
1625          $t29_30 = $rt.builtin.mapDelete($t28_29, proxyID);
1626          $t30_31 = clientSubs.$get();
1627          $t31_32 = $rt.builtin.mapDelete($t30_31, proxyID);
1628          return;
1629          break;
1630        }
1631        case 9: {
1632          $t33_34 = ($t32_33 + 1);
1633          $t34_35 = ($t33_34 < $t27_28);
1634          if ($t34_35) {
1635            $block = 10; break;
1636          }
1637          else {
1638            $block = 6; break;
1639          }
1640          break;
1641        }
1642        case 10: {
1643          $t35_36 = $t26_27.addr($t33_34);
1644          $t36_37 = $t35_36.$get();
1645          $t37_38 = rpool.$get();
1646          $t38_39 = common$relay.Pool$Get($t37_38, $t36_37);
1647          $t39_40 = ($t38_39 !== null);
1648          if ($t39_40) {
1649            $block = 12; break;
1650          }
1651          else {
1652            $t32_33 = $t33_34;
1653            $block = 9; break;
1654          }
1655          break;
1656        }
1657        case 11: {
1658          $t40_41 = common$relay.Conn$CloseSubscription($t38_39, $t24_25);
1659          $t32_33 = $t33_34;
1660          $block = 9; break;
1661          break;
1662        }
1663        case 12: {
1664          $t41_42 = common$relay.Conn$IsOpen($t38_39);
1665          if ($t41_42) {
1666            $block = 11; break;
1667          }
1668          else {
1669            $t32_33 = $t33_34;
1670            $block = 9; break;
1671          }
1672          break;
1673        }
1674      }
1675    }
1676  }
1677  
1678  export function routerOnRelayEvent(relayURL, ev) {
1679    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
1680    $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
1681    $t0_1.$set(relayURL);
1682    $t1_2 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
1683    $t1_2.$set(ev);
1684    $t2_3 = $t1_2.$get();
1685    $t3_4 = common$nostr.Event$ToJSON($t2_3);
1686    $t4_5 = $t1_2.$get();
1687    $t5_6 = pushToMatchingSubs($t4_5);
1688    $t6_7 = routerOnRelayEvent$1.bind(null, $t1_2, $t0_1);
1689    $t7_8 = cacheStore($t3_4, $t6_7);
1690    return;
1691  }
1692  
1693  function routerOnRelayEvent$1(ev, relayURL, saved) {
1694    let $t0_1, $t1_2, $t2_3;
1695    let $block = 0;
1696    while (true) {
1697      switch ($block) {
1698        case 0: {
1699          if (saved) {
1700            $block = 1; break;
1701          }
1702          else {
1703            $block = 2; break;
1704          }
1705          break;
1706        }
1707        case 1: {
1708          $t0_1 = ev.$get();
1709          $t1_2 = relayURL.$get();
1710          $t2_3 = relayPublishExcept($t0_1, $t1_2);
1711          $block = 2; break;
1712          break;
1713        }
1714        case 2: {
1715          return;
1716          break;
1717        }
1718      }
1719    }
1720  }
1721  
1722  export function routerOnRelayEOSE(subID) {
1723    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
1724    let $block = 0;
1725    while (true) {
1726      switch ($block) {
1727        case 0: {
1728          $t0_1 = proxySubs.$get();
1729          $t1_2 = { $entries: [...$t0_1.entries()], $pos: 0, next() { if (this.$pos >= this.$entries.length) return [false, null, null]; const [k, v] = this.$entries[this.$pos++]; return [true, k, v]; } };
1730          $block = 1; break;
1731          break;
1732        }
1733        case 1: {
1734          $t2_3 = $t1_2.next();
1735          $t3_4 = $t2_3[0];
1736          if ($t3_4) {
1737            $block = 2; break;
1738          }
1739          else {
1740            $block = 3; break;
1741          }
1742          break;
1743        }
1744        case 2: {
1745          $t4_5 = $t2_3[1];
1746          $t5_6 = $t2_3[2];
1747          $t6_7 = { $get() { return $t5_6.$get().remoteIDs; }, $set(v) { const obj = $t5_6.$get(); obj.remoteIDs = v; $t5_6.$set(obj); } };
1748          $t7_8 = $t6_7.$get();
1749          $t8_9 = $rt.builtin.mapLookup($t7_8, subID).value;
1750          if ($t8_9) {
1751            $block = 4; break;
1752          }
1753          else {
1754            $block = 1; break;
1755          }
1756          break;
1757        }
1758        case 3: {
1759          return;
1760          break;
1761        }
1762        case 4: {
1763          $t9_10 = { $get() { return $t5_6.$get().eoseCount; }, $set(v) { const obj = $t5_6.$get(); obj.eoseCount = v; $t5_6.$set(obj); } };
1764          $t10_11 = $t9_10.$get();
1765          $t11_12 = ($t10_11 + 1);
1766          $t12_13 = { $get() { return $t5_6.$get().eoseCount; }, $set(v) { const obj = $t5_6.$get(); obj.eoseCount = v; $t5_6.$set(obj); } };
1767          $t12_13.$set($t11_12);
1768          $t13_14 = { $get() { return $t5_6.$get().done; }, $set(v) { const obj = $t5_6.$get(); obj.done = v; $t5_6.$set(obj); } };
1769          $t14_15 = $t13_14.$get();
1770          if ($t14_15) {
1771            $block = 1; break;
1772          }
1773          else {
1774            $block = 5; break;
1775          }
1776          break;
1777        }
1778        case 5: {
1779          $t15_16 = { $get() { return $t5_6.$get().timer; }, $set(v) { const obj = $t5_6.$get(); obj.timer = v; $t5_6.$set(obj); } };
1780          $t16_17 = $t15_16.$get();
1781          $t17_18 = common$jsbridge$sw.ClearTimeout($t16_17);
1782          $t18_19 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
1783          $t18_19.$set($t4_5);
1784          $t19_20 = routerOnRelayEOSE$1.bind(null, $t18_19);
1785          $t20_21 = common$jsbridge$sw.SetTimeout(3000, $t19_20);
1786          $t21_22 = { $get() { return $t5_6.$get().timer; }, $set(v) { const obj = $t5_6.$get(); obj.timer = v; $t5_6.$set(obj); } };
1787          $t21_22.$set($t20_21);
1788          $block = 1; break;
1789          break;
1790        }
1791      }
1792    }
1793  }
1794  
1795  function routerOnRelayEOSE$1(pid) {
1796    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
1797    let $block = 0;
1798    while (true) {
1799      switch ($block) {
1800        case 0: {
1801          $t0_1 = proxySubs.$get();
1802          $t1_2 = pid.$get();
1803          { const $r = $rt.builtin.mapLookup($t0_1, $t1_2); $t2_3 = [$r.value, $r.ok]; }
1804          $t3_4 = $t2_3[0];
1805          $t4_5 = $t2_3[1];
1806          if ($t4_5) {
1807            $block = 3; break;
1808          }
1809          else {
1810            $block = 2; break;
1811          }
1812          break;
1813        }
1814        case 1: {
1815          $t5_6 = { $get() { return $t3_4.$get().done; }, $set(v) { const obj = $t3_4.$get(); obj.done = v; $t3_4.$set(obj); } };
1816          $t5_6.$set(true);
1817          $t6_7 = clientSubs.$get();
1818          $t7_8 = pid.$get();
1819          { const $r = $rt.builtin.mapLookup($t6_7, $t7_8); $t8_9 = [$r.value, $r.ok]; }
1820          $t9_10 = $t8_9[0];
1821          $t10_11 = $t8_9[1];
1822          if ($t10_11) {
1823            $block = 4; break;
1824          }
1825          else {
1826            $block = 2; break;
1827          }
1828          break;
1829        }
1830        case 2: {
1831          return;
1832          break;
1833        }
1834        case 3: {
1835          $t11_12 = { $get() { return $t3_4.$get().done; }, $set(v) { const obj = $t3_4.$get(); obj.done = v; $t3_4.$set(obj); } };
1836          $t12_13 = $t11_12.$get();
1837          if ($t12_13) {
1838            $block = 2; break;
1839          }
1840          else {
1841            $block = 1; break;
1842          }
1843          break;
1844        }
1845        case 4: {
1846          $t13_14 = { $get() { return $t9_10.$get().clientID; }, $set(v) { const obj = $t9_10.$get(); obj.clientID = v; $t9_10.$set(obj); } };
1847          $t14_15 = $t13_14.$get();
1848          $t15_16 = pid.$get();
1849          $t16_17 = jstr($t15_16);
1850          $t17_18 = ('["EOSE",' + $t16_17);
1851          $t18_19 = ($t17_18 + ']');
1852          $t19_20 = fwd($t14_15, $t18_19);
1853          $block = 2; break;
1854          break;
1855        }
1856      }
1857    }
1858  }
1859  
1860  export function pushToMatchingSubs(ev) {
1861    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26;
1862    let $block = 0;
1863    while (true) {
1864      switch ($block) {
1865        case 0: {
1866          $t0_1 = clientSubs.$get();
1867          $t1_2 = { $entries: [...$t0_1.entries()], $pos: 0, next() { if (this.$pos >= this.$entries.length) return [false, null, null]; const [k, v] = this.$entries[this.$pos++]; return [true, k, v]; } };
1868          $t2_3 = 0;
1869          $block = 1; break;
1870          break;
1871        }
1872        case 1: {
1873          $t3_4 = $t1_2.next();
1874          $t4_5 = $t3_4[0];
1875          if ($t4_5) {
1876            $block = 2; break;
1877          }
1878          else {
1879            $block = 3; break;
1880          }
1881          break;
1882        }
1883        case 2: {
1884          $t5_6 = $t3_4[1];
1885          $t6_7 = $t3_4[2];
1886          $t7_8 = { $get() { return $t6_7.$get().filters; }, $set(v) { const obj = $t6_7.$get(); obj.filters = v; $t6_7.$set(obj); } };
1887          $t8_9 = $t7_8.$get();
1888          $t9_10 = $rt.builtin.len($t8_9);
1889          $t10_11 = -1;
1890          $block = 4; break;
1891          break;
1892        }
1893        case 3: {
1894          return;
1895          break;
1896        }
1897        case 4: {
1898          $t11_12 = ($t10_11 + 1);
1899          $t12_13 = ($t11_12 < $t9_10);
1900          if ($t12_13) {
1901            $block = 5; break;
1902          }
1903          else {
1904            $t2_3 = $t2_3;
1905            $block = 1; break;
1906          }
1907          break;
1908        }
1909        case 5: {
1910          $t13_14 = $t8_9.addr($t11_12);
1911          $t14_15 = $t13_14.$get();
1912          $t15_16 = common$nostr.Filter$Matches($t14_15, ev);
1913          if ($t15_16) {
1914            $block = 6; break;
1915          }
1916          else {
1917            $t10_11 = $t11_12;
1918            $block = 4; break;
1919          }
1920          break;
1921        }
1922        case 6: {
1923          $t16_17 = ($t2_3 + 1);
1924          $t17_18 = { $get() { return $t6_7.$get().clientID; }, $set(v) { const obj = $t6_7.$get(); obj.clientID = v; $t6_7.$set(obj); } };
1925          $t18_19 = $t17_18.$get();
1926          $t19_20 = jstr($t5_6);
1927          $t20_21 = ('["EVENT",' + $t19_20);
1928          $t21_22 = ($t20_21 + ',');
1929          $t22_23 = common$nostr.Event$ToJSON(ev);
1930          $t23_24 = ($t21_22 + $t22_23);
1931          $t24_25 = ($t23_24 + ']');
1932          $t25_26 = fwd($t18_19, $t24_25);
1933          $t2_3 = $t16_17;
1934          $block = 1; break;
1935          break;
1936        }
1937      }
1938    }
1939  }
1940  
1941  export function parseFilters(raw) {
1942    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66;
1943    let $block = 0;
1944    while (true) {
1945      switch ($block) {
1946        case 0: {
1947          $t3_4 = raw;
1948          $block = 3; break;
1949          break;
1950        }
1951        case 1: {
1952          $t0_1 = $rt.builtin.stringSlice($t3_4, 1, undefined);
1953          $t3_4 = $t0_1;
1954          $block = 3; break;
1955          break;
1956        }
1957        case 2: {
1958          $t1_2 = $rt.builtin.len($t3_4);
1959          $t2_3 = ($t1_2 === 0);
1960          if ($t2_3) {
1961            $block = 7; break;
1962          }
1963          else {
1964            $block = 8; break;
1965          }
1966          break;
1967        }
1968        case 3: {
1969          $t4_5 = $rt.builtin.len($t3_4);
1970          $t5_6 = ($t4_5 > 0);
1971          if ($t5_6) {
1972            $block = 4; break;
1973          }
1974          else {
1975            $block = 2; break;
1976          }
1977          break;
1978        }
1979        case 4: {
1980          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t3_4));
1981          $t6_7 = $rt.builtin.stringByteAt($t3_4, 0);
1982          $t7_8 = ($t6_7 === 32);
1983          if ($t7_8) {
1984            $block = 1; break;
1985          }
1986          else {
1987            $block = 6; break;
1988          }
1989          break;
1990        }
1991        case 5: {
1992          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t3_4));
1993          $t8_9 = $rt.builtin.stringByteAt($t3_4, 0);
1994          $t9_10 = ($t8_9 === 10);
1995          if ($t9_10) {
1996            $block = 1; break;
1997          }
1998          else {
1999            $block = 2; break;
2000          }
2001          break;
2002        }
2003        case 6: {
2004          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t3_4));
2005          $t10_11 = $rt.builtin.stringByteAt($t3_4, 0);
2006          $t11_12 = ($t10_11 === 9);
2007          if ($t11_12) {
2008            $block = 1; break;
2009          }
2010          else {
2011            $block = 5; break;
2012          }
2013          break;
2014        }
2015        case 7: {
2016          return null;
2017          break;
2018        }
2019        case 8: {
2020          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t3_4));
2021          $t12_13 = $rt.builtin.stringByteAt($t3_4, 0);
2022          $t13_14 = ($t12_13 === 123);
2023          if ($t13_14) {
2024            $block = 9; break;
2025          }
2026          else {
2027            $block = 10; break;
2028          }
2029          break;
2030        }
2031        case 9: {
2032          $t14_15 = common$nostr.ParseFilter($t3_4);
2033          $t15_16 = ($t14_15 === null);
2034          if ($t15_16) {
2035            $block = 11; break;
2036          }
2037          else {
2038            $block = 12; break;
2039          }
2040          break;
2041        }
2042        case 10: {
2043          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t3_4));
2044          $t16_17 = $rt.builtin.stringByteAt($t3_4, 0);
2045          $t17_18 = ($t16_17 !== 91);
2046          if ($t17_18) {
2047            $block = 13; break;
2048          }
2049          else {
2050            $block = 14; break;
2051          }
2052          break;
2053        }
2054        case 11: {
2055          return null;
2056          break;
2057        }
2058        case 12: {
2059          $t18_19 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2060          $t19_20 = $t18_19.$get().addr(0);
2061          $t19_20.$set($t14_15);
2062          $t20_21 = $rt.builtin.sliceSlice($t18_19.$get(), undefined, undefined, undefined);
2063          return $t20_21;
2064          break;
2065        }
2066        case 13: {
2067          return null;
2068          break;
2069        }
2070        case 14: {
2071          $t21_22 = $rt.builtin.stringSlice($t3_4, 1, undefined);
2072          $t25_26 = $t21_22;
2073          $t26_27 = null;
2074          $block = 18; break;
2075          break;
2076        }
2077        case 15: {
2078          return $t26_27;
2079          break;
2080        }
2081        case 16: {
2082          $t22_23 = $rt.builtin.stringSlice($t25_26, 1, undefined);
2083          let $phi0 = $t22_23;
2084          let $phi1 = $t26_27;
2085          $t25_26 = $phi0;
2086          $t26_27 = $phi1;
2087          $block = 18; break;
2088          break;
2089        }
2090        case 17: {
2091          $t23_24 = $rt.builtin.len($t25_26);
2092          $t24_25 = ($t23_24 === 0);
2093          if ($t24_25) {
2094            $block = 15; break;
2095          }
2096          else {
2097            $block = 24; break;
2098          }
2099          break;
2100        }
2101        case 18: {
2102          $t27_28 = $rt.builtin.len($t25_26);
2103          $t28_29 = ($t27_28 > 0);
2104          if ($t28_29) {
2105            $block = 19; break;
2106          }
2107          else {
2108            $block = 17; break;
2109          }
2110          break;
2111        }
2112        case 19: {
2113          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2114          $t29_30 = $rt.builtin.stringByteAt($t25_26, 0);
2115          $t30_31 = ($t29_30 === 32);
2116          if ($t30_31) {
2117            $block = 16; break;
2118          }
2119          else {
2120            $block = 22; break;
2121          }
2122          break;
2123        }
2124        case 20: {
2125          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2126          $t31_32 = $rt.builtin.stringByteAt($t25_26, 0);
2127          $t32_33 = ($t31_32 === 10);
2128          if ($t32_33) {
2129            $block = 16; break;
2130          }
2131          else {
2132            $block = 17; break;
2133          }
2134          break;
2135        }
2136        case 21: {
2137          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2138          $t33_34 = $rt.builtin.stringByteAt($t25_26, 0);
2139          $t34_35 = ($t33_34 === 9);
2140          if ($t34_35) {
2141            $block = 16; break;
2142          }
2143          else {
2144            $block = 20; break;
2145          }
2146          break;
2147        }
2148        case 22: {
2149          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2150          $t35_36 = $rt.builtin.stringByteAt($t25_26, 0);
2151          $t36_37 = ($t35_36 === 44);
2152          if ($t36_37) {
2153            $block = 16; break;
2154          }
2155          else {
2156            $block = 21; break;
2157          }
2158          break;
2159        }
2160        case 23: {
2161          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2162          $t37_38 = $rt.builtin.stringByteAt($t25_26, 0);
2163          $t38_39 = ($t37_38 !== 123);
2164          if ($t38_39) {
2165            $block = 15; break;
2166          }
2167          else {
2168            $block = 25; break;
2169          }
2170          break;
2171        }
2172        case 24: {
2173          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t25_26));
2174          $t39_40 = $rt.builtin.stringByteAt($t25_26, 0);
2175          $t40_41 = ($t39_40 === 93);
2176          if ($t40_41) {
2177            $block = 15; break;
2178          }
2179          else {
2180            $block = 23; break;
2181          }
2182          break;
2183        }
2184        case 25: {
2185          $t41_42 = 0;
2186          $t42_43 = 0;
2187          $block = 26; break;
2188          break;
2189        }
2190        case 26: {
2191          $t43_44 = $rt.builtin.len($t25_26);
2192          $t44_45 = ($t42_43 < $t43_44);
2193          if ($t44_45) {
2194            $block = 27; break;
2195          }
2196          else {
2197            $t47_48 = 0;
2198            $block = 28; break;
2199          }
2200          break;
2201        }
2202        case 27: {
2203          $rt.runtime.boundsCheck($t42_43, $rt.builtin.byteLen($t25_26));
2204          $t45_46 = $rt.builtin.stringByteAt($t25_26, $t42_43);
2205          $t46_47 = ($t45_46 === 123);
2206          if ($t46_47) {
2207            $block = 29; break;
2208          }
2209          else {
2210            $block = 31; break;
2211          }
2212          break;
2213        }
2214        case 28: {
2215          $t48_49 = ($t47_48 === 0);
2216          if ($t48_49) {
2217            $block = 15; break;
2218          }
2219          else {
2220            $block = 34; break;
2221          }
2222          break;
2223        }
2224        case 29: {
2225          $t49_50 = ($t41_42 + 1);
2226          $t50_51 = $t49_50;
2227          $block = 30; break;
2228          break;
2229        }
2230        case 30: {
2231          $t51_52 = ($t42_43 + 1);
2232          $t41_42 = $t50_51;
2233          $t42_43 = $t51_52;
2234          $block = 26; break;
2235          break;
2236        }
2237        case 31: {
2238          $rt.runtime.boundsCheck($t42_43, $rt.builtin.byteLen($t25_26));
2239          $t52_53 = $rt.builtin.stringByteAt($t25_26, $t42_43);
2240          $t53_54 = ($t52_53 === 125);
2241          if ($t53_54) {
2242            $block = 32; break;
2243          }
2244          else {
2245            $t50_51 = $t41_42;
2246            $block = 30; break;
2247          }
2248          break;
2249        }
2250        case 32: {
2251          $t54_55 = ($t41_42 - 1);
2252          $t55_56 = ($t54_55 === 0);
2253          if ($t55_56) {
2254            $block = 33; break;
2255          }
2256          else {
2257            $t50_51 = $t54_55;
2258            $block = 30; break;
2259          }
2260          break;
2261        }
2262        case 33: {
2263          $t56_57 = ($t42_43 + 1);
2264          $t47_48 = $t56_57;
2265          $block = 28; break;
2266          break;
2267        }
2268        case 34: {
2269          $t57_58 = $rt.builtin.stringSlice($t25_26, undefined, $t47_48);
2270          $t58_59 = common$nostr.ParseFilter($t57_58);
2271          $t59_60 = ($t58_59 !== null);
2272          if ($t59_60) {
2273            $block = 35; break;
2274          }
2275          else {
2276            $t64_65 = $t26_27;
2277            $block = 36; break;
2278          }
2279          break;
2280        }
2281        case 35: {
2282          $t60_61 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2283          $t61_62 = $t60_61.$get().addr(0);
2284          $t61_62.$set($t58_59);
2285          $t62_63 = $rt.builtin.sliceSlice($t60_61.$get(), undefined, undefined, undefined);
2286          $t63_64 = $rt.builtin.appendSlice($t26_27, $t62_63);
2287          $t64_65 = $t63_64;
2288          $block = 36; break;
2289          break;
2290        }
2291        case 36: {
2292          $t65_66 = $rt.builtin.stringSlice($t25_26, $t47_48, undefined);
2293          $t25_26 = $t65_66;
2294          $t26_27 = $t64_65;
2295          $block = 18; break;
2296          break;
2297        }
2298      }
2299    }
2300  }
2301  
2302  export function routerSign(clientID, requestID, eventRaw) {
2303    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
2304    let $block = 0;
2305    while (true) {
2306      switch ($block) {
2307        case 0: {
2308          $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2309          $t0_1.$set(clientID);
2310          $t1_2 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2311          $t1_2.$set(requestID);
2312          $t2_3 = myPubkey.$get();
2313          $t3_4 = ($t2_3 === '');
2314          if ($t3_4) {
2315            $block = 1; break;
2316          }
2317          else {
2318            $block = 2; break;
2319          }
2320          break;
2321        }
2322        case 1: {
2323          $t4_5 = $t0_1.$get();
2324          $t5_6 = $t1_2.$get();
2325          $t6_7 = jstr($t5_6);
2326          $t7_8 = ('["SIGN_ERROR",' + $t6_7);
2327          $t8_9 = ($t7_8 + ',"no key"]');
2328          $t9_10 = fwd($t4_5, $t8_9);
2329          return;
2330          break;
2331        }
2332        case 2: {
2333          $t10_11 = common$nostr.ParseEvent(eventRaw);
2334          $t11_12 = ($t10_11 === null);
2335          if ($t11_12) {
2336            $block = 3; break;
2337          }
2338          else {
2339            $block = 4; break;
2340          }
2341          break;
2342        }
2343        case 3: {
2344          $t12_13 = $t0_1.$get();
2345          $t13_14 = $t1_2.$get();
2346          $t14_15 = jstr($t13_14);
2347          $t15_16 = ('["SIGN_ERROR",' + $t14_15);
2348          $t16_17 = ($t15_16 + ',"parse error"]');
2349          $t17_18 = fwd($t12_13, $t16_17);
2350          return;
2351          break;
2352        }
2353        case 4: {
2354          $t18_19 = routerSign$1.bind(null, $t0_1, $t1_2);
2355          $t19_20 = cryptoProxy('signEvent', '', eventRaw, $t18_19);
2356          return;
2357          break;
2358        }
2359      }
2360    }
2361  }
2362  
2363  function routerSign$1(clientID, requestID, signedJSON, errMsg) {
2364    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
2365    let $block = 0;
2366    while (true) {
2367      switch ($block) {
2368        case 0: {
2369          $t0_1 = (errMsg !== '');
2370          if ($t0_1) {
2371            $block = 1; break;
2372          }
2373          else {
2374            $block = 3; break;
2375          }
2376          break;
2377        }
2378        case 1: {
2379          $t1_2 = clientID.$get();
2380          $t2_3 = requestID.$get();
2381          $t3_4 = jstr($t2_3);
2382          $t4_5 = ('["SIGN_ERROR",' + $t3_4);
2383          $t5_6 = ($t4_5 + ',');
2384          $t6_7 = jstr(errMsg);
2385          $t7_8 = ($t5_6 + $t6_7);
2386          $t8_9 = ($t7_8 + ']');
2387          $t9_10 = fwd($t1_2, $t8_9);
2388          return;
2389          break;
2390        }
2391        case 2: {
2392          $t10_11 = clientID.$get();
2393          $t11_12 = requestID.$get();
2394          $t12_13 = jstr($t11_12);
2395          $t13_14 = ('["SIGNED",' + $t12_13);
2396          $t14_15 = ($t13_14 + ',');
2397          $t15_16 = ($t14_15 + signedJSON);
2398          $t16_17 = ($t15_16 + ']');
2399          $t17_18 = fwd($t10_11, $t16_17);
2400          return;
2401          break;
2402        }
2403        case 3: {
2404          $t18_19 = (signedJSON === '');
2405          if ($t18_19) {
2406            $block = 1; break;
2407          }
2408          else {
2409            $block = 2; break;
2410          }
2411          break;
2412        }
2413      }
2414    }
2415  }
2416  
2417  export function routerSaveDMRecord(rec) {
2418    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
2419    $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2420    $t1_2 = DMRecord$ToJSON(rec);
2421    $t0_1.$set($t1_2);
2422    $t2_3 = $t0_1.$get();
2423    $t3_4 = routerSaveDMRecord$1.bind(null, $t0_1);
2424    $t4_5 = cacheSaveDM($t2_3, $t3_4);
2425    return;
2426  }
2427  
2428  function routerSaveDMRecord$1(dmJSON, result) {
2429    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
2430    let $block = 0;
2431    while (true) {
2432      switch ($block) {
2433        case 0: {
2434          $t0_1 = (result !== 'duplicate');
2435          if ($t0_1) {
2436            $block = 1; break;
2437          }
2438          else {
2439            $block = 2; break;
2440          }
2441          break;
2442        }
2443        case 1: {
2444          $t1_2 = dmJSON.$get();
2445          $t2_3 = ('["DM_RECEIVED",' + $t1_2);
2446          $t3_4 = ($t2_3 + ']');
2447          $t4_5 = fwdAll($t3_4);
2448          $block = 2; break;
2449          break;
2450        }
2451        case 2: {
2452          return;
2453          break;
2454        }
2455      }
2456    }
2457  }
2458  
2459  export function routerDMList(clientID) {
2460    let $t0_1, $t1_2, $t2_3;
2461    $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2462    $t0_1.$set(clientID);
2463    $t1_2 = routerDMList$1.bind(null, $t0_1);
2464    $t2_3 = cacheGetConversationList($t1_2);
2465    return;
2466  }
2467  
2468  function routerDMList$1(clientID, listJSON) {
2469    let $t0_1, $t1_2, $t2_3, $t3_4;
2470    $t0_1 = clientID.$get();
2471    $t1_2 = ('["DM_LIST",' + listJSON);
2472    $t2_3 = ($t1_2 + ']');
2473    $t3_4 = fwd($t0_1, $t2_3);
2474    return;
2475  }
2476  
2477  export function routerDMHistory(clientID, peer, limit, until) {
2478    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2479    let $block = 0;
2480    while (true) {
2481      switch ($block) {
2482        case 0: {
2483          $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2484          $t0_1.$set(clientID);
2485          $t1_2 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2486          $t1_2.$set(peer);
2487          $t2_3 = (limit <= 0);
2488          if ($t2_3) {
2489            $block = 1; break;
2490          }
2491          else {
2492            $t3_4 = limit;
2493            $block = 2; break;
2494          }
2495          break;
2496        }
2497        case 1: {
2498          $t3_4 = 50;
2499          $block = 2; break;
2500          break;
2501        }
2502        case 2: {
2503          $t4_5 = $t1_2.$get();
2504          $t5_6 = routerDMHistory$1.bind(null, $t0_1, $t1_2);
2505          $t6_7 = cacheQueryDMs($t4_5, $t3_4, until, $t5_6);
2506          return;
2507          break;
2508        }
2509      }
2510    }
2511  }
2512  
2513  function routerDMHistory$1(clientID, peer, msgsJSON) {
2514    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
2515    $t0_1 = clientID.$get();
2516    $t1_2 = peer.$get();
2517    $t2_3 = jstr($t1_2);
2518    $t3_4 = ('["DM_HISTORY",' + $t2_3);
2519    $t4_5 = ($t3_4 + ',');
2520    $t5_6 = ($t4_5 + msgsJSON);
2521    $t6_7 = ($t5_6 + ']');
2522    $t7_8 = fwd($t0_1, $t6_7);
2523    return;
2524  }
2525  
2526  export function routerBroadcast(clientID, pubkey, relayURLs) {
2527    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2528    $t0_1 = { $value: '', $get() { return this.$value; }, $set(v) { this.$value = v; } };
2529    $t0_1.$set(clientID);
2530    $t1_2 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2531    $t1_2.$set(relayURLs);
2532    $t2_3 = jstr(pubkey);
2533    $t3_4 = ('{"authors":[' + $t2_3);
2534    $t4_5 = ($t3_4 + '],"kinds":[0,3,10002,10050,10051]}');
2535    $t5_6 = routerBroadcast$1.bind(null, $t1_2, $t0_1);
2536    $t6_7 = cacheQuery($t4_5, $t5_6);
2537    return;
2538  }
2539  
2540  function routerBroadcast$1(relayURLs, clientID, eventsJSON) {
2541    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89;
2542    let $block = 0;
2543    while (true) {
2544      switch ($block) {
2545        case 0: {
2546          $t0_1 = common$nostr.ParseEventsJSON(eventsJSON);
2547          $t1_2 = $rt.builtin.makeMap('int');
2548          $t2_3 = $rt.builtin.len($t0_1);
2549          $t3_4 = -1;
2550          $block = 1; break;
2551          break;
2552        }
2553        case 1: {
2554          $t4_5 = ($t3_4 + 1);
2555          $t5_6 = ($t4_5 < $t2_3);
2556          if ($t5_6) {
2557            $block = 2; break;
2558          }
2559          else {
2560            $block = 3; break;
2561          }
2562          break;
2563        }
2564        case 2: {
2565          $t6_7 = $t0_1.addr($t4_5);
2566          $t7_8 = $t6_7.$get();
2567          $t8_9 = { $get() { return $t7_8.$get().Kind; }, $set(v) { const obj = $t7_8.$get(); obj.Kind = v; $t7_8.$set(obj); } };
2568          $t9_10 = $t8_9.$get();
2569          { const $r = $rt.builtin.mapLookup($t1_2, $t9_10); $t10_11 = [$r.value, $r.ok]; }
2570          $t11_12 = $t10_11[0];
2571          $t12_13 = $t10_11[1];
2572          if ($t12_13) {
2573            $block = 5; break;
2574          }
2575          else {
2576            $block = 4; break;
2577          }
2578          break;
2579        }
2580        case 3: {
2581          $t13_14 = relayURLs.$get();
2582          { const $r = $rt.builtin.mapLookup($t1_2, 10002); $t14_15 = [$r.value, $r.ok]; }
2583          $t15_16 = $t14_15[0];
2584          $t16_17 = $t14_15[1];
2585          if ($t16_17) {
2586            $block = 6; break;
2587          }
2588          else {
2589            $t28_29 = $t13_14;
2590            $block = 7; break;
2591          }
2592          break;
2593        }
2594        case 4: {
2595          $t17_18 = { $get() { return $t7_8.$get().Kind; }, $set(v) { const obj = $t7_8.$get(); obj.Kind = v; $t7_8.$set(obj); } };
2596          $t18_19 = $t17_18.$get();
2597          $rt.builtin.mapUpdate($t1_2, $t18_19, $t7_8);
2598          $t3_4 = $t4_5;
2599          $block = 1; break;
2600          break;
2601        }
2602        case 5: {
2603          $t19_20 = { $get() { return $t7_8.$get().CreatedAt; }, $set(v) { const obj = $t7_8.$get(); obj.CreatedAt = v; $t7_8.$set(obj); } };
2604          $t20_21 = $t19_20.$get();
2605          $t21_22 = { $get() { return $t11_12.$get().CreatedAt; }, $set(v) { const obj = $t11_12.$get(); obj.CreatedAt = v; $t11_12.$set(obj); } };
2606          $t22_23 = $t21_22.$get();
2607          $t23_24 = ($t20_21 > $t22_23);
2608          if ($t23_24) {
2609            $block = 4; break;
2610          }
2611          else {
2612            $t3_4 = $t4_5;
2613            $block = 1; break;
2614          }
2615          break;
2616        }
2617        case 6: {
2618          $t24_25 = { $get() { return $t15_16.$get().Tags; }, $set(v) { const obj = $t15_16.$get(); obj.Tags = v; $t15_16.$set(obj); } };
2619          $t25_26 = $t24_25.$get();
2620          $t26_27 = common$nostr.Tags$GetAll($t25_26, 'r');
2621          $t27_28 = $rt.builtin.len($t26_27);
2622          $t31_32 = null;
2623          $t32_33 = -1;
2624          $block = 8; break;
2625          break;
2626        }
2627        case 7: {
2628          $t29_30 = $rt.builtin.len($t28_29);
2629          $t30_31 = ($t29_30 === 0);
2630          if ($t30_31) {
2631            $block = 10; break;
2632          }
2633          else {
2634            $t43_44 = $t28_29;
2635            $block = 11; break;
2636          }
2637          break;
2638        }
2639        case 8: {
2640          $t33_34 = ($t32_33 + 1);
2641          $t34_35 = ($t33_34 < $t27_28);
2642          if ($t34_35) {
2643            $block = 9; break;
2644          }
2645          else {
2646            $t28_29 = $t31_32;
2647            $block = 7; break;
2648          }
2649          break;
2650        }
2651        case 9: {
2652          $t35_36 = $t26_27.addr($t33_34);
2653          $t36_37 = $t35_36.$get();
2654          $t37_38 = common$nostr.Tag$Value($t36_37);
2655          $t38_39 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2656          $t39_40 = $t38_39.$get().addr(0);
2657          $t39_40.$set($t37_38);
2658          $t40_41 = $rt.builtin.sliceSlice($t38_39.$get(), undefined, undefined, undefined);
2659          $t41_42 = $rt.builtin.appendSlice($t31_32, $t40_41);
2660          $t31_32 = $t41_42;
2661          $t32_33 = $t33_34;
2662          $block = 8; break;
2663          break;
2664        }
2665        case 10: {
2666          $t42_43 = writeRelays.$get();
2667          $t43_44 = $t42_43;
2668          $block = 11; break;
2669          break;
2670        }
2671        case 11: {
2672          { const $r = $rt.builtin.mapLookup($t1_2, 10050); $t44_45 = [$r.value, $r.ok]; }
2673          $t45_46 = $t44_45[0];
2674          $t46_47 = $t44_45[1];
2675          if ($t46_47) {
2676            $block = 13; break;
2677          }
2678          else {
2679            $block = 15; break;
2680          }
2681          break;
2682        }
2683        case 12: {
2684          $t47_48 = routerBroadcast$1$1.bind(null, relayURLs);
2685          $t48_49 = createRelayListEventAsync(10050, $t43_44, $t47_48);
2686          $block = 13; break;
2687          break;
2688        }
2689        case 13: {
2690          { const $r = $rt.builtin.mapLookup($t1_2, 10051); $t49_50 = [$r.value, $r.ok]; }
2691          $t50_51 = $t49_50[0];
2692          $t51_52 = $t49_50[1];
2693          if ($t51_52) {
2694            $block = 17; break;
2695          }
2696          else {
2697            $block = 19; break;
2698          }
2699          break;
2700        }
2701        case 14: {
2702          $t52_53 = $rt.builtin.len($t43_44);
2703          $t53_54 = ($t52_53 > 0);
2704          if ($t53_54) {
2705            $block = 12; break;
2706          }
2707          else {
2708            $block = 13; break;
2709          }
2710          break;
2711        }
2712        case 15: {
2713          $t54_55 = myPubkey.$get();
2714          $t55_56 = ($t54_55 !== '');
2715          if ($t55_56) {
2716            $block = 14; break;
2717          }
2718          else {
2719            $block = 13; break;
2720          }
2721          break;
2722        }
2723        case 16: {
2724          $t56_57 = routerBroadcast$1$2.bind(null, relayURLs);
2725          $t57_58 = createRelayListEventAsync(10051, $t43_44, $t56_57);
2726          $block = 17; break;
2727          break;
2728        }
2729        case 17: {
2730          $t58_59 = { $entries: [...$t1_2.entries()], $pos: 0, next() { if (this.$pos >= this.$entries.length) return [false, null, null]; const [k, v] = this.$entries[this.$pos++]; return [true, k, v]; } };
2731          $t63_64 = 0;
2732          $block = 20; break;
2733          break;
2734        }
2735        case 18: {
2736          $t59_60 = $rt.builtin.len($t43_44);
2737          $t60_61 = ($t59_60 > 0);
2738          if ($t60_61) {
2739            $block = 16; break;
2740          }
2741          else {
2742            $block = 17; break;
2743          }
2744          break;
2745        }
2746        case 19: {
2747          $t61_62 = myPubkey.$get();
2748          $t62_63 = ($t61_62 !== '');
2749          if ($t62_63) {
2750            $block = 18; break;
2751          }
2752          else {
2753            $block = 17; break;
2754          }
2755          break;
2756        }
2757        case 20: {
2758          $t64_65 = $t58_59.next();
2759          $t65_66 = $t64_65[0];
2760          if ($t65_66) {
2761            $block = 21; break;
2762          }
2763          else {
2764            $block = 22; break;
2765          }
2766          break;
2767        }
2768        case 21: {
2769          $t66_67 = $t64_65[2];
2770          $t67_68 = relayURLs.$get();
2771          $t68_69 = $rt.builtin.len($t67_68);
2772          $t81_82 = -1;
2773          $block = 23; break;
2774          break;
2775        }
2776        case 22: {
2777          $t69_70 = clientID.$get();
2778          $t70_71 = $t63_64;
2779          $t71_72 = common$helpers.Itoa($t70_71);
2780          $t72_73 = ('["BROADCAST_DONE",' + $t71_72);
2781          $t73_74 = ($t72_73 + ',');
2782          $t74_75 = relayURLs.$get();
2783          $t75_76 = $rt.builtin.len($t74_75);
2784          $t76_77 = $t75_76;
2785          $t77_78 = common$helpers.Itoa($t76_77);
2786          $t78_79 = ($t73_74 + $t77_78);
2787          $t79_80 = ($t78_79 + ']');
2788          $t80_81 = fwd($t69_70, $t79_80);
2789          return;
2790          break;
2791        }
2792        case 23: {
2793          $t82_83 = ($t81_82 + 1);
2794          $t83_84 = ($t82_83 < $t68_69);
2795          if ($t83_84) {
2796            $block = 24; break;
2797          }
2798          else {
2799            $block = 25; break;
2800          }
2801          break;
2802        }
2803        case 24: {
2804          $t84_85 = $t67_68.addr($t82_83);
2805          $t85_86 = $t84_85.$get();
2806          $t86_87 = getConn($t85_86);
2807          $t87_88 = common$relay.Conn$Publish($t86_87, $t66_67);
2808          $t81_82 = $t82_83;
2809          $block = 23; break;
2810          break;
2811        }
2812        case 25: {
2813          $t88_89 = ($t63_64 + 1);
2814          $t63_64 = $t88_89;
2815          $block = 20; break;
2816          break;
2817        }
2818      }
2819    }
2820  }
2821  
2822  function routerBroadcast$1$1(relayURLs, ev) {
2823    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
2824    let $block = 0;
2825    while (true) {
2826      switch ($block) {
2827        case 0: {
2828          $t0_1 = (ev !== null);
2829          if ($t0_1) {
2830            $block = 1; break;
2831          }
2832          else {
2833            $block = 2; break;
2834          }
2835          break;
2836        }
2837        case 1: {
2838          $t1_2 = common$nostr.Event$ToJSON(ev);
2839          $t2_3 = cacheStore($t1_2, routerBroadcast$1$1$1);
2840          $t3_4 = relayURLs.$get();
2841          $t4_5 = $rt.builtin.len($t3_4);
2842          $t5_6 = -1;
2843          $block = 3; break;
2844          break;
2845        }
2846        case 2: {
2847          return;
2848          break;
2849        }
2850        case 3: {
2851          $t6_7 = ($t5_6 + 1);
2852          $t7_8 = ($t6_7 < $t4_5);
2853          if ($t7_8) {
2854            $block = 4; break;
2855          }
2856          else {
2857            $block = 2; break;
2858          }
2859          break;
2860        }
2861        case 4: {
2862          $t8_9 = $t3_4.addr($t6_7);
2863          $t9_10 = $t8_9.$get();
2864          $t10_11 = getConn($t9_10);
2865          $t11_12 = common$relay.Conn$Publish($t10_11, ev);
2866          $t5_6 = $t6_7;
2867          $block = 3; break;
2868          break;
2869        }
2870      }
2871    }
2872  }
2873  
2874  function routerBroadcast$1$1$1(_) {
2875    return;
2876  }
2877  
2878  function routerBroadcast$1$2(relayURLs, ev) {
2879    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
2880    let $block = 0;
2881    while (true) {
2882      switch ($block) {
2883        case 0: {
2884          $t0_1 = (ev !== null);
2885          if ($t0_1) {
2886            $block = 1; break;
2887          }
2888          else {
2889            $block = 2; break;
2890          }
2891          break;
2892        }
2893        case 1: {
2894          $t1_2 = common$nostr.Event$ToJSON(ev);
2895          $t2_3 = cacheStore($t1_2, routerBroadcast$1$2$1);
2896          $t3_4 = relayURLs.$get();
2897          $t4_5 = $rt.builtin.len($t3_4);
2898          $t5_6 = -1;
2899          $block = 3; break;
2900          break;
2901        }
2902        case 2: {
2903          return;
2904          break;
2905        }
2906        case 3: {
2907          $t6_7 = ($t5_6 + 1);
2908          $t7_8 = ($t6_7 < $t4_5);
2909          if ($t7_8) {
2910            $block = 4; break;
2911          }
2912          else {
2913            $block = 2; break;
2914          }
2915          break;
2916        }
2917        case 4: {
2918          $t8_9 = $t3_4.addr($t6_7);
2919          $t9_10 = $t8_9.$get();
2920          $t10_11 = getConn($t9_10);
2921          $t11_12 = common$relay.Conn$Publish($t10_11, ev);
2922          $t5_6 = $t6_7;
2923          $block = 3; break;
2924          break;
2925        }
2926      }
2927    }
2928  }
2929  
2930  function routerBroadcast$1$2$1(_) {
2931    return;
2932  }
2933  
2934  export function createRelayListEventAsync(kind, relays, cb) {
2935    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27;
2936    let $block = 0;
2937    while (true) {
2938      switch ($block) {
2939        case 0: {
2940          $t0_1 = { $value: null, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2941          $t0_1.$set(cb);
2942          $t1_2 = $rt.builtin.len(relays);
2943          $t2_3 = null;
2944          $t3_4 = -1;
2945          $block = 1; break;
2946          break;
2947        }
2948        case 1: {
2949          $t4_5 = ($t3_4 + 1);
2950          $t5_6 = ($t4_5 < $t1_2);
2951          if ($t5_6) {
2952            $block = 2; break;
2953          }
2954          else {
2955            $block = 3; break;
2956          }
2957          break;
2958        }
2959        case 2: {
2960          $t6_7 = relays.addr($t4_5);
2961          $t7_8 = $t6_7.$get();
2962          $t8_9 = { $value: $rt.builtin.makeSlice(2, 2, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2963          $t9_10 = $t8_9.$get().addr(0);
2964          $t9_10.$set('relay');
2965          $t10_11 = $t8_9.$get().addr(1);
2966          $t10_11.$set($t7_8);
2967          $t11_12 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
2968          $t12_13 = { $value: $rt.builtin.makeSlice(1, 1, null), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2969          $t13_14 = $t12_13.$get().addr(0);
2970          $t13_14.$set($t11_12);
2971          $t14_15 = $rt.builtin.sliceSlice($t12_13.$get(), undefined, undefined, undefined);
2972          $t15_16 = $rt.builtin.appendSlice($t2_3, $t14_15);
2973          $t2_3 = $t15_16;
2974          $t3_4 = $t4_5;
2975          $block = 1; break;
2976          break;
2977        }
2978        case 3: {
2979          $t16_17 = { $value: { ID: '', PubKey: '', CreatedAt: 0, Kind: 0, Tags: null, Content: '', Sig: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2980          $t17_18 = { $get() { return $t16_17.$get().Kind; }, $set(v) { const obj = $t16_17.$get(); obj.Kind = v; $t16_17.$set(obj); } };
2981          $t18_19 = { $get() { return $t16_17.$get().PubKey; }, $set(v) { const obj = $t16_17.$get(); obj.PubKey = v; $t16_17.$set(obj); } };
2982          $t19_20 = myPubkey.$get();
2983          $t20_21 = { $get() { return $t16_17.$get().Content; }, $set(v) { const obj = $t16_17.$get(); obj.Content = v; $t16_17.$set(obj); } };
2984          $t21_22 = { $get() { return $t16_17.$get().Tags; }, $set(v) { const obj = $t16_17.$get(); obj.Tags = v; $t16_17.$set(obj); } };
2985          $t22_23 = { $get() { return $t16_17.$get().CreatedAt; }, $set(v) { const obj = $t16_17.$get(); obj.CreatedAt = v; $t16_17.$set(obj); } };
2986          $t23_24 = common$jsbridge$sw.NowSeconds();
2987          $t17_18.$set(kind);
2988          $t18_19.$set($t19_20);
2989          $t20_21.$set('');
2990          $t21_22.$set($t2_3);
2991          $t22_23.$set($t23_24);
2992          $t24_25 = common$nostr.Event$ToJSON($t16_17);
2993          $t25_26 = createRelayListEventAsync$1.bind(null, $t0_1);
2994          $t26_27 = cryptoProxy('signEvent', '', $t24_25, $t25_26);
2995          return;
2996          break;
2997        }
2998      }
2999    }
3000  }
3001  
3002  function createRelayListEventAsync$1(cb, signedJSON, errMsg) {
3003    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
3004    let $block = 0;
3005    while (true) {
3006      switch ($block) {
3007        case 0: {
3008          $t0_1 = (errMsg !== '');
3009          if ($t0_1) {
3010            $block = 1; break;
3011          }
3012          else {
3013            $block = 3; break;
3014          }
3015          break;
3016        }
3017        case 1: {
3018          $t1_2 = cb.$get();
3019          $t2_3 = $t1_2(null);
3020          return;
3021          break;
3022        }
3023        case 2: {
3024          $t3_4 = common$nostr.ParseEvent(signedJSON);
3025          $t4_5 = cb.$get();
3026          $t5_6 = $t4_5($t3_4);
3027          return;
3028          break;
3029        }
3030        case 3: {
3031          $t6_7 = (signedJSON === '');
3032          if ($t6_7) {
3033            $block = 1; break;
3034          }
3035          else {
3036            $block = 2; break;
3037          }
3038          break;
3039        }
3040      }
3041    }
3042  }
3043  
3044  export function makeDMRecord(peer, from, content, createdAt, protocol, eventID) {
3045    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
3046    $t0_1 = { $value: { ID: '', Peer: '', From: '', Content: '', CreatedAt: 0, Protocol: '', EventID: '' }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3047    $t1_2 = { $get() { return $t0_1.$get().ID; }, $set(v) { const obj = $t0_1.$get(); obj.ID = v; $t0_1.$set(obj); } };
3048    $t2_3 = dmDedupID(peer, content, createdAt);
3049    $t3_4 = { $get() { return $t0_1.$get().Peer; }, $set(v) { const obj = $t0_1.$get(); obj.Peer = v; $t0_1.$set(obj); } };
3050    $t4_5 = { $get() { return $t0_1.$get().From; }, $set(v) { const obj = $t0_1.$get(); obj.From = v; $t0_1.$set(obj); } };
3051    $t5_6 = { $get() { return $t0_1.$get().Content; }, $set(v) { const obj = $t0_1.$get(); obj.Content = v; $t0_1.$set(obj); } };
3052    $t6_7 = { $get() { return $t0_1.$get().CreatedAt; }, $set(v) { const obj = $t0_1.$get(); obj.CreatedAt = v; $t0_1.$set(obj); } };
3053    $t7_8 = { $get() { return $t0_1.$get().Protocol; }, $set(v) { const obj = $t0_1.$get(); obj.Protocol = v; $t0_1.$set(obj); } };
3054    $t8_9 = { $get() { return $t0_1.$get().EventID; }, $set(v) { const obj = $t0_1.$get(); obj.EventID = v; $t0_1.$set(obj); } };
3055    $t1_2.$set($t2_3);
3056    $t3_4.$set(peer);
3057    $t4_5.$set(from);
3058    $t5_6.$set(content);
3059    $t6_7.$set(createdAt);
3060    $t7_8.$set(protocol);
3061    $t8_9.$set(eventID);
3062    return $t0_1;
3063  }
3064  
3065  export function dmDedupID(peer, content, createdAt) {
3066    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14;
3067    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3068    $t1_2 = $rt.builtin.stringToBytes(content);
3069    $t2_3 = common$crypto$sha256.Sum($t1_2);
3070    $t0_1.$set($rt.builtin.cloneValue($t2_3));
3071    $t3_4 = Math.trunc(createdAt / 300);
3072    $t4_5 = common$helpers.Itoa($t3_4);
3073    $t5_6 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3074    $t6_7 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
3075    $t7_8 = common$helpers.HexEncode($t6_7);
3076    $t8_9 = (peer + $t7_8);
3077    $t9_10 = ($t8_9 + $t4_5);
3078    $t10_11 = $rt.builtin.stringToBytes($t9_10);
3079    $t11_12 = common$crypto$sha256.Sum($t10_11);
3080    $t5_6.$set($rt.builtin.cloneValue($t11_12));
3081    $t12_13 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
3082    $t13_14 = common$helpers.HexEncode($t12_13);
3083    return $t13_14;
3084  }
3085  
3086  export function initSharedState() {
3087    let $t0_1;
3088    $t0_1 = $rt.builtin.makeMap('int');
3089    cryptoCBs.$set($t0_1);
3090    return;
3091  }
3092  
3093  export function cryptoProxy(method, peerPubkey, data, cb) {
3094    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
3095    $t0_1 = nextCryptoID.$get();
3096    $t1_2 = nextCryptoID.$get();
3097    $t2_3 = ($t1_2 + 1);
3098    nextCryptoID.$set($t2_3);
3099    $t3_4 = cryptoCBs.$get();
3100    $rt.builtin.mapUpdate($t3_4, $t0_1, cb);
3101    $t4_5 = jstr('relay');
3102    $t5_6 = ('["CRYPTO_REQ",' + $t4_5);
3103    $t6_7 = ($t5_6 + ',');
3104    $t7_8 = $t0_1;
3105    $t8_9 = common$helpers.Itoa($t7_8);
3106    $t9_10 = ($t6_7 + $t8_9);
3107    $t10_11 = ($t9_10 + ',');
3108    $t11_12 = jstr(method);
3109    $t12_13 = ($t10_11 + $t11_12);
3110    $t13_14 = ($t12_13 + ',');
3111    $t14_15 = jstr(peerPubkey);
3112    $t15_16 = ($t13_14 + $t14_15);
3113    $t16_17 = ($t15_16 + ',');
3114    $t17_18 = jstr(data);
3115    $t18_19 = ($t16_17 + $t17_18);
3116    $t19_20 = ($t18_19 + ']');
3117    $t20_21 = busSend('shell', $t19_20);
3118    return;
3119  }
3120  
3121  export function fwd(clientID, msg) {
3122    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
3123    $t0_1 = fwdBuf.$get();
3124    $t1_2 = jstr(clientID);
3125    $t2_3 = ('["FWD",' + $t1_2);
3126    $t3_4 = ($t2_3 + ',');
3127    $t4_5 = ($t3_4 + msg);
3128    $t5_6 = ($t4_5 + ']');
3129    $t6_7 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3130    $t7_8 = $t6_7.$get().addr(0);
3131    $t7_8.$set($t5_6);
3132    $t8_9 = $rt.builtin.sliceSlice($t6_7.$get(), undefined, undefined, undefined);
3133    $t9_10 = $rt.builtin.appendSlice($t0_1, $t8_9);
3134    fwdBuf.$set($t9_10);
3135    $t10_11 = scheduleFwdFlush();
3136    return;
3137  }
3138  
3139  export function fwdAll(msg) {
3140    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8;
3141    $t0_1 = fwdBuf.$get();
3142    $t1_2 = ('["FWD_ALL",' + msg);
3143    $t2_3 = ($t1_2 + ']');
3144    $t3_4 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3145    $t4_5 = $t3_4.$get().addr(0);
3146    $t4_5.$set($t2_3);
3147    $t5_6 = $rt.builtin.sliceSlice($t3_4.$get(), undefined, undefined, undefined);
3148    $t6_7 = $rt.builtin.appendSlice($t0_1, $t5_6);
3149    fwdBuf.$set($t6_7);
3150    $t7_8 = scheduleFwdFlush();
3151    return;
3152  }
3153  
3154  export function scheduleFwdFlush() {
3155    let $t0_1, $t1_2, $t2_3;
3156    let $block = 0;
3157    while (true) {
3158      switch ($block) {
3159        case 0: {
3160          $t0_1 = fwdTimer.$get();
3161          $t1_2 = ($t0_1 !== 0);
3162          if ($t1_2) {
3163            $block = 1; break;
3164          }
3165          else {
3166            $block = 2; break;
3167          }
3168          break;
3169        }
3170        case 1: {
3171          return;
3172          break;
3173        }
3174        case 2: {
3175          $t2_3 = common$jsbridge$sw.SetTimeout(50, flushFwd);
3176          fwdTimer.$set($t2_3);
3177          return;
3178          break;
3179        }
3180      }
3181    }
3182  }
3183  
3184  export function flushFwd() {
3185    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
3186    let $block = 0;
3187    while (true) {
3188      switch ($block) {
3189        case 0: {
3190          fwdTimer.$set(0);
3191          $t0_1 = fwdBuf.$get();
3192          $t1_2 = $rt.builtin.len($t0_1);
3193          $t2_3 = ($t1_2 === 0);
3194          if ($t2_3) {
3195            $block = 1; break;
3196          }
3197          else {
3198            $block = 2; break;
3199          }
3200          break;
3201        }
3202        case 1: {
3203          return;
3204          break;
3205        }
3206        case 2: {
3207          $t3_4 = fwdBuf.$get();
3208          $t4_5 = $rt.builtin.len($t3_4);
3209          $t5_6 = '["FWD_BATCH",[';
3210          $t6_7 = -1;
3211          $block = 3; break;
3212          break;
3213        }
3214        case 3: {
3215          $t7_8 = ($t6_7 + 1);
3216          $t8_9 = ($t7_8 < $t4_5);
3217          if ($t8_9) {
3218            $block = 4; break;
3219          }
3220          else {
3221            $block = 5; break;
3222          }
3223          break;
3224        }
3225        case 4: {
3226          $t9_10 = $t3_4.addr($t7_8);
3227          $t10_11 = $t9_10.$get();
3228          $t11_12 = ($t7_8 > 0);
3229          if ($t11_12) {
3230            $block = 6; break;
3231          }
3232          else {
3233            $t15_16 = $t5_6;
3234            $block = 7; break;
3235          }
3236          break;
3237        }
3238        case 5: {
3239          $t12_13 = ($t5_6 + ']]');
3240          fwdBuf.$set(null);
3241          $t13_14 = busSend('shell', $t12_13);
3242          return;
3243          break;
3244        }
3245        case 6: {
3246          $t14_15 = ($t5_6 + ',');
3247          $t15_16 = $t14_15;
3248          $block = 7; break;
3249          break;
3250        }
3251        case 7: {
3252          $t16_17 = ($t15_16 + $t10_11);
3253          $t5_6 = $t16_17;
3254          $t6_7 = $t7_8;
3255          $block = 3; break;
3256          break;
3257        }
3258      }
3259    }
3260  }
3261  
3262  export function strsJSON(ss) {
3263    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
3264    let $block = 0;
3265    while (true) {
3266      switch ($block) {
3267        case 0: {
3268          $t0_1 = $rt.builtin.len(ss);
3269          $t1_2 = ($t0_1 === 0);
3270          if ($t1_2) {
3271            $block = 1; break;
3272          }
3273          else {
3274            $block = 2; break;
3275          }
3276          break;
3277        }
3278        case 1: {
3279          return '[]';
3280          break;
3281        }
3282        case 2: {
3283          $t2_3 = $rt.builtin.len(ss);
3284          $t3_4 = '[';
3285          $t4_5 = -1;
3286          $block = 3; break;
3287          break;
3288        }
3289        case 3: {
3290          $t5_6 = ($t4_5 + 1);
3291          $t6_7 = ($t5_6 < $t2_3);
3292          if ($t6_7) {
3293            $block = 4; break;
3294          }
3295          else {
3296            $block = 5; break;
3297          }
3298          break;
3299        }
3300        case 4: {
3301          $t7_8 = ss.addr($t5_6);
3302          $t8_9 = $t7_8.$get();
3303          $t9_10 = ($t5_6 > 0);
3304          if ($t9_10) {
3305            $block = 6; break;
3306          }
3307          else {
3308            $t12_13 = $t3_4;
3309            $block = 7; break;
3310          }
3311          break;
3312        }
3313        case 5: {
3314          $t10_11 = ($t3_4 + ']');
3315          return $t10_11;
3316          break;
3317        }
3318        case 6: {
3319          $t11_12 = ($t3_4 + ',');
3320          $t12_13 = $t11_12;
3321          $block = 7; break;
3322          break;
3323        }
3324        case 7: {
3325          $t13_14 = jstr($t8_9);
3326          $t14_15 = ($t12_13 + $t13_14);
3327          $t3_4 = $t14_15;
3328          $t4_5 = $t5_6;
3329          $block = 3; break;
3330          break;
3331        }
3332      }
3333    }
3334  }
3335  
3336  export function jstr(s) {
3337    let $t0_1;
3338    $t0_1 = common$helpers.JsonString(s);
3339    return $t0_1;
3340  }
3341  
3342  export function boolStr(b) {
3343    let $block = 0;
3344    while (true) {
3345      switch ($block) {
3346        case 0: {
3347          if (b) {
3348            $block = 1; break;
3349          }
3350          else {
3351            $block = 2; break;
3352          }
3353          break;
3354        }
3355        case 1: {
3356          return 'true';
3357          break;
3358        }
3359        case 2: {
3360          return 'false';
3361          break;
3362        }
3363      }
3364    }
3365  }
3366  
3367  export function hexTo32(s) {
3368    let $t0_1, $t1_2, $t2_3;
3369    $t0_1 = common$helpers.HexDecode32(s);
3370    $t1_2 = $t0_1[0];
3371    $t2_3 = $t0_1[1];
3372    return $t1_2;
3373  }
3374  
3375  export function random32() {
3376    let $t0_1, $t1_2, $t2_3, $t3_4;
3377    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
3378    $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
3379    $t2_3 = common$jsbridge$subtle.RandomBytes($t1_2);
3380    $t3_4 = $t0_1.$get();
3381    return $t3_4;
3382  }
3383  
3384  export function jsonField(json, key) {
3385    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
3386    let $block = 0;
3387    while (true) {
3388      switch ($block) {
3389        case 0: {
3390          $t0_1 = jsonFieldRaw(json, key);
3391          $t1_2 = $rt.builtin.len($t0_1);
3392          $t2_3 = ($t1_2 >= 2);
3393          if ($t2_3) {
3394            $block = 4; break;
3395          }
3396          else {
3397            $block = 2; break;
3398          }
3399          break;
3400        }
3401        case 1: {
3402          $t3_4 = $rt.builtin.len($t0_1);
3403          $t4_5 = ($t3_4 - 1);
3404          $t5_6 = $rt.builtin.stringSlice($t0_1, 1, $t4_5);
3405          return $t5_6;
3406          break;
3407        }
3408        case 2: {
3409          return $t0_1;
3410          break;
3411        }
3412        case 3: {
3413          $t6_7 = $rt.builtin.len($t0_1);
3414          $t7_8 = ($t6_7 - 1);
3415          $rt.runtime.boundsCheck($t7_8, $rt.builtin.byteLen($t0_1));
3416          $t8_9 = $rt.builtin.stringByteAt($t0_1, $t7_8);
3417          $t9_10 = ($t8_9 === 34);
3418          if ($t9_10) {
3419            $block = 1; break;
3420          }
3421          else {
3422            $block = 2; break;
3423          }
3424          break;
3425        }
3426        case 4: {
3427          $rt.runtime.boundsCheck(0, $rt.builtin.byteLen($t0_1));
3428          $t10_11 = $rt.builtin.stringByteAt($t0_1, 0);
3429          $t11_12 = ($t10_11 === 34);
3430          if ($t11_12) {
3431            $block = 3; break;
3432          }
3433          else {
3434            $block = 2; break;
3435          }
3436          break;
3437        }
3438      }
3439    }
3440  }
3441  
3442  export function jsonFieldRaw(json, key) {
3443    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29;
3444    let $block = 0;
3445    while (true) {
3446      switch ($block) {
3447        case 0: {
3448          $t0_1 = ('"' + key);
3449          $t1_2 = ($t0_1 + '":');
3450          $t2_3 = 0;
3451          $block = 1; break;
3452          break;
3453        }
3454        case 1: {
3455          $t3_4 = $rt.builtin.len(json);
3456          $t4_5 = $rt.builtin.len($t1_2);
3457          $t5_6 = ($t3_4 - $t4_5);
3458          $t6_7 = ($t2_3 <= $t5_6);
3459          if ($t6_7) {
3460            $block = 2; break;
3461          }
3462          else {
3463            $t11_12 = -1;
3464            $block = 3; break;
3465          }
3466          break;
3467        }
3468        case 2: {
3469          $t7_8 = $rt.builtin.len($t1_2);
3470          $t8_9 = ($t2_3 + $t7_8);
3471          $t9_10 = $rt.builtin.stringSlice(json, $t2_3, $t8_9);
3472          $t10_11 = ($t9_10 === $t1_2);
3473          if ($t10_11) {
3474            $block = 4; break;
3475          }
3476          else {
3477            $block = 5; break;
3478          }
3479          break;
3480        }
3481        case 3: {
3482          $t12_13 = ($t11_12 < 0);
3483          if ($t12_13) {
3484            $block = 6; break;
3485          }
3486          else {
3487            $t19_20 = $t11_12;
3488            $block = 9; break;
3489          }
3490          break;
3491        }
3492        case 4: {
3493          $t13_14 = $rt.builtin.len($t1_2);
3494          $t14_15 = ($t2_3 + $t13_14);
3495          $t11_12 = $t14_15;
3496          $block = 3; break;
3497          break;
3498        }
3499        case 5: {
3500          $t15_16 = ($t2_3 + 1);
3501          $t2_3 = $t15_16;
3502          $block = 1; break;
3503          break;
3504        }
3505        case 6: {
3506          return '';
3507          break;
3508        }
3509        case 7: {
3510          $t16_17 = ($t19_20 + 1);
3511          $t19_20 = $t16_17;
3512          $block = 9; break;
3513          break;
3514        }
3515        case 8: {
3516          $t17_18 = $rt.builtin.len(json);
3517          $t18_19 = ($t19_20 >= $t17_18);
3518          if ($t18_19) {
3519            $block = 12; break;
3520          }
3521          else {
3522            $block = 13; break;
3523          }
3524          break;
3525        }
3526        case 9: {
3527          $t20_21 = $rt.builtin.len(json);
3528          $t21_22 = ($t19_20 < $t20_21);
3529          if ($t21_22) {
3530            $block = 10; break;
3531          }
3532          else {
3533            $block = 8; break;
3534          }
3535          break;
3536        }
3537        case 10: {
3538          $rt.runtime.boundsCheck($t19_20, $rt.builtin.byteLen(json));
3539          $t22_23 = $rt.builtin.stringByteAt(json, $t19_20);
3540          $t23_24 = ($t22_23 === 32);
3541          if ($t23_24) {
3542            $block = 7; break;
3543          }
3544          else {
3545            $block = 11; break;
3546          }
3547          break;
3548        }
3549        case 11: {
3550          $rt.runtime.boundsCheck($t19_20, $rt.builtin.byteLen(json));
3551          $t24_25 = $rt.builtin.stringByteAt(json, $t19_20);
3552          $t25_26 = ($t24_25 === 9);
3553          if ($t25_26) {
3554            $block = 7; break;
3555          }
3556          else {
3557            $block = 8; break;
3558          }
3559          break;
3560        }
3561        case 12: {
3562          return '';
3563          break;
3564        }
3565        case 13: {
3566          $t26_27 = skipval(json, $t19_20);
3567          $t27_28 = ($t26_27 < 0);
3568          if ($t27_28) {
3569            $block = 14; break;
3570          }
3571          else {
3572            $block = 15; break;
3573          }
3574          break;
3575        }
3576        case 14: {
3577          return '';
3578          break;
3579        }
3580        case 15: {
3581          $t28_29 = $rt.builtin.stringSlice(json, $t19_20, $t26_27);
3582          return $t28_29;
3583          break;
3584        }
3585      }
3586    }
3587  }
3588  
3589  export function newMW(s) {
3590    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
3591    let $block = 0;
3592    while (true) {
3593      switch ($block) {
3594        case 0: {
3595          $t0_1 = { $value: { s: '', i: 0 }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
3596          $t1_2 = { $get() { return $t0_1.$get().s; }, $set(v) { const obj = $t0_1.$get(); obj.s = v; $t0_1.$set(obj); } };
3597          $t1_2.$set(s);
3598          $block = 3; break;
3599          break;
3600        }
3601        case 1: {
3602          $t2_3 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3603          $t3_4 = $t2_3.$get();
3604          $t4_5 = ($t3_4 + 1);
3605          $t5_6 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3606          $t5_6.$set($t4_5);
3607          $block = 3; break;
3608          break;
3609        }
3610        case 2: {
3611          $t6_7 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3612          $t7_8 = $t6_7.$get();
3613          $t8_9 = $rt.builtin.len(s);
3614          $t9_10 = ($t7_8 < $t8_9);
3615          if ($t9_10) {
3616            $block = 5; break;
3617          }
3618          else {
3619            $block = 6; break;
3620          }
3621          break;
3622        }
3623        case 3: {
3624          $t10_11 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3625          $t11_12 = $t10_11.$get();
3626          $t12_13 = $rt.builtin.len(s);
3627          $t13_14 = ($t11_12 < $t12_13);
3628          if ($t13_14) {
3629            $block = 4; break;
3630          }
3631          else {
3632            $block = 2; break;
3633          }
3634          break;
3635        }
3636        case 4: {
3637          $t14_15 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3638          $t15_16 = $t14_15.$get();
3639          $rt.runtime.boundsCheck($t15_16, $rt.builtin.byteLen(s));
3640          $t16_17 = $rt.builtin.stringByteAt(s, $t15_16);
3641          $t17_18 = ($t16_17 !== 91);
3642          if ($t17_18) {
3643            $block = 1; break;
3644          }
3645          else {
3646            $block = 2; break;
3647          }
3648          break;
3649        }
3650        case 5: {
3651          $t18_19 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3652          $t19_20 = $t18_19.$get();
3653          $t20_21 = ($t19_20 + 1);
3654          $t21_22 = { $get() { return $t0_1.$get().i; }, $set(v) { const obj = $t0_1.$get(); obj.i = v; $t0_1.$set(obj); } };
3655          $t21_22.$set($t20_21);
3656          $block = 6; break;
3657          break;
3658        }
3659        case 6: {
3660          $t22_23 = $t0_1.$get();
3661          return $t22_23;
3662          break;
3663        }
3664      }
3665    }
3666  }
3667  
3668  export function skipval(s, i) {
3669    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48;
3670    let $block = 0;
3671    while (true) {
3672      switch ($block) {
3673        case 0: {
3674          $t0_1 = $rt.builtin.len(s);
3675          $t1_2 = (i >= $t0_1);
3676          if ($t1_2) {
3677            $block = 1; break;
3678          }
3679          else {
3680            $block = 2; break;
3681          }
3682          break;
3683        }
3684        case 1: {
3685          return -1;
3686          break;
3687        }
3688        case 2: {
3689          $rt.runtime.boundsCheck(i, $rt.builtin.byteLen(s));
3690          $t2_3 = $rt.builtin.stringByteAt(s, i);
3691          $t3_4 = ($t2_3 === 34);
3692          if ($t3_4) {
3693            $block = 3; break;
3694          }
3695          else {
3696            $block = 5; break;
3697          }
3698          break;
3699        }
3700        case 3: {
3701          $t4_5 = (i + 1);
3702          $t9_10 = $t4_5;
3703          $block = 8; break;
3704          break;
3705        }
3706        case 4: {
3707          $t5_6 = skipBrack(s, i, 123, 125);
3708          return $t5_6;
3709          break;
3710        }
3711        case 5: {
3712          $t6_7 = ($t2_3 === 123);
3713          if ($t6_7) {
3714            $block = 4; break;
3715          }
3716          else {
3717            $block = 14; break;
3718          }
3719          break;
3720        }
3721        case 6: {
3722          $rt.runtime.boundsCheck($t9_10, $rt.builtin.byteLen(s));
3723          $t7_8 = $rt.builtin.stringByteAt(s, $t9_10);
3724          $t8_9 = ($t7_8 === 92);
3725          if ($t8_9) {
3726            $block = 9; break;
3727          }
3728          else {
3729            $block = 10; break;
3730          }
3731          break;
3732        }
3733        case 7: {
3734          return -1;
3735          break;
3736        }
3737        case 8: {
3738          $t10_11 = $rt.builtin.len(s);
3739          $t11_12 = ($t9_10 < $t10_11);
3740          if ($t11_12) {
3741            $block = 6; break;
3742          }
3743          else {
3744            $block = 7; break;
3745          }
3746          break;
3747        }
3748        case 9: {
3749          $t12_13 = ($t9_10 + 2);
3750          $t9_10 = $t12_13;
3751          $block = 8; break;
3752          break;
3753        }
3754        case 10: {
3755          $rt.runtime.boundsCheck($t9_10, $rt.builtin.byteLen(s));
3756          $t13_14 = $rt.builtin.stringByteAt(s, $t9_10);
3757          $t14_15 = ($t13_14 === 34);
3758          if ($t14_15) {
3759            $block = 11; break;
3760          }
3761          else {
3762            $block = 12; break;
3763          }
3764          break;
3765        }
3766        case 11: {
3767          $t15_16 = ($t9_10 + 1);
3768          return $t15_16;
3769          break;
3770        }
3771        case 12: {
3772          $t16_17 = ($t9_10 + 1);
3773          $t9_10 = $t16_17;
3774          $block = 8; break;
3775          break;
3776        }
3777        case 13: {
3778          $t17_18 = skipBrack(s, i, 91, 93);
3779          return $t17_18;
3780          break;
3781        }
3782        case 14: {
3783          $t18_19 = ($t2_3 === 91);
3784          if ($t18_19) {
3785            $block = 13; break;
3786          }
3787          else {
3788            $block = 16; break;
3789          }
3790          break;
3791        }
3792        case 15: {
3793          $t19_20 = (i + 4);
3794          $t20_21 = $rt.builtin.len(s);
3795          $t21_22 = ($t19_20 <= $t20_21);
3796          if ($t21_22) {
3797            $block = 19; break;
3798          }
3799          else {
3800            $block = 20; break;
3801          }
3802          break;
3803        }
3804        case 16: {
3805          $t22_23 = ($t2_3 === 116);
3806          if ($t22_23) {
3807            $block = 15; break;
3808          }
3809          else {
3810            $block = 18; break;
3811          }
3812          break;
3813        }
3814        case 17: {
3815          $t23_24 = (i + 5);
3816          $t24_25 = $rt.builtin.len(s);
3817          $t25_26 = ($t23_24 <= $t24_25);
3818          if ($t25_26) {
3819            $block = 23; break;
3820          }
3821          else {
3822            $block = 24; break;
3823          }
3824          break;
3825        }
3826        case 18: {
3827          $t26_27 = ($t2_3 === 102);
3828          if ($t26_27) {
3829            $block = 17; break;
3830          }
3831          else {
3832            $block = 22; break;
3833          }
3834          break;
3835        }
3836        case 19: {
3837          $t27_28 = (i + 4);
3838          return $t27_28;
3839          break;
3840        }
3841        case 20: {
3842          return -1;
3843          break;
3844        }
3845        case 21: {
3846          $t28_29 = (i + 4);
3847          $t29_30 = $rt.builtin.len(s);
3848          $t30_31 = ($t28_29 <= $t29_30);
3849          if ($t30_31) {
3850            $block = 25; break;
3851          }
3852          else {
3853            $block = 26; break;
3854          }
3855          break;
3856        }
3857        case 22: {
3858          $t31_32 = ($t2_3 === 110);
3859          if ($t31_32) {
3860            $block = 21; break;
3861          }
3862          else {
3863            $t35_36 = i;
3864            $block = 29; break;
3865          }
3866          break;
3867        }
3868        case 23: {
3869          $t32_33 = (i + 5);
3870          return $t32_33;
3871          break;
3872        }
3873        case 24: {
3874          return -1;
3875          break;
3876        }
3877        case 25: {
3878          $t33_34 = (i + 4);
3879          return $t33_34;
3880          break;
3881        }
3882        case 26: {
3883          return -1;
3884          break;
3885        }
3886        case 27: {
3887          $t34_35 = ($t35_36 + 1);
3888          $t35_36 = $t34_35;
3889          $block = 29; break;
3890          break;
3891        }
3892        case 28: {
3893          return $t35_36;
3894          break;
3895        }
3896        case 29: {
3897          $t36_37 = $rt.builtin.len(s);
3898          $t37_38 = ($t35_36 < $t36_37);
3899          if ($t37_38) {
3900            $block = 34; break;
3901          }
3902          else {
3903            $block = 28; break;
3904          }
3905          break;
3906        }
3907        case 30: {
3908          $rt.runtime.boundsCheck($t35_36, $rt.builtin.byteLen(s));
3909          $t38_39 = $rt.builtin.stringByteAt(s, $t35_36);
3910          $t39_40 = ($t38_39 !== 10);
3911          if ($t39_40) {
3912            $block = 27; break;
3913          }
3914          else {
3915            $block = 28; break;
3916          }
3917          break;
3918        }
3919        case 31: {
3920          $rt.runtime.boundsCheck($t35_36, $rt.builtin.byteLen(s));
3921          $t40_41 = $rt.builtin.stringByteAt(s, $t35_36);
3922          $t41_42 = ($t40_41 !== 32);
3923          if ($t41_42) {
3924            $block = 30; break;
3925          }
3926          else {
3927            $block = 28; break;
3928          }
3929          break;
3930        }
3931        case 32: {
3932          $rt.runtime.boundsCheck($t35_36, $rt.builtin.byteLen(s));
3933          $t42_43 = $rt.builtin.stringByteAt(s, $t35_36);
3934          $t43_44 = ($t42_43 !== 93);
3935          if ($t43_44) {
3936            $block = 31; break;
3937          }
3938          else {
3939            $block = 28; break;
3940          }
3941          break;
3942        }
3943        case 33: {
3944          $rt.runtime.boundsCheck($t35_36, $rt.builtin.byteLen(s));
3945          $t44_45 = $rt.builtin.stringByteAt(s, $t35_36);
3946          $t45_46 = ($t44_45 !== 125);
3947          if ($t45_46) {
3948            $block = 32; break;
3949          }
3950          else {
3951            $block = 28; break;
3952          }
3953          break;
3954        }
3955        case 34: {
3956          $rt.runtime.boundsCheck($t35_36, $rt.builtin.byteLen(s));
3957          $t46_47 = $rt.builtin.stringByteAt(s, $t35_36);
3958          $t47_48 = ($t46_47 !== 44);
3959          if ($t47_48) {
3960            $block = 33; break;
3961          }
3962          else {
3963            $block = 28; break;
3964          }
3965          break;
3966        }
3967      }
3968    }
3969  }
3970  
3971  export function skipBrack(s, i, open, close) {
3972    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
3973    let $block = 0;
3974    while (true) {
3975      switch ($block) {
3976        case 0: {
3977          $t0_1 = (i + 1);
3978          $t2_3 = $t0_1;
3979          $t3_4 = 1;
3980          $t4_5 = false;
3981          $block = 3; break;
3982          break;
3983        }
3984        case 1: {
3985          if ($t4_5) {
3986            $block = 5; break;
3987          }
3988          else {
3989            $block = 7; break;
3990          }
3991          break;
3992        }
3993        case 2: {
3994          $t1_2 = ($t3_4 !== 0);
3995          if ($t1_2) {
3996            $block = 16; break;
3997          }
3998          else {
3999            $block = 17; break;
4000          }
4001          break;
4002        }
4003        case 3: {
4004          $t5_6 = $rt.builtin.len(s);
4005          $t6_7 = ($t2_3 < $t5_6);
4006          if ($t6_7) {
4007            $block = 4; break;
4008          }
4009          else {
4010            $block = 2; break;
4011          }
4012          break;
4013        }
4014        case 4: {
4015          $t7_8 = ($t3_4 > 0);
4016          if ($t7_8) {
4017            $block = 1; break;
4018          }
4019          else {
4020            $block = 2; break;
4021          }
4022          break;
4023        }
4024        case 5: {
4025          $rt.runtime.boundsCheck($t2_3, $rt.builtin.byteLen(s));
4026          $t8_9 = $rt.builtin.stringByteAt(s, $t2_3);
4027          $t9_10 = ($t8_9 === 92);
4028          if ($t9_10) {
4029            $block = 8; break;
4030          }
4031          else {
4032            $block = 9; break;
4033          }
4034          break;
4035        }
4036        case 6: {
4037          $t13_14 = ($t10_11 + 1);
4038          $t2_3 = $t13_14;
4039          $t3_4 = $t11_12;
4040          $t4_5 = $t12_13;
4041          $block = 3; break;
4042          break;
4043        }
4044        case 7: {
4045          $rt.runtime.boundsCheck($t2_3, $rt.builtin.byteLen(s));
4046          $t14_15 = $rt.builtin.stringByteAt(s, $t2_3);
4047          $t15_16 = ($t14_15 === 34);
4048          if ($t15_16) {
4049            $block = 11; break;
4050          }
4051          else {
4052            $block = 13; break;
4053          }
4054          break;
4055        }
4056        case 8: {
4057          $t16_17 = ($t2_3 + 1);
4058          $t10_11 = $t16_17;
4059          $t11_12 = $t3_4;
4060          $t12_13 = $t4_5;
4061          $block = 6; break;
4062          break;
4063        }
4064        case 9: {
4065          $rt.runtime.boundsCheck($t2_3, $rt.builtin.byteLen(s));
4066          $t17_18 = $rt.builtin.stringByteAt(s, $t2_3);
4067          $t18_19 = ($t17_18 === 34);
4068          if ($t18_19) {
4069            $block = 10; break;
4070          }
4071          else {
4072            $t10_11 = $t2_3;
4073            $t11_12 = $t3_4;
4074            $t12_13 = $t4_5;
4075            $block = 6; break;
4076          }
4077          break;
4078        }
4079        case 10: {
4080          $t10_11 = $t2_3;
4081          $t11_12 = $t3_4;
4082          $t12_13 = false;
4083          $block = 6; break;
4084          break;
4085        }
4086        case 11: {
4087          $t10_11 = $t2_3;
4088          $t11_12 = $t3_4;
4089          $t12_13 = true;
4090          $block = 6; break;
4091          break;
4092        }
4093        case 12: {
4094          $t19_20 = ($t3_4 + 1);
4095          $t10_11 = $t2_3;
4096          $t11_12 = $t19_20;
4097          $t12_13 = $t4_5;
4098          $block = 6; break;
4099          break;
4100        }
4101        case 13: {
4102          $t20_21 = ($t14_15 === open);
4103          if ($t20_21) {
4104            $block = 12; break;
4105          }
4106          else {
4107            $block = 15; break;
4108          }
4109          break;
4110        }
4111        case 14: {
4112          $t21_22 = ($t3_4 - 1);
4113          $t10_11 = $t2_3;
4114          $t11_12 = $t21_22;
4115          $t12_13 = $t4_5;
4116          $block = 6; break;
4117          break;
4118        }
4119        case 15: {
4120          $t22_23 = ($t14_15 === close);
4121          if ($t22_23) {
4122            $block = 14; break;
4123          }
4124          else {
4125            $t10_11 = $t2_3;
4126            $t11_12 = $t3_4;
4127            $t12_13 = $t4_5;
4128            $block = 6; break;
4129          }
4130          break;
4131        }
4132        case 16: {
4133          return -1;
4134          break;
4135        }
4136        case 17: {
4137          return $t2_3;
4138          break;
4139        }
4140      }
4141    }
4142  }
4143  
4144  export function identitySetPubkey(hex) {
4145    myPubkey.$set(hex);
4146    return;
4147  }
4148  
4149  export function identityClearKey() {
4150    myPubkey.$set('');
4151    return;
4152  }
4153  
4154  export function cacheQuery(filterRaw, cb) {
4155    let $t0_1;
4156    $t0_1 = common$jsbridge$idb.QueryEvents(filterRaw, cb);
4157    return;
4158  }
4159  
4160  export function cacheStore(evJSON, cb) {
4161    let $t0_1;
4162    $t0_1 = common$jsbridge$idb.SaveEvent(evJSON, cb);
4163    return;
4164  }
4165  
4166  export function cacheSaveDM(dmJSON, cb) {
4167    let $t0_1;
4168    $t0_1 = common$jsbridge$idb.SaveDM(dmJSON, cb);
4169    return;
4170  }
4171  
4172  export function cacheGetConversationList(cb) {
4173    let $t0_1;
4174    $t0_1 = common$jsbridge$idb.GetConversationList(cb);
4175    return;
4176  }
4177  
4178  export function cacheQueryDMs(peer, limit, until, cb) {
4179    let $t0_1;
4180    $t0_1 = common$jsbridge$idb.QueryDMs(peer, limit, until, cb);
4181    return;
4182  }
4183  
4184  export function cacheClearDMsByPeer(peer, cb) {
4185    let $t0_1;
4186    $t0_1 = common$jsbridge$idb.ClearDMsByPeer(peer, cb);
4187    return;
4188  }
4189  
4190  export function DMRecord$ToJSON(r) {
4191    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35;
4192    $t0_1 = { $get() { return r.$get().ID; }, $set(v) { const obj = r.$get(); obj.ID = v; r.$set(obj); } };
4193    $t1_2 = $t0_1.$get();
4194    $t2_3 = jstr($t1_2);
4195    $t3_4 = ('{"id":' + $t2_3);
4196    $t4_5 = ($t3_4 + ',"peer":');
4197    $t5_6 = { $get() { return r.$get().Peer; }, $set(v) { const obj = r.$get(); obj.Peer = v; r.$set(obj); } };
4198    $t6_7 = $t5_6.$get();
4199    $t7_8 = jstr($t6_7);
4200    $t8_9 = ($t4_5 + $t7_8);
4201    $t9_10 = ($t8_9 + ',"from":');
4202    $t10_11 = { $get() { return r.$get().From; }, $set(v) { const obj = r.$get(); obj.From = v; r.$set(obj); } };
4203    $t11_12 = $t10_11.$get();
4204    $t12_13 = jstr($t11_12);
4205    $t13_14 = ($t9_10 + $t12_13);
4206    $t14_15 = ($t13_14 + ',"content":');
4207    $t15_16 = { $get() { return r.$get().Content; }, $set(v) { const obj = r.$get(); obj.Content = v; r.$set(obj); } };
4208    $t16_17 = $t15_16.$get();
4209    $t17_18 = jstr($t16_17);
4210    $t18_19 = ($t14_15 + $t17_18);
4211    $t19_20 = ($t18_19 + ',"created_at":');
4212    $t20_21 = { $get() { return r.$get().CreatedAt; }, $set(v) { const obj = r.$get(); obj.CreatedAt = v; r.$set(obj); } };
4213    $t21_22 = $t20_21.$get();
4214    $t22_23 = common$helpers.Itoa($t21_22);
4215    $t23_24 = ($t19_20 + $t22_23);
4216    $t24_25 = ($t23_24 + ',"protocol":');
4217    $t25_26 = { $get() { return r.$get().Protocol; }, $set(v) { const obj = r.$get(); obj.Protocol = v; r.$set(obj); } };
4218    $t26_27 = $t25_26.$get();
4219    $t27_28 = jstr($t26_27);
4220    $t28_29 = ($t24_25 + $t27_28);
4221    $t29_30 = ($t28_29 + ',"eventId":');
4222    $t30_31 = { $get() { return r.$get().EventID; }, $set(v) { const obj = r.$get(); obj.EventID = v; r.$set(obj); } };
4223    $t31_32 = $t30_31.$get();
4224    $t32_33 = jstr($t31_32);
4225    $t33_34 = ($t29_30 + $t32_33);
4226    $t34_35 = ($t33_34 + '}');
4227    return $t34_35;
4228  }
4229  
4230  $rt.types.getType('sw-relay.DMRecord')?.methods?.set('ToJSON', DMRecord$ToJSON);
4231  export function mw$num(w) {
4232    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52;
4233    let $block = 0;
4234    while (true) {
4235      switch ($block) {
4236        case 0: {
4237          $t0_1 = mw$sep(w);
4238          $t1_2 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4239          $t2_3 = $t1_2.$get();
4240          $t3_4 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4241          $t4_5 = $t3_4.$get();
4242          $t5_6 = $rt.builtin.len($t4_5);
4243          $t6_7 = ($t2_3 < $t5_6);
4244          if ($t6_7) {
4245            $block = 3; break;
4246          }
4247          else {
4248            $t11_12 = false;
4249            $block = 2; break;
4250          }
4251          break;
4252        }
4253        case 1: {
4254          $t7_8 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4255          $t8_9 = $t7_8.$get();
4256          $t9_10 = ($t8_9 + 1);
4257          $t10_11 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4258          $t10_11.$set($t9_10);
4259          $t11_12 = true;
4260          $block = 2; break;
4261          break;
4262        }
4263        case 2: {
4264          $t31_32 = 0;
4265          $block = 6; break;
4266          break;
4267        }
4268        case 3: {
4269          $t12_13 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4270          $t13_14 = $t12_13.$get();
4271          $t14_15 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4272          $t15_16 = $t14_15.$get();
4273          $rt.runtime.boundsCheck($t13_14, $rt.builtin.byteLen($t15_16));
4274          $t16_17 = $rt.builtin.stringByteAt($t15_16, $t13_14);
4275          $t17_18 = ($t16_17 === 45);
4276          if ($t17_18) {
4277            $block = 1; break;
4278          }
4279          else {
4280            $t11_12 = false;
4281            $block = 2; break;
4282          }
4283          break;
4284        }
4285        case 4: {
4286          $t18_19 = ($t31_32 * 10);
4287          $t19_20 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4288          $t20_21 = $t19_20.$get();
4289          $t21_22 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4290          $t22_23 = $t21_22.$get();
4291          $rt.runtime.boundsCheck($t20_21, $rt.builtin.byteLen($t22_23));
4292          $t23_24 = $rt.builtin.stringByteAt($t22_23, $t20_21);
4293          $t24_25 = (($t23_24 - 48) & 0xFF);
4294          $t25_26 = $t24_25;
4295          $t26_27 = ($t18_19 + $t25_26);
4296          $t27_28 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4297          $t28_29 = $t27_28.$get();
4298          $t29_30 = ($t28_29 + 1);
4299          $t30_31 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4300          $t30_31.$set($t29_30);
4301          $t31_32 = $t26_27;
4302          $block = 6; break;
4303          break;
4304        }
4305        case 5: {
4306          if ($t11_12) {
4307            $block = 9; break;
4308          }
4309          else {
4310            $t51_52 = $t31_32;
4311            $block = 10; break;
4312          }
4313          break;
4314        }
4315        case 6: {
4316          $t32_33 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4317          $t33_34 = $t32_33.$get();
4318          $t34_35 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4319          $t35_36 = $t34_35.$get();
4320          $t36_37 = $rt.builtin.len($t35_36);
4321          $t37_38 = ($t33_34 < $t36_37);
4322          if ($t37_38) {
4323            $block = 8; break;
4324          }
4325          else {
4326            $block = 5; break;
4327          }
4328          break;
4329        }
4330        case 7: {
4331          $t38_39 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4332          $t39_40 = $t38_39.$get();
4333          $t40_41 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4334          $t41_42 = $t40_41.$get();
4335          $rt.runtime.boundsCheck($t39_40, $rt.builtin.byteLen($t41_42));
4336          $t42_43 = $rt.builtin.stringByteAt($t41_42, $t39_40);
4337          $t43_44 = ($t42_43 <= 57);
4338          if ($t43_44) {
4339            $block = 4; break;
4340          }
4341          else {
4342            $block = 5; break;
4343          }
4344          break;
4345        }
4346        case 8: {
4347          $t44_45 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4348          $t45_46 = $t44_45.$get();
4349          $t46_47 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4350          $t47_48 = $t46_47.$get();
4351          $rt.runtime.boundsCheck($t45_46, $rt.builtin.byteLen($t47_48));
4352          $t48_49 = $rt.builtin.stringByteAt($t47_48, $t45_46);
4353          $t49_50 = ($t48_49 >= 48);
4354          if ($t49_50) {
4355            $block = 7; break;
4356          }
4357          else {
4358            $block = 5; break;
4359          }
4360          break;
4361        }
4362        case 9: {
4363          $t50_51 = -$t31_32;
4364          $t51_52 = $t50_51;
4365          $block = 10; break;
4366          break;
4367        }
4368        case 10: {
4369          return $t51_52;
4370          break;
4371        }
4372      }
4373    }
4374  }
4375  
4376  $rt.types.getType('sw-relay.mw')?.methods?.set('num', mw$num);
4377  export function mw$raw(w) {
4378    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
4379    let $block = 0;
4380    while (true) {
4381      switch ($block) {
4382        case 0: {
4383          $t0_1 = mw$sep(w);
4384          $t1_2 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4385          $t2_3 = $t1_2.$get();
4386          $t3_4 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4387          $t4_5 = $t3_4.$get();
4388          $t5_6 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4389          $t6_7 = $t5_6.$get();
4390          $t7_8 = skipval($t4_5, $t6_7);
4391          $t8_9 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4392          $t8_9.$set($t7_8);
4393          $t9_10 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4394          $t10_11 = $t9_10.$get();
4395          $t11_12 = ($t10_11 < 0);
4396          if ($t11_12) {
4397            $block = 1; break;
4398          }
4399          else {
4400            $block = 2; break;
4401          }
4402          break;
4403        }
4404        case 1: {
4405          $t12_13 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4406          $t13_14 = $t12_13.$get();
4407          $t14_15 = $rt.builtin.len($t13_14);
4408          $t15_16 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4409          $t15_16.$set($t14_15);
4410          return '';
4411          break;
4412        }
4413        case 2: {
4414          $t16_17 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4415          $t17_18 = $t16_17.$get();
4416          $t18_19 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4417          $t19_20 = $t18_19.$get();
4418          $t20_21 = $rt.builtin.stringSlice($t17_18, $t2_3, $t19_20);
4419          return $t20_21;
4420          break;
4421        }
4422      }
4423    }
4424  }
4425  
4426  $rt.types.getType('sw-relay.mw')?.methods?.set('raw', mw$raw);
4427  export function mw$sep(w) {
4428    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20;
4429    let $block = 0;
4430    while (true) {
4431      switch ($block) {
4432        case 0: {
4433          $block = 3; break;
4434          break;
4435        }
4436        case 1: {
4437          $t0_1 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4438          $t1_2 = $t0_1.$get();
4439          $t2_3 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4440          $t3_4 = $t2_3.$get();
4441          $rt.runtime.boundsCheck($t1_2, $rt.builtin.byteLen($t3_4));
4442          $t4_5 = $rt.builtin.stringByteAt($t3_4, $t1_2);
4443          $t5_6 = ($t4_5 !== 32);
4444          if ($t5_6) {
4445            $block = 8; break;
4446          }
4447          else {
4448            $block = 4; break;
4449          }
4450          break;
4451        }
4452        case 2: {
4453          return;
4454          break;
4455        }
4456        case 3: {
4457          $t6_7 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4458          $t7_8 = $t6_7.$get();
4459          $t8_9 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4460          $t9_10 = $t8_9.$get();
4461          $t10_11 = $rt.builtin.len($t9_10);
4462          $t11_12 = ($t7_8 < $t10_11);
4463          if ($t11_12) {
4464            $block = 1; break;
4465          }
4466          else {
4467            $block = 2; break;
4468          }
4469          break;
4470        }
4471        case 4: {
4472          $t12_13 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4473          $t13_14 = $t12_13.$get();
4474          $t14_15 = ($t13_14 + 1);
4475          $t15_16 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4476          $t15_16.$set($t14_15);
4477          $block = 3; break;
4478          break;
4479        }
4480        case 5: {
4481          $t16_17 = ($t4_5 !== 44);
4482          if ($t16_17) {
4483            $block = 2; break;
4484          }
4485          else {
4486            $block = 4; break;
4487          }
4488          break;
4489        }
4490        case 6: {
4491          $t17_18 = ($t4_5 !== 9);
4492          if ($t17_18) {
4493            $block = 5; break;
4494          }
4495          else {
4496            $block = 4; break;
4497          }
4498          break;
4499        }
4500        case 7: {
4501          $t18_19 = ($t4_5 !== 13);
4502          if ($t18_19) {
4503            $block = 6; break;
4504          }
4505          else {
4506            $block = 4; break;
4507          }
4508          break;
4509        }
4510        case 8: {
4511          $t19_20 = ($t4_5 !== 10);
4512          if ($t19_20) {
4513            $block = 7; break;
4514          }
4515          else {
4516            $block = 4; break;
4517          }
4518          break;
4519        }
4520      }
4521    }
4522  }
4523  
4524  $rt.types.getType('sw-relay.mw')?.methods?.set('sep', mw$sep);
4525  export function mw$str(w) {
4526    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119, $t119_120, $t120_121, $t121_122, $t122_123, $t123_124, $t124_125, $t125_126, $t126_127, $t127_128, $t128_129, $t129_130, $t130_131, $t131_132, $t132_133, $t133_134, $t134_135, $t135_136, $t136_137, $t137_138, $t138_139, $t139_140, $t140_141, $t141_142, $t142_143, $t143_144, $t144_145, $t145_146, $t146_147, $t147_148, $t148_149, $t149_150, $t150_151, $t151_152, $t152_153, $t153_154, $t154_155, $t155_156, $t156_157, $t157_158, $t158_159, $t159_160, $t160_161, $t161_162, $t162_163, $t163_164, $t164_165, $t165_166, $t166_167, $t167_168, $t168_169, $t169_170, $t170_171, $t171_172, $t172_173, $t173_174, $t174_175, $t175_176, $t176_177, $t177_178, $t178_179, $t179_180, $t180_181, $t181_182, $t182_183, $t183_184, $t184_185, $t185_186, $t186_187, $t187_188, $t188_189, $t189_190, $t190_191, $t191_192, $t192_193, $t193_194, $t194_195, $t195_196, $t196_197, $t197_198, $t198_199, $t199_200, $t200_201, $t201_202, $t202_203, $t203_204, $t204_205, $t205_206, $t206_207, $t207_208, $t208_209, $t209_210, $t210_211, $t211_212, $t212_213, $t213_214;
4527    let $block = 0;
4528    while (true) {
4529      switch ($block) {
4530        case 0: {
4531          $t0_1 = mw$sep(w);
4532          $t1_2 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4533          $t2_3 = $t1_2.$get();
4534          $t3_4 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4535          $t4_5 = $t3_4.$get();
4536          $t5_6 = $rt.builtin.len($t4_5);
4537          $t6_7 = ($t2_3 >= $t5_6);
4538          if ($t6_7) {
4539            $block = 1; break;
4540          }
4541          else {
4542            $block = 3; break;
4543          }
4544          break;
4545        }
4546        case 1: {
4547          return '';
4548          break;
4549        }
4550        case 2: {
4551          $t7_8 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4552          $t8_9 = $t7_8.$get();
4553          $t9_10 = ($t8_9 + 1);
4554          $t10_11 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4555          $t10_11.$set($t9_10);
4556          $t11_12 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4557          $t12_13 = $t11_12.$get();
4558          $t31_32 = null;
4559          $t32_33 = false;
4560          $t33_34 = $t12_13;
4561          $block = 6; break;
4562          break;
4563        }
4564        case 3: {
4565          $t13_14 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4566          $t14_15 = $t13_14.$get();
4567          $t15_16 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4568          $t16_17 = $t15_16.$get();
4569          $rt.runtime.boundsCheck($t14_15, $rt.builtin.byteLen($t16_17));
4570          $t17_18 = $rt.builtin.stringByteAt($t16_17, $t14_15);
4571          $t18_19 = ($t17_18 !== 34);
4572          if ($t18_19) {
4573            $block = 1; break;
4574          }
4575          else {
4576            $block = 2; break;
4577          }
4578          break;
4579        }
4580        case 4: {
4581          $t19_20 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4582          $t20_21 = $t19_20.$get();
4583          $t21_22 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4584          $t22_23 = $t21_22.$get();
4585          $rt.runtime.boundsCheck($t20_21, $rt.builtin.byteLen($t22_23));
4586          $t23_24 = $rt.builtin.stringByteAt($t22_23, $t20_21);
4587          $t24_25 = ($t23_24 === 92);
4588          if ($t24_25) {
4589            $block = 10; break;
4590          }
4591          else {
4592            $block = 9; break;
4593          }
4594          break;
4595        }
4596        case 5: {
4597          $t25_26 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4598          $t26_27 = $t25_26.$get();
4599          $t27_28 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4600          $t28_29 = $t27_28.$get();
4601          $t29_30 = $rt.builtin.len($t28_29);
4602          $t30_31 = ($t26_27 >= $t29_30);
4603          if ($t30_31) {
4604            $block = 43; break;
4605          }
4606          else {
4607            $block = 44; break;
4608          }
4609          break;
4610        }
4611        case 6: {
4612          $t34_35 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4613          $t35_36 = $t34_35.$get();
4614          $t36_37 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4615          $t37_38 = $t36_37.$get();
4616          $t38_39 = $rt.builtin.len($t37_38);
4617          $t39_40 = ($t35_36 < $t38_39);
4618          if ($t39_40) {
4619            $block = 7; break;
4620          }
4621          else {
4622            $block = 5; break;
4623          }
4624          break;
4625        }
4626        case 7: {
4627          $t40_41 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4628          $t41_42 = $t40_41.$get();
4629          $t42_43 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4630          $t43_44 = $t42_43.$get();
4631          $rt.runtime.boundsCheck($t41_42, $rt.builtin.byteLen($t43_44));
4632          $t44_45 = $rt.builtin.stringByteAt($t43_44, $t41_42);
4633          $t45_46 = ($t44_45 !== 34);
4634          if ($t45_46) {
4635            $block = 4; break;
4636          }
4637          else {
4638            $block = 5; break;
4639          }
4640          break;
4641        }
4642        case 8: {
4643          $t46_47 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4644          $t47_48 = $t46_47.$get();
4645          $t48_49 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4646          $t49_50 = $t48_49.$get();
4647          $t50_51 = $rt.builtin.stringSlice($t47_48, $t33_34, $t49_50);
4648          $t51_52 = $rt.builtin.appendString($t31_32, $t50_51);
4649          $t52_53 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4650          $t53_54 = $t52_53.$get();
4651          $t54_55 = ($t53_54 + 1);
4652          $t55_56 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4653          $t55_56.$set($t54_55);
4654          $t56_57 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4655          $t57_58 = $t56_57.$get();
4656          $t58_59 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4657          $t59_60 = $t58_59.$get();
4658          $rt.runtime.boundsCheck($t57_58, $rt.builtin.byteLen($t59_60));
4659          $t60_61 = $rt.builtin.stringByteAt($t59_60, $t57_58);
4660          $t61_62 = ($t60_61 === 34);
4661          if ($t61_62) {
4662            $block = 12; break;
4663          }
4664          else {
4665            $block = 14; break;
4666          }
4667          break;
4668        }
4669        case 9: {
4670          $t62_63 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4671          $t63_64 = $t62_63.$get();
4672          $t64_65 = ($t63_64 + 1);
4673          $t65_66 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4674          $t65_66.$set($t64_65);
4675          let $phi0 = $t31_32;
4676          let $phi1 = $t32_33;
4677          let $phi2 = $t33_34;
4678          $t31_32 = $phi0;
4679          $t32_33 = $phi1;
4680          $t33_34 = $phi2;
4681          $block = 6; break;
4682          break;
4683        }
4684        case 10: {
4685          $t66_67 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4686          $t67_68 = $t66_67.$get();
4687          $t68_69 = ($t67_68 + 1);
4688          $t69_70 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4689          $t70_71 = $t69_70.$get();
4690          $t71_72 = $rt.builtin.len($t70_71);
4691          $t72_73 = ($t68_69 < $t71_72);
4692          if ($t72_73) {
4693            $block = 8; break;
4694          }
4695          else {
4696            $block = 9; break;
4697          }
4698          break;
4699        }
4700        case 11: {
4701          $t74_75 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4702          $t75_76 = $t74_75.$get();
4703          $t76_77 = ($t75_76 + 1);
4704          $t77_78 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4705          $t77_78.$set($t76_77);
4706          $t78_79 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4707          $t79_80 = $t78_79.$get();
4708          $t31_32 = $t73_74;
4709          $t32_33 = true;
4710          $t33_34 = $t79_80;
4711          $block = 6; break;
4712          break;
4713        }
4714        case 12: {
4715          $t80_81 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4716          $t81_82 = $t80_81.$get();
4717          $t82_83 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4718          $t83_84 = $t82_83.$get();
4719          $rt.runtime.boundsCheck($t81_82, $rt.builtin.byteLen($t83_84));
4720          $t84_85 = $rt.builtin.stringByteAt($t83_84, $t81_82);
4721          $t85_86 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4722          $t86_87 = $t85_86.$get().addr(0);
4723          $t86_87.$set($t84_85);
4724          $t87_88 = $rt.builtin.sliceSlice($t85_86.$get(), undefined, undefined, undefined);
4725          $t88_89 = $rt.builtin.appendSlice($t51_52, $t87_88);
4726          $t73_74 = $t88_89;
4727          $block = 11; break;
4728          break;
4729        }
4730        case 13: {
4731          $t89_90 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4732          $t90_91 = $t89_90.$get().addr(0);
4733          $t90_91.$set(10);
4734          $t91_92 = $rt.builtin.sliceSlice($t89_90.$get(), undefined, undefined, undefined);
4735          $t92_93 = $rt.builtin.appendSlice($t51_52, $t91_92);
4736          $t73_74 = $t92_93;
4737          $block = 11; break;
4738          break;
4739        }
4740        case 14: {
4741          $t93_94 = ($t60_61 === 92);
4742          if ($t93_94) {
4743            $block = 12; break;
4744          }
4745          else {
4746            $block = 15; break;
4747          }
4748          break;
4749        }
4750        case 15: {
4751          $t94_95 = ($t60_61 === 47);
4752          if ($t94_95) {
4753            $block = 12; break;
4754          }
4755          else {
4756            $block = 16; break;
4757          }
4758          break;
4759        }
4760        case 16: {
4761          $t95_96 = ($t60_61 === 110);
4762          if ($t95_96) {
4763            $block = 13; break;
4764          }
4765          else {
4766            $block = 18; break;
4767          }
4768          break;
4769        }
4770        case 17: {
4771          $t96_97 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4772          $t97_98 = $t96_97.$get().addr(0);
4773          $t97_98.$set(9);
4774          $t98_99 = $rt.builtin.sliceSlice($t96_97.$get(), undefined, undefined, undefined);
4775          $t99_100 = $rt.builtin.appendSlice($t51_52, $t98_99);
4776          $t73_74 = $t99_100;
4777          $block = 11; break;
4778          break;
4779        }
4780        case 18: {
4781          $t100_101 = ($t60_61 === 116);
4782          if ($t100_101) {
4783            $block = 17; break;
4784          }
4785          else {
4786            $block = 20; break;
4787          }
4788          break;
4789        }
4790        case 19: {
4791          $t101_102 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4792          $t102_103 = $t101_102.$get().addr(0);
4793          $t102_103.$set(13);
4794          $t103_104 = $rt.builtin.sliceSlice($t101_102.$get(), undefined, undefined, undefined);
4795          $t104_105 = $rt.builtin.appendSlice($t51_52, $t103_104);
4796          $t73_74 = $t104_105;
4797          $block = 11; break;
4798          break;
4799        }
4800        case 20: {
4801          $t105_106 = ($t60_61 === 114);
4802          if ($t105_106) {
4803            $block = 19; break;
4804          }
4805          else {
4806            $block = 22; break;
4807          }
4808          break;
4809        }
4810        case 21: {
4811          $t106_107 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4812          $t107_108 = $t106_107.$get();
4813          $t108_109 = ($t107_108 + 4);
4814          $t109_110 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4815          $t110_111 = $t109_110.$get();
4816          $t111_112 = $rt.builtin.len($t110_111);
4817          $t112_113 = ($t108_109 < $t111_112);
4818          if ($t112_113) {
4819            $block = 24; break;
4820          }
4821          else {
4822            $block = 25; break;
4823          }
4824          break;
4825        }
4826        case 22: {
4827          $t113_114 = ($t60_61 === 117);
4828          if ($t113_114) {
4829            $block = 21; break;
4830          }
4831          else {
4832            $block = 23; break;
4833          }
4834          break;
4835        }
4836        case 23: {
4837          $t114_115 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4838          $t115_116 = $t114_115.$get();
4839          $t116_117 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4840          $t117_118 = $t116_117.$get();
4841          $rt.runtime.boundsCheck($t115_116, $rt.builtin.byteLen($t117_118));
4842          $t118_119 = $rt.builtin.stringByteAt($t117_118, $t115_116);
4843          $t119_120 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4844          $t120_121 = $t119_120.$get().addr(0);
4845          $t120_121.$set(92);
4846          $t121_122 = $t119_120.$get().addr(1);
4847          $t121_122.$set($t118_119);
4848          $t122_123 = $rt.builtin.sliceSlice($t119_120.$get(), undefined, undefined, undefined);
4849          $t123_124 = $rt.builtin.appendSlice($t51_52, $t122_123);
4850          $t73_74 = $t123_124;
4851          $block = 11; break;
4852          break;
4853        }
4854        case 24: {
4855          $t129_130 = 0;
4856          $t130_131 = 1;
4857          $block = 26; break;
4858          break;
4859        }
4860        case 25: {
4861          $t124_125 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4862          $t125_126 = $t124_125.$get().addr(0);
4863          $t125_126.$set(92);
4864          $t126_127 = $t124_125.$get().addr(1);
4865          $t126_127.$set(117);
4866          $t127_128 = $rt.builtin.sliceSlice($t124_125.$get(), undefined, undefined, undefined);
4867          $t128_129 = $rt.builtin.appendSlice($t51_52, $t127_128);
4868          $t73_74 = $t128_129;
4869          $block = 11; break;
4870          break;
4871        }
4872        case 26: {
4873          $t131_132 = ($t130_131 <= 4);
4874          if ($t131_132) {
4875            $block = 27; break;
4876          }
4877          else {
4878            $block = 28; break;
4879          }
4880          break;
4881        }
4882        case 27: {
4883          $t132_133 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
4884          $t133_134 = $t132_133.$get();
4885          $t134_135 = ($t133_134 + $t130_131);
4886          $t135_136 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
4887          $t136_137 = $t135_136.$get();
4888          $rt.runtime.boundsCheck($t134_135, $rt.builtin.byteLen($t136_137));
4889          $t137_138 = $rt.builtin.stringByteAt($t136_137, $t134_135);
4890          $t138_139 = ($t129_130 * (2 ** 4));
4891          $t139_140 = ($t137_138 >= 48);
4892          if ($t139_140) {
4893            $block = 32; break;
4894          }
4895          else {
4896            $block = 31; break;
4897          }
4898          break;
4899        }
4900        case 28: {
4901          $t140_141 = ($t129_130 < 128);
4902          if ($t140_141) {
4903            $block = 38; break;
4904          }
4905          else {
4906            $block = 40; break;
4907          }
4908          break;
4909        }
4910        case 29: {
4911          $t141_142 = (($t137_138 - 48) & 0xFF);
4912          $t142_143 = $t141_142;
4913          $t143_144 = $rt.builtin.int64or($t138_139, $t142_143);
4914          $t144_145 = $t143_144;
4915          $block = 30; break;
4916          break;
4917        }
4918        case 30: {
4919          $t145_146 = ($t130_131 + 1);
4920          $t129_130 = $t144_145;
4921          $t130_131 = $t145_146;
4922          $block = 26; break;
4923          break;
4924        }
4925        case 31: {
4926          $t146_147 = ($t137_138 >= 97);
4927          if ($t146_147) {
4928            $block = 35; break;
4929          }
4930          else {
4931            $block = 34; break;
4932          }
4933          break;
4934        }
4935        case 32: {
4936          $t147_148 = ($t137_138 <= 57);
4937          if ($t147_148) {
4938            $block = 29; break;
4939          }
4940          else {
4941            $block = 31; break;
4942          }
4943          break;
4944        }
4945        case 33: {
4946          $t148_149 = (($t137_138 - 97) & 0xFF);
4947          $t149_150 = $t148_149;
4948          $t150_151 = ($t149_150 + 10);
4949          $t151_152 = $rt.builtin.int64or($t138_139, $t150_151);
4950          $t144_145 = $t151_152;
4951          $block = 30; break;
4952          break;
4953        }
4954        case 34: {
4955          $t152_153 = ($t137_138 >= 65);
4956          if ($t152_153) {
4957            $block = 37; break;
4958          }
4959          else {
4960            $t144_145 = $t138_139;
4961            $block = 30; break;
4962          }
4963          break;
4964        }
4965        case 35: {
4966          $t153_154 = ($t137_138 <= 102);
4967          if ($t153_154) {
4968            $block = 33; break;
4969          }
4970          else {
4971            $block = 34; break;
4972          }
4973          break;
4974        }
4975        case 36: {
4976          $t154_155 = (($t137_138 - 65) & 0xFF);
4977          $t155_156 = $t154_155;
4978          $t156_157 = ($t155_156 + 10);
4979          $t157_158 = $rt.builtin.int64or($t138_139, $t156_157);
4980          $t144_145 = $t157_158;
4981          $block = 30; break;
4982          break;
4983        }
4984        case 37: {
4985          $t158_159 = ($t137_138 <= 70);
4986          if ($t158_159) {
4987            $block = 36; break;
4988          }
4989          else {
4990            $t144_145 = $t138_139;
4991            $block = 30; break;
4992          }
4993          break;
4994        }
4995        case 38: {
4996          $t159_160 = ($t129_130 & 0xFF);
4997          $t160_161 = { $value: $rt.builtin.makeSlice(1, 1, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
4998          $t161_162 = $t160_161.$get().addr(0);
4999          $t161_162.$set($t159_160);
5000          $t162_163 = $rt.builtin.sliceSlice($t160_161.$get(), undefined, undefined, undefined);
5001          $t163_164 = $rt.builtin.appendSlice($t51_52, $t162_163);
5002          $t164_165 = $t163_164;
5003          $block = 39; break;
5004          break;
5005        }
5006        case 39: {
5007          $t165_166 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5008          $t166_167 = $t165_166.$get();
5009          $t167_168 = ($t166_167 + 4);
5010          $t168_169 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5011          $t168_169.$set($t167_168);
5012          $t73_74 = $t164_165;
5013          $block = 11; break;
5014          break;
5015        }
5016        case 40: {
5017          $t169_170 = ($t129_130 < 2048);
5018          if ($t169_170) {
5019            $block = 41; break;
5020          }
5021          else {
5022            $block = 42; break;
5023          }
5024          break;
5025        }
5026        case 41: {
5027          $t170_171 = Math.trunc($t129_130 / (2 ** 6));
5028          $t171_172 = $rt.builtin.int64or(192, $t170_171);
5029          $t172_173 = ($t171_172 & 0xFF);
5030          $t173_174 = $rt.builtin.int64and($t129_130, 63);
5031          $t174_175 = $rt.builtin.int64or(128, $t173_174);
5032          $t175_176 = ($t174_175 & 0xFF);
5033          $t176_177 = { $value: $rt.builtin.makeSlice(2, 2, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5034          $t177_178 = $t176_177.$get().addr(0);
5035          $t177_178.$set($t172_173);
5036          $t178_179 = $t176_177.$get().addr(1);
5037          $t178_179.$set($t175_176);
5038          $t179_180 = $rt.builtin.sliceSlice($t176_177.$get(), undefined, undefined, undefined);
5039          $t180_181 = $rt.builtin.appendSlice($t51_52, $t179_180);
5040          $t164_165 = $t180_181;
5041          $block = 39; break;
5042          break;
5043        }
5044        case 42: {
5045          $t181_182 = Math.trunc($t129_130 / (2 ** 12));
5046          $t182_183 = $rt.builtin.int64or(224, $t181_182);
5047          $t183_184 = ($t182_183 & 0xFF);
5048          $t184_185 = Math.trunc($t129_130 / (2 ** 6));
5049          $t185_186 = $rt.builtin.int64and($t184_185, 63);
5050          $t186_187 = $rt.builtin.int64or(128, $t185_186);
5051          $t187_188 = ($t186_187 & 0xFF);
5052          $t188_189 = $rt.builtin.int64and($t129_130, 63);
5053          $t189_190 = $rt.builtin.int64or(128, $t188_189);
5054          $t190_191 = ($t189_190 & 0xFF);
5055          $t191_192 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5056          $t192_193 = $t191_192.$get().addr(0);
5057          $t192_193.$set($t183_184);
5058          $t193_194 = $t191_192.$get().addr(1);
5059          $t193_194.$set($t187_188);
5060          $t194_195 = $t191_192.$get().addr(2);
5061          $t194_195.$set($t190_191);
5062          $t195_196 = $rt.builtin.sliceSlice($t191_192.$get(), undefined, undefined, undefined);
5063          $t196_197 = $rt.builtin.appendSlice($t51_52, $t195_196);
5064          $t164_165 = $t196_197;
5065          $block = 39; break;
5066          break;
5067        }
5068        case 43: {
5069          return '';
5070          break;
5071        }
5072        case 44: {
5073          if ($t32_33) {
5074            $block = 45; break;
5075          }
5076          else {
5077            $block = 47; break;
5078          }
5079          break;
5080        }
5081        case 45: {
5082          $t197_198 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5083          $t198_199 = $t197_198.$get();
5084          $t199_200 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5085          $t200_201 = $t199_200.$get();
5086          $t201_202 = $rt.builtin.stringSlice($t198_199, $t33_34, $t200_201);
5087          $t202_203 = $rt.builtin.appendString($t31_32, $t201_202);
5088          $t203_204 = $rt.builtin.bytesToString($t202_203);
5089          $t204_205 = $t203_204;
5090          $block = 46; break;
5091          break;
5092        }
5093        case 46: {
5094          $t205_206 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5095          $t206_207 = $t205_206.$get();
5096          $t207_208 = ($t206_207 + 1);
5097          $t208_209 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5098          $t208_209.$set($t207_208);
5099          return $t204_205;
5100          break;
5101        }
5102        case 47: {
5103          $t209_210 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5104          $t210_211 = $t209_210.$get();
5105          $t211_212 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5106          $t212_213 = $t211_212.$get();
5107          $t213_214 = $rt.builtin.stringSlice($t210_211, $t33_34, $t212_213);
5108          $t204_205 = $t213_214;
5109          $block = 46; break;
5110          break;
5111        }
5112      }
5113    }
5114  }
5115  
5116  $rt.types.getType('sw-relay.mw')?.methods?.set('str', mw$str);
5117  export function mw$strs(w) {
5118    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46;
5119    let $block = 0;
5120    while (true) {
5121      switch ($block) {
5122        case 0: {
5123          $t0_1 = mw$sep(w);
5124          $t1_2 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5125          $t2_3 = $t1_2.$get();
5126          $t3_4 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5127          $t4_5 = $t3_4.$get();
5128          $t5_6 = $rt.builtin.len($t4_5);
5129          $t6_7 = ($t2_3 >= $t5_6);
5130          if ($t6_7) {
5131            $block = 1; break;
5132          }
5133          else {
5134            $block = 3; break;
5135          }
5136          break;
5137        }
5138        case 1: {
5139          return null;
5140          break;
5141        }
5142        case 2: {
5143          $t7_8 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5144          $t8_9 = $t7_8.$get();
5145          $t9_10 = ($t8_9 + 1);
5146          $t10_11 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5147          $t10_11.$set($t9_10);
5148          $t17_18 = null;
5149          $block = 4; break;
5150          break;
5151        }
5152        case 3: {
5153          $t11_12 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5154          $t12_13 = $t11_12.$get();
5155          $t13_14 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5156          $t14_15 = $t13_14.$get();
5157          $rt.runtime.boundsCheck($t12_13, $rt.builtin.byteLen($t14_15));
5158          $t15_16 = $rt.builtin.stringByteAt($t14_15, $t12_13);
5159          $t16_17 = ($t15_16 !== 91);
5160          if ($t16_17) {
5161            $block = 1; break;
5162          }
5163          else {
5164            $block = 2; break;
5165          }
5166          break;
5167        }
5168        case 4: {
5169          $t18_19 = mw$sep(w);
5170          $t19_20 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5171          $t20_21 = $t19_20.$get();
5172          $t21_22 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5173          $t22_23 = $t21_22.$get();
5174          $t23_24 = $rt.builtin.len($t22_23);
5175          $t24_25 = ($t20_21 >= $t23_24);
5176          if ($t24_25) {
5177            $block = 5; break;
5178          }
5179          else {
5180            $block = 6; break;
5181          }
5182          break;
5183        }
5184        case 5: {
5185          return $t17_18;
5186          break;
5187        }
5188        case 6: {
5189          $t25_26 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5190          $t26_27 = $t25_26.$get();
5191          $t27_28 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5192          $t28_29 = $t27_28.$get();
5193          $rt.runtime.boundsCheck($t26_27, $rt.builtin.byteLen($t28_29));
5194          $t29_30 = $rt.builtin.stringByteAt($t28_29, $t26_27);
5195          $t30_31 = ($t29_30 === 93);
5196          if ($t30_31) {
5197            $block = 7; break;
5198          }
5199          else {
5200            $block = 8; break;
5201          }
5202          break;
5203        }
5204        case 7: {
5205          $t31_32 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5206          $t32_33 = $t31_32.$get();
5207          $t33_34 = ($t32_33 + 1);
5208          $t34_35 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5209          $t34_35.$set($t33_34);
5210          return $t17_18;
5211          break;
5212        }
5213        case 8: {
5214          $t35_36 = { $get() { return w.$get().i; }, $set(v) { const obj = w.$get(); obj.i = v; w.$set(obj); } };
5215          $t36_37 = $t35_36.$get();
5216          $t37_38 = { $get() { return w.$get().s; }, $set(v) { const obj = w.$get(); obj.s = v; w.$set(obj); } };
5217          $t38_39 = $t37_38.$get();
5218          $rt.runtime.boundsCheck($t36_37, $rt.builtin.byteLen($t38_39));
5219          $t39_40 = $rt.builtin.stringByteAt($t38_39, $t36_37);
5220          $t40_41 = ($t39_40 !== 34);
5221          if ($t40_41) {
5222            $block = 9; break;
5223          }
5224          else {
5225            $block = 10; break;
5226          }
5227          break;
5228        }
5229        case 9: {
5230          return $t17_18;
5231          break;
5232        }
5233        case 10: {
5234          $t41_42 = mw$str(w);
5235          $t42_43 = { $value: $rt.builtin.makeSlice(1, 1, ''), $get() { return this.$value; }, $set(v) { this.$value = v; } };
5236          $t43_44 = $t42_43.$get().addr(0);
5237          $t43_44.$set($t41_42);
5238          $t44_45 = $rt.builtin.sliceSlice($t42_43.$get(), undefined, undefined, undefined);
5239          $t45_46 = $rt.builtin.appendSlice($t17_18, $t44_45);
5240          $t17_18 = $t45_46;
5241          $block = 4; break;
5242          break;
5243        }
5244      }
5245    }
5246  }
5247  
5248  $rt.types.getType('sw-relay.mw')?.methods?.set('strs', mw$strs);
5249