@vscode/diff 0.0.2-23 → 0.0.2-24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/wire.js CHANGED
@@ -1561,11 +1561,11 @@ function init() {
1561
1561
  function __wbg_get_imports() {
1562
1562
  const import0 = {
1563
1563
  __proto__: null,
1564
- __wbg_Error_fdd633d4bb5dd76a: function(arg0, arg1) {
1564
+ __wbg_Error_92b29b0548f8b746: function(arg0, arg1) {
1565
1565
  const ret = Error(getStringFromWasm0(arg0, arg1));
1566
1566
  return ret;
1567
1567
  },
1568
- __wbg_Number_c4bdf66bb78f7977: function(arg0) {
1568
+ __wbg_Number_9a4e0ecb0fa16705: function(arg0) {
1569
1569
  const ret = Number(arg0);
1570
1570
  return ret;
1571
1571
  },
@@ -1576,64 +1576,64 @@ function __wbg_get_imports() {
1576
1576
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1577
1577
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1578
1578
  },
1579
- __wbg___wbindgen_bigint_get_as_i64_d9e915702856f831: function(arg0, arg1) {
1579
+ __wbg___wbindgen_bigint_get_as_i64_d968e41184ae354f: function(arg0, arg1) {
1580
1580
  const v = arg1;
1581
1581
  const ret = typeof(v) === 'bigint' ? v : undefined;
1582
1582
  getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);
1583
1583
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
1584
1584
  },
1585
- __wbg___wbindgen_boolean_get_edaed31a367ce1bd: function(arg0) {
1585
+ __wbg___wbindgen_boolean_get_fa956cfa2d1bd751: function(arg0) {
1586
1586
  const v = arg0;
1587
1587
  const ret = typeof(v) === 'boolean' ? v : undefined;
1588
1588
  return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
1589
1589
  },
1590
- __wbg___wbindgen_debug_string_8a447059637473e2: function(arg0, arg1) {
1590
+ __wbg___wbindgen_debug_string_c25d447a39f5578f: function(arg0, arg1) {
1591
1591
  const ret = debugString(arg1);
1592
1592
  const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1593
1593
  const len1 = WASM_VECTOR_LEN;
1594
1594
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1595
1595
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1596
1596
  },
1597
- __wbg___wbindgen_in_4990f46af709e33c: function(arg0, arg1) {
1597
+ __wbg___wbindgen_in_aca499c5de7ff5e5: function(arg0, arg1) {
1598
1598
  const ret = arg0 in arg1;
1599
1599
  return ret;
1600
1600
  },
1601
- __wbg___wbindgen_is_bigint_90b5ccfe67c78460: function(arg0) {
1601
+ __wbg___wbindgen_is_bigint_2f76dc55065b4273: function(arg0) {
1602
1602
  const ret = typeof(arg0) === 'bigint';
1603
1603
  return ret;
1604
1604
  },
1605
- __wbg___wbindgen_is_function_acc5528be2b923f2: function(arg0) {
1605
+ __wbg___wbindgen_is_function_1ff95bcc5517c252: function(arg0) {
1606
1606
  const ret = typeof(arg0) === 'function';
1607
1607
  return ret;
1608
1608
  },
1609
- __wbg___wbindgen_is_null_6d937fbfb6478470: function(arg0) {
1609
+ __wbg___wbindgen_is_null_ea9085d691f535d3: function(arg0) {
1610
1610
  const ret = arg0 === null;
1611
1611
  return ret;
1612
1612
  },
1613
- __wbg___wbindgen_is_object_0beba4a1980d3eea: function(arg0) {
1613
+ __wbg___wbindgen_is_object_a27215656b807791: function(arg0) {
1614
1614
  const val = arg0;
1615
1615
  const ret = typeof(val) === 'object' && val !== null;
1616
1616
  return ret;
1617
1617
  },
1618
- __wbg___wbindgen_is_undefined_721f8decd50c87a3: function(arg0) {
1618
+ __wbg___wbindgen_is_undefined_c05833b95a3cf397: function(arg0) {
1619
1619
  const ret = arg0 === undefined;
1620
1620
  return ret;
1621
1621
  },
1622
- __wbg___wbindgen_jsval_eq_4e8c38722cb8ff51: function(arg0, arg1) {
1622
+ __wbg___wbindgen_jsval_eq_e659fcf7b0e32763: function(arg0, arg1) {
1623
1623
  const ret = arg0 === arg1;
1624
1624
  return ret;
1625
1625
  },
1626
- __wbg___wbindgen_jsval_loose_eq_4b9aba9e5b3c4582: function(arg0, arg1) {
1626
+ __wbg___wbindgen_jsval_loose_eq_db4c3b15f63fc170: function(arg0, arg1) {
1627
1627
  const ret = arg0 == arg1;
1628
1628
  return ret;
1629
1629
  },
1630
- __wbg___wbindgen_number_get_1cc01dd708740256: function(arg0, arg1) {
1630
+ __wbg___wbindgen_number_get_394265ed1e1b84ee: function(arg0, arg1) {
1631
1631
  const obj = arg1;
1632
1632
  const ret = typeof(obj) === 'number' ? obj : undefined;
1633
1633
  getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
1634
1634
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
1635
1635
  },
1636
- __wbg___wbindgen_string_get_71bb4348194e31f0: function(arg0, arg1) {
1636
+ __wbg___wbindgen_string_get_b0ca35b86a603356: function(arg0, arg1) {
1637
1637
  const obj = arg1;
1638
1638
  const ret = typeof(obj) === 'string' ? obj : undefined;
1639
1639
  var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
@@ -1641,14 +1641,14 @@ function __wbg_get_imports() {
1641
1641
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1642
1642
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1643
1643
  },
1644
- __wbg___wbindgen_throw_ea4887a5f8f9a9db: function(arg0, arg1) {
1644
+ __wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) {
1645
1645
  throw new Error(getStringFromWasm0(arg0, arg1));
1646
1646
  },
1647
- __wbg_call_8e98ed2f3c86c4b5: function() { return handleError(function (arg0, arg1) {
1647
+ __wbg_call_8a2dd23819f8a60a: function() { return handleError(function (arg0, arg1) {
1648
1648
  const ret = arg0.call(arg1);
1649
1649
  return ret;
1650
1650
  }, arguments); },
1651
- __wbg_done_b62d4a7d2286852a: function(arg0) {
1651
+ __wbg_done_89b2b13e91a60321: function(arg0) {
1652
1652
  const ret = arg0.done;
1653
1653
  return ret;
1654
1654
  },
@@ -1663,11 +1663,11 @@ function __wbg_get_imports() {
1663
1663
  wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
1664
1664
  }
1665
1665
  },
1666
- __wbg_get_9a29be2cb383ed9a: function() { return handleError(function (arg0, arg1) {
1666
+ __wbg_get_c7eb1f358a7654df: function() { return handleError(function (arg0, arg1) {
1667
1667
  const ret = Reflect.get(arg0, arg1);
1668
1668
  return ret;
1669
1669
  }, arguments); },
1670
- __wbg_get_unchecked_54a4374c38e08460: function(arg0, arg1) {
1670
+ __wbg_get_unchecked_6e0ad6d2a41b06f6: function(arg0, arg1) {
1671
1671
  const ret = arg0[arg1 >>> 0];
1672
1672
  return ret;
1673
1673
  },
@@ -1675,7 +1675,7 @@ function __wbg_get_imports() {
1675
1675
  const ret = arg0[arg1];
1676
1676
  return ret;
1677
1677
  },
1678
- __wbg_instanceof_ArrayBuffer_2a7bb09fee70c2da: function(arg0) {
1678
+ __wbg_instanceof_ArrayBuffer_4480b9e0068a8adb: function(arg0) {
1679
1679
  let result;
1680
1680
  try {
1681
1681
  result = arg0 instanceof ArrayBuffer;
@@ -1685,7 +1685,7 @@ function __wbg_get_imports() {
1685
1685
  const ret = result;
1686
1686
  return ret;
1687
1687
  },
1688
- __wbg_instanceof_Uint8Array_f080092dc70f5d58: function(arg0) {
1688
+ __wbg_instanceof_Uint8Array_309b927aaf7a3fc7: function(arg0) {
1689
1689
  let result;
1690
1690
  try {
1691
1691
  result = arg0 instanceof Uint8Array;
@@ -1695,23 +1695,23 @@ function __wbg_get_imports() {
1695
1695
  const ret = result;
1696
1696
  return ret;
1697
1697
  },
1698
- __wbg_isArray_145a34fd0a38d37b: function(arg0) {
1698
+ __wbg_isArray_0677c962b281d01a: function(arg0) {
1699
1699
  const ret = Array.isArray(arg0);
1700
1700
  return ret;
1701
1701
  },
1702
- __wbg_isSafeInteger_a3389a198582f5f6: function(arg0) {
1702
+ __wbg_isSafeInteger_04f36e4056f1b851: function(arg0) {
1703
1703
  const ret = Number.isSafeInteger(arg0);
1704
1704
  return ret;
1705
1705
  },
1706
- __wbg_iterator_cc47ba25a2be735a: function() {
1706
+ __wbg_iterator_6f722e4a93058b71: function() {
1707
1707
  const ret = Symbol.iterator;
1708
1708
  return ret;
1709
1709
  },
1710
- __wbg_length_589238bdcf171f0e: function(arg0) {
1710
+ __wbg_length_1f0964f4a5e2c6d8: function(arg0) {
1711
1711
  const ret = arg0.length;
1712
1712
  return ret;
1713
1713
  },
1714
- __wbg_length_c6054974c0a6cdb9: function(arg0) {
1714
+ __wbg_length_370319915dc99107: function(arg0) {
1715
1715
  const ret = arg0.length;
1716
1716
  return ret;
1717
1717
  },
@@ -1719,37 +1719,37 @@ function __wbg_get_imports() {
1719
1719
  const ret = new Error();
1720
1720
  return ret;
1721
1721
  },
1722
- __wbg_new_2e117a478906f062: function() {
1723
- const ret = new Object();
1724
- return ret;
1725
- },
1726
- __wbg_new_36e147a8ced3c6e0: function() {
1722
+ __wbg_new_32b398fb48b6d94a: function() {
1727
1723
  const ret = new Array();
1728
1724
  return ret;
1729
1725
  },
1730
- __wbg_new_81880fb5002cb255: function(arg0) {
1726
+ __wbg_new_cd45aabdf6073e84: function(arg0) {
1731
1727
  const ret = new Uint8Array(arg0);
1732
1728
  return ret;
1733
1729
  },
1734
- __wbg_next_0c4066e251d2eff9: function() { return handleError(function (arg0) {
1735
- const ret = arg0.next();
1730
+ __wbg_new_da52cf8fe3429cb2: function() {
1731
+ const ret = new Object();
1736
1732
  return ret;
1737
- }, arguments); },
1738
- __wbg_next_402fa10b59ab20c3: function(arg0) {
1733
+ },
1734
+ __wbg_next_6dbf2c0ac8cde20f: function(arg0) {
1739
1735
  const ret = arg0.next;
1740
1736
  return ret;
1741
1737
  },
1742
- __wbg_now_d2e0afbad4edbe82: function() {
1738
+ __wbg_next_71f2aa1cb3d1e37e: function() { return handleError(function (arg0) {
1739
+ const ret = arg0.next();
1740
+ return ret;
1741
+ }, arguments); },
1742
+ __wbg_now_86c0d4ba3fa605b8: function() {
1743
1743
  const ret = Date.now();
1744
1744
  return ret;
1745
1745
  },
1746
- __wbg_prototypesetcall_d721637c7ca66eb8: function(arg0, arg1, arg2) {
1746
+ __wbg_prototypesetcall_4770620bbe4688a0: function(arg0, arg1, arg2) {
1747
1747
  Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);
1748
1748
  },
1749
1749
  __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {
1750
1750
  arg0[arg1] = arg2;
1751
1751
  },
1752
- __wbg_set_dc601f4a69da0bc2: function(arg0, arg1, arg2) {
1752
+ __wbg_set_8a16b38e4805b298: function(arg0, arg1, arg2) {
1753
1753
  arg0[arg1 >>> 0] = arg2;
1754
1754
  },
1755
1755
  __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {
@@ -1759,7 +1759,7 @@ function __wbg_get_imports() {
1759
1759
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
1760
1760
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
1761
1761
  },
1762
- __wbg_value_49f783bb59765962: function(arg0) {
1762
+ __wbg_value_a5d5488a9589444a: function(arg0) {
1763
1763
  const ret = arg0.value;
1764
1764
  return ret;
1765
1765
  },
@@ -2052,7 +2052,7 @@ async function __wbg_init(module_or_path) {
2052
2052
  }
2053
2053
 
2054
2054
  if (module_or_path === undefined) {
2055
- module_or_path = new URL(new URL('diff_wasm_bg-ucI-8cy2.wasm', import.meta.url).href);
2055
+ module_or_path = new URL(new URL('diff_wasm_bg-HXJ2weOq.wasm', import.meta.url).href);
2056
2056
  }
2057
2057
  const imports = __wbg_get_imports();
2058
2058
 
@@ -2098,7 +2098,7 @@ async function initWasm() {
2098
2098
  return initPromise;
2099
2099
  }
2100
2100
  initPromise = (async () => {
2101
- const wasmUrl = new URL(new URL('diff_wasm_bg-ucI-8cy2.wasm', import.meta.url).href);
2101
+ const wasmUrl = new URL(new URL('diff_wasm_bg-HXJ2weOq.wasm', import.meta.url).href);
2102
2102
  // Node's undici fetch does not support file:// URLs, so read bytes ourselves.
2103
2103
  let source = wasmUrl;
2104
2104
  if (typeof process !== 'undefined' && process.versions?.node) {
package/dist/wire.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sources":["../src/diff/core/offsetRange.ts","../src/diff/algorithms/diffAlgorithm.ts","../src/diff/algorithms/dynamicProgrammingDiffing.ts","../src/diff/algorithms/myersDiffAlgorithm.ts","../src/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts","../src/diff/defaultLinesDiffComputer/lineSequence.ts","../src/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts","../src/diff/defaultLinesDiffComputer/rangeMapping.ts","../src/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","../out/pkg/diff_wasm.js","../src/diff/wasm/loader.ts","../src/diff/worker/wire.ts"],"sourcesContent":["/**\n * A range of offsets (0-based).\n */\nexport class OffsetRange {\n\tpublic static ofLength(length: number): OffsetRange {\n\t\treturn new OffsetRange(0, length);\n\t}\n\n\tpublic static ofStartAndLength(start: number, length: number): OffsetRange {\n\t\treturn new OffsetRange(start, start + length);\n\t}\n\n\tconstructor(\n\t\tpublic readonly start: number,\n\t\tpublic readonly endExclusive: number\n\t) {\n\t\tif (start > endExclusive) {\n\t\t\tthrow new Error(`Invalid range: [${start}, ${endExclusive})`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.start === this.endExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endExclusive - this.start;\n\t}\n\n\tdelta(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive + offset);\n\t}\n\n\tdeltaStart(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive);\n\t}\n\n\tdeltaEnd(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start, this.endExclusive + offset);\n\t}\n\n\tequals(other: OffsetRange): boolean {\n\t\treturn this.start === other.start && this.endExclusive === other.endExclusive;\n\t}\n\n\tcontainsRange(other: OffsetRange): boolean {\n\t\treturn this.start <= other.start && other.endExclusive <= this.endExclusive;\n\t}\n\n\tcontains(offset: number): boolean {\n\t\treturn this.start <= offset && offset < this.endExclusive;\n\t}\n\n\tjoin(other: OffsetRange): OffsetRange {\n\t\treturn new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n\t}\n\n\tintersect(other: OffsetRange): OffsetRange | undefined {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\tif (start <= end) {\n\t\t\treturn new OffsetRange(start, end);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tintersects(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start < end;\n\t}\n\n\tintersectsOrTouches(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start <= end;\n\t}\n\n\tslice<T>(arr: readonly T[]): T[] {\n\t\treturn arr.slice(this.start, this.endExclusive);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.start}, ${this.endExclusive})`;\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\n\n/**\n * A sequence that can be diffed.\n */\nexport interface ISequence {\n\tgetElement(offset: number): number;\n\treadonly length: number;\n\n\t/**\n\t * The higher the score, the better that offset can be used to split the sequence.\n\t * Used to optimize insertions. Must not be negative.\n\t */\n\tgetBoundaryScore?(length: number): number;\n\n\t/**\n\t * For line sequences, getElement returns a number representing trimmed lines.\n\t * This checks equality for the original lines.\n\t * It prevents shifting to less matching lines.\n\t */\n\tisStronglyEqual(offset1: number, offset2: number): boolean;\n}\n\n/**\n * Timeout interface for limiting computation time.\n */\nexport interface ITimeout {\n\tisValid(): boolean;\n}\n\nexport class InfiniteTimeout implements ITimeout {\n\tpublic static readonly instance = new InfiniteTimeout();\n\n\tisValid(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport class DateTimeout implements ITimeout {\n\tprivate readonly startTime = Date.now();\n\tprivate valid = true;\n\n\tconstructor(private timeout: number) {\n\t\tif (timeout <= 0) {\n\t\t\tthrow new Error('timeout must be positive');\n\t\t}\n\t}\n\n\tisValid(): boolean {\n\t\tconst valid = Date.now() - this.startTime < this.timeout;\n\t\tif (!valid && this.valid) {\n\t\t\tthis.valid = false;\n\t\t}\n\t\treturn this.valid;\n\t}\n}\n\n/**\n * Represents an offset pair for two sequences.\n */\nexport class OffsetPair {\n\tpublic static readonly zero = new OffsetPair(0, 0);\n\tpublic static readonly max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\n\tconstructor(\n\t\tpublic readonly offset1: number,\n\t\tpublic readonly offset2: number\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.offset1} <-> ${this.offset2}`;\n\t}\n\n\tdelta(offset: number): OffsetPair {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n\t}\n\n\tequals(other: OffsetPair): boolean {\n\t\treturn this.offset1 === other.offset1 && this.offset2 === other.offset2;\n\t}\n}\n\n/**\n * Represents a diff between two sequences.\n */\nexport class SequenceDiff {\n\tpublic static invert(sequenceDiffs: SequenceDiff[], doc1Length: number): SequenceDiff[] {\n\t\tconst result: SequenceDiff[] = [];\n\t\tforEachAdjacent(sequenceDiffs, (a, b) => {\n\t\t\tresult.push(SequenceDiff.fromOffsetPairs(\n\t\t\t\ta ? a.getEndExclusives() : OffsetPair.zero,\n\t\t\t\tb ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)\n\t\t\t));\n\t\t});\n\t\treturn result;\n\t}\n\n\tpublic static fromOffsetPairs(start: OffsetPair, endExclusive: OffsetPair): SequenceDiff {\n\t\treturn new SequenceDiff(\n\t\t\tnew OffsetRange(start.offset1, endExclusive.offset1),\n\t\t\tnew OffsetRange(start.offset2, endExclusive.offset2)\n\t\t);\n\t}\n\n\tpublic static assertSorted(sequenceDiffs: SequenceDiff[]): void {\n\t\tlet last: SequenceDiff | undefined = undefined;\n\t\tfor (const cur of sequenceDiffs) {\n\t\t\tif (last) {\n\t\t\t\tif (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {\n\t\t\t\t\tthrow new Error('Sequence diffs must be sorted');\n\t\t\t\t}\n\t\t\t}\n\t\t\tlast = cur;\n\t\t}\n\t}\n\n\tconstructor(\n\t\tpublic readonly seq1Range: OffsetRange,\n\t\tpublic readonly seq2Range: OffsetRange\n\t) {}\n\n\tswap(): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq2Range, this.seq1Range);\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.seq1Range} <-> ${this.seq2Range}`;\n\t}\n\n\tjoin(other: SequenceDiff): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n\t}\n\n\tdelta(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n\t}\n\n\tdeltaStart(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n\t}\n\n\tdeltaEnd(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n\t}\n\n\tintersectsOrTouches(other: SequenceDiff): boolean {\n\t\treturn this.seq1Range.intersectsOrTouches(other.seq1Range) || this.seq2Range.intersectsOrTouches(other.seq2Range);\n\t}\n\n\tintersect(other: SequenceDiff): SequenceDiff | undefined {\n\t\tconst i1 = this.seq1Range.intersect(other.seq1Range);\n\t\tconst i2 = this.seq2Range.intersect(other.seq2Range);\n\t\tif (!i1 || !i2) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new SequenceDiff(i1, i2);\n\t}\n\n\tgetStarts(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n\t}\n\n\tgetEndExclusives(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n\t}\n}\n\n/**\n * Result of a diff algorithm computation.\n */\nexport class DiffAlgorithmResult {\n\tstatic trivial(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n\t}\n\n\tstatic trivialTimedOut(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n\t}\n\n\tconstructor(\n\t\tpublic readonly diffs: SequenceDiff[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * A synchronous diff algorithm.\n */\nexport interface IDiffAlgorithm {\n\tcompute(sequence1: ISequence, sequence2: ISequence, timeout?: ITimeout): DiffAlgorithmResult;\n}\n\n// Helper function for iterating with neighbors\nfunction forEachAdjacent<T>(items: T[], callback: (prev: T | undefined, current: T | undefined) => void): void {\n\tlet prev: T | undefined = undefined;\n\tfor (const item of items) {\n\t\tcallback(prev, item);\n\t\tprev = item;\n\t}\n\tcallback(prev, undefined);\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * A 2D array implementation.\n */\nexport class Array2D<T> {\n\tprivate readonly array: T[] = [];\n\n\tconstructor(\n\t\tpublic readonly width: number,\n\t\tpublic readonly height: number\n\t) {\n\t\tthis.array = new Array<T>(width * height);\n\t}\n\n\tget(x: number, y: number): T {\n\t\treturn this.array[x + y * this.width];\n\t}\n\n\tset(x: number, y: number, value: T): void {\n\t\tthis.array[x + y * this.width] = value;\n\t}\n}\n\n/**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n */\nexport class DynamicProgrammingDiffing implements IDiffAlgorithm {\n\tcompute(\n\t\tsequence1: ISequence,\n\t\tsequence2: ISequence,\n\t\ttimeout: ITimeout = InfiniteTimeout.instance,\n\t\tequalityScore?: (offset1: number, offset2: number) => number\n\t): DiffAlgorithmResult {\n\t\tif (sequence1.length === 0 || sequence2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(sequence1, sequence2);\n\t\t}\n\n\t\t/**\n\t\t * lcsLengths.get(i, j): Length of the longest common subsequence of \n\t\t * sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n\t\t */\n\t\tconst lcsLengths = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst directions = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst lengths = new Array2D<number>(sequence1.length, sequence2.length);\n\n\t\t// Initialize lcsLengths\n\t\tfor (let s1 = 0; s1 < sequence1.length; s1++) {\n\t\t\tfor (let s2 = 0; s2 < sequence2.length; s2++) {\n\t\t\t\tif (!timeout.isValid()) {\n\t\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n\t\t\t\t}\n\n\t\t\t\tconst horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n\t\t\t\tconst verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n\n\t\t\t\tlet extendedSeqScore: number;\n\t\t\t\tif (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n\t\t\t\t\tif (s1 === 0 || s2 === 0) {\n\t\t\t\t\t\textendedSeqScore = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\textendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) {\n\t\t\t\t\t\t// Prefer consecutive diagonals\n\t\t\t\t\t\textendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\textendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1);\n\t\t\t\t} else {\n\t\t\t\t\textendedSeqScore = -1;\n\t\t\t\t}\n\n\t\t\t\tconst newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n\n\t\t\t\tif (newValue === extendedSeqScore) {\n\t\t\t\t\t// Prefer diagonals\n\t\t\t\t\tconst prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n\t\t\t\t\tlengths.set(s1, s2, prevLen + 1);\n\t\t\t\t\tdirections.set(s1, s2, 3);\n\t\t\t\t} else if (newValue === horizontalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 1);\n\t\t\t\t} else if (newValue === verticalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 2);\n\t\t\t\t}\n\n\t\t\t\tlcsLengths.set(s1, s2, newValue);\n\t\t\t}\n\t\t}\n\n\t\t// Backtracking\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = sequence1.length;\n\t\tlet lastAligningPosS2: number = sequence2.length;\n\n\t\tfunction reportDecreasingAligningPositions(s1: number, s2: number): void {\n\t\t\tif (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(s1 + 1, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(s2 + 1, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastAligningPosS1 = s1;\n\t\t\tlastAligningPosS2 = s2;\n\t\t}\n\n\t\tlet s1 = sequence1.length - 1;\n\t\tlet s2 = sequence2.length - 1;\n\t\twhile (s1 >= 0 && s2 >= 0) {\n\t\t\tif (directions.get(s1, s2) === 3) {\n\t\t\t\treportDecreasingAligningPositions(s1, s2);\n\t\t\t\ts1--;\n\t\t\t\ts2--;\n\t\t\t} else {\n\t\t\t\tif (directions.get(s1, s2) === 1) {\n\t\t\t\t\ts1--;\n\t\t\t\t} else {\n\t\t\t\t\ts2--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treportDecreasingAligningPositions(-1, -1);\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n */\nexport class MyersDiffAlgorithm implements IDiffAlgorithm {\n\tcompute(seq1: ISequence, seq2: ISequence, timeout: ITimeout = InfiniteTimeout.instance): DiffAlgorithmResult {\n\t\t// Common special cases - early return improves performance dramatically\n\t\tif (seq1.length === 0 || seq2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(seq1, seq2);\n\t\t}\n\n\t\tconst seqX = seq1; // Text on the x axis\n\t\tconst seqY = seq2; // Text on the y axis\n\n\t\tfunction getXAfterSnake(x: number, y: number): number {\n\t\t\twhile (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n\t\t\t\tx++;\n\t\t\t\ty++;\n\t\t\t}\n\t\t\treturn x;\n\t\t}\n\n\t\tlet d = 0;\n\t\t// V[k]: X value of longest d-line that ends in diagonal k.\n\t\t// d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.\n\t\t// diagonal k: Set of points (x,y) with x-y = k.\n\t\tconst V = new FastInt32Array();\n\t\tV.set(0, getXAfterSnake(0, 0));\n\n\t\tconst paths = new FastArrayNegativeIndices<SnakePath | null>();\n\t\tpaths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n\n\t\tlet k = 0;\n\n\t\tloop: while (true) {\n\t\t\td++;\n\t\t\tif (!timeout.isValid()) {\n\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n\t\t\t}\n\t\t\t// The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result.\n\t\t\tconst lowerBound = -Math.min(d, seqY.length + (d % 2));\n\t\t\tconst upperBound = Math.min(d, seqX.length + (d % 2));\n\t\t\tfor (k = lowerBound; k <= upperBound; k += 2) {\n\t\t\t\t// We can use the X values of (d-1)-lines to compute X value of the longest d-lines.\n\t\t\t\tconst maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // Vertical non-diagonal (add symbol in seqX)\n\t\t\t\tconst maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // Horizontal non-diagonal (delete symbol in seqX)\n\t\t\t\tconst x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n\t\t\t\tconst y = x - k;\n\t\t\t\tif (x > seqX.length || y > seqY.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst newMaxX = getXAfterSnake(x, y);\n\t\t\t\tV.set(k, newMaxX);\n\t\t\t\tconst lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n\t\t\t\tpaths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n\n\t\t\t\tif (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {\n\t\t\t\t\tbreak loop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet path = paths.get(k);\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = seqX.length;\n\t\tlet lastAligningPosS2: number = seqY.length;\n\n\t\twhile (true) {\n\t\t\tconst endX = path ? path.x + path.length : 0;\n\t\t\tconst endY = path ? path.y + path.length : 0;\n\n\t\t\tif (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(endX, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(endY, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tif (!path) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastAligningPosS1 = path.x;\n\t\t\tlastAligningPosS2 = path.y;\n\n\t\t\tpath = path.prev;\n\t\t}\n\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n\nclass SnakePath {\n\tconstructor(\n\t\tpublic readonly prev: SnakePath | null,\n\t\tpublic readonly x: number,\n\t\tpublic readonly y: number,\n\t\tpublic readonly length: number\n\t) { }\n}\n\n/**\n * An array that supports fast negative indices.\n */\nclass FastInt32Array {\n\tprivate positiveArr: Int32Array = new Int32Array(10);\n\tprivate negativeArr: Int32Array = new Int32Array(10);\n\n\tget(idx: number): number {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: number): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tif (idx >= this.negativeArr.length) {\n\t\t\t\tconst arr = this.negativeArr;\n\t\t\t\tthis.negativeArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.negativeArr.set(arr);\n\t\t\t}\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tif (idx >= this.positiveArr.length) {\n\t\t\t\tconst arr = this.positiveArr;\n\t\t\t\tthis.positiveArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.positiveArr.set(arr);\n\t\t\t}\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n\n/**\n * An array that supports fast negative indices for objects.\n */\nclass FastArrayNegativeIndices<T> {\n\tprivate readonly positiveArr: T[] = [];\n\tprivate readonly negativeArr: T[] = [];\n\n\tget(idx: number): T {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: T): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence, OffsetPair, SequenceDiff } from '../algorithms/diffAlgorithm.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet result = sequenceDiffs;\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\t// Sometimes, calling this function twice improves the result.\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\tresult = shiftSequenceDiffs(sequence1, sequence2, result);\n\treturn result;\n}\n\n/**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\nfunction joinSequenceDiffsByShifting(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (sequenceDiffs.length === 0) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tconst result: SequenceDiff[] = [];\n\tresult.push(sequenceDiffs[0]);\n\n\t// First move them all to the left as much as possible and join them if possible\n\tfor (let i = 1; i < sequenceDiffs.length; i++) {\n\t\tconst prevResult = result[result.length - 1];\n\t\tlet cur = sequenceDiffs[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 1; d <= length; d++) {\n\t\t\t\tif (\n\t\t\t\t\tsequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) ||\n\t\t\t\t\tsequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\td--;\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[result.length - 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length),\n\t\t\t\t\tnew OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcur = cur.delta(-d);\n\t\t}\n\n\t\tresult.push(cur);\n\t}\n\n\tconst result2: SequenceDiff[] = [];\n\t// Then move them all to the right and join them again if possible\n\tfor (let i = 0; i < result.length - 1; i++) {\n\t\tconst nextResult = result[i + 1];\n\t\tlet cur = result[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 0; d < length; d++) {\n\t\t\t\tif (\n\t\t\t\t\t!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) ||\n\t\t\t\t\t!sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[i + 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive),\n\t\t\t\t\tnew OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (d > 0) {\n\t\t\t\tcur = cur.delta(d);\n\t\t\t}\n\t\t}\n\n\t\tresult2.push(cur);\n\t}\n\n\tif (result.length > 0) {\n\t\tresult2.push(result[result.length - 1]);\n\t}\n\n\treturn result2;\n}\n\nfunction shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tfor (let i = 0; i < sequenceDiffs.length; i++) {\n\t\tconst prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined);\n\t\tconst diff = sequenceDiffs[i];\n\t\tconst nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined);\n\n\t\tconst seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n\t\tconst seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n\n\t\tif (diff.seq1Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n\t\t} else if (diff.seq2Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n\t\t}\n\t}\n\n\treturn sequenceDiffs;\n}\n\nfunction shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq1ValidRange: OffsetRange, seq2ValidRange: OffsetRange): SequenceDiff {\n\tconst maxShiftLimit = 100; // To prevent performance issues\n\n\tlet deltaBefore = 1;\n\twhile (\n\t\tdiff.seq1Range.start - deltaBefore >= seq1ValidRange.start &&\n\t\tdiff.seq2Range.start - deltaBefore >= seq2ValidRange.start &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit\n\t) {\n\t\tdeltaBefore++;\n\t}\n\tdeltaBefore--;\n\n\tlet deltaAfter = 0;\n\twhile (\n\t\tdiff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive &&\n\t\tdiff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit\n\t) {\n\t\tdeltaAfter++;\n\t}\n\n\tif (deltaBefore === 0 && deltaAfter === 0) {\n\t\treturn diff;\n\t}\n\n\tlet bestDelta = 0;\n\tlet bestScore = -1;\n\t// Find best scored delta\n\tfor (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n\t\tconst seq2OffsetStart = diff.seq2Range.start + delta;\n\t\tconst seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n\t\tconst seq1Offset = diff.seq1Range.start + delta;\n\n\t\tconst score = sequence1.getBoundaryScore!(seq1Offset) + sequence2.getBoundaryScore!(seq2OffsetStart) + sequence2.getBoundaryScore!(seq2OffsetEndExclusive);\n\t\tif (score > bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestDelta = delta;\n\t\t}\n\t}\n\n\treturn diff.delta(bestDelta);\n}\n\nexport function removeShortMatches(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\tfor (const s of sequenceDiffs) {\n\t\tconst last = result[result.length - 1];\n\t\tif (!last) {\n\t\t\tresult.push(s);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {\n\t\t\tresult[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n\t\t} else {\n\t\t\tresult.push(s);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function extendDiffsToEntireWordIfAppropriate(\n\tsequence1: LinesSliceCharSequence,\n\tsequence2: LinesSliceCharSequence,\n\tsequenceDiffs: SequenceDiff[],\n\tfindParent: (seq: LinesSliceCharSequence, idx: number) => OffsetRange | undefined,\n\tforce: boolean = false\n): SequenceDiff[] {\n\tconst equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n\n\tconst additional: SequenceDiff[] = [];\n\n\tlet lastPoint = new OffsetPair(0, 0);\n\n\tfunction scanWord(pair: OffsetPair, equalMapping: SequenceDiff): void {\n\t\tif (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst w1 = findParent(sequence1, pair.offset1);\n\t\tconst w2 = findParent(sequence2, pair.offset2);\n\t\tif (!w1 || !w2) {\n\t\t\treturn;\n\t\t}\n\t\tlet w = new SequenceDiff(w1, w2);\n\t\tconst equalPart = w.intersect(equalMapping)!;\n\n\t\tlet equalChars1 = equalPart.seq1Range.length;\n\t\tlet equalChars2 = equalPart.seq2Range.length;\n\n\t\twhile (equalMappings.length > 0) {\n\t\t\tconst next = equalMappings[0];\n\t\t\tconst intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);\n\t\t\tif (!intersects) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst v1 = findParent(sequence1, next.seq1Range.start);\n\t\t\tconst v2 = findParent(sequence2, next.seq2Range.start);\n\t\t\tconst v = new SequenceDiff(v1!, v2!);\n\t\t\tconst equalPartV = v.intersect(next)!;\n\n\t\t\tequalChars1 += equalPartV.seq1Range.length;\n\t\t\tequalChars2 += equalPartV.seq2Range.length;\n\n\t\t\tw = w.join(v);\n\n\t\t\tif (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {\n\t\t\t\tequalMappings.shift();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ((force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length) || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {\n\t\t\tadditional.push(w);\n\t\t}\n\n\t\tlastPoint = w.getEndExclusives();\n\t}\n\n\twhile (equalMappings.length > 0) {\n\t\tconst next = equalMappings.shift()!;\n\t\tif (next.seq1Range.isEmpty) {\n\t\t\tcontinue;\n\t\t}\n\t\tscanWord(next.getStarts(), next);\n\t\tscanWord(next.getEndExclusives().delta(-1), next);\n\t}\n\n\tconst merged = mergeSequenceDiffs(sequenceDiffs, additional);\n\treturn merged;\n}\n\nfunction mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\n\twhile (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n\t\tconst sd1 = sequenceDiffs1[0];\n\t\tconst sd2 = sequenceDiffs2[0];\n\n\t\tlet next: SequenceDiff;\n\t\tif (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {\n\t\t\tnext = sequenceDiffs1.shift()!;\n\t\t} else {\n\t\t\tnext = sequenceDiffs2.shift()!;\n\t\t}\n\n\t\tif (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {\n\t\t\tresult[result.length - 1] = result[result.length - 1].join(next);\n\t\t} else {\n\t\t\tresult.push(next);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function removeVeryShortMatchingLinesBetweenDiffs(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange);\n\t\t\t\tconst unchangedTextWithoutWs = unchangedText.replace(/\\s/g, '');\n\t\t\t\tif (unchangedTextWithoutWs.length <= 4\n\t\t\t\t\t&& (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\treturn diffs;\n}\n\nexport function removeVeryShortMatchingTextBetweenLongDiffs(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\n\t\t\t\tconst unchangedLineCount = sequence1.countLinesIn(unchangedRange);\n\t\t\t\tif (unchangedLineCount > 5 || unchangedRange.length > 500) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange).trim();\n\t\t\t\tif (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n\t\t\t\tconst beforeSeq1Length = before.seq1Range.length;\n\t\t\t\tconst beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n\t\t\t\tconst beforeSeq2Length = before.seq2Range.length;\n\n\t\t\t\tconst afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n\t\t\t\tconst afterSeq1Length = after.seq1Range.length;\n\t\t\t\tconst afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n\t\t\t\tconst afterSeq2Length = after.seq2Range.length;\n\n\t\t\t\tconst max = 2 * 40 + 50;\n\t\t\t\tfunction cap(v: number): number {\n\t\t\t\t\treturn Math.min(v, max);\n\t\t\t\t}\n\n\t\t\t\tif (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5)\n\t\t\t\t\t+ Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > ((max ** 1.5) ** 1.5) * 1.3) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\tconst newDiffs: SequenceDiff[] = [];\n\n\t// Remove short suffixes/prefixes\n\tforEachWithNeighbors(diffs, (prev, cur, next) => {\n\t\tlet newDiff = cur;\n\n\t\tfunction shouldMarkAsChanged(text: string): boolean {\n\t\t\treturn text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n\t\t}\n\n\t\tconst fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n\t\tconst prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n\t\tif (shouldMarkAsChanged(prefix)) {\n\t\t\tnewDiff = newDiff.deltaStart(-prefix.length);\n\t\t}\n\t\tconst suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n\t\tif (shouldMarkAsChanged(suffix)) {\n\t\t\tnewDiff = newDiff.deltaEnd(suffix.length);\n\t\t}\n\n\t\tconst availableSpace = SequenceDiff.fromOffsetPairs(\n\t\t\tprev ? prev.getEndExclusives() : OffsetPair.zero,\n\t\t\tnext ? next.getStarts() : OffsetPair.max\n\t\t);\n\t\tconst intersected = newDiff.intersect(availableSpace)!;\n\t\tif (newDiffs.length > 0 && intersected.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {\n\t\t\tnewDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(intersected);\n\t\t} else {\n\t\t\tnewDiffs.push(intersected);\n\t\t}\n\t});\n\n\treturn newDiffs;\n}\n\nfunction forEachWithNeighbors<T>(items: T[], callback: (prev: T | undefined, cur: T, next: T | undefined) => void): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tcallback(items[i - 1], items[i], items[i + 1]);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tSpace: 32,\n\tTab: 9,\n};\n\nexport class LineSequence implements ISequence {\n\tconstructor(\n\t\tprivate readonly trimmedHash: number[],\n\t\tprivate readonly lines: string[]\n\t) {}\n\n\tgetElement(offset: number): number {\n\t\treturn this.trimmedHash[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.trimmedHash.length;\n\t}\n\n\tgetBoundaryScore(length: number): number {\n\t\tconst indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);\n\t\tconst indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);\n\t\treturn 1000 - (indentationBefore + indentationAfter);\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.lines.slice(range.start, range.endExclusive).join('\\n');\n\t}\n\n\tisStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.lines[offset1] === this.lines[offset2];\n\t}\n}\n\nfunction getIndentation(str: string): number {\n\tlet i = 0;\n\twhile (i < str.length && (str.charCodeAt(i) === CharCode.Space || str.charCodeAt(i) === CharCode.Tab)) {\n\t\ti++;\n\t}\n\treturn i;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tLineFeed: 10,\n\tCarriageReturn: 13,\n\tSpace: 32,\n\tTab: 9,\n\ta: 97,\n\tz: 122,\n\tA: 65,\n\tZ: 90,\n\tDigit0: 48,\n\tDigit9: 57,\n\tComma: 44,\n\tSemicolon: 59,\n};\n\nfunction isSpace(charCode: number): boolean {\n\treturn charCode === CharCode.Space || charCode === CharCode.Tab;\n}\n\n/**\n * Represents a range in terms of lines and columns.\n */\nexport interface IRange {\n\treadonly startLineNumber: number;\n\treadonly startColumn: number;\n\treadonly endLineNumber: number;\n\treadonly endColumn: number;\n}\n\nexport class Range implements IRange {\n\tpublic readonly startLineNumber: number;\n\tpublic readonly startColumn: number;\n\tpublic readonly endLineNumber: number;\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.startColumn = startColumn;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.endColumn = endColumn;\n\t}\n\n\tstatic fromPositions(start: Position, end: Position): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n}\n\nexport class Position {\n\tconstructor(\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly column: number\n\t) {}\n\n\tisBefore(other: Position): boolean {\n\t\tif (this.lineNumber < other.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (other.lineNumber < this.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.column < other.column;\n\t}\n}\n\nexport class LinesSliceCharSequence implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstElementOffsetByLineIdx: number[] = [];\n\tprivate readonly lineStartOffsets: number[] = [];\n\tprivate readonly trimmedWsLengthsByLineIdx: number[] = [];\n\tprivate readonly _range: Range;\n\n\tconstructor(\n\t\tpublic readonly lines: string[],\n\t\trange: Range,\n\t\tpublic readonly considerWhitespaceChanges: boolean\n\t) {\n\t\tthis._range = range;\n\t\tthis.firstElementOffsetByLineIdx.push(0);\n\t\tfor (let lineNumber = this._range.startLineNumber; lineNumber <= this._range.endLineNumber; lineNumber++) {\n\t\t\tlet line = lines[lineNumber - 1];\n\t\t\tlet lineStartOffset = 0;\n\t\t\tif (lineNumber === this._range.startLineNumber && this._range.startColumn > 1) {\n\t\t\t\tlineStartOffset = this._range.startColumn - 1;\n\t\t\t\tline = line.substring(lineStartOffset);\n\t\t\t}\n\t\t\tthis.lineStartOffsets.push(lineStartOffset);\n\n\t\t\tlet trimmedWsLength = 0;\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\tconst trimmedStartLine = line.trimStart();\n\t\t\t\ttrimmedWsLength = line.length - trimmedStartLine.length;\n\t\t\t\tline = trimmedStartLine.trimEnd();\n\t\t\t}\n\t\t\tthis.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n\n\t\t\tconst lineLength = lineNumber === this._range.endLineNumber ? Math.min(this._range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n\t\t\tfor (let i = 0; i < lineLength; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\n\t\t\tif (lineNumber < this._range.endLineNumber) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t\tthis.firstElementOffsetByLineIdx.push(this.elements.length);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoString(): string {\n\t\treturn `Slice: \"${this.text}\"`;\n\t}\n\n\tget text(): string {\n\t\treturn this.getText(new OffsetRange(0, this.length));\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.elements.slice(range.start, range.endExclusive).map(e => String.fromCharCode(e)).join('');\n\t}\n\n\tgetElement(offset: number): number {\n\t\treturn this.elements[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.elements.length;\n\t}\n\n\tpublic getBoundaryScore(length: number): number {\n\t\tconst prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n\t\tconst nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakCR && nextCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// don't break between \\r and \\n\n\t\t\treturn 0;\n\t\t}\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// prefer the linebreak before the change\n\t\t\treturn 150;\n\t\t}\n\n\t\tlet score = 0;\n\t\tif (prevCategory !== nextCategory) {\n\t\t\tscore += 10;\n\t\t\tif (prevCategory === CharBoundaryCategory.WordLower && nextCategory === CharBoundaryCategory.WordUpper) {\n\t\t\t\tscore += 1;\n\t\t\t}\n\t\t}\n\n\t\tscore += getCategoryBoundaryScore(prevCategory);\n\t\tscore += getCategoryBoundaryScore(nextCategory);\n\n\t\treturn score;\n\t}\n\n\tpublic translateOffset(offset: number, preference: 'left' | 'right' = 'right'): Position {\n\t\tconst i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n\t\tconst lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n\t\treturn new Position(\n\t\t\tthis._range.startLineNumber + i,\n\t\t\t1 + this.lineStartOffsets[i] + lineOffset + ((lineOffset === 0 && preference === 'left') ? 0 : this.trimmedWsLengthsByLineIdx[i])\n\t\t);\n\t}\n\n\tpublic translateRange(range: OffsetRange): Range {\n\t\tconst pos1 = this.translateOffset(range.start, 'right');\n\t\tconst pos2 = this.translateOffset(range.endExclusive, 'left');\n\t\tif (pos2.isBefore(pos1)) {\n\t\t\treturn Range.fromPositions(pos2, pos2);\n\t\t}\n\t\treturn Range.fromPositions(pos1, pos2);\n\t}\n\n\t/**\n\t * Finds the word that contains the character at the given offset\n\t */\n\tpublic findWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\t/** fooBar has the two sub-words foo and bar */\n\tpublic findSubWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\tpublic countLinesIn(range: OffsetRange): number {\n\t\treturn this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n\t}\n\n\tpublic isStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.elements[offset1] === this.elements[offset2];\n\t}\n\n\tpublic extendToFullLines(range: OffsetRange): OffsetRange {\n\t\tconst start = findLastMonotonous(this.firstElementOffsetByLineIdx, x => x <= range.start) ?? 0;\n\t\tconst end = findFirstMonotonous(this.firstElementOffsetByLineIdx, x => range.endExclusive <= x) ?? this.elements.length;\n\t\treturn new OffsetRange(start, end);\n\t}\n}\n\nfunction isWordChar(charCode: number): boolean {\n\treturn charCode >= CharCode.a && charCode <= CharCode.z\n\t\t|| charCode >= CharCode.A && charCode <= CharCode.Z\n\t\t|| charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9;\n}\n\nfunction isUpperCase(charCode: number): boolean {\n\treturn charCode >= CharCode.A && charCode <= CharCode.Z;\n}\n\nconst enum CharBoundaryCategory {\n\tWordLower,\n\tWordUpper,\n\tWordNumber,\n\tEnd,\n\tOther,\n\tSeparator,\n\tSpace,\n\tLineBreakCR,\n\tLineBreakLF,\n}\n\nconst categoryScore: Record<CharBoundaryCategory, number> = {\n\t[CharBoundaryCategory.WordLower]: 0,\n\t[CharBoundaryCategory.WordUpper]: 0,\n\t[CharBoundaryCategory.WordNumber]: 0,\n\t[CharBoundaryCategory.End]: 10,\n\t[CharBoundaryCategory.Other]: 2,\n\t[CharBoundaryCategory.Separator]: 30,\n\t[CharBoundaryCategory.Space]: 3,\n\t[CharBoundaryCategory.LineBreakCR]: 10,\n\t[CharBoundaryCategory.LineBreakLF]: 10,\n};\n\nfunction getCategoryBoundaryScore(category: CharBoundaryCategory): number {\n\treturn categoryScore[category];\n}\n\nfunction getCategory(charCode: number): CharBoundaryCategory {\n\tif (charCode === CharCode.LineFeed) {\n\t\treturn CharBoundaryCategory.LineBreakLF;\n\t} else if (charCode === CharCode.CarriageReturn) {\n\t\treturn CharBoundaryCategory.LineBreakCR;\n\t} else if (isSpace(charCode)) {\n\t\treturn CharBoundaryCategory.Space;\n\t} else if (charCode >= CharCode.a && charCode <= CharCode.z) {\n\t\treturn CharBoundaryCategory.WordLower;\n\t} else if (charCode >= CharCode.A && charCode <= CharCode.Z) {\n\t\treturn CharBoundaryCategory.WordUpper;\n\t} else if (charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9) {\n\t\treturn CharBoundaryCategory.WordNumber;\n\t} else if (charCode === -1) {\n\t\treturn CharBoundaryCategory.End;\n\t} else if (charCode === CharCode.Comma || charCode === CharCode.Semicolon) {\n\t\treturn CharBoundaryCategory.Separator;\n\t} else {\n\t\treturn CharBoundaryCategory.Other;\n\t}\n}\n\n// Binary search helpers\nfunction findLastIdxMonotonous<T>(array: T[], predicate: (item: T) => boolean): number {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid - 1;\n\t\t}\n\t}\n\treturn high;\n}\n\nfunction findLastMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tconst idx = findLastIdxMonotonous(array, predicate);\n\treturn idx >= 0 ? array[idx] : undefined;\n}\n\nfunction findFirstMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\tlow = mid + 1;\n\t\t}\n\t}\n\treturn low < array.length ? array[low] : undefined;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * A range of lines (1-based, end is exclusive).\n */\nexport class LineRange {\n\tconstructor(\n\t\tpublic readonly startLineNumber: number,\n\t\tpublic readonly endLineNumberExclusive: number\n\t) {\n\t\tif (startLineNumber > endLineNumberExclusive) {\n\t\t\tthrow new Error(`Invalid range: ${startLineNumber} > ${endLineNumberExclusive}`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumberExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endLineNumberExclusive - this.startLineNumber;\n\t}\n\n\tjoin(other: LineRange): LineRange {\n\t\treturn new LineRange(\n\t\t\tMath.min(this.startLineNumber, other.startLineNumber),\n\t\t\tMath.max(this.endLineNumberExclusive, other.endLineNumberExclusive)\n\t\t);\n\t}\n\n\tintersectsOrTouches(other: LineRange): boolean {\n\t\treturn this.startLineNumber <= other.endLineNumberExclusive\n\t\t\t&& other.startLineNumber <= this.endLineNumberExclusive;\n\t}\n\n\ttoOffsetRange(): OffsetRange {\n\t\treturn new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.startLineNumber}, ${this.endLineNumberExclusive})`;\n\t}\n}\n\n/**\n * A mapping between two ranges.\n */\nexport class RangeMapping {\n\tconstructor(\n\t\tpublic readonly originalRange: Range,\n\t\tpublic readonly modifiedRange: Range\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${rangeToString(this.originalRange)} <-> ${rangeToString(this.modifiedRange)}`;\n\t}\n\n\tstatic assertSorted(rangeMappings: RangeMapping[]): void {\n\t\tfor (let i = 1; i < rangeMappings.length; i++) {\n\t\t\tconst prev = rangeMappings[i - 1];\n\t\t\tconst cur = rangeMappings[i];\n\t\t\tif (!(prev.originalRange.endLineNumber <= cur.originalRange.startLineNumber ||\n\t\t\t\t(prev.originalRange.endLineNumber === cur.originalRange.startLineNumber && prev.originalRange.endColumn <= cur.originalRange.startColumn))) {\n\t\t\t\tthrow new Error('RangeMappings must be sorted');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction rangeToString(range: Range): string {\n\treturn `(${range.startLineNumber}:${range.startColumn})-(${range.endLineNumber}:${range.endColumn})`;\n}\n\n/**\n * A mapping between two line ranges.\n */\nexport class LineRangeMapping {\n\tconstructor(\n\t\tpublic readonly original: LineRange,\n\t\tpublic readonly modified: LineRange\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.original} <-> ${this.modified}`;\n\t}\n\n\t/**\n\t * This method assumes that the LineRangeMapping describes a valid diff!\n\t * I.e. if one range is empty, the other range cannot be the entire document.\n\t * It avoids various problems when the line range points to non-existing line-numbers.\n\t*/\n\ttoRangeMapping2(originalLines: string[], modifiedLines: string[]): RangeMapping {\n\t\tconst isValidLineNumber = (lineNumber: number, lines: string[]): boolean => {\n\t\t\treturn lineNumber >= 1 && lineNumber <= lines.length;\n\t\t};\n\n\t\tconst normalizePosition = (lineNumber: number, column: number, lines: string[]): Position => {\n\t\t\tif (lineNumber < 1) {\n\t\t\t\treturn new Position(1, 1);\n\t\t\t}\n\t\t\tif (lineNumber > lines.length) {\n\t\t\t\treturn new Position(lines.length, lines[lines.length - 1].length + 1);\n\t\t\t}\n\t\t\tconst line = lines[lineNumber - 1];\n\t\t\tif (column > line.length + 1) {\n\t\t\t\treturn new Position(lineNumber, line.length + 1);\n\t\t\t}\n\t\t\treturn new Position(lineNumber, column);\n\t\t};\n\n\t\tif (isValidLineNumber(this.original.endLineNumberExclusive, originalLines)\n\t\t\t&& isValidLineNumber(this.modified.endLineNumberExclusive, modifiedLines)) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tnew Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1),\n\t\t\t\tnew Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1),\n\t\t\t);\n\t\t}\n\n\t\tif (!this.original.isEmpty && !this.modified.isEmpty) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.original.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.modified.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, originalLines),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, modifiedLines),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Situation now: one range is empty and one range touches the last line and one range starts at line 1.\n\t\t// This shouldn't happen for valid diffs.\n\t\tthrow new Error('Invalid diff: cannot convert to range mapping');\n\t}\n}\n\n/**\n * A detailed mapping between two line ranges, including inner changes.\n */\nexport class DetailedLineRangeMapping extends LineRangeMapping {\n\tconstructor(\n\t\toriginal: LineRange,\n\t\tmodified: LineRange,\n\t\tpublic readonly innerChanges: RangeMapping[] | undefined\n\t) {\n\t\tsuper(original, modified);\n\t}\n}\n\n/**\n * Result of a lines diff computation.\n */\nexport class LinesDiff {\n\tconstructor(\n\t\tpublic readonly changes: DetailedLineRangeMapping[],\n\t\tpublic readonly moves: MovedText[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * Represents text that was moved from one location to another.\n */\nexport class MovedText {\n\tconstructor(\n\t\tpublic readonly lineRangeMapping: LineRangeMapping,\n\t\tpublic readonly changes: DetailedLineRangeMapping[]\n\t) {}\n}\n\n/**\n * Helper to convert from range mappings to line range mappings.\n */\nexport function lineRangeMappingFromRangeMappings(\n\talignments: RangeMapping[],\n\toriginalLines: string[],\n\tmodifiedLines: string[],\n\tdontAssertStartLine: boolean = false\n): DetailedLineRangeMapping[] {\n\tconst changes: DetailedLineRangeMapping[] = [];\n\tfor (const g of groupAdjacentBy(\n\t\talignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)),\n\t\t(a1, a2) =>\n\t\t\ta1.original.intersectsOrTouches(a2.original)\n\t\t\t|| a1.modified.intersectsOrTouches(a2.modified)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new DetailedLineRangeMapping(\n\t\t\tfirst.original.join(last.original),\n\t\t\tfirst.modified.join(last.modified),\n\t\t\tg.map(a => a.innerChanges![0])\n\t\t));\n\t}\n\n\tif (!dontAssertStartLine) {\n\t\t// Assert that the changes are sorted and non-overlapping (but don't throw - just log in debug)\n\t\tfor (let i = 1; i < changes.length; i++) {\n\t\t\tconst prev = changes[i - 1];\n\t\t\tconst cur = changes[i];\n\t\t\tif (prev.original.endLineNumberExclusive > cur.original.startLineNumber ||\n\t\t\t\tprev.modified.endLineNumberExclusive > cur.modified.startLineNumber) {\n\t\t\t\t// Silently skip validation issue - may be expected in some edge cases\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes;\n}\n\nfunction getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): DetailedLineRangeMapping {\n\tlet lineStartDelta = 0;\n\tlet lineEndDelta = 0;\n\n\t// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.\n\n\t// original: ]xxx \\n <- this line is not modified\n\t// modified: ]xx \\n\n\tif (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1\n\t\t&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber\n\t\t&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineEndDelta = -1;\n\t}\n\n\t// original: xxx[ \\n <- this line is not modified\n\t// modified: xxx[ \\n\n\tif (rangeMapping.modifiedRange.startColumn - 1 >= (modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startColumn - 1 >= (originalLines[rangeMapping.originalRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta\n\t\t&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineStartDelta = 1;\n\t}\n\n\tconst originalLineRange = new LineRange(\n\t\trangeMapping.originalRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.originalRange.endLineNumber + 1 + lineEndDelta\n\t);\n\tconst modifiedLineRange = new LineRange(\n\t\trangeMapping.modifiedRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta\n\t);\n\n\treturn new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);\n}\n\nfunction* groupAdjacentBy<T>(items: Iterable<T>, shouldBeGrouped: (item1: T, item2: T) => boolean): Iterable<T[]> {\n\tlet currentGroup: T[] | undefined;\n\tlet last: T | undefined;\n\tfor (const item of items) {\n\t\tif (last !== undefined && shouldBeGrouped(last, item)) {\n\t\t\tcurrentGroup!.push(item);\n\t\t} else {\n\t\t\tif (currentGroup) {\n\t\t\t\tyield currentGroup;\n\t\t\t}\n\t\t\tcurrentGroup = [item];\n\t\t}\n\t\tlast = item;\n\t}\n\tif (currentGroup) {\n\t\tyield currentGroup;\n\t}\n}\n\n/**\n * Interface for text that provides lines.\n */\nexport interface IText {\n\treadonly lineCount: number;\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport class ArrayText implements IText {\n\tconstructor(public readonly lines: string[]) {}\n\n\tget lineCount(): number {\n\t\treturn this.lines.length;\n\t}\n\n\tgetLineContent(lineNumber: number): string {\n\t\treturn this.lines[lineNumber - 1];\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { SequenceDiff, ITimeout, InfiniteTimeout, DateTimeout } from '../algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from '../algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from '../algorithms/myersDiffAlgorithm.js';\nimport {\n\toptimizeSequenceDiffs,\n\textendDiffsToEntireWordIfAppropriate,\n\tremoveShortMatches,\n\tremoveVeryShortMatchingLinesBetweenDiffs,\n\tremoveVeryShortMatchingTextBetweenLongDiffs,\n} from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence, Range } from './linesSliceCharSequence.js';\nimport {\n\tLineRange,\n\tRangeMapping,\n\tLineRangeMapping,\n\tDetailedLineRangeMapping,\n\tLinesDiff,\n\tArrayText,\n\tlineRangeMappingFromRangeMappings,\n} from './rangeMapping.js';\n\nexport { DateTimeout, InfiniteTimeout, ITimeout } from '../algorithms/diffAlgorithm.js';\nexport { LineRange, RangeMapping, LineRangeMapping, DetailedLineRangeMapping, LinesDiff } from './rangeMapping.js';\nexport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * Options for the lines diff computer.\n */\nexport interface ILinesDiffComputerOptions {\n\t/**\n\t * Maximum computation time in milliseconds. 0 means no timeout.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * Whether to ignore leading and trailing whitespace.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * Whether to compute moved text detection.\n\t */\n\tcomputeMoves: boolean;\n\n\t/**\n\t * Whether to extend diffs to subword boundaries.\n\t */\n\textendToSubwords: boolean;\n}\n\n/**\n * The main diff computer that computes detailed line diffs.\n */\nexport class DefaultLinesDiffComputer {\n\tprivate readonly _dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly _myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\t// Handle identical single line\n\t\tif (originalLines.length <= 1 && arraysEqual(originalLines, modifiedLines)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\t// Handle empty single line - treat as full replacement\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\t// Create perfect hash for lines (trimmed)\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\t// Choose algorithm based on size\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this._dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\n\t\t// Apply heuristics\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original.lines, modified.lines);\n\n\t\t// TODO: Compute moves if options.computeMoves is true\n\t\tconst moves: never[] = [];\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate _refineDiff(\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\tdiff: SequenceDiff,\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions\n\t): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this._dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this._myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet diffs = diffResult.diffs;\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","/* @ts-self-types=\"./diff_wasm.d.ts\" */\n\n/**\n * Compute a diff between two texts.\n *\n * # Arguments\n * * `original` - The original text (lines separated by newlines)\n * * `modified` - The modified text (lines separated by newlines)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {string} original\n * @param {string} modified\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiff(original, modified, options) {\n const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(modified, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.computeDiff(ptr0, len0, ptr1, len1, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Compute a diff between two arrays of lines.\n *\n * # Arguments\n * * `original_lines` - The original lines (as a JavaScript array of strings)\n * * `modified_lines` - The modified lines (as a JavaScript array of strings)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {any} original_lines\n * @param {any} modified_lines\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiffLines(original_lines, modified_lines, options) {\n const ret = wasm.computeDiffLines(original_lines, modified_lines, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Initialize panic hook for better error messages in the browser console.\n */\nexport function init() {\n wasm.init();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_fdd633d4bb5dd76a: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Number_c4bdf66bb78f7977: function(arg0) {\n const ret = Number(arg0);\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_d9e915702856f831: function(arg0, arg1) {\n const v = arg1;\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_edaed31a367ce1bd: function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_8a447059637473e2: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_4990f46af709e33c: function(arg0, arg1) {\n const ret = arg0 in arg1;\n return ret;\n },\n __wbg___wbindgen_is_bigint_90b5ccfe67c78460: function(arg0) {\n const ret = typeof(arg0) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_acc5528be2b923f2: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_6d937fbfb6478470: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_object_0beba4a1980d3eea: function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_undefined_721f8decd50c87a3: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_4e8c38722cb8ff51: function(arg0, arg1) {\n const ret = arg0 === arg1;\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_4b9aba9e5b3c4582: function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n },\n __wbg___wbindgen_number_get_1cc01dd708740256: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_71bb4348194e31f0: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_ea4887a5f8f9a9db: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_8e98ed2f3c86c4b5: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_done_b62d4a7d2286852a: function(arg0) {\n const ret = arg0.done;\n return ret;\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_9a29be2cb383ed9a: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_unchecked_54a4374c38e08460: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = arg0[arg1];\n return ret;\n },\n __wbg_instanceof_ArrayBuffer_2a7bb09fee70c2da: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_f080092dc70f5d58: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_145a34fd0a38d37b: function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n },\n __wbg_isSafeInteger_a3389a198582f5f6: function(arg0) {\n const ret = Number.isSafeInteger(arg0);\n return ret;\n },\n __wbg_iterator_cc47ba25a2be735a: function() {\n const ret = Symbol.iterator;\n return ret;\n },\n __wbg_length_589238bdcf171f0e: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_length_c6054974c0a6cdb9: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_2e117a478906f062: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_36e147a8ced3c6e0: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_new_81880fb5002cb255: function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n },\n __wbg_next_0c4066e251d2eff9: function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments); },\n __wbg_next_402fa10b59ab20c3: function(arg0) {\n const ret = arg0.next;\n return ret;\n },\n __wbg_now_d2e0afbad4edbe82: function() {\n const ret = Date.now();\n return ret;\n },\n __wbg_prototypesetcall_d721637c7ca66eb8: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_dc601f4a69da0bc2: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_49f783bb59765962: function(arg0) {\n const ret = arg0.value;\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./diff_wasm_bg.js\": import0,\n };\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('diff_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","/**\n * WASM module loader.\n *\n * Handles async initialization of the WASM module.\n */\n\nimport type { WasmModule } from './types.js';\n// @ts-ignore -- generated at build time by `npm run build:wasm` (wasm-pack --target web).\nimport * as wasm from '../../../out/pkg/diff_wasm.js';\n\nlet wasmModule: WasmModule | null = null;\nlet initPromise: Promise<WasmModule> | null = null;\n\n/**\n * Initialize the WASM module.\n *\n * This must be called before using any WASM-based diff functions.\n * It's safe to call multiple times — subsequent calls are no-ops.\n *\n * @returns Promise that resolves when WASM is ready\n */\nexport async function initWasm(): Promise<WasmModule> {\n\tif (wasmModule) {\n\t\treturn wasmModule;\n\t}\n\tif (initPromise) {\n\t\treturn initPromise;\n\t}\n\n\tinitPromise = (async () => {\n\t\tconst wasmUrl = new URL('../../../out/pkg/diff_wasm_bg.wasm', import.meta.url);\n\t\t// Node's undici fetch does not support file:// URLs, so read bytes ourselves.\n\t\tlet source: BufferSource | URL = wasmUrl;\n\t\tif (typeof process !== 'undefined' && process.versions?.node) {\n\t\t\tconst { readFile } = await import('node:fs/promises');\n\t\t\tsource = await readFile(wasmUrl);\n\t\t}\n\t\tawait wasm.default({ module_or_path: source });\n\t\twasm.init();\n\t\twasmModule = wasm as unknown as WasmModule;\n\t\treturn wasmModule;\n\t})();\n\n\treturn initPromise;\n}\n\n/**\n * Get the WASM module synchronously.\n * \n * @throws Error if WASM hasn't been initialized yet\n * @returns The WASM module\n */\nexport function getWasm(): WasmModule {\n\tif (!wasmModule) {\n\t\tthrow new Error('WASM not initialized. Call initWasm() first and await it.');\n\t}\n\treturn wasmModule;\n}\n\n/**\n * Check if the WASM module is initialized.\n */\nexport function isWasmInitialized(): boolean {\n\treturn wasmModule !== null;\n}\n\n/**\n * Reset the WASM module (useful for testing).\n * @internal\n */\nexport function resetWasm(): void {\n\twasmModule = null;\n\tinitPromise = null;\n}\n","/**\n * Conversions between `LinesDiff` (in-memory class instances) and\n * `WireLinesDiff` (plain JSON-friendly shape used on the worker boundary).\n */\n\nimport {\n LinesDiff,\n DetailedLineRangeMapping,\n LineRange,\n LineRangeMapping,\n MovedText,\n RangeMapping,\n} from '../defaultLinesDiffComputer/rangeMapping.js';\nimport { Range } from '../defaultLinesDiffComputer/linesSliceCharSequence.js';\nimport type {\n WasmDetailedLineRangeMapping,\n WasmRangeMapping,\n} from '../wasm/types.js';\nimport type { WireLinesDiff, WireMovedText } from './protocol.js';\n\nexport function linesDiffToWire(diff: LinesDiff): WireLinesDiff {\n return {\n changes: diff.changes.map(detailedToWire),\n moves: diff.moves.map(moveToWire),\n hitTimeout: diff.hitTimeout,\n };\n}\n\nexport function wireToLinesDiff(wire: WireLinesDiff): LinesDiff {\n const changes = wire.changes.map(wireToDetailed);\n const moves = wire.moves.map(wireToMove);\n return new LinesDiff(changes, moves, wire.hitTimeout);\n}\n\nfunction detailedToWire(m: DetailedLineRangeMapping): WasmDetailedLineRangeMapping {\n return {\n original: {\n startLineNumber: m.original.startLineNumber,\n endLineNumberExclusive: m.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.modified.startLineNumber,\n endLineNumberExclusive: m.modified.endLineNumberExclusive,\n },\n innerChanges: m.innerChanges ? m.innerChanges.map(rangeMappingToWire) : null,\n };\n}\n\nfunction wireToDetailed(m: WasmDetailedLineRangeMapping): DetailedLineRangeMapping {\n const inner = m.innerChanges?.map(wireToRangeMapping);\n return new DetailedLineRangeMapping(\n new LineRange(m.original.startLineNumber, m.original.endLineNumberExclusive),\n new LineRange(m.modified.startLineNumber, m.modified.endLineNumberExclusive),\n inner,\n );\n}\n\nfunction rangeMappingToWire(rm: RangeMapping): WasmRangeMapping {\n return {\n originalStartLine: rm.originalRange.startLineNumber,\n originalStartColumn: rm.originalRange.startColumn,\n originalEndLine: rm.originalRange.endLineNumber,\n originalEndColumn: rm.originalRange.endColumn,\n modifiedStartLine: rm.modifiedRange.startLineNumber,\n modifiedStartColumn: rm.modifiedRange.startColumn,\n modifiedEndLine: rm.modifiedRange.endLineNumber,\n modifiedEndColumn: rm.modifiedRange.endColumn,\n };\n}\n\nfunction wireToRangeMapping(rm: WasmRangeMapping): RangeMapping {\n return new RangeMapping(\n new Range(rm.originalStartLine, rm.originalStartColumn, rm.originalEndLine, rm.originalEndColumn),\n new Range(rm.modifiedStartLine, rm.modifiedStartColumn, rm.modifiedEndLine, rm.modifiedEndColumn),\n );\n}\n\nfunction moveToWire(m: MovedText): WireMovedText {\n return {\n lineRangeMapping: {\n original: {\n startLineNumber: m.lineRangeMapping.original.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.lineRangeMapping.modified.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.modified.endLineNumberExclusive,\n },\n },\n changes: m.changes.map(detailedToWire),\n };\n}\n\nfunction wireToMove(m: WireMovedText): MovedText {\n const lrm = new LineRangeMapping(\n new LineRange(m.lineRangeMapping.original.startLineNumber, m.lineRangeMapping.original.endLineNumberExclusive),\n new LineRange(m.lineRangeMapping.modified.startLineNumber, m.lineRangeMapping.modified.endLineNumberExclusive),\n );\n return new MovedText(lrm, m.changes.map(wireToDetailed));\n}\n"],"names":["CharCode","wasm.default","wasm.init","wasm"],"mappings":";;;;AAAA;;AAEG;MACU,WAAW,CAAA;AAUN,IAAA,KAAA;AACA,IAAA,YAAA;IAVV,OAAO,QAAQ,CAAC,MAAc,EAAA;AACpC,QAAA,OAAO,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IAClC;AAEO,IAAA,OAAO,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAA;QAC3D,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9C;IAEA,WAAA,CACiB,KAAa,EACb,YAAoB,EAAA;QADpB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,YAAY,GAAZ,YAAY;AAE5B,QAAA,IAAI,KAAK,GAAG,YAAY,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,CAAG,CAAC;QAC9D;IACD;AAEA,IAAA,IAAI,OAAO,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY;IACxC;AAEA,IAAA,IAAI,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;IACtC;AAEA,IAAA,KAAK,CAAC,MAAc,EAAA;AACnB,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IACxE;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;IAC/D;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACtB,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC/D;AAEA,IAAA,MAAM,CAAC,KAAkB,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;IAC9E;AAEA,IAAA,aAAa,CAAC,KAAkB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;IAC5E;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;QACtB,OAAO,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY;IAC1D;AAEA,IAAA,IAAI,CAAC,KAAkB,EAAA;AACtB,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3G;AAEA,IAAA,SAAS,CAAC,KAAkB,EAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;AAC3D,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE;AACjB,YAAA,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;QACnC;AACA,QAAA,OAAO,SAAS;IACjB;AAEA,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;QAC3D,OAAO,KAAK,GAAG,GAAG;IACnB;AAEA,IAAA,mBAAmB,CAAC,KAAkB,EAAA;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;QAC3D,OAAO,KAAK,IAAI,GAAG;IACpB;AAEA,IAAA,KAAK,CAAI,GAAiB,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC;IAChD;IAEA,QAAQ,GAAA;QACP,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAA,CAAA,CAAG;IAC/C;AACA;;MCvDY,eAAe,CAAA;AACpB,IAAA,OAAgB,QAAQ,GAAG,IAAI,eAAe,EAAE;IAEvD,OAAO,GAAA;AACN,QAAA,OAAO,IAAI;IACZ;;MAGY,WAAW,CAAA;AAIH,IAAA,OAAA;AAHH,IAAA,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;IAC/B,KAAK,GAAG,IAAI;AAEpB,IAAA,WAAA,CAAoB,OAAe,EAAA;QAAf,IAAA,CAAA,OAAO,GAAP,OAAO;AAC1B,QAAA,IAAI,OAAO,IAAI,CAAC,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC;QAC5C;IACD;IAEA,OAAO,GAAA;AACN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AACxD,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACnB;QACA,OAAO,IAAI,CAAC,KAAK;IAClB;AACA;AAED;;AAEG;MACU,UAAU,CAAA;AAKL,IAAA,OAAA;AACA,IAAA,OAAA;IALV,OAAgB,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,IAAA,OAAgB,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;IAE7F,WAAA,CACiB,OAAe,EACf,OAAe,EAAA;QADf,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACrB;IAEH,QAAQ,GAAA;QACP,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,QAAQ,IAAI,CAAC,OAAO,CAAA,CAAE;IAC7C;AAEA,IAAA,KAAK,CAAC,MAAc,EAAA;AACnB,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;AACA,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACpE;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;IACxE;;AAGD;;AAEG;MACU,YAAY,CAAA;AAgCP,IAAA,SAAA;AACA,IAAA,SAAA;AAhCV,IAAA,OAAO,MAAM,CAAC,aAA6B,EAAE,UAAkB,EAAA;QACrE,MAAM,MAAM,GAAmB,EAAE;QACjC,eAAe,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACvC,YAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CACvC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,GAAG,UAAU,CAAC,IAAI,EAC1C,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,IAAI,UAAU,CAAC,CAC1H,CAAC;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACd;AAEO,IAAA,OAAO,eAAe,CAAC,KAAiB,EAAE,YAAwB,EAAA;QACxE,OAAO,IAAI,YAAY,CACtB,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EACpD,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CACpD;IACF;IAEO,OAAO,YAAY,CAAC,aAA6B,EAAA;QACvD,IAAI,IAAI,GAA6B,SAAS;AAC9C,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;YAChC,IAAI,IAAI,EAAE;gBACT,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAChH,oBAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;gBACjD;YACD;YACA,IAAI,GAAG,GAAG;QACX;IACD;IAEA,WAAA,CACiB,SAAsB,EACtB,SAAsB,EAAA;QADtB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,SAAS,GAAT,SAAS;IACvB;IAEH,IAAI,GAAA;QACH,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;IACxD;IAEA,QAAQ,GAAA;QACP,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,SAAS,CAAA,CAAE;IACjD;AAEA,IAAA,IAAI,CAAC,KAAmB,EAAA;QACvB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpG;AAEA,IAAA,KAAK,CAAC,MAAc,EAAA;AACnB,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;QACA,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpF;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACxB,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;QACA,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9F;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACtB,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,IAAI;QACZ;QACA,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1F;AAEA,IAAA,mBAAmB,CAAC,KAAmB,EAAA;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC;IAClH;AAEA,IAAA,SAAS,CAAC,KAAmB,EAAA;AAC5B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;AACpD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;AACpD,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AACf,YAAA,OAAO,SAAS;QACjB;AACA,QAAA,OAAO,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC;IAChC;IAEA,SAAS,GAAA;AACR,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAClE;IAEA,gBAAgB,GAAA;AACf,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;IAChF;AACA;AAED;;AAEG;MACU,mBAAmB,CAAA;AAUd,IAAA,KAAA;AACA,IAAA,UAAA;AAVjB,IAAA,OAAO,OAAO,CAAC,IAAe,EAAE,IAAe,EAAA;AAC9C,QAAA,OAAO,IAAI,mBAAmB,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAChI;AAEA,IAAA,OAAO,eAAe,CAAC,IAAe,EAAE,IAAe,EAAA;AACtD,QAAA,OAAO,IAAI,mBAAmB,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC/H;IAEA,WAAA,CACiB,KAAqB,EACrB,UAAmB,EAAA;QADnB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;IACxB;AACH;AASD;AACA,SAAS,eAAe,CAAI,KAAU,EAAE,QAA+D,EAAA;IACtG,IAAI,IAAI,GAAkB,SAAS;AACnC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACzB,QAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACpB,IAAI,GAAG,IAAI;IACZ;AACA,IAAA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;AAC1B;;ACjNA;;AAEG;MACU,OAAO,CAAA;AAIF,IAAA,KAAA;AACA,IAAA,MAAA;IAJA,KAAK,GAAQ,EAAE;IAEhC,WAAA,CACiB,KAAa,EACb,MAAc,EAAA;QADd,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,MAAM,GAAN,MAAM;QAEtB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAI,KAAK,GAAG,MAAM,CAAC;IAC1C;IAEA,GAAG,CAAC,CAAS,EAAE,CAAS,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACtC;AAEA,IAAA,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,KAAQ,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK;IACvC;AACA;AAED;;;AAGG;MACU,yBAAyB,CAAA;IACrC,OAAO,CACN,SAAoB,EACpB,SAAoB,EACpB,UAAoB,eAAe,CAAC,QAAQ,EAC5C,aAA4D,EAAA;AAE5D,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACrD,OAAO,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;QACzD;AAEA;;;AAGG;AACH,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,CAAS,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;AAC1E,QAAA,MAAM,UAAU,GAAG,IAAI,OAAO,CAAS,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;AAC1E,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAS,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;;AAGvE,QAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC7C,YAAA,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;AAC7C,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;oBACvB,OAAO,mBAAmB,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC;gBACjE;gBAEA,MAAM,aAAa,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;gBAC/D,MAAM,WAAW,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAE7D,gBAAA,IAAI,gBAAwB;AAC5B,gBAAA,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;oBAC1D,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;wBACzB,gBAAgB,GAAG,CAAC;oBACrB;yBAAO;AACN,wBAAA,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAClD;oBACA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;;AAE7D,wBAAA,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;oBAChD;AACA,oBAAA,gBAAgB,KAAK,aAAa,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBAChE;qBAAO;oBACN,gBAAgB,GAAG,EAAE;gBACtB;AAEA,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC;AAEvE,gBAAA,IAAI,QAAQ,KAAK,gBAAgB,EAAE;;AAElC,oBAAA,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;oBAClE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;oBAChC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1B;AAAO,qBAAA,IAAI,QAAQ,KAAK,aAAa,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1B;AAAO,qBAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;oBACpC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1B;gBAEA,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC;YACjC;QACD;;QAGA,MAAM,MAAM,GAAmB,EAAE;AACjC,QAAA,IAAI,iBAAiB,GAAW,SAAS,CAAC,MAAM;AAChD,QAAA,IAAI,iBAAiB,GAAW,SAAS,CAAC,MAAM;AAEhD,QAAA,SAAS,iCAAiC,CAAC,EAAU,EAAE,EAAU,EAAA;AAChE,YAAA,IAAI,EAAE,GAAG,CAAC,KAAK,iBAAiB,IAAI,EAAE,GAAG,CAAC,KAAK,iBAAiB,EAAE;gBACjE,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAC3B,IAAI,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAC1C,IAAI,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAC1C,CAAC;YACH;YACA,iBAAiB,GAAG,EAAE;YACtB,iBAAiB,GAAG,EAAE;QACvB;AAEA,QAAA,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AAC7B,QAAA,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAC1B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;AACjC,gBAAA,iCAAiC,CAAC,EAAE,EAAE,EAAE,CAAC;AACzC,gBAAA,EAAE,EAAE;AACJ,gBAAA,EAAE,EAAE;YACL;iBAAO;gBACN,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE;AACjC,oBAAA,EAAE,EAAE;gBACL;qBAAO;AACN,oBAAA,EAAE,EAAE;gBACL;YACD;QACD;AACA,QAAA,iCAAiC,CAAC,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,EAAE;AAChB,QAAA,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;IAC9C;AACA;;AC7HD;;AAEG;MACU,kBAAkB,CAAA;IAC9B,OAAO,CAAC,IAAe,EAAE,IAAe,EAAE,OAAA,GAAoB,eAAe,CAAC,QAAQ,EAAA;;AAErF,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3C,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC/C;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,QAAA,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAA;YAC3C,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACvF,gBAAA,CAAC,EAAE;AACH,gBAAA,CAAC,EAAE;YACJ;AACA,YAAA,OAAO,CAAC;QACT;QAEA,IAAI,CAAC,GAAG,CAAC;;;;AAIT,QAAA,MAAM,CAAC,GAAG,IAAI,cAAc,EAAE;AAC9B,QAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9B,QAAA,MAAM,KAAK,GAAG,IAAI,wBAAwB,EAAoB;AAC9D,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,GAAG,CAAC;AAET,QAAA,IAAI,EAAE,OAAO,IAAI,EAAE;AAClB,YAAA,CAAC,EAAE;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;gBACvB,OAAO,mBAAmB,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;YACvD;;AAEA,YAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,YAAA,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;;gBAE7C,MAAM,cAAc,GAAG,CAAC,KAAK,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5D,MAAM,eAAe,GAAG,CAAC,KAAK,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACjE,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1E,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACf,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;oBACvC;gBACD;gBACA,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AACpC,gBAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;gBACjB,MAAM,QAAQ,GAAG,CAAC,KAAK,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3E,gBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAEnF,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;AAC7D,oBAAA,MAAM,IAAI;gBACX;YACD;QACD;QAEA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,MAAM,MAAM,GAAmB,EAAE;AACjC,QAAA,IAAI,iBAAiB,GAAW,IAAI,CAAC,MAAM;AAC3C,QAAA,IAAI,iBAAiB,GAAW,IAAI,CAAC,MAAM;QAE3C,OAAO,IAAI,EAAE;AACZ,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YAE5C,IAAI,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,EAAE;gBAC7D,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAC3B,IAAI,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,EACxC,IAAI,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CACxC,CAAC;YACH;YACA,IAAI,CAAC,IAAI,EAAE;gBACV;YACD;AACA,YAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC;AAC1B,YAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC;AAE1B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI;QACjB;QAEA,MAAM,CAAC,OAAO,EAAE;AAChB,QAAA,OAAO,IAAI,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC;IAC9C;AACA;AAED,MAAM,SAAS,CAAA;AAEG,IAAA,IAAA;AACA,IAAA,CAAA;AACA,IAAA,CAAA;AACA,IAAA,MAAA;AAJjB,IAAA,WAAA,CACiB,IAAsB,EACtB,CAAS,EACT,CAAS,EACT,MAAc,EAAA;QAHd,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,CAAC,GAAD,CAAC;QACD,IAAA,CAAA,CAAC,GAAD,CAAC;QACD,IAAA,CAAA,MAAM,GAAN,MAAM;IACnB;AACJ;AAED;;AAEG;AACH,MAAM,cAAc,CAAA;AACX,IAAA,WAAW,GAAe,IAAI,UAAU,CAAC,EAAE,CAAC;AAC5C,IAAA,WAAW,GAAe,IAAI,UAAU,CAAC,EAAE,CAAC;AAEpD,IAAA,GAAG,CAAC,GAAW,EAAA;AACd,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;AACZ,YAAA,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACd,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7B;aAAO;AACN,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7B;IACD;IAEA,GAAG,CAAC,GAAW,EAAE,KAAa,EAAA;AAC7B,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;AACZ,YAAA,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACd,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;AAC5B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1B;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;QAC9B;aAAO;YACN,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;AAC5B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1B;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;QAC9B;IACD;AACA;AAED;;AAEG;AACH,MAAM,wBAAwB,CAAA;IACZ,WAAW,GAAQ,EAAE;IACrB,WAAW,GAAQ,EAAE;AAEtC,IAAA,GAAG,CAAC,GAAW,EAAA;AACd,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;AACZ,YAAA,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACd,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7B;aAAO;AACN,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7B;IACD;IAEA,GAAG,CAAC,GAAW,EAAE,KAAQ,EAAA;AACxB,QAAA,IAAI,GAAG,GAAG,CAAC,EAAE;AACZ,YAAA,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;QAC9B;aAAO;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;QAC9B;IACD;AACA;;SC7Je,qBAAqB,CAAC,SAAoB,EAAE,SAAoB,EAAE,aAA6B,EAAA;IAC9G,IAAI,MAAM,GAAG,aAAa;IAC1B,MAAM,GAAG,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;;IAElE,MAAM,GAAG,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAClE,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AACzD,IAAA,OAAO,MAAM;AACd;AAEA;;;;;;;;;;;AAWG;AACH,SAAS,2BAA2B,CAAC,SAAoB,EAAE,SAAoB,EAAE,aAA6B,EAAA;AAC7G,IAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,QAAA,OAAO,aAAa;IACrB;IAEA,MAAM,MAAM,GAAmB,EAAE;IACjC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;;AAG7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;AAE1B,QAAA,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;AACnD,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,YAAY;AACtE,YAAA,IAAI,CAAC;YACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,IACC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;oBACtG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;oBACxG;gBACD;YACD;AACA,YAAA,CAAC,EAAE;AAEH,YAAA,IAAI,CAAC,KAAK,MAAM,EAAE;;gBAEjB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,YAAY,CAC3C,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,EAChF,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,CAChF;gBACD;YACD;YAEA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACjB;IAEA,MAAM,OAAO,GAAmB,EAAE;;AAElC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE;AACnD,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY;AACtE,YAAA,IAAI,CAAC;YACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5B,IACC,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC;oBACnF,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,EAClF;oBACD;gBACD;YACD;AAEA,YAAA,IAAI,CAAC,KAAK,MAAM,EAAE;;gBAEjB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,YAAY,CAC/B,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,EAChF,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAChF;gBACD;YACD;AAEA,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACV,gBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACnB;QACD;AAEA,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC;AAEA,IAAA,OAAO,OAAO;AACf;AAEA,SAAS,kBAAkB,CAAC,SAAoB,EAAE,SAAoB,EAAE,aAA6B,EAAA;IACpG,IAAI,CAAC,SAAS,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;AAC/D,QAAA,OAAO,aAAa;IACrB;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AAC3D,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;QAC7B,MAAM,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;AAElF,QAAA,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AACtJ,QAAA,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AAEtJ,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC3B,YAAA,aAAa,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC;QACzG;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAClC,aAAa,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,IAAI,EAAE;QACvH;IACD;AAEA,IAAA,OAAO,aAAa;AACrB;AAEA,SAAS,yBAAyB,CAAC,IAAkB,EAAE,SAAoB,EAAE,SAAoB,EAAE,cAA2B,EAAE,cAA2B,EAAA;AAC1J,IAAA,MAAM,aAAa,GAAG,GAAG,CAAC;IAE1B,IAAI,WAAW,GAAG,CAAC;IACnB,OACC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,IAAI,cAAc,CAAC,KAAK;QAC1D,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,IAAI,cAAc,CAAC,KAAK;QAC1D,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,WAAW,GAAG,aAAa,EACtI;AACD,QAAA,WAAW,EAAE;IACd;AACA,IAAA,WAAW,EAAE;IAEb,IAAI,UAAU,GAAG,CAAC;IAClB,OACC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC,YAAY;QAC/D,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC,YAAY;QACtE,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC,IAAI,UAAU,GAAG,aAAa,EACnI;AACD,QAAA,UAAU,EAAE;IACb;IAEA,IAAI,WAAW,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE;AAC1C,QAAA,OAAO,IAAI;IACZ;IAEA,IAAI,SAAS,GAAG,CAAC;AACjB,IAAA,IAAI,SAAS,GAAG,EAAE;;AAElB,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK;QACpD,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,KAAK;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK;QAE/C,MAAM,KAAK,GAAG,SAAS,CAAC,gBAAiB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,gBAAiB,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,gBAAiB,CAAC,sBAAsB,CAAC;AAC1J,QAAA,IAAI,KAAK,GAAG,SAAS,EAAE;YACtB,SAAS,GAAG,KAAK;YACjB,SAAS,GAAG,KAAK;QAClB;IACD;AAEA,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7B;SAEgB,kBAAkB,CAAC,SAAoB,EAAE,SAAoB,EAAE,aAA6B,EAAA;IAC3G,MAAM,MAAM,GAAmB,EAAE;AACjC,IAAA,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACV,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACd;QACD;AAEA,QAAA,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,CAAC,EAAE;AACjH,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjH;aAAO;AACN,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;IACD;AAEA,IAAA,OAAO,MAAM;AACd;AAEM,SAAU,oCAAoC,CACnD,SAAiC,EACjC,SAAiC,EACjC,aAA6B,EAC7B,UAAiF,EACjF,KAAA,GAAiB,KAAK,EAAA;AAEtB,IAAA,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC;IAE1E,MAAM,UAAU,GAAmB,EAAE;IAErC,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpC,IAAA,SAAS,QAAQ,CAAC,IAAgB,EAAE,YAA0B,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;YACzE;QACD;QAEA,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;YACf;QACD;QACA,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAE;AAE5C,QAAA,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM;AAC5C,QAAA,IAAI,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM;AAE5C,QAAA,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACnG,IAAI,CAAC,UAAU,EAAE;gBAChB;YACD;AAEA,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACtD,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACtD,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,EAAG,EAAE,EAAG,CAAC;YACpC,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAE;AAErC,YAAA,WAAW,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM;AAC1C,YAAA,WAAW,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM;AAE1C,YAAA,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEb,YAAA,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;gBAC5D,aAAa,CAAC,KAAK,EAAE;YACtB;iBAAO;gBACN;YACD;QACD;AAEA,QAAA,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;AACpK,YAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB;AAEA,QAAA,SAAS,GAAG,CAAC,CAAC,gBAAgB,EAAE;IACjC;AAEA,IAAA,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAG;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAC3B;QACD;QACA,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC;AAChC,QAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;IAClD;IAEA,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE,UAAU,CAAC;AAC5D,IAAA,OAAO,MAAM;AACd;AAEA,SAAS,kBAAkB,CAAC,cAA8B,EAAE,cAA8B,EAAA;IACzF,MAAM,MAAM,GAAmB,EAAE;AAEjC,IAAA,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,QAAA,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7B,QAAA,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,IAAkB;AACtB,QAAA,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/D,YAAA,IAAI,GAAG,cAAc,CAAC,KAAK,EAAG;QAC/B;aAAO;AACN,YAAA,IAAI,GAAG,cAAc,CAAC,KAAK,EAAG;QAC/B;QAEA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAClG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACjE;aAAO;AACN,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAClB;IACD;AAEA,IAAA,OAAO,MAAM;AACd;SAEgB,wCAAwC,CAAC,SAAuB,EAAE,UAAwB,EAAE,aAA6B,EAAA;IACxI,IAAI,KAAK,GAAG,aAAa;AACzB,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,KAAK;IACb;IAEA,IAAI,OAAO,GAAG,CAAC;AACf,IAAA,IAAI,YAAqB;AACzB,IAAA,GAAG;QACF,YAAY,GAAG,KAAK;QAEpB,MAAM,MAAM,GAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,YAAA,SAAS,eAAe,CAAC,MAAoB,EAAE,KAAmB,EAAA;AACjE,gBAAA,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC9F,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;gBACvD,MAAM,sBAAsB,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/D,gBAAA,IAAI,sBAAsB,CAAC,MAAM,IAAI;AACjC,wBAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AACnH,oBAAA,OAAO,IAAI;gBACZ;AACA,gBAAA,OAAO,KAAK;YACb;YAEA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC;YACnD,IAAI,UAAU,EAAE;gBACf,YAAY,GAAG,IAAI;gBACnB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChE;iBAAO;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB;QACD;QAEA,KAAK,GAAG,MAAM;AACf,IAAA,CAAC,QAAQ,OAAO,EAAE,GAAG,EAAE,IAAI,YAAY;AAEvC,IAAA,OAAO,KAAK;AACb;SAEgB,2CAA2C,CAAC,SAAiC,EAAE,SAAiC,EAAE,aAA6B,EAAA;IAC9J,IAAI,KAAK,GAAG,aAAa;AACzB,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,KAAK;IACb;IAEA,IAAI,OAAO,GAAG,CAAC;AACf,IAAA,IAAI,YAAqB;AACzB,IAAA,GAAG;QACF,YAAY,GAAG,KAAK;QAEpB,MAAM,MAAM,GAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,YAAA,SAAS,eAAe,CAAC,MAAoB,EAAE,KAAmB,EAAA;AACjE,gBAAA,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;gBAE9F,MAAM,kBAAkB,GAAG,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC;gBACjE,IAAI,kBAAkB,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE;AAC1D,oBAAA,OAAO,KAAK;gBACb;gBAEA,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;AAC9D,gBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9E,oBAAA,OAAO,KAAK;gBACb;gBAEA,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;AACjE,gBAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;gBAChD,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC;AACjE,gBAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM;gBAEhD,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AAC/D,gBAAA,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;gBAC9C,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AAC/D,gBAAA,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM;AAE9C,gBAAA,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;gBACvB,SAAS,GAAG,CAAC,CAAS,EAAA;oBACrB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;gBACxB;AAEA,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG;sBAC1I,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,GAAG,eAAe,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE;AACxK,oBAAA,OAAO,IAAI;gBACZ;AACA,gBAAA,OAAO,KAAK;YACb;YAEA,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC;YACnD,IAAI,UAAU,EAAE;gBACf,YAAY,GAAG,IAAI;gBACnB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChE;iBAAO;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACjB;QACD;QAEA,KAAK,GAAG,MAAM;AACf,IAAA,CAAC,QAAQ,OAAO,EAAE,GAAG,EAAE,IAAI,YAAY;IAEvC,MAAM,QAAQ,GAAmB,EAAE;;IAGnC,oBAAoB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,KAAI;QAC/C,IAAI,OAAO,GAAG,GAAG;QAEjB,SAAS,mBAAmB,CAAC,IAAY,EAAA;AACxC,YAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG;QACvG;QAEA,MAAM,UAAU,GAAG,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxF,QAAA,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7C;QACA,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;AACtG,QAAA,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1C;AAEA,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,eAAe,CAClD,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,UAAU,CAAC,IAAI,EAChD,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,GAAG,CACxC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,CAAE;QACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,EAAE;YAC5G,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAChF;aAAO;AACN,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3B;AACD,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,QAAQ;AAChB;AAEA,SAAS,oBAAoB,CAAI,KAAU,EAAE,QAAoE,EAAA;AAChH,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C;AACD;;AClbA,MAAMA,UAAQ,GAAG;AAChB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,GAAG,EAAE,CAAC;CACN;MAEY,YAAY,CAAA;AAEN,IAAA,WAAA;AACA,IAAA,KAAA;IAFlB,WAAA,CACkB,WAAqB,EACrB,KAAe,EAAA;QADf,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,KAAK,GAAL,KAAK;IACpB;AAEH,IAAA,UAAU,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAChC;AAEA,IAAA,IAAI,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM;IAC/B;AAEA,IAAA,gBAAgB,CAAC,MAAc,EAAA;QAC9B,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnF,MAAM,gBAAgB,GAAG,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9F,QAAA,OAAO,IAAI,IAAI,iBAAiB,GAAG,gBAAgB,CAAC;IACrD;AAEA,IAAA,OAAO,CAAC,KAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE;IAEA,eAAe,CAAC,OAAe,EAAE,OAAe,EAAA;AAC/C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IACnD;AACA;AAED,SAAS,cAAc,CAAC,GAAW,EAAA;IAClC,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAKA,UAAQ,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAKA,UAAQ,CAAC,GAAG,CAAC,EAAE;AACtG,QAAA,CAAC,EAAE;IACJ;AACA,IAAA,OAAO,CAAC;AACT;;ACxCA,MAAM,QAAQ,GAAG;AAChB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,CAAC,EAAE,EAAE;AACL,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,EAAE;AACL,IAAA,CAAC,EAAE,EAAE;AACL,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,SAAS,EAAE,EAAE;CACb;AAED,SAAS,OAAO,CAAC,QAAgB,EAAA;IAChC,OAAO,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG;AAChE;MAYa,KAAK,CAAA;AACD,IAAA,eAAe;AACf,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,SAAS;AAEzB,IAAA,WAAA,CAAY,eAAuB,EAAE,WAAmB,EAAE,aAAqB,EAAE,SAAiB,EAAA;AACjG,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC3B;AAEA,IAAA,OAAO,aAAa,CAAC,KAAe,EAAE,GAAa,EAAA;AAClD,QAAA,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC;IAC7E;AACA;MAEY,QAAQ,CAAA;AAEH,IAAA,UAAA;AACA,IAAA,MAAA;IAFjB,WAAA,CACiB,UAAkB,EAClB,MAAc,EAAA;QADd,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;IACpB;AAEH,IAAA,QAAQ,CAAC,KAAe,EAAA;QACvB,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE;AACvC,YAAA,OAAO,IAAI;QACZ;QACA,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,OAAO,KAAK;QACb;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;IAClC;AACA;MAEY,sBAAsB,CAAA;AAQjB,IAAA,KAAA;AAEA,IAAA,yBAAA;IATA,QAAQ,GAAa,EAAE;IACvB,2BAA2B,GAAa,EAAE;IAC1C,gBAAgB,GAAa,EAAE;IAC/B,yBAAyB,GAAa,EAAE;AACxC,IAAA,MAAM;AAEvB,IAAA,WAAA,CACiB,KAAe,EAC/B,KAAY,EACI,yBAAkC,EAAA;QAFlC,IAAA,CAAA,KAAK,GAAL,KAAK;QAEL,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;AAEzC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE;YACzG,IAAI,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAChC,IAAI,eAAe,GAAG,CAAC;AACvB,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;gBAC9E,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;AAC7C,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;YACvC;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;YAE3C,IAAI,eAAe,GAAG,CAAC;YACvB,IAAI,CAAC,yBAAyB,EAAE;AAC/B,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE;gBACzC,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM;AACvD,gBAAA,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE;YAClC;AACA,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,eAAe,CAAC;AAEpD,YAAA,MAAM,UAAU,GAAG,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,eAAe,GAAG,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;AAChK,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACvC;YAEA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5D;QACD;IACD;IAEA,QAAQ,GAAA;AACP,QAAA,OAAO,CAAA,QAAA,EAAW,IAAI,CAAC,IAAI,GAAG;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD;AAEA,IAAA,OAAO,CAAC,KAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACtG;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B;AAEA,IAAA,IAAI,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;IAC5B;AAEO,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACrC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AAE5F,QAAA,IAAI,YAAY,KAAA,CAAA,2CAAyC,YAAY,KAAA,CAAA,yCAAuC;;AAE3G,YAAA,OAAO,CAAC;QACT;QACA,IAAI,YAAY,KAAA,CAAA,yCAAuC;;AAEtD,YAAA,OAAO,GAAG;QACX;QAEA,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,YAAY,KAAK,YAAY,EAAE;YAClC,KAAK,IAAI,EAAE;AACX,YAAA,IAAI,YAAY,KAAA,CAAA,yCAAuC,YAAY,KAAA,CAAA,uCAAqC;gBACvG,KAAK,IAAI,CAAC;YACX;QACD;AAEA,QAAA,KAAK,IAAI,wBAAwB,CAAC,YAAY,CAAC;AAC/C,QAAA,KAAK,IAAI,wBAAwB,CAAC,YAAY,CAAC;AAE/C,QAAA,OAAO,KAAK;IACb;AAEO,IAAA,eAAe,CAAC,MAAc,EAAE,UAAA,GAA+B,OAAO,EAAA;AAC5E,QAAA,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC;QAC7F,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EAC/B,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,UAAU,KAAK,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CACjI;IACF;AAEO,IAAA,cAAc,CAAC,KAAkB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;QACvC;QACA,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC;AAEA;;AAEG;AACI,IAAA,kBAAkB,CAAC,MAAc,EAAA;AACvC,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjD,YAAA,OAAO,SAAS;QACjB;QAEA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AACvC,YAAA,OAAO,SAAS;QACjB;;QAGA,IAAI,KAAK,GAAG,MAAM;AAClB,QAAA,OAAO,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;AACzD,YAAA,KAAK,EAAE;QACR;;QAGA,IAAI,GAAG,GAAG,MAAM;AAChB,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AACpE,YAAA,GAAG,EAAE;QACN;AAEA,QAAA,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;IACnC;;AAGO,IAAA,qBAAqB,CAAC,MAAc,EAAA;AAC1C,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjD,YAAA,OAAO,SAAS;QACjB;QAEA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AACvC,YAAA,OAAO,SAAS;QACjB;;QAGA,IAAI,KAAK,GAAG,MAAM;QAClB,OAAO,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/F,YAAA,KAAK,EAAE;QACR;;QAGA,IAAI,GAAG,GAAG,MAAM;AAChB,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AACxG,YAAA,GAAG,EAAE;QACN;AAEA,QAAA,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;IACnC;AAEO,IAAA,YAAY,CAAC,KAAkB,EAAA;QACrC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU;IAC1G;IAEO,eAAe,CAAC,OAAe,EAAE,OAAe,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzD;AAEO,IAAA,iBAAiB,CAAC,KAAkB,EAAA;QAC1C,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9F,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;AACvH,QAAA,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;IACnC;AACA;AAED,SAAS,UAAU,CAAC,QAAgB,EAAA;IACnC,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC;WAClD,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC;WAC/C,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM;AAC/D;AAEA,SAAS,WAAW,CAAC,QAAgB,EAAA;IACpC,OAAO,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC;AACxD;AAcA,MAAM,aAAa,GAAyC;AAC3D,IAAA,CAAA,CAAA,wCAAkC,CAAC;AACnC,IAAA,CAAA,CAAA,wCAAkC,CAAC;AACnC,IAAA,CAAA,CAAA,yCAAmC,CAAC;AACpC,IAAA,CAAA,CAAA,kCAA4B,EAAE;AAC9B,IAAA,CAAA,CAAA,oCAA8B,CAAC;AAC/B,IAAA,CAAA,CAAA,wCAAkC,EAAE;AACpC,IAAA,CAAA,CAAA,oCAA8B,CAAC;AAC/B,IAAA,CAAA,CAAA,0CAAoC,EAAE;AACtC,IAAA,CAAA,CAAA,0CAAoC,EAAE;CACtC;AAED,SAAS,wBAAwB,CAAC,QAA8B,EAAA;AAC/D,IAAA,OAAO,aAAa,CAAC,QAAQ,CAAC;AAC/B;AAEA,SAAS,WAAW,CAAC,QAAgB,EAAA;AACpC,IAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE;QACnC,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,EAAE;QAChD,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC7B,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE;QAC5D,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,EAAE;QAC5D,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;QACtE,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;QAC3B,OAAA,CAAA;IACD;AAAO,SAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS,EAAE;QAC1E,OAAA,CAAA;IACD;SAAO;QACN,OAAA,CAAA;IACD;AACD;AAEA;AACA,SAAS,qBAAqB,CAAI,KAAU,EAAE,SAA+B,EAAA;IAC5E,IAAI,GAAG,GAAG,CAAC;AACX,IAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;AAC3B,IAAA,OAAO,GAAG,IAAI,IAAI,EAAE;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;QACxC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1B,YAAA,GAAG,GAAG,GAAG,GAAG,CAAC;QACd;aAAO;AACN,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC;QACf;IACD;AACA,IAAA,OAAO,IAAI;AACZ;AAEA,SAAS,kBAAkB,CAAI,KAAU,EAAE,SAA+B,EAAA;IACzE,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC;AACnD,IAAA,OAAO,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;AACzC;AAEA,SAAS,mBAAmB,CAAI,KAAU,EAAE,SAA+B,EAAA;IAC1E,IAAI,GAAG,GAAG,CAAC;AACX,IAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;AAC3B,IAAA,OAAO,GAAG,IAAI,IAAI,EAAE;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;QACxC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1B,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC;QACf;aAAO;AACN,YAAA,GAAG,GAAG,GAAG,GAAG,CAAC;QACd;IACD;AACA,IAAA,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;AACnD;;AC3UA;;AAEG;MACU,SAAS,CAAA;AAEJ,IAAA,eAAA;AACA,IAAA,sBAAA;IAFjB,WAAA,CACiB,eAAuB,EACvB,sBAA8B,EAAA;QAD9B,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,sBAAsB,GAAtB,sBAAsB;AAEtC,QAAA,IAAI,eAAe,GAAG,sBAAsB,EAAE;YAC7C,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,eAAe,CAAA,GAAA,EAAM,sBAAsB,CAAA,CAAE,CAAC;QACjF;IACD;AAEA,IAAA,IAAI,OAAO,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,sBAAsB;IAC5D;AAEA,IAAA,IAAI,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,eAAe;IAC1D;AAEA,IAAA,IAAI,CAAC,KAAgB,EAAA;AACpB,QAAA,OAAO,IAAI,SAAS,CACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CACnE;IACF;AAEA,IAAA,mBAAmB,CAAC,KAAgB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC;AACjC,eAAA,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,sBAAsB;IACzD;IAEA,aAAa,GAAA;AACZ,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;IAClF;IAEA,QAAQ,GAAA;QACP,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,sBAAsB,CAAA,CAAA,CAAG;IACnE;AACA;AAED;;AAEG;MACU,YAAY,CAAA;AAEP,IAAA,aAAA;AACA,IAAA,aAAA;IAFjB,WAAA,CACiB,aAAoB,EACpB,aAAoB,EAAA;QADpB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,aAAa,GAAb,aAAa;IAC3B;IAEH,QAAQ,GAAA;AACP,QAAA,OAAO,CAAA,EAAG,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA,KAAA,EAAQ,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;IACvF;IAEA,OAAO,YAAY,CAAC,aAA6B,EAAA;AAChD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,eAAe;iBACzE,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,GAAG,CAAC,aAAa,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE;AAC5I,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;YAChD;QACD;IACD;AACA;AAED,SAAS,aAAa,CAAC,KAAY,EAAA;AAClC,IAAA,OAAO,IAAI,KAAK,CAAC,eAAe,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,GAAA,EAAM,KAAK,CAAC,aAAa,CAAA,CAAA,EAAI,KAAK,CAAC,SAAS,GAAG;AACrG;AAEA;;AAEG;MACU,gBAAgB,CAAA;AAEX,IAAA,QAAA;AACA,IAAA,QAAA;IAFjB,WAAA,CACiB,QAAmB,EACnB,QAAmB,EAAA;QADnB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACtB;IAEH,QAAQ,GAAA;QACP,OAAO,CAAA,EAAG,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,QAAQ,CAAA,CAAE;IAC/C;AAEA;;;;AAIE;IACF,eAAe,CAAC,aAAuB,EAAE,aAAuB,EAAA;AAC/D,QAAA,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,KAAe,KAAa;YAC1E,OAAO,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM;AACrD,QAAA,CAAC;QAED,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,KAAe,KAAc;AAC3F,YAAA,IAAI,UAAU,GAAG,CAAC,EAAE;AACnB,gBAAA,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B;AACA,YAAA,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE;gBAC9B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACtE;YACA,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD;AACA,YAAA,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;AACxC,QAAA,CAAC;QAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,aAAa;eACrE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,aAAa,CAAC,EAAE;AAC3E,YAAA,OAAO,IAAI,YAAY,CACtB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,EACpF,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,CACpF;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACrD,YAAA,OAAO,IAAI,YAAY,CACtB,KAAK,CAAC,aAAa,CAClB,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,EAC9C,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CACnG,EACD,KAAK,CAAC,aAAa,CAClB,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,EAC9C,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CACnG,CACD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE;AAC3E,YAAA,OAAO,IAAI,YAAY,CACtB,KAAK,CAAC,aAAa,CAClB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAC5F,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CACnG,EACD,KAAK,CAAC,aAAa,CAClB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAC5F,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CACnG,CACD;QACF;;;AAIA,QAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;IACjE;AACA;AAED;;AAEG;AACG,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAI5C,IAAA,YAAA;AAHjB,IAAA,WAAA,CACC,QAAmB,EACnB,QAAmB,EACH,YAAwC,EAAA;AAExD,QAAA,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAFT,IAAA,CAAA,YAAY,GAAZ,YAAY;IAG7B;AACA;AAED;;AAEG;MACU,SAAS,CAAA;AAEJ,IAAA,OAAA;AACA,IAAA,KAAA;AACA,IAAA,UAAA;AAHjB,IAAA,WAAA,CACiB,OAAmC,EACnC,KAAkB,EAClB,UAAmB,EAAA;QAFnB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;IACxB;AACH;AAED;;AAEG;MACU,SAAS,CAAA;AAEJ,IAAA,gBAAA;AACA,IAAA,OAAA;IAFjB,WAAA,CACiB,gBAAkC,EAClC,OAAmC,EAAA;QADnC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,OAAO,GAAP,OAAO;IACrB;AACH;AAED;;AAEG;AACG,SAAU,iCAAiC,CAChD,UAA0B,EAC1B,aAAuB,EACvB,aAAuB,EACvB,mBAAA,GAA+B,KAAK,EAAA;IAEpC,MAAM,OAAO,GAA+B,EAAE;AAC9C,IAAA,KAAK,MAAM,CAAC,IAAI,eAAe,CAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,EACzE,CAAC,EAAE,EAAE,EAAE,KACN,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,QAAQ;WACxC,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAChD,EAAE;AACF,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAE5B,OAAO,CAAC,IAAI,CAAC,IAAI,wBAAwB,CACxC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAClC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAClC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;IACH;IAEA,IAAI,CAAC,mBAAmB,EAAE;;AAEzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,eAAe;gBACtE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,GAAG,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE;;gBAErE;YACD;QACD;IACD;AAEA,IAAA,OAAO,OAAO;AACf;AAEA,SAAS,mBAAmB,CAAC,YAA0B,EAAE,aAAuB,EAAE,aAAuB,EAAA;IACxG,IAAI,cAAc,GAAG,CAAC;IACtB,IAAI,YAAY,GAAG,CAAC;;;;AAMpB,IAAA,IAAI,YAAY,CAAC,aAAa,CAAC,SAAS,KAAK,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC,SAAS,KAAK;WACvF,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,cAAc,IAAI,YAAY,CAAC,aAAa,CAAC;AAC1F,WAAA,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,cAAc,IAAI,YAAY,CAAC,aAAa,CAAC,aAAa,EAAE;;QAE5G,YAAY,GAAG,EAAE;IAClB;;;IAIA,IAAI,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,KAAK,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;WACzH,YAAY,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,KAAK,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;WACzH,YAAY,CAAC,aAAa,CAAC,eAAe,IAAI,YAAY,CAAC,aAAa,CAAC,aAAa,GAAG;AACzF,WAAA,YAAY,CAAC,aAAa,CAAC,eAAe,IAAI,YAAY,CAAC,aAAa,CAAC,aAAa,GAAG,YAAY,EAAE;;QAE1G,cAAc,GAAG,CAAC;IACnB;IAEA,MAAM,iBAAiB,GAAG,IAAI,SAAS,CACtC,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,cAAc,EAC3D,YAAY,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,GAAG,YAAY,CAC3D;IACD,MAAM,iBAAiB,GAAG,IAAI,SAAS,CACtC,YAAY,CAAC,aAAa,CAAC,eAAe,GAAG,cAAc,EAC3D,YAAY,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,GAAG,YAAY,CAC3D;IAED,OAAO,IAAI,wBAAwB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC;AAC1F;AAEA,UAAU,eAAe,CAAI,KAAkB,EAAE,eAAgD,EAAA;AAChG,IAAA,IAAI,YAA6B;AACjC,IAAA,IAAI,IAAmB;AACvB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AACtD,YAAA,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB;aAAO;YACN,IAAI,YAAY,EAAE;AACjB,gBAAA,MAAM,YAAY;YACnB;AACA,YAAA,YAAY,GAAG,CAAC,IAAI,CAAC;QACtB;QACA,IAAI,GAAG,IAAI;IACZ;IACA,IAAI,YAAY,EAAE;AACjB,QAAA,MAAM,YAAY;IACnB;AACD;MAUa,SAAS,CAAA;AACO,IAAA,KAAA;AAA5B,IAAA,WAAA,CAA4B,KAAe,EAAA;QAAf,IAAA,CAAA,KAAK,GAAL,KAAK;IAAa;AAE9C,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IACzB;AAEA,IAAA,cAAc,CAAC,UAAkB,EAAA;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAClC;AACA;;ACzPD;;AAEG;MACU,wBAAwB,CAAA;AACnB,IAAA,0BAA0B,GAAG,IAAI,yBAAyB,EAAE;AAC5D,IAAA,sBAAsB,GAAG,IAAI,kBAAkB,EAAE;AAElE,IAAA,WAAW,CAAC,aAAuB,EAAE,aAAuB,EAAE,OAAkC,EAAA;;AAE/F,QAAA,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE;YAC3E,OAAO,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;QACpC;;AAGA,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/H,OAAO,IAAI,SAAS,CAAC;gBACpB,IAAI,wBAAwB,CAC3B,IAAI,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAC1C,IAAI,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EAC1C;oBACC,IAAI,YAAY,CACf,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EACzF,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAE1F;AAEF,aAAA,EAAE,EAAE,EAAE,KAAK,CAAC;QACd;QAEA,MAAM,OAAO,GAAG,OAAO,CAAC,oBAAoB,KAAK,CAAC,GAAG,eAAe,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAC7H,QAAA,MAAM,yBAAyB,GAAG,CAAC,OAAO,CAAC,oBAAoB;;AAG/D,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB;QAC/C,SAAS,eAAe,CAAC,IAAY,EAAA;YACpC,IAAI,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,YAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,gBAAA,IAAI,GAAG,aAAa,CAAC,IAAI;AACzB,gBAAA,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;YAC9B;AACA,YAAA,OAAO,IAAI;QACZ;AAEA,QAAA,MAAM,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/E,QAAA,MAAM,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE,aAAa,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE,aAAa,CAAC;;AAGtE,QAAA,MAAM,mBAAmB,GAAG,CAAC,MAAK;YACjC,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE;;gBAE/C,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAC7C,SAAS,EACT,SAAS,EACT,OAAO,EACP,CAAC,OAAO,EAAE,OAAO,KAChB,aAAa,CAAC,OAAO,CAAC,KAAK,aAAa,CAAC,OAAO;sBAC7C,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK;AACnC,0BAAE;AACF,0BAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM;sBAC/C,IAAI,CACR;YACF;AAEA,YAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CACzC,SAAS,EACT,SAAS,EACT,OAAO,CACP;QACF,CAAC,GAAG;AAEJ,QAAA,IAAI,cAAc,GAAG,mBAAmB,CAAC,KAAK;AAC9C,QAAA,IAAI,UAAU,GAAG,mBAAmB,CAAC,UAAU;;QAG/C,cAAc,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QAC5E,cAAc,GAAG,wCAAwC,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QAE/F,MAAM,UAAU,GAAmB,EAAE;AAErC,QAAA,MAAM,wBAAwB,GAAG,CAAC,eAAuB,KAAI;YAC5D,IAAI,CAAC,yBAAyB,EAAE;gBAC/B;YACD;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;AACzC,gBAAA,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC;AACpC,gBAAA,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC;gBACpC,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,UAAU,CAAC,EAAE;;AAE5D,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,YAAY,CACrF,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,EAC3C,IAAI,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAC3C,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC;AAC/C,oBAAA,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;AACxC,wBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnB;AACA,oBAAA,IAAI,cAAc,CAAC,UAAU,EAAE;wBAC9B,UAAU,GAAG,IAAI;oBAClB;gBACD;YACD;AACD,QAAA,CAAC;QAED,IAAI,aAAa,GAAG,CAAC;QACrB,IAAI,aAAa,GAAG,CAAC;AAErB,QAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;YAClC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,aAAa;YAE5D,wBAAwB,CAAC,eAAe,CAAC;AAEzC,YAAA,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY;AAC3C,YAAA,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY;AAE3C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC;AACxH,YAAA,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC9B,UAAU,GAAG,IAAI;YAClB;AACA,YAAA,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE;AACxC,gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB;QACD;AAEA,QAAA,wBAAwB,CAAC,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC;AAE9D,QAAA,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC;AAC7C,QAAA,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC;AAE7C,QAAA,MAAM,OAAO,GAAG,iCAAiC,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC;;QAG7F,MAAM,KAAK,GAAY,EAAE;QAEzB,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;IACjD;IAEQ,WAAW,CAClB,aAAuB,EACvB,aAAuB,EACvB,IAAkB,EAClB,OAAiB,EACjB,yBAAkC,EAClC,OAAkC,EAAA;AAElC,QAAA,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC;QACjD,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,aAAa,EAAE,aAAa,CAAC;AAEnF,QAAA,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,aAAa,EAAE,YAAY,CAAC,aAAa,EAAE,yBAAyB,CAAC;AAC/G,QAAA,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,aAAa,EAAE,YAAY,CAAC,aAAa,EAAE,yBAAyB,CAAC;QAE/G,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG;AAClD,cAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO;AACjE,cAAE,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAE/D,QAAA,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK;QAC5B,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QACpD,KAAK,GAAG,oCAAoC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAE9G,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC7B,KAAK,GAAG,oCAAoC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;QACxH;QAEA,KAAK,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QACjD,KAAK,GAAG,2CAA2C,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAE1E,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CACvB,CAAC,CAAC,KACD,IAAI,YAAY,CACf,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,EAClC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAClC,CACF;QAED,OAAO;AACN,YAAA,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,UAAU,CAAC,UAAU;SACjC;IACF;AACA;AAED,SAAS,kBAAkB,CAAC,YAA0B,EAAA;AACrD,IAAA,OAAO,IAAI,gBAAgB,CAC1B,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,EACxF,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CACxF;AACF;AAEA,SAAS,WAAW,CAAI,CAAM,EAAE,CAAM,EAAA;IACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AAC1B,QAAA,OAAO,KAAK;IACb;AACA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAClB,YAAA,OAAO,KAAK;QACb;IACD;AACA,IAAA,OAAO,IAAI;AACZ;;AC5PA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzD,IAAI,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7F,IAAI,MAAM,IAAI,GAAG,eAAe;AAChC,IAAI,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC7F,IAAI,MAAM,IAAI,GAAG,eAAe;AAChC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;AACjE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;AAChB,QAAQ,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI;AACJ,IAAI,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE;AAC1E,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC;AAC9E,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;AAChB,QAAQ,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,IAAI;AACJ,IAAI,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C;;AAEA;AACA;AACA;AACO,SAAS,IAAI,GAAG;AACvB,IAAI,IAAI,CAAC,IAAI,EAAE;AACf;AACA,SAAS,iBAAiB,GAAG;AAC7B,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,SAAS,EAAE,IAAI;AACvB,QAAQ,4BAA4B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC3D,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7D,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6BAA6B,EAAE,SAAS,IAAI,EAAE;AACtD,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6BAA6B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC5D,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;AACpC,YAAY,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAChG,YAAY,MAAM,IAAI,GAAG,eAAe;AACxC,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,QAAQ,CAAC;AACT,QAAQ,mDAAmD,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAClF,YAAY,MAAM,CAAC,GAAG,IAAI;AAC1B,YAAY,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,SAAS;AAC9D,YAAY,kBAAkB,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC;AACnG,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AAC/E,QAAQ,CAAC;AACT,QAAQ,6CAA6C,EAAE,SAAS,IAAI,EAAE;AACtE,YAAY,MAAM,CAAC,GAAG,IAAI;AAC1B,YAAY,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,SAAS;AAC/D,YAAY,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAC3D,QAAQ,CAAC;AACT,QAAQ,8CAA8C,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC7E,YAAY,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC;AACzC,YAAY,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAChG,YAAY,MAAM,IAAI,GAAG,eAAe;AACxC,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,QAAQ,CAAC;AACT,QAAQ,oCAAoC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AACnE,YAAY,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI;AACpC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,2CAA2C,EAAE,SAAS,IAAI,EAAE;AACpE,YAAY,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,KAAK,QAAQ;AACjD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6CAA6C,EAAE,SAAS,IAAI,EAAE;AACtE,YAAY,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,KAAK,UAAU;AACnD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,yCAAyC,EAAE,SAAS,IAAI,EAAE;AAClE,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,IAAI;AACrC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,2CAA2C,EAAE,SAAS,IAAI,EAAE;AACpE,YAAY,MAAM,GAAG,GAAG,IAAI;AAC5B,YAAY,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;AAChE,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,8CAA8C,EAAE,SAAS,IAAI,EAAE;AACvE,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS;AAC1C,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0CAA0C,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AACzE,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,IAAI;AACrC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,gDAAgD,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC/E,YAAY,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI;AACpC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,4CAA4C,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC3E,YAAY,MAAM,GAAG,GAAG,IAAI;AAC5B,YAAY,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,KAAK,QAAQ,GAAG,GAAG,GAAG,SAAS;AAClE,YAAY,kBAAkB,EAAE,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC;AAC1F,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AAC/E,QAAQ,CAAC;AACT,QAAQ,4CAA4C,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC3E,YAAY,MAAM,GAAG,GAAG,IAAI;AAC5B,YAAY,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,KAAK,QAAQ,GAAG,GAAG,GAAG,SAAS;AAClE,YAAY,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACpH,YAAY,IAAI,IAAI,GAAG,eAAe;AACtC,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,QAAQ,CAAC;AACT,QAAQ,uCAAuC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AACtE,YAAY,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3D,QAAQ,CAAC;AACT,QAAQ,2BAA2B,EAAE,WAAW,EAAE,OAAO,WAAW,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE;AAC3F,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,2BAA2B,EAAE,SAAS,IAAI,EAAE;AACpD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AACjC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,4BAA4B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC3D,YAAY,IAAI,WAAW;AAC3B,YAAY,IAAI,WAAW;AAC3B,YAAY,IAAI;AAChB,gBAAgB,WAAW,GAAG,IAAI;AAClC,gBAAgB,WAAW,GAAG,IAAI;AAClC,gBAAgB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7D,YAAY,CAAC,SAAS;AACtB,gBAAgB,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;AACjE,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,WAAW,EAAE,OAAO,WAAW,CAAC,UAAU,IAAI,EAAE,IAAI,EAAE;AAC1F,YAAY,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/C,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,oCAAoC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AACnE,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AACxC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,uCAAuC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AACtE,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;AAClC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6CAA6C,EAAE,SAAS,IAAI,EAAE;AACtE,YAAY,IAAI,MAAM;AACtB,YAAY,IAAI;AAChB,gBAAgB,MAAM,GAAG,IAAI,YAAY,WAAW;AACpD,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE;AACxB,gBAAgB,MAAM,GAAG,KAAK;AAC9B,YAAY;AACZ,YAAY,MAAM,GAAG,GAAG,MAAM;AAC9B,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,4CAA4C,EAAE,SAAS,IAAI,EAAE;AACrE,YAAY,IAAI,MAAM;AACtB,YAAY,IAAI;AAChB,gBAAgB,MAAM,GAAG,IAAI,YAAY,UAAU;AACnD,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE;AACxB,gBAAgB,MAAM,GAAG,KAAK;AAC9B,YAAY;AACZ,YAAY,MAAM,GAAG,GAAG,MAAM;AAC9B,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,8BAA8B,EAAE,SAAS,IAAI,EAAE;AACvD,YAAY,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC3C,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,oCAAoC,EAAE,SAAS,IAAI,EAAE;AAC7D,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAClD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,+BAA+B,EAAE,WAAW;AACpD,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ;AACvC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6BAA6B,EAAE,SAAS,IAAI,EAAE;AACtD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACnC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,6BAA6B,EAAE,SAAS,IAAI,EAAE;AACtD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACnC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,WAAW;AAC/C,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACnC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,WAAW;AAC/C,YAAY,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE;AACpC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,WAAW;AAC/C,YAAY,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;AACnC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,SAAS,IAAI,EAAE;AACnD,YAAY,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;AAC5C,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,2BAA2B,EAAE,WAAW,EAAE,OAAO,WAAW,CAAC,UAAU,IAAI,EAAE;AACrF,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxB,QAAQ,2BAA2B,EAAE,SAAS,IAAI,EAAE;AACpD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AACjC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,WAAW;AAC/C,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAClC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,uCAAuC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5E,YAAY,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAChF,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/D,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC7B,QAAQ,CAAC;AACT,QAAQ,0BAA0B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/D,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;AACnC,QAAQ,CAAC;AACT,QAAQ,4BAA4B,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC3D,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;AAClC,YAAY,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAChG,YAAY,MAAM,IAAI,GAAG,eAAe;AACxC,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,YAAY,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnE,QAAQ,CAAC;AACT,QAAQ,4BAA4B,EAAE,SAAS,IAAI,EAAE;AACrD,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK;AAClC,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,gCAAgC,EAAE,SAAS,IAAI,EAAE;AACzD;AACA,YAAY,MAAM,GAAG,GAAG,IAAI;AAC5B,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,gCAAgC,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;AAC/D;AACA,YAAY,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;AACtD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,gCAAgC,EAAE,SAAS,IAAI,EAAE;AACzD;AACA,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC;AAChD,YAAY,OAAO,GAAG;AACtB,QAAQ,CAAC;AACT,QAAQ,+BAA+B,EAAE,WAAW;AACpD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB;AACpD,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,YAAY,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;AACnC,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC;AAC5C,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC;AACvC,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC;AACvC,YAAY,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC;AACxC,QAAQ,CAAC;AACT,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,SAAS,EAAE,IAAI;AACvB,QAAQ,mBAAmB,EAAE,OAAO;AACpC,KAAK;AACL;;AAEA,SAAS,oBAAoB,CAAC,GAAG,EAAE;AACnC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAC9C,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5C,IAAI,OAAO,GAAG;AACd;;AAEA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B;AACA,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG;AAC3B,IAAI,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,GAAG,IAAI,IAAI,EAAE;AAC9D,QAAQ,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB,IAAI;AACJ,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE;AAC1B,QAAQ,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzB,IAAI;AACJ,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE;AAC1B,QAAQ,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;AAC3C,QAAQ,IAAI,WAAW,IAAI,IAAI,EAAE;AACjC,YAAY,OAAO,QAAQ;AAC3B,QAAQ,CAAC,MAAM;AACf,YAAY,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC3C,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,IAAI,IAAI,UAAU,EAAE;AAC5B,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;AAC7B,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,YAAY,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,QAAQ,CAAC,MAAM;AACf,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC5B,QAAQ,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;AACjC,QAAQ,IAAI,KAAK,GAAG,GAAG;AACvB,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;AACxB,YAAY,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAY,KAAK,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAQ;AACR,QAAQ,KAAK,IAAI,GAAG;AACpB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA,IAAI,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,IAAI,IAAI,SAAS;AACjB,IAAI,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,QAAQ,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC;AACrC,IAAI,CAAC,MAAM;AACX;AACA,QAAQ,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,IAAI;AACJ,IAAI,IAAI,SAAS,IAAI,QAAQ,EAAE;AAC/B;AACA;AACA;AACA,QAAQ,IAAI;AACZ,YAAY,OAAO,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG;AACxD,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE;AACpB,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,IAAI,GAAG,YAAY,KAAK,EAAE;AAC9B,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAI;AACJ;AACA,IAAI,OAAO,SAAS;AACpB;;AAEA,SAAS,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE;AACvC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;AACnB,IAAI,OAAO,oBAAoB,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAClE;;AAEA,IAAI,qBAAqB,GAAG,IAAI;AAChC,SAAS,kBAAkB,GAAG;AAC9B,IAAI,IAAI,qBAAqB,KAAK,IAAI,IAAI,qBAAqB,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,KAAK,qBAAqB,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,qBAAqB,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC1M,QAAQ,qBAAqB,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAChE,IAAI;AACJ,IAAI,OAAO,qBAAqB;AAChC;;AAEA,SAAS,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE;AACtC,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC;AACrC;;AAEA,IAAI,uBAAuB,GAAG,IAAI;AAClC,SAAS,oBAAoB,GAAG;AAChC,IAAI,IAAI,uBAAuB,KAAK,IAAI,IAAI,uBAAuB,CAAC,UAAU,KAAK,CAAC,EAAE;AACtF,QAAQ,uBAAuB,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACpE,IAAI;AACJ,IAAI,OAAO,uBAAuB;AAClC;;AAEA,SAAS,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE;AAC9B,IAAI,IAAI;AACR,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AAClC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AAChB,QAAQ,MAAM,GAAG,GAAG,oBAAoB,CAAC,CAAC,CAAC;AAC3C,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACtC,IAAI;AACJ;;AAEA,SAAS,UAAU,CAAC,CAAC,EAAE;AACvB,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;AACxC;;AAEA,SAAS,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;AACjD,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;AAC/B,QAAQ,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;AACjD,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC;AAC/C,QAAQ,oBAAoB,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACvE,QAAQ,eAAe,GAAG,GAAG,CAAC,MAAM;AACpC,QAAQ,OAAO,GAAG;AAClB,IAAI;;AAEJ,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM;AACxB,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;;AAElC,IAAI,MAAM,GAAG,GAAG,oBAAoB,EAAE;;AAEtC,IAAI,IAAI,MAAM,GAAG,CAAC;;AAElB,IAAI,OAAO,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE;AACnC,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AAC3C,QAAQ,IAAI,IAAI,GAAG,IAAI,EAAE;AACzB,QAAQ,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI;AAChC,IAAI;AACJ,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE;AACxB,QAAQ,IAAI,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAY,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;AACnC,QAAQ;AACR,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;AACvE,QAAQ,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;AAC7E,QAAQ,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;;AAE3D,QAAQ,MAAM,IAAI,GAAG,CAAC,OAAO;AAC7B,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC;AAChD,IAAI;;AAEJ,IAAI,eAAe,GAAG,MAAM;AAC5B,IAAI,OAAO,GAAG;AACd;;AAEA,SAAS,uBAAuB,CAAC,GAAG,EAAE;AACtC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;AACrD,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;AACvC,IAAI,OAAO,KAAK;AAChB;;AAEA,IAAI,iBAAiB,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClF,iBAAiB,CAAC,MAAM,EAAE;AAC1B,MAAM,uBAAuB,GAAG,UAAU;AAC1C,IAAI,eAAe,GAAG,CAAC;AACvB,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;AAC9B,IAAI,eAAe,IAAI,GAAG;AAC1B,IAAI,IAAI,eAAe,IAAI,uBAAuB,EAAE;AACpD,QAAQ,iBAAiB,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtF,QAAQ,iBAAiB,CAAC,MAAM,EAAE;AAClC,QAAQ,eAAe,GAAG,GAAG;AAC7B,IAAI;AACJ,IAAI,OAAO,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;AACpF;;AAEA,MAAM,iBAAiB,GAAG,IAAI,WAAW,EAAE;;AAE3C,IAAI,EAAE,YAAY,IAAI,iBAAiB,CAAC,EAAE;AAC1C,IAAI,iBAAiB,CAAC,UAAU,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE;AACxD,QAAQ,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;AACjD,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,GAAG,CAAC,MAAM;AAC5B,YAAY,OAAO,EAAE,GAAG,CAAC;AACzB,SAAS;AACT,IAAI,CAAC;AACL;;AAEA,IAAI,eAAe,GAAG,CAAC;;AAEpB,IAA2B;AAC9B,SAAS,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE;AAE/C,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO;AAE3B,IAAI,qBAAqB,GAAG,IAAI;AAChC,IAAI,uBAAuB,GAAG,IAAI;AAClC,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3B,IAAI,OAAO,IAAI;AACf;;AAEA,eAAe,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAC3C,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,MAAM,YAAY,QAAQ,EAAE;AACtE,QAAQ,IAAI,OAAO,WAAW,CAAC,oBAAoB,KAAK,UAAU,EAAE;AACpE,YAAY,IAAI;AAChB,gBAAgB,OAAO,MAAM,WAAW,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;AAC9E,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE;AACxB,gBAAgB,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC;;AAEpF,gBAAgB,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,kBAAkB,EAAE;AAChG,oBAAoB,OAAO,CAAC,IAAI,CAAC,mMAAmM,EAAE,CAAC,CAAC;;AAExO,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAClC,YAAY;AACZ,QAAQ;;AAER,QAAQ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE;AAChD,QAAQ,OAAO,MAAM,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;AAC5D,IAAI,CAAC,MAAM;AACX,QAAQ,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC;;AAEvE,QAAQ,IAAI,QAAQ,YAAY,WAAW,CAAC,QAAQ,EAAE;AACtD,YAAY,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;AACvC,QAAQ,CAAC,MAAM;AACf,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,IAAI;;AAEJ,IAAI,SAAS,oBAAoB,CAAC,IAAI,EAAE;AACxC,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,SAAS,EAAE,OAAO,IAAI;AAClE;AACA,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;;AAEA,SAAS,QAAQ,CAAC,MAAM,EAAE;AAC1B,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,IAAI;;;AAGvC,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC9B,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE;AAChE,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;AAC9B,QAAQ,CAAC,MAAM;AACf,YAAY,OAAO,CAAC,IAAI,CAAC,4EAA4E;AACrG,QAAQ;AACR,IAAI;;AAEJ,IAAI,MAAM,OAAO,GAAG,iBAAiB,EAAE;AACvC,IAAI,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,MAAM,CAAC,EAAE;AACjD,QAAQ,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;AAC9D,IAAI,OAAO,mBAAmB,CAAC,QAAgB,CAAC;AAChD;;AAEA,eAAe,UAAU,CAAC,cAAc,EAAE;AAC1C,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,OAAO,IAAI;;;AAGvC,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;AACtC,QAAQ,IAAI,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC,SAAS,EAAE;AACxE,YAAY,CAAC,CAAC,cAAc,CAAC,GAAG,cAAc;AAC9C,QAAQ,CAAC,MAAM;AACf,YAAY,OAAO,CAAC,IAAI,CAAC,2FAA2F;AACpH,QAAQ;AACR,IAAI;;AAEJ,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;AACtC,QAAQ,cAAc,GAAG,IAAI,GAAG,CAAC,2DAAoC,CAAC;AACtE,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,iBAAiB,EAAE;;AAEvC,IAAI,IAAI,OAAO,cAAc,KAAK,QAAQ,KAAK,OAAO,OAAO,KAAK,UAAU,IAAI,cAAc,YAAY,OAAO,CAAC,KAAK,OAAO,GAAG,KAAK,UAAU,IAAI,cAAc,YAAY,GAAG,CAAC,EAAE;AACpL,QAAQ,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;AAC9C,IAAI;;AAEJ,IAAI,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,CAAC;;AAEhF,IAAI,OAAO,mBAAmB,CAAC,QAAgB,CAAC;AAChD;;;;;;;;;;;ACrjBA;;;;AAIG;AAGH;AAGA,IAAI,UAAU,GAAsB,IAAI;AACxC,IAAI,WAAW,GAA+B,IAAI;AAElD;;;;;;;AAOG;AACI,eAAe,QAAQ,GAAA;IAC7B,IAAI,UAAU,EAAE;AACf,QAAA,OAAO,UAAU;IAClB;IACA,IAAI,WAAW,EAAE;AAChB,QAAA,OAAO,WAAW;IACnB;AAEA,IAAA,WAAW,GAAG,CAAC,YAAW;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,2DAAqD,CAAC;;QAE9E,IAAI,MAAM,GAAuB,OAAO;QACxC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;YAC7D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,kBAAkB,CAAC;AACrD,YAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QACjC;QACA,MAAMC,UAAY,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAC9CC,IAAS,EAAE;QACX,UAAU,GAAGC,MAA6B;AAC1C,QAAA,OAAO,UAAU;IAClB,CAAC,GAAG;AAEJ,IAAA,OAAO,WAAW;AACnB;AAEA;;;;;AAKG;SACa,OAAO,GAAA;IACtB,IAAI,CAAC,UAAU,EAAE;AAChB,QAAA,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC;IAC7E;AACA,IAAA,OAAO,UAAU;AAClB;;ACzDA;;;AAGG;AAiBG,SAAU,eAAe,CAAC,IAAe,EAAA;IAC3C,OAAO;QACH,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACzC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;KAC9B;AACL;AAEM,SAAU,eAAe,CAAC,IAAmB,EAAA;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;IACxC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AACzD;AAEA,SAAS,cAAc,CAAC,CAA2B,EAAA;IAC/C,OAAO;AACH,QAAA,QAAQ,EAAE;AACN,YAAA,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe;AAC3C,YAAA,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB;AAC5D,SAAA;AACD,QAAA,QAAQ,EAAE;AACN,YAAA,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe;AAC3C,YAAA,sBAAsB,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB;AAC5D,SAAA;AACD,QAAA,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,IAAI;KAC/E;AACL;AAEA,SAAS,cAAc,CAAC,CAA+B,EAAA;IACnD,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,kBAAkB,CAAC;AACrD,IAAA,OAAO,IAAI,wBAAwB,CAC/B,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAC5E,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAC5E,KAAK,CACR;AACL;AAEA,SAAS,kBAAkB,CAAC,EAAgB,EAAA;IACxC,OAAO;AACH,QAAA,iBAAiB,EAAE,EAAE,CAAC,aAAa,CAAC,eAAe;AACnD,QAAA,mBAAmB,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW;AACjD,QAAA,eAAe,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa;AAC/C,QAAA,iBAAiB,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS;AAC7C,QAAA,iBAAiB,EAAE,EAAE,CAAC,aAAa,CAAC,eAAe;AACnD,QAAA,mBAAmB,EAAE,EAAE,CAAC,aAAa,CAAC,WAAW;AACjD,QAAA,eAAe,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa;AAC/C,QAAA,iBAAiB,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS;KAChD;AACL;AAEA,SAAS,kBAAkB,CAAC,EAAoB,EAAA;AAC5C,IAAA,OAAO,IAAI,YAAY,CACnB,IAAI,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,EACjG,IAAI,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,CACpG;AACL;AAEA,SAAS,UAAU,CAAC,CAAY,EAAA;IAC5B,OAAO;AACH,QAAA,gBAAgB,EAAE;AACd,YAAA,QAAQ,EAAE;AACN,gBAAA,eAAe,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe;AAC5D,gBAAA,sBAAsB,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB;AAC7E,aAAA;AACD,YAAA,QAAQ,EAAE;AACN,gBAAA,eAAe,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe;AAC5D,gBAAA,sBAAsB,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB;AAC7E,aAAA;AACJ,SAAA;QACD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;KACzC;AACL;AAEA,SAAS,UAAU,CAAC,CAAgB,EAAA;IAChC,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAC5B,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAC9G,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACjH;AACD,IAAA,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5D;;;;"}
1
+ {"version":3,"file":"wire.js","sources":["../src/diff/core/offsetRange.ts","../src/diff/algorithms/diffAlgorithm.ts","../src/diff/algorithms/dynamicProgrammingDiffing.ts","../src/diff/algorithms/myersDiffAlgorithm.ts","../src/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts","../src/diff/defaultLinesDiffComputer/lineSequence.ts","../src/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts","../src/diff/defaultLinesDiffComputer/rangeMapping.ts","../src/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","../out/pkg/diff_wasm.js","../src/diff/wasm/loader.ts","../src/diff/worker/wire.ts"],"sourcesContent":["/**\n * A range of offsets (0-based).\n */\nexport class OffsetRange {\n\tpublic static ofLength(length: number): OffsetRange {\n\t\treturn new OffsetRange(0, length);\n\t}\n\n\tpublic static ofStartAndLength(start: number, length: number): OffsetRange {\n\t\treturn new OffsetRange(start, start + length);\n\t}\n\n\tconstructor(\n\t\tpublic readonly start: number,\n\t\tpublic readonly endExclusive: number\n\t) {\n\t\tif (start > endExclusive) {\n\t\t\tthrow new Error(`Invalid range: [${start}, ${endExclusive})`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.start === this.endExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endExclusive - this.start;\n\t}\n\n\tdelta(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive + offset);\n\t}\n\n\tdeltaStart(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive);\n\t}\n\n\tdeltaEnd(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start, this.endExclusive + offset);\n\t}\n\n\tequals(other: OffsetRange): boolean {\n\t\treturn this.start === other.start && this.endExclusive === other.endExclusive;\n\t}\n\n\tcontainsRange(other: OffsetRange): boolean {\n\t\treturn this.start <= other.start && other.endExclusive <= this.endExclusive;\n\t}\n\n\tcontains(offset: number): boolean {\n\t\treturn this.start <= offset && offset < this.endExclusive;\n\t}\n\n\tjoin(other: OffsetRange): OffsetRange {\n\t\treturn new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n\t}\n\n\tintersect(other: OffsetRange): OffsetRange | undefined {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\tif (start <= end) {\n\t\t\treturn new OffsetRange(start, end);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tintersects(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start < end;\n\t}\n\n\tintersectsOrTouches(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start <= end;\n\t}\n\n\tslice<T>(arr: readonly T[]): T[] {\n\t\treturn arr.slice(this.start, this.endExclusive);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.start}, ${this.endExclusive})`;\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\n\n/**\n * A sequence that can be diffed.\n */\nexport interface ISequence {\n\tgetElement(offset: number): number;\n\treadonly length: number;\n\n\t/**\n\t * The higher the score, the better that offset can be used to split the sequence.\n\t * Used to optimize insertions. Must not be negative.\n\t */\n\tgetBoundaryScore?(length: number): number;\n\n\t/**\n\t * For line sequences, getElement returns a number representing trimmed lines.\n\t * This checks equality for the original lines.\n\t * It prevents shifting to less matching lines.\n\t */\n\tisStronglyEqual(offset1: number, offset2: number): boolean;\n}\n\n/**\n * Timeout interface for limiting computation time.\n */\nexport interface ITimeout {\n\tisValid(): boolean;\n}\n\nexport class InfiniteTimeout implements ITimeout {\n\tpublic static readonly instance = new InfiniteTimeout();\n\n\tisValid(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport class DateTimeout implements ITimeout {\n\tprivate readonly startTime = Date.now();\n\tprivate valid = true;\n\n\tconstructor(private timeout: number) {\n\t\tif (timeout <= 0) {\n\t\t\tthrow new Error('timeout must be positive');\n\t\t}\n\t}\n\n\tisValid(): boolean {\n\t\tconst valid = Date.now() - this.startTime < this.timeout;\n\t\tif (!valid && this.valid) {\n\t\t\tthis.valid = false;\n\t\t}\n\t\treturn this.valid;\n\t}\n}\n\n/**\n * Represents an offset pair for two sequences.\n */\nexport class OffsetPair {\n\tpublic static readonly zero = new OffsetPair(0, 0);\n\tpublic static readonly max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\n\tconstructor(\n\t\tpublic readonly offset1: number,\n\t\tpublic readonly offset2: number\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.offset1} <-> ${this.offset2}`;\n\t}\n\n\tdelta(offset: number): OffsetPair {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n\t}\n\n\tequals(other: OffsetPair): boolean {\n\t\treturn this.offset1 === other.offset1 && this.offset2 === other.offset2;\n\t}\n}\n\n/**\n * Represents a diff between two sequences.\n */\nexport class SequenceDiff {\n\tpublic static invert(sequenceDiffs: SequenceDiff[], doc1Length: number): SequenceDiff[] {\n\t\tconst result: SequenceDiff[] = [];\n\t\tforEachAdjacent(sequenceDiffs, (a, b) => {\n\t\t\tresult.push(SequenceDiff.fromOffsetPairs(\n\t\t\t\ta ? a.getEndExclusives() : OffsetPair.zero,\n\t\t\t\tb ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)\n\t\t\t));\n\t\t});\n\t\treturn result;\n\t}\n\n\tpublic static fromOffsetPairs(start: OffsetPair, endExclusive: OffsetPair): SequenceDiff {\n\t\treturn new SequenceDiff(\n\t\t\tnew OffsetRange(start.offset1, endExclusive.offset1),\n\t\t\tnew OffsetRange(start.offset2, endExclusive.offset2)\n\t\t);\n\t}\n\n\tpublic static assertSorted(sequenceDiffs: SequenceDiff[]): void {\n\t\tlet last: SequenceDiff | undefined = undefined;\n\t\tfor (const cur of sequenceDiffs) {\n\t\t\tif (last) {\n\t\t\t\tif (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {\n\t\t\t\t\tthrow new Error('Sequence diffs must be sorted');\n\t\t\t\t}\n\t\t\t}\n\t\t\tlast = cur;\n\t\t}\n\t}\n\n\tconstructor(\n\t\tpublic readonly seq1Range: OffsetRange,\n\t\tpublic readonly seq2Range: OffsetRange\n\t) {}\n\n\tswap(): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq2Range, this.seq1Range);\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.seq1Range} <-> ${this.seq2Range}`;\n\t}\n\n\tjoin(other: SequenceDiff): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n\t}\n\n\tdelta(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n\t}\n\n\tdeltaStart(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n\t}\n\n\tdeltaEnd(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n\t}\n\n\tintersectsOrTouches(other: SequenceDiff): boolean {\n\t\treturn this.seq1Range.intersectsOrTouches(other.seq1Range) || this.seq2Range.intersectsOrTouches(other.seq2Range);\n\t}\n\n\tintersect(other: SequenceDiff): SequenceDiff | undefined {\n\t\tconst i1 = this.seq1Range.intersect(other.seq1Range);\n\t\tconst i2 = this.seq2Range.intersect(other.seq2Range);\n\t\tif (!i1 || !i2) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new SequenceDiff(i1, i2);\n\t}\n\n\tgetStarts(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n\t}\n\n\tgetEndExclusives(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n\t}\n}\n\n/**\n * Result of a diff algorithm computation.\n */\nexport class DiffAlgorithmResult {\n\tstatic trivial(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n\t}\n\n\tstatic trivialTimedOut(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n\t}\n\n\tconstructor(\n\t\tpublic readonly diffs: SequenceDiff[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * A synchronous diff algorithm.\n */\nexport interface IDiffAlgorithm {\n\tcompute(sequence1: ISequence, sequence2: ISequence, timeout?: ITimeout): DiffAlgorithmResult;\n}\n\n// Helper function for iterating with neighbors\nfunction forEachAdjacent<T>(items: T[], callback: (prev: T | undefined, current: T | undefined) => void): void {\n\tlet prev: T | undefined = undefined;\n\tfor (const item of items) {\n\t\tcallback(prev, item);\n\t\tprev = item;\n\t}\n\tcallback(prev, undefined);\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * A 2D array implementation.\n */\nexport class Array2D<T> {\n\tprivate readonly array: T[] = [];\n\n\tconstructor(\n\t\tpublic readonly width: number,\n\t\tpublic readonly height: number\n\t) {\n\t\tthis.array = new Array<T>(width * height);\n\t}\n\n\tget(x: number, y: number): T {\n\t\treturn this.array[x + y * this.width];\n\t}\n\n\tset(x: number, y: number, value: T): void {\n\t\tthis.array[x + y * this.width] = value;\n\t}\n}\n\n/**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n */\nexport class DynamicProgrammingDiffing implements IDiffAlgorithm {\n\tcompute(\n\t\tsequence1: ISequence,\n\t\tsequence2: ISequence,\n\t\ttimeout: ITimeout = InfiniteTimeout.instance,\n\t\tequalityScore?: (offset1: number, offset2: number) => number\n\t): DiffAlgorithmResult {\n\t\tif (sequence1.length === 0 || sequence2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(sequence1, sequence2);\n\t\t}\n\n\t\t/**\n\t\t * lcsLengths.get(i, j): Length of the longest common subsequence of \n\t\t * sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n\t\t */\n\t\tconst lcsLengths = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst directions = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst lengths = new Array2D<number>(sequence1.length, sequence2.length);\n\n\t\t// Initialize lcsLengths\n\t\tfor (let s1 = 0; s1 < sequence1.length; s1++) {\n\t\t\tfor (let s2 = 0; s2 < sequence2.length; s2++) {\n\t\t\t\tif (!timeout.isValid()) {\n\t\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n\t\t\t\t}\n\n\t\t\t\tconst horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n\t\t\t\tconst verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n\n\t\t\t\tlet extendedSeqScore: number;\n\t\t\t\tif (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n\t\t\t\t\tif (s1 === 0 || s2 === 0) {\n\t\t\t\t\t\textendedSeqScore = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\textendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) {\n\t\t\t\t\t\t// Prefer consecutive diagonals\n\t\t\t\t\t\textendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\textendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1);\n\t\t\t\t} else {\n\t\t\t\t\textendedSeqScore = -1;\n\t\t\t\t}\n\n\t\t\t\tconst newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n\n\t\t\t\tif (newValue === extendedSeqScore) {\n\t\t\t\t\t// Prefer diagonals\n\t\t\t\t\tconst prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n\t\t\t\t\tlengths.set(s1, s2, prevLen + 1);\n\t\t\t\t\tdirections.set(s1, s2, 3);\n\t\t\t\t} else if (newValue === horizontalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 1);\n\t\t\t\t} else if (newValue === verticalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 2);\n\t\t\t\t}\n\n\t\t\t\tlcsLengths.set(s1, s2, newValue);\n\t\t\t}\n\t\t}\n\n\t\t// Backtracking\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = sequence1.length;\n\t\tlet lastAligningPosS2: number = sequence2.length;\n\n\t\tfunction reportDecreasingAligningPositions(s1: number, s2: number): void {\n\t\t\tif (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(s1 + 1, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(s2 + 1, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastAligningPosS1 = s1;\n\t\t\tlastAligningPosS2 = s2;\n\t\t}\n\n\t\tlet s1 = sequence1.length - 1;\n\t\tlet s2 = sequence2.length - 1;\n\t\twhile (s1 >= 0 && s2 >= 0) {\n\t\t\tif (directions.get(s1, s2) === 3) {\n\t\t\t\treportDecreasingAligningPositions(s1, s2);\n\t\t\t\ts1--;\n\t\t\t\ts2--;\n\t\t\t} else {\n\t\t\t\tif (directions.get(s1, s2) === 1) {\n\t\t\t\t\ts1--;\n\t\t\t\t} else {\n\t\t\t\t\ts2--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treportDecreasingAligningPositions(-1, -1);\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n */\nexport class MyersDiffAlgorithm implements IDiffAlgorithm {\n\tcompute(seq1: ISequence, seq2: ISequence, timeout: ITimeout = InfiniteTimeout.instance): DiffAlgorithmResult {\n\t\t// Common special cases - early return improves performance dramatically\n\t\tif (seq1.length === 0 || seq2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(seq1, seq2);\n\t\t}\n\n\t\tconst seqX = seq1; // Text on the x axis\n\t\tconst seqY = seq2; // Text on the y axis\n\n\t\tfunction getXAfterSnake(x: number, y: number): number {\n\t\t\twhile (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n\t\t\t\tx++;\n\t\t\t\ty++;\n\t\t\t}\n\t\t\treturn x;\n\t\t}\n\n\t\tlet d = 0;\n\t\t// V[k]: X value of longest d-line that ends in diagonal k.\n\t\t// d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.\n\t\t// diagonal k: Set of points (x,y) with x-y = k.\n\t\tconst V = new FastInt32Array();\n\t\tV.set(0, getXAfterSnake(0, 0));\n\n\t\tconst paths = new FastArrayNegativeIndices<SnakePath | null>();\n\t\tpaths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n\n\t\tlet k = 0;\n\n\t\tloop: while (true) {\n\t\t\td++;\n\t\t\tif (!timeout.isValid()) {\n\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n\t\t\t}\n\t\t\t// The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result.\n\t\t\tconst lowerBound = -Math.min(d, seqY.length + (d % 2));\n\t\t\tconst upperBound = Math.min(d, seqX.length + (d % 2));\n\t\t\tfor (k = lowerBound; k <= upperBound; k += 2) {\n\t\t\t\t// We can use the X values of (d-1)-lines to compute X value of the longest d-lines.\n\t\t\t\tconst maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // Vertical non-diagonal (add symbol in seqX)\n\t\t\t\tconst maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // Horizontal non-diagonal (delete symbol in seqX)\n\t\t\t\tconst x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n\t\t\t\tconst y = x - k;\n\t\t\t\tif (x > seqX.length || y > seqY.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst newMaxX = getXAfterSnake(x, y);\n\t\t\t\tV.set(k, newMaxX);\n\t\t\t\tconst lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n\t\t\t\tpaths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n\n\t\t\t\tif (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {\n\t\t\t\t\tbreak loop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet path = paths.get(k);\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = seqX.length;\n\t\tlet lastAligningPosS2: number = seqY.length;\n\n\t\twhile (true) {\n\t\t\tconst endX = path ? path.x + path.length : 0;\n\t\t\tconst endY = path ? path.y + path.length : 0;\n\n\t\t\tif (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(endX, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(endY, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tif (!path) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastAligningPosS1 = path.x;\n\t\t\tlastAligningPosS2 = path.y;\n\n\t\t\tpath = path.prev;\n\t\t}\n\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n\nclass SnakePath {\n\tconstructor(\n\t\tpublic readonly prev: SnakePath | null,\n\t\tpublic readonly x: number,\n\t\tpublic readonly y: number,\n\t\tpublic readonly length: number\n\t) { }\n}\n\n/**\n * An array that supports fast negative indices.\n */\nclass FastInt32Array {\n\tprivate positiveArr: Int32Array = new Int32Array(10);\n\tprivate negativeArr: Int32Array = new Int32Array(10);\n\n\tget(idx: number): number {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: number): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tif (idx >= this.negativeArr.length) {\n\t\t\t\tconst arr = this.negativeArr;\n\t\t\t\tthis.negativeArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.negativeArr.set(arr);\n\t\t\t}\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tif (idx >= this.positiveArr.length) {\n\t\t\t\tconst arr = this.positiveArr;\n\t\t\t\tthis.positiveArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.positiveArr.set(arr);\n\t\t\t}\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n\n/**\n * An array that supports fast negative indices for objects.\n */\nclass FastArrayNegativeIndices<T> {\n\tprivate readonly positiveArr: T[] = [];\n\tprivate readonly negativeArr: T[] = [];\n\n\tget(idx: number): T {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: T): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence, OffsetPair, SequenceDiff } from '../algorithms/diffAlgorithm.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet result = sequenceDiffs;\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\t// Sometimes, calling this function twice improves the result.\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\tresult = shiftSequenceDiffs(sequence1, sequence2, result);\n\treturn result;\n}\n\n/**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\nfunction joinSequenceDiffsByShifting(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (sequenceDiffs.length === 0) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tconst result: SequenceDiff[] = [];\n\tresult.push(sequenceDiffs[0]);\n\n\t// First move them all to the left as much as possible and join them if possible\n\tfor (let i = 1; i < sequenceDiffs.length; i++) {\n\t\tconst prevResult = result[result.length - 1];\n\t\tlet cur = sequenceDiffs[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 1; d <= length; d++) {\n\t\t\t\tif (\n\t\t\t\t\tsequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) ||\n\t\t\t\t\tsequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\td--;\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[result.length - 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length),\n\t\t\t\t\tnew OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcur = cur.delta(-d);\n\t\t}\n\n\t\tresult.push(cur);\n\t}\n\n\tconst result2: SequenceDiff[] = [];\n\t// Then move them all to the right and join them again if possible\n\tfor (let i = 0; i < result.length - 1; i++) {\n\t\tconst nextResult = result[i + 1];\n\t\tlet cur = result[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 0; d < length; d++) {\n\t\t\t\tif (\n\t\t\t\t\t!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) ||\n\t\t\t\t\t!sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[i + 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive),\n\t\t\t\t\tnew OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (d > 0) {\n\t\t\t\tcur = cur.delta(d);\n\t\t\t}\n\t\t}\n\n\t\tresult2.push(cur);\n\t}\n\n\tif (result.length > 0) {\n\t\tresult2.push(result[result.length - 1]);\n\t}\n\n\treturn result2;\n}\n\nfunction shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tfor (let i = 0; i < sequenceDiffs.length; i++) {\n\t\tconst prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined);\n\t\tconst diff = sequenceDiffs[i];\n\t\tconst nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined);\n\n\t\tconst seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n\t\tconst seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n\n\t\tif (diff.seq1Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n\t\t} else if (diff.seq2Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n\t\t}\n\t}\n\n\treturn sequenceDiffs;\n}\n\nfunction shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq1ValidRange: OffsetRange, seq2ValidRange: OffsetRange): SequenceDiff {\n\tconst maxShiftLimit = 100; // To prevent performance issues\n\n\tlet deltaBefore = 1;\n\twhile (\n\t\tdiff.seq1Range.start - deltaBefore >= seq1ValidRange.start &&\n\t\tdiff.seq2Range.start - deltaBefore >= seq2ValidRange.start &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit\n\t) {\n\t\tdeltaBefore++;\n\t}\n\tdeltaBefore--;\n\n\tlet deltaAfter = 0;\n\twhile (\n\t\tdiff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive &&\n\t\tdiff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit\n\t) {\n\t\tdeltaAfter++;\n\t}\n\n\tif (deltaBefore === 0 && deltaAfter === 0) {\n\t\treturn diff;\n\t}\n\n\tlet bestDelta = 0;\n\tlet bestScore = -1;\n\t// Find best scored delta\n\tfor (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n\t\tconst seq2OffsetStart = diff.seq2Range.start + delta;\n\t\tconst seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n\t\tconst seq1Offset = diff.seq1Range.start + delta;\n\n\t\tconst score = sequence1.getBoundaryScore!(seq1Offset) + sequence2.getBoundaryScore!(seq2OffsetStart) + sequence2.getBoundaryScore!(seq2OffsetEndExclusive);\n\t\tif (score > bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestDelta = delta;\n\t\t}\n\t}\n\n\treturn diff.delta(bestDelta);\n}\n\nexport function removeShortMatches(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\tfor (const s of sequenceDiffs) {\n\t\tconst last = result[result.length - 1];\n\t\tif (!last) {\n\t\t\tresult.push(s);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {\n\t\t\tresult[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n\t\t} else {\n\t\t\tresult.push(s);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function extendDiffsToEntireWordIfAppropriate(\n\tsequence1: LinesSliceCharSequence,\n\tsequence2: LinesSliceCharSequence,\n\tsequenceDiffs: SequenceDiff[],\n\tfindParent: (seq: LinesSliceCharSequence, idx: number) => OffsetRange | undefined,\n\tforce: boolean = false\n): SequenceDiff[] {\n\tconst equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n\n\tconst additional: SequenceDiff[] = [];\n\n\tlet lastPoint = new OffsetPair(0, 0);\n\n\tfunction scanWord(pair: OffsetPair, equalMapping: SequenceDiff): void {\n\t\tif (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst w1 = findParent(sequence1, pair.offset1);\n\t\tconst w2 = findParent(sequence2, pair.offset2);\n\t\tif (!w1 || !w2) {\n\t\t\treturn;\n\t\t}\n\t\tlet w = new SequenceDiff(w1, w2);\n\t\tconst equalPart = w.intersect(equalMapping)!;\n\n\t\tlet equalChars1 = equalPart.seq1Range.length;\n\t\tlet equalChars2 = equalPart.seq2Range.length;\n\n\t\twhile (equalMappings.length > 0) {\n\t\t\tconst next = equalMappings[0];\n\t\t\tconst intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);\n\t\t\tif (!intersects) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst v1 = findParent(sequence1, next.seq1Range.start);\n\t\t\tconst v2 = findParent(sequence2, next.seq2Range.start);\n\t\t\tconst v = new SequenceDiff(v1!, v2!);\n\t\t\tconst equalPartV = v.intersect(next)!;\n\n\t\t\tequalChars1 += equalPartV.seq1Range.length;\n\t\t\tequalChars2 += equalPartV.seq2Range.length;\n\n\t\t\tw = w.join(v);\n\n\t\t\tif (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {\n\t\t\t\tequalMappings.shift();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ((force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length) || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {\n\t\t\tadditional.push(w);\n\t\t}\n\n\t\tlastPoint = w.getEndExclusives();\n\t}\n\n\twhile (equalMappings.length > 0) {\n\t\tconst next = equalMappings.shift()!;\n\t\tif (next.seq1Range.isEmpty) {\n\t\t\tcontinue;\n\t\t}\n\t\tscanWord(next.getStarts(), next);\n\t\tscanWord(next.getEndExclusives().delta(-1), next);\n\t}\n\n\tconst merged = mergeSequenceDiffs(sequenceDiffs, additional);\n\treturn merged;\n}\n\nfunction mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\n\twhile (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n\t\tconst sd1 = sequenceDiffs1[0];\n\t\tconst sd2 = sequenceDiffs2[0];\n\n\t\tlet next: SequenceDiff;\n\t\tif (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {\n\t\t\tnext = sequenceDiffs1.shift()!;\n\t\t} else {\n\t\t\tnext = sequenceDiffs2.shift()!;\n\t\t}\n\n\t\tif (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {\n\t\t\tresult[result.length - 1] = result[result.length - 1].join(next);\n\t\t} else {\n\t\t\tresult.push(next);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function removeVeryShortMatchingLinesBetweenDiffs(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange);\n\t\t\t\tconst unchangedTextWithoutWs = unchangedText.replace(/\\s/g, '');\n\t\t\t\tif (unchangedTextWithoutWs.length <= 4\n\t\t\t\t\t&& (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\treturn diffs;\n}\n\nexport function removeVeryShortMatchingTextBetweenLongDiffs(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\n\t\t\t\tconst unchangedLineCount = sequence1.countLinesIn(unchangedRange);\n\t\t\t\tif (unchangedLineCount > 5 || unchangedRange.length > 500) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange).trim();\n\t\t\t\tif (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n\t\t\t\tconst beforeSeq1Length = before.seq1Range.length;\n\t\t\t\tconst beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n\t\t\t\tconst beforeSeq2Length = before.seq2Range.length;\n\n\t\t\t\tconst afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n\t\t\t\tconst afterSeq1Length = after.seq1Range.length;\n\t\t\t\tconst afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n\t\t\t\tconst afterSeq2Length = after.seq2Range.length;\n\n\t\t\t\tconst max = 2 * 40 + 50;\n\t\t\t\tfunction cap(v: number): number {\n\t\t\t\t\treturn Math.min(v, max);\n\t\t\t\t}\n\n\t\t\t\tif (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5)\n\t\t\t\t\t+ Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > ((max ** 1.5) ** 1.5) * 1.3) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\tconst newDiffs: SequenceDiff[] = [];\n\n\t// Remove short suffixes/prefixes\n\tforEachWithNeighbors(diffs, (prev, cur, next) => {\n\t\tlet newDiff = cur;\n\n\t\tfunction shouldMarkAsChanged(text: string): boolean {\n\t\t\treturn text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n\t\t}\n\n\t\tconst fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n\t\tconst prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n\t\tif (shouldMarkAsChanged(prefix)) {\n\t\t\tnewDiff = newDiff.deltaStart(-prefix.length);\n\t\t}\n\t\tconst suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n\t\tif (shouldMarkAsChanged(suffix)) {\n\t\t\tnewDiff = newDiff.deltaEnd(suffix.length);\n\t\t}\n\n\t\tconst availableSpace = SequenceDiff.fromOffsetPairs(\n\t\t\tprev ? prev.getEndExclusives() : OffsetPair.zero,\n\t\t\tnext ? next.getStarts() : OffsetPair.max\n\t\t);\n\t\tconst intersected = newDiff.intersect(availableSpace)!;\n\t\tif (newDiffs.length > 0 && intersected.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {\n\t\t\tnewDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(intersected);\n\t\t} else {\n\t\t\tnewDiffs.push(intersected);\n\t\t}\n\t});\n\n\treturn newDiffs;\n}\n\nfunction forEachWithNeighbors<T>(items: T[], callback: (prev: T | undefined, cur: T, next: T | undefined) => void): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tcallback(items[i - 1], items[i], items[i + 1]);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tSpace: 32,\n\tTab: 9,\n};\n\nexport class LineSequence implements ISequence {\n\tconstructor(\n\t\tprivate readonly trimmedHash: number[],\n\t\tprivate readonly lines: string[]\n\t) {}\n\n\tgetElement(offset: number): number {\n\t\treturn this.trimmedHash[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.trimmedHash.length;\n\t}\n\n\tgetBoundaryScore(length: number): number {\n\t\tconst indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);\n\t\tconst indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);\n\t\treturn 1000 - (indentationBefore + indentationAfter);\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.lines.slice(range.start, range.endExclusive).join('\\n');\n\t}\n\n\tisStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.lines[offset1] === this.lines[offset2];\n\t}\n}\n\nfunction getIndentation(str: string): number {\n\tlet i = 0;\n\twhile (i < str.length && (str.charCodeAt(i) === CharCode.Space || str.charCodeAt(i) === CharCode.Tab)) {\n\t\ti++;\n\t}\n\treturn i;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tLineFeed: 10,\n\tCarriageReturn: 13,\n\tSpace: 32,\n\tTab: 9,\n\ta: 97,\n\tz: 122,\n\tA: 65,\n\tZ: 90,\n\tDigit0: 48,\n\tDigit9: 57,\n\tComma: 44,\n\tSemicolon: 59,\n};\n\nfunction isSpace(charCode: number): boolean {\n\treturn charCode === CharCode.Space || charCode === CharCode.Tab;\n}\n\n/**\n * Represents a range in terms of lines and columns.\n */\nexport interface IRange {\n\treadonly startLineNumber: number;\n\treadonly startColumn: number;\n\treadonly endLineNumber: number;\n\treadonly endColumn: number;\n}\n\nexport class Range implements IRange {\n\tpublic readonly startLineNumber: number;\n\tpublic readonly startColumn: number;\n\tpublic readonly endLineNumber: number;\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.startColumn = startColumn;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.endColumn = endColumn;\n\t}\n\n\tstatic fromPositions(start: Position, end: Position): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n}\n\nexport class Position {\n\tconstructor(\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly column: number\n\t) {}\n\n\tisBefore(other: Position): boolean {\n\t\tif (this.lineNumber < other.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (other.lineNumber < this.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.column < other.column;\n\t}\n}\n\nexport class LinesSliceCharSequence implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstElementOffsetByLineIdx: number[] = [];\n\tprivate readonly lineStartOffsets: number[] = [];\n\tprivate readonly trimmedWsLengthsByLineIdx: number[] = [];\n\tprivate readonly _range: Range;\n\n\tconstructor(\n\t\tpublic readonly lines: string[],\n\t\trange: Range,\n\t\tpublic readonly considerWhitespaceChanges: boolean\n\t) {\n\t\tthis._range = range;\n\t\tthis.firstElementOffsetByLineIdx.push(0);\n\t\tfor (let lineNumber = this._range.startLineNumber; lineNumber <= this._range.endLineNumber; lineNumber++) {\n\t\t\tlet line = lines[lineNumber - 1];\n\t\t\tlet lineStartOffset = 0;\n\t\t\tif (lineNumber === this._range.startLineNumber && this._range.startColumn > 1) {\n\t\t\t\tlineStartOffset = this._range.startColumn - 1;\n\t\t\t\tline = line.substring(lineStartOffset);\n\t\t\t}\n\t\t\tthis.lineStartOffsets.push(lineStartOffset);\n\n\t\t\tlet trimmedWsLength = 0;\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\tconst trimmedStartLine = line.trimStart();\n\t\t\t\ttrimmedWsLength = line.length - trimmedStartLine.length;\n\t\t\t\tline = trimmedStartLine.trimEnd();\n\t\t\t}\n\t\t\tthis.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n\n\t\t\tconst lineLength = lineNumber === this._range.endLineNumber ? Math.min(this._range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n\t\t\tfor (let i = 0; i < lineLength; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\n\t\t\tif (lineNumber < this._range.endLineNumber) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t\tthis.firstElementOffsetByLineIdx.push(this.elements.length);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoString(): string {\n\t\treturn `Slice: \"${this.text}\"`;\n\t}\n\n\tget text(): string {\n\t\treturn this.getText(new OffsetRange(0, this.length));\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.elements.slice(range.start, range.endExclusive).map(e => String.fromCharCode(e)).join('');\n\t}\n\n\tgetElement(offset: number): number {\n\t\treturn this.elements[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.elements.length;\n\t}\n\n\tpublic getBoundaryScore(length: number): number {\n\t\tconst prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n\t\tconst nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakCR && nextCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// don't break between \\r and \\n\n\t\t\treturn 0;\n\t\t}\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// prefer the linebreak before the change\n\t\t\treturn 150;\n\t\t}\n\n\t\tlet score = 0;\n\t\tif (prevCategory !== nextCategory) {\n\t\t\tscore += 10;\n\t\t\tif (prevCategory === CharBoundaryCategory.WordLower && nextCategory === CharBoundaryCategory.WordUpper) {\n\t\t\t\tscore += 1;\n\t\t\t}\n\t\t}\n\n\t\tscore += getCategoryBoundaryScore(prevCategory);\n\t\tscore += getCategoryBoundaryScore(nextCategory);\n\n\t\treturn score;\n\t}\n\n\tpublic translateOffset(offset: number, preference: 'left' | 'right' = 'right'): Position {\n\t\tconst i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n\t\tconst lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n\t\treturn new Position(\n\t\t\tthis._range.startLineNumber + i,\n\t\t\t1 + this.lineStartOffsets[i] + lineOffset + ((lineOffset === 0 && preference === 'left') ? 0 : this.trimmedWsLengthsByLineIdx[i])\n\t\t);\n\t}\n\n\tpublic translateRange(range: OffsetRange): Range {\n\t\tconst pos1 = this.translateOffset(range.start, 'right');\n\t\tconst pos2 = this.translateOffset(range.endExclusive, 'left');\n\t\tif (pos2.isBefore(pos1)) {\n\t\t\treturn Range.fromPositions(pos2, pos2);\n\t\t}\n\t\treturn Range.fromPositions(pos1, pos2);\n\t}\n\n\t/**\n\t * Finds the word that contains the character at the given offset\n\t */\n\tpublic findWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\t/** fooBar has the two sub-words foo and bar */\n\tpublic findSubWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\tpublic countLinesIn(range: OffsetRange): number {\n\t\treturn this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n\t}\n\n\tpublic isStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.elements[offset1] === this.elements[offset2];\n\t}\n\n\tpublic extendToFullLines(range: OffsetRange): OffsetRange {\n\t\tconst start = findLastMonotonous(this.firstElementOffsetByLineIdx, x => x <= range.start) ?? 0;\n\t\tconst end = findFirstMonotonous(this.firstElementOffsetByLineIdx, x => range.endExclusive <= x) ?? this.elements.length;\n\t\treturn new OffsetRange(start, end);\n\t}\n}\n\nfunction isWordChar(charCode: number): boolean {\n\treturn charCode >= CharCode.a && charCode <= CharCode.z\n\t\t|| charCode >= CharCode.A && charCode <= CharCode.Z\n\t\t|| charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9;\n}\n\nfunction isUpperCase(charCode: number): boolean {\n\treturn charCode >= CharCode.A && charCode <= CharCode.Z;\n}\n\nconst enum CharBoundaryCategory {\n\tWordLower,\n\tWordUpper,\n\tWordNumber,\n\tEnd,\n\tOther,\n\tSeparator,\n\tSpace,\n\tLineBreakCR,\n\tLineBreakLF,\n}\n\nconst categoryScore: Record<CharBoundaryCategory, number> = {\n\t[CharBoundaryCategory.WordLower]: 0,\n\t[CharBoundaryCategory.WordUpper]: 0,\n\t[CharBoundaryCategory.WordNumber]: 0,\n\t[CharBoundaryCategory.End]: 10,\n\t[CharBoundaryCategory.Other]: 2,\n\t[CharBoundaryCategory.Separator]: 30,\n\t[CharBoundaryCategory.Space]: 3,\n\t[CharBoundaryCategory.LineBreakCR]: 10,\n\t[CharBoundaryCategory.LineBreakLF]: 10,\n};\n\nfunction getCategoryBoundaryScore(category: CharBoundaryCategory): number {\n\treturn categoryScore[category];\n}\n\nfunction getCategory(charCode: number): CharBoundaryCategory {\n\tif (charCode === CharCode.LineFeed) {\n\t\treturn CharBoundaryCategory.LineBreakLF;\n\t} else if (charCode === CharCode.CarriageReturn) {\n\t\treturn CharBoundaryCategory.LineBreakCR;\n\t} else if (isSpace(charCode)) {\n\t\treturn CharBoundaryCategory.Space;\n\t} else if (charCode >= CharCode.a && charCode <= CharCode.z) {\n\t\treturn CharBoundaryCategory.WordLower;\n\t} else if (charCode >= CharCode.A && charCode <= CharCode.Z) {\n\t\treturn CharBoundaryCategory.WordUpper;\n\t} else if (charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9) {\n\t\treturn CharBoundaryCategory.WordNumber;\n\t} else if (charCode === -1) {\n\t\treturn CharBoundaryCategory.End;\n\t} else if (charCode === CharCode.Comma || charCode === CharCode.Semicolon) {\n\t\treturn CharBoundaryCategory.Separator;\n\t} else {\n\t\treturn CharBoundaryCategory.Other;\n\t}\n}\n\n// Binary search helpers\nfunction findLastIdxMonotonous<T>(array: T[], predicate: (item: T) => boolean): number {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid - 1;\n\t\t}\n\t}\n\treturn high;\n}\n\nfunction findLastMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tconst idx = findLastIdxMonotonous(array, predicate);\n\treturn idx >= 0 ? array[idx] : undefined;\n}\n\nfunction findFirstMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\tlow = mid + 1;\n\t\t}\n\t}\n\treturn low < array.length ? array[low] : undefined;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * A range of lines (1-based, end is exclusive).\n */\nexport class LineRange {\n\tconstructor(\n\t\tpublic readonly startLineNumber: number,\n\t\tpublic readonly endLineNumberExclusive: number\n\t) {\n\t\tif (startLineNumber > endLineNumberExclusive) {\n\t\t\tthrow new Error(`Invalid range: ${startLineNumber} > ${endLineNumberExclusive}`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumberExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endLineNumberExclusive - this.startLineNumber;\n\t}\n\n\tjoin(other: LineRange): LineRange {\n\t\treturn new LineRange(\n\t\t\tMath.min(this.startLineNumber, other.startLineNumber),\n\t\t\tMath.max(this.endLineNumberExclusive, other.endLineNumberExclusive)\n\t\t);\n\t}\n\n\tintersectsOrTouches(other: LineRange): boolean {\n\t\treturn this.startLineNumber <= other.endLineNumberExclusive\n\t\t\t&& other.startLineNumber <= this.endLineNumberExclusive;\n\t}\n\n\ttoOffsetRange(): OffsetRange {\n\t\treturn new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.startLineNumber}, ${this.endLineNumberExclusive})`;\n\t}\n}\n\n/**\n * A mapping between two ranges.\n */\nexport class RangeMapping {\n\tconstructor(\n\t\tpublic readonly originalRange: Range,\n\t\tpublic readonly modifiedRange: Range\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${rangeToString(this.originalRange)} <-> ${rangeToString(this.modifiedRange)}`;\n\t}\n\n\tstatic assertSorted(rangeMappings: RangeMapping[]): void {\n\t\tfor (let i = 1; i < rangeMappings.length; i++) {\n\t\t\tconst prev = rangeMappings[i - 1];\n\t\t\tconst cur = rangeMappings[i];\n\t\t\tif (!(prev.originalRange.endLineNumber <= cur.originalRange.startLineNumber ||\n\t\t\t\t(prev.originalRange.endLineNumber === cur.originalRange.startLineNumber && prev.originalRange.endColumn <= cur.originalRange.startColumn))) {\n\t\t\t\tthrow new Error('RangeMappings must be sorted');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction rangeToString(range: Range): string {\n\treturn `(${range.startLineNumber}:${range.startColumn})-(${range.endLineNumber}:${range.endColumn})`;\n}\n\n/**\n * A mapping between two line ranges.\n */\nexport class LineRangeMapping {\n\tconstructor(\n\t\tpublic readonly original: LineRange,\n\t\tpublic readonly modified: LineRange\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.original} <-> ${this.modified}`;\n\t}\n\n\t/**\n\t * This method assumes that the LineRangeMapping describes a valid diff!\n\t * I.e. if one range is empty, the other range cannot be the entire document.\n\t * It avoids various problems when the line range points to non-existing line-numbers.\n\t*/\n\ttoRangeMapping2(originalLines: string[], modifiedLines: string[]): RangeMapping {\n\t\tconst isValidLineNumber = (lineNumber: number, lines: string[]): boolean => {\n\t\t\treturn lineNumber >= 1 && lineNumber <= lines.length;\n\t\t};\n\n\t\tconst normalizePosition = (lineNumber: number, column: number, lines: string[]): Position => {\n\t\t\tif (lineNumber < 1) {\n\t\t\t\treturn new Position(1, 1);\n\t\t\t}\n\t\t\tif (lineNumber > lines.length) {\n\t\t\t\treturn new Position(lines.length, lines[lines.length - 1].length + 1);\n\t\t\t}\n\t\t\tconst line = lines[lineNumber - 1];\n\t\t\tif (column > line.length + 1) {\n\t\t\t\treturn new Position(lineNumber, line.length + 1);\n\t\t\t}\n\t\t\treturn new Position(lineNumber, column);\n\t\t};\n\n\t\tif (isValidLineNumber(this.original.endLineNumberExclusive, originalLines)\n\t\t\t&& isValidLineNumber(this.modified.endLineNumberExclusive, modifiedLines)) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tnew Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1),\n\t\t\t\tnew Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1),\n\t\t\t);\n\t\t}\n\n\t\tif (!this.original.isEmpty && !this.modified.isEmpty) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.original.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.modified.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, originalLines),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, modifiedLines),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Situation now: one range is empty and one range touches the last line and one range starts at line 1.\n\t\t// This shouldn't happen for valid diffs.\n\t\tthrow new Error('Invalid diff: cannot convert to range mapping');\n\t}\n}\n\n/**\n * A detailed mapping between two line ranges, including inner changes.\n */\nexport class DetailedLineRangeMapping extends LineRangeMapping {\n\tconstructor(\n\t\toriginal: LineRange,\n\t\tmodified: LineRange,\n\t\tpublic readonly innerChanges: RangeMapping[] | undefined\n\t) {\n\t\tsuper(original, modified);\n\t}\n}\n\n/**\n * Result of a lines diff computation.\n */\nexport class LinesDiff {\n\tconstructor(\n\t\tpublic readonly changes: DetailedLineRangeMapping[],\n\t\tpublic readonly moves: MovedText[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * Represents text that was moved from one location to another.\n */\nexport class MovedText {\n\tconstructor(\n\t\tpublic readonly lineRangeMapping: LineRangeMapping,\n\t\tpublic readonly changes: DetailedLineRangeMapping[]\n\t) {}\n}\n\n/**\n * Helper to convert from range mappings to line range mappings.\n */\nexport function lineRangeMappingFromRangeMappings(\n\talignments: RangeMapping[],\n\toriginalLines: string[],\n\tmodifiedLines: string[],\n\tdontAssertStartLine: boolean = false\n): DetailedLineRangeMapping[] {\n\tconst changes: DetailedLineRangeMapping[] = [];\n\tfor (const g of groupAdjacentBy(\n\t\talignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)),\n\t\t(a1, a2) =>\n\t\t\ta1.original.intersectsOrTouches(a2.original)\n\t\t\t|| a1.modified.intersectsOrTouches(a2.modified)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new DetailedLineRangeMapping(\n\t\t\tfirst.original.join(last.original),\n\t\t\tfirst.modified.join(last.modified),\n\t\t\tg.map(a => a.innerChanges![0])\n\t\t));\n\t}\n\n\tif (!dontAssertStartLine) {\n\t\t// Assert that the changes are sorted and non-overlapping (but don't throw - just log in debug)\n\t\tfor (let i = 1; i < changes.length; i++) {\n\t\t\tconst prev = changes[i - 1];\n\t\t\tconst cur = changes[i];\n\t\t\tif (prev.original.endLineNumberExclusive > cur.original.startLineNumber ||\n\t\t\t\tprev.modified.endLineNumberExclusive > cur.modified.startLineNumber) {\n\t\t\t\t// Silently skip validation issue - may be expected in some edge cases\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes;\n}\n\nfunction getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): DetailedLineRangeMapping {\n\tlet lineStartDelta = 0;\n\tlet lineEndDelta = 0;\n\n\t// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.\n\n\t// original: ]xxx \\n <- this line is not modified\n\t// modified: ]xx \\n\n\tif (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1\n\t\t&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber\n\t\t&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineEndDelta = -1;\n\t}\n\n\t// original: xxx[ \\n <- this line is not modified\n\t// modified: xxx[ \\n\n\tif (rangeMapping.modifiedRange.startColumn - 1 >= (modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startColumn - 1 >= (originalLines[rangeMapping.originalRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta\n\t\t&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineStartDelta = 1;\n\t}\n\n\tconst originalLineRange = new LineRange(\n\t\trangeMapping.originalRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.originalRange.endLineNumber + 1 + lineEndDelta\n\t);\n\tconst modifiedLineRange = new LineRange(\n\t\trangeMapping.modifiedRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta\n\t);\n\n\treturn new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);\n}\n\nfunction* groupAdjacentBy<T>(items: Iterable<T>, shouldBeGrouped: (item1: T, item2: T) => boolean): Iterable<T[]> {\n\tlet currentGroup: T[] | undefined;\n\tlet last: T | undefined;\n\tfor (const item of items) {\n\t\tif (last !== undefined && shouldBeGrouped(last, item)) {\n\t\t\tcurrentGroup!.push(item);\n\t\t} else {\n\t\t\tif (currentGroup) {\n\t\t\t\tyield currentGroup;\n\t\t\t}\n\t\t\tcurrentGroup = [item];\n\t\t}\n\t\tlast = item;\n\t}\n\tif (currentGroup) {\n\t\tyield currentGroup;\n\t}\n}\n\n/**\n * Interface for text that provides lines.\n */\nexport interface IText {\n\treadonly lineCount: number;\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport class ArrayText implements IText {\n\tconstructor(public readonly lines: string[]) {}\n\n\tget lineCount(): number {\n\t\treturn this.lines.length;\n\t}\n\n\tgetLineContent(lineNumber: number): string {\n\t\treturn this.lines[lineNumber - 1];\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { SequenceDiff, ITimeout, InfiniteTimeout, DateTimeout } from '../algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from '../algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from '../algorithms/myersDiffAlgorithm.js';\nimport {\n\toptimizeSequenceDiffs,\n\textendDiffsToEntireWordIfAppropriate,\n\tremoveShortMatches,\n\tremoveVeryShortMatchingLinesBetweenDiffs,\n\tremoveVeryShortMatchingTextBetweenLongDiffs,\n} from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence, Range } from './linesSliceCharSequence.js';\nimport {\n\tLineRange,\n\tRangeMapping,\n\tLineRangeMapping,\n\tDetailedLineRangeMapping,\n\tLinesDiff,\n\tArrayText,\n\tlineRangeMappingFromRangeMappings,\n} from './rangeMapping.js';\n\nexport { DateTimeout, InfiniteTimeout, ITimeout } from '../algorithms/diffAlgorithm.js';\nexport { LineRange, RangeMapping, LineRangeMapping, DetailedLineRangeMapping, LinesDiff } from './rangeMapping.js';\nexport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * Options for the lines diff computer.\n */\nexport interface ILinesDiffComputerOptions {\n\t/**\n\t * Maximum computation time in milliseconds. 0 means no timeout.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * Whether to ignore leading and trailing whitespace.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * Whether to compute moved text detection.\n\t */\n\tcomputeMoves: boolean;\n\n\t/**\n\t * Whether to extend diffs to subword boundaries.\n\t */\n\textendToSubwords: boolean;\n}\n\n/**\n * The main diff computer that computes detailed line diffs.\n */\nexport class DefaultLinesDiffComputer {\n\tprivate readonly _dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly _myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\t// Handle identical single line\n\t\tif (originalLines.length <= 1 && arraysEqual(originalLines, modifiedLines)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\t// Handle empty single line - treat as full replacement\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\t// Create perfect hash for lines (trimmed)\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\t// Choose algorithm based on size\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this._dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\n\t\t// Apply heuristics\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original.lines, modified.lines);\n\n\t\t// TODO: Compute moves if options.computeMoves is true\n\t\tconst moves: never[] = [];\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate _refineDiff(\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\tdiff: SequenceDiff,\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions\n\t): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this._dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this._myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet diffs = diffResult.diffs;\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","/* @ts-self-types=\"./diff_wasm.d.ts\" */\n\n/**\n * Compute a diff between two texts.\n *\n * # Arguments\n * * `original` - The original text (lines separated by newlines)\n * * `modified` - The modified text (lines separated by newlines)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {string} original\n * @param {string} modified\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiff(original, modified, options) {\n const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(modified, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.computeDiff(ptr0, len0, ptr1, len1, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Compute a diff between two arrays of lines.\n *\n * # Arguments\n * * `original_lines` - The original lines (as a JavaScript array of strings)\n * * `modified_lines` - The modified lines (as a JavaScript array of strings)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {any} original_lines\n * @param {any} modified_lines\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiffLines(original_lines, modified_lines, options) {\n const ret = wasm.computeDiffLines(original_lines, modified_lines, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Initialize panic hook for better error messages in the browser console.\n */\nexport function init() {\n wasm.init();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_92b29b0548f8b746: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Number_9a4e0ecb0fa16705: function(arg0) {\n const ret = Number(arg0);\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_d968e41184ae354f: function(arg0, arg1) {\n const v = arg1;\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_fa956cfa2d1bd751: function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_c25d447a39f5578f: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_aca499c5de7ff5e5: function(arg0, arg1) {\n const ret = arg0 in arg1;\n return ret;\n },\n __wbg___wbindgen_is_bigint_2f76dc55065b4273: function(arg0) {\n const ret = typeof(arg0) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_1ff95bcc5517c252: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_ea9085d691f535d3: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_object_a27215656b807791: function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_undefined_c05833b95a3cf397: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_e659fcf7b0e32763: function(arg0, arg1) {\n const ret = arg0 === arg1;\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_db4c3b15f63fc170: function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n },\n __wbg___wbindgen_number_get_394265ed1e1b84ee: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_b0ca35b86a603356: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_344f42d3211c4765: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_8a2dd23819f8a60a: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_done_89b2b13e91a60321: function(arg0) {\n const ret = arg0.done;\n return ret;\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_c7eb1f358a7654df: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_unchecked_6e0ad6d2a41b06f6: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = arg0[arg1];\n return ret;\n },\n __wbg_instanceof_ArrayBuffer_4480b9e0068a8adb: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_309b927aaf7a3fc7: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_0677c962b281d01a: function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n },\n __wbg_isSafeInteger_04f36e4056f1b851: function(arg0) {\n const ret = Number.isSafeInteger(arg0);\n return ret;\n },\n __wbg_iterator_6f722e4a93058b71: function() {\n const ret = Symbol.iterator;\n return ret;\n },\n __wbg_length_1f0964f4a5e2c6d8: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_length_370319915dc99107: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_32b398fb48b6d94a: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_new_cd45aabdf6073e84: function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n },\n __wbg_new_da52cf8fe3429cb2: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_next_6dbf2c0ac8cde20f: function(arg0) {\n const ret = arg0.next;\n return ret;\n },\n __wbg_next_71f2aa1cb3d1e37e: function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments); },\n __wbg_now_86c0d4ba3fa605b8: function() {\n const ret = Date.now();\n return ret;\n },\n __wbg_prototypesetcall_4770620bbe4688a0: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_8a16b38e4805b298: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_a5d5488a9589444a: function(arg0) {\n const ret = arg0.value;\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./diff_wasm_bg.js\": import0,\n };\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('diff_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","/**\n * WASM module loader.\n *\n * Handles async initialization of the WASM module.\n */\n\nimport type { WasmModule } from './types.js';\n// @ts-ignore -- generated at build time by `npm run build:wasm` (wasm-pack --target web).\nimport * as wasm from '../../../out/pkg/diff_wasm.js';\n\nlet wasmModule: WasmModule | null = null;\nlet initPromise: Promise<WasmModule> | null = null;\n\n/**\n * Initialize the WASM module.\n *\n * This must be called before using any WASM-based diff functions.\n * It's safe to call multiple times — subsequent calls are no-ops.\n *\n * @returns Promise that resolves when WASM is ready\n */\nexport async function initWasm(): Promise<WasmModule> {\n\tif (wasmModule) {\n\t\treturn wasmModule;\n\t}\n\tif (initPromise) {\n\t\treturn initPromise;\n\t}\n\n\tinitPromise = (async () => {\n\t\tconst wasmUrl = new URL('../../../out/pkg/diff_wasm_bg.wasm', import.meta.url);\n\t\t// Node's undici fetch does not support file:// URLs, so read bytes ourselves.\n\t\tlet source: BufferSource | URL = wasmUrl;\n\t\tif (typeof process !== 'undefined' && process.versions?.node) {\n\t\t\tconst { readFile } = await import('node:fs/promises');\n\t\t\tsource = await readFile(wasmUrl);\n\t\t}\n\t\tawait wasm.default({ module_or_path: source });\n\t\twasm.init();\n\t\twasmModule = wasm as unknown as WasmModule;\n\t\treturn wasmModule;\n\t})();\n\n\treturn initPromise;\n}\n\n/**\n * Get the WASM module synchronously.\n * \n * @throws Error if WASM hasn't been initialized yet\n * @returns The WASM module\n */\nexport function getWasm(): WasmModule {\n\tif (!wasmModule) {\n\t\tthrow new Error('WASM not initialized. Call initWasm() first and await it.');\n\t}\n\treturn wasmModule;\n}\n\n/**\n * Check if the WASM module is initialized.\n */\nexport function isWasmInitialized(): boolean {\n\treturn wasmModule !== null;\n}\n\n/**\n * Reset the WASM module (useful for testing).\n * @internal\n */\nexport function resetWasm(): void {\n\twasmModule = null;\n\tinitPromise = null;\n}\n","/**\n * Conversions between `LinesDiff` (in-memory class instances) and\n * `WireLinesDiff` (plain JSON-friendly shape used on the worker boundary).\n */\n\nimport {\n LinesDiff,\n DetailedLineRangeMapping,\n LineRange,\n LineRangeMapping,\n MovedText,\n RangeMapping,\n} from '../defaultLinesDiffComputer/rangeMapping.js';\nimport { Range } from '../defaultLinesDiffComputer/linesSliceCharSequence.js';\nimport type {\n WasmDetailedLineRangeMapping,\n WasmRangeMapping,\n} from '../wasm/types.js';\nimport type { WireLinesDiff, WireMovedText } from './protocol.js';\n\nexport function linesDiffToWire(diff: LinesDiff): WireLinesDiff {\n return {\n changes: diff.changes.map(detailedToWire),\n moves: diff.moves.map(moveToWire),\n hitTimeout: diff.hitTimeout,\n };\n}\n\nexport function wireToLinesDiff(wire: WireLinesDiff): LinesDiff {\n const changes = wire.changes.map(wireToDetailed);\n const moves = wire.moves.map(wireToMove);\n return new LinesDiff(changes, moves, wire.hitTimeout);\n}\n\nfunction detailedToWire(m: DetailedLineRangeMapping): WasmDetailedLineRangeMapping {\n return {\n original: {\n startLineNumber: m.original.startLineNumber,\n endLineNumberExclusive: m.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.modified.startLineNumber,\n endLineNumberExclusive: m.modified.endLineNumberExclusive,\n },\n innerChanges: m.innerChanges ? m.innerChanges.map(rangeMappingToWire) : null,\n };\n}\n\nfunction wireToDetailed(m: WasmDetailedLineRangeMapping): DetailedLineRangeMapping {\n const inner = m.innerChanges?.map(wireToRangeMapping);\n return new DetailedLineRangeMapping(\n new LineRange(m.original.startLineNumber, m.original.endLineNumberExclusive),\n new LineRange(m.modified.startLineNumber, m.modified.endLineNumberExclusive),\n inner,\n );\n}\n\nfunction rangeMappingToWire(rm: RangeMapping): WasmRangeMapping {\n return {\n originalStartLine: rm.originalRange.startLineNumber,\n originalStartColumn: rm.originalRange.startColumn,\n originalEndLine: rm.originalRange.endLineNumber,\n originalEndColumn: rm.originalRange.endColumn,\n modifiedStartLine: rm.modifiedRange.startLineNumber,\n modifiedStartColumn: rm.modifiedRange.startColumn,\n modifiedEndLine: rm.modifiedRange.endLineNumber,\n modifiedEndColumn: rm.modifiedRange.endColumn,\n };\n}\n\nfunction wireToRangeMapping(rm: WasmRangeMapping): RangeMapping {\n return new RangeMapping(\n new Range(rm.originalStartLine, rm.originalStartColumn, rm.originalEndLine, rm.originalEndColumn),\n new Range(rm.modifiedStartLine, rm.modifiedStartColumn, rm.modifiedEndLine, rm.modifiedEndColumn),\n );\n}\n\nfunction moveToWire(m: MovedText): WireMovedText {\n return {\n lineRangeMapping: {\n original: {\n startLineNumber: m.lineRangeMapping.original.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.lineRangeMapping.modified.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.modified.endLineNumberExclusive,\n },\n },\n changes: m.changes.map(detailedToWire),\n };\n}\n\nfunction wireToMove(m: WireMovedText): MovedText {\n const lrm = new LineRangeMapping(\n new LineRange(m.lineRangeMapping.original.startLineNumber, m.lineRangeMapping.original.endLineNumberExclusive),\n new LineRange(m.lineRangeMapping.modified.startLineNumber, m.lineRangeMapping.modified.endLineNumberExclusive),\n );\n return new MovedText(lrm, m.changes.map(wireToDetailed));\n}\n"],"names":["CharCode","wasm.default","wasm.init","wasm"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vscode/diff",
3
- "version": "0.0.2-23",
3
+ "version": "0.0.2-24",
4
4
  "description": "A high-performance diff algorithm implementation with WASM backend, ported from VS Code",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",