@douyinfe/semi-json-viewer-core 2.70.0-alpha.2 → 2.71.0-beta.0
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/lib/index.js +530 -243
- package/package.json +55 -56
package/lib/index.js
CHANGED
|
@@ -13,32 +13,39 @@ function setStyles(element, styles) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
function getLineElement(node) {
|
|
16
|
-
return node.parentElement?.closest(
|
|
16
|
+
return node.parentElement?.closest('[data-line-element="true"]') || null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// src/common/nameSpace.ts
|
|
20
|
+
var currentNameSpaceId = "default";
|
|
21
|
+
function setCurrentNameSpaceId(id) {
|
|
22
|
+
currentNameSpaceId = id;
|
|
23
|
+
}
|
|
24
|
+
function getCurrentNameSpaceId() {
|
|
25
|
+
return currentNameSpaceId;
|
|
17
26
|
}
|
|
18
27
|
|
|
19
28
|
// src/common/emitter.ts
|
|
20
|
-
var
|
|
29
|
+
var emitterMap = /* @__PURE__ */ new Map();
|
|
30
|
+
var Emitter = class {
|
|
21
31
|
constructor() {
|
|
22
32
|
this.listeners = {};
|
|
23
33
|
}
|
|
24
|
-
static {
|
|
25
|
-
this.instance = null;
|
|
26
|
-
}
|
|
27
|
-
static getInstance() {
|
|
28
|
-
if (!_Emitter.instance) {
|
|
29
|
-
_Emitter.instance = new _Emitter();
|
|
30
|
-
}
|
|
31
|
-
return _Emitter.instance;
|
|
32
|
-
}
|
|
33
34
|
on(event, listener) {
|
|
34
35
|
if (!this.listeners[event]) {
|
|
35
36
|
this.listeners[event] = [];
|
|
36
37
|
}
|
|
37
|
-
this.listeners[event]
|
|
38
|
+
this.listeners[event]?.push(listener);
|
|
38
39
|
}
|
|
39
40
|
off(event, listener) {
|
|
40
41
|
if (!this.listeners[event]) return;
|
|
41
|
-
this.listeners[event] = this.listeners[event]
|
|
42
|
+
this.listeners[event] = this.listeners[event]?.filter((l) => l !== listener);
|
|
43
|
+
}
|
|
44
|
+
dispose() {
|
|
45
|
+
this.listeners = {};
|
|
46
|
+
}
|
|
47
|
+
removeAllListeners() {
|
|
48
|
+
this.listeners = {};
|
|
42
49
|
}
|
|
43
50
|
emit(event, data) {
|
|
44
51
|
if (!this.listeners[event]) return;
|
|
@@ -47,7 +54,25 @@ var Emitter = class _Emitter {
|
|
|
47
54
|
}
|
|
48
55
|
}
|
|
49
56
|
};
|
|
50
|
-
var
|
|
57
|
+
var getEmitter = () => {
|
|
58
|
+
const currentNameSpaceId2 = getCurrentNameSpaceId();
|
|
59
|
+
if (!currentNameSpaceId2) {
|
|
60
|
+
throw new Error("currentNameSpaceId is not set");
|
|
61
|
+
}
|
|
62
|
+
let emitter = emitterMap.get(currentNameSpaceId2);
|
|
63
|
+
if (!emitter) {
|
|
64
|
+
emitter = new Emitter();
|
|
65
|
+
emitterMap.set(currentNameSpaceId2, emitter);
|
|
66
|
+
}
|
|
67
|
+
return emitter;
|
|
68
|
+
};
|
|
69
|
+
var disposeEmitter = (id) => {
|
|
70
|
+
const emitter = emitterMap.get(id);
|
|
71
|
+
if (emitter) {
|
|
72
|
+
emitter.dispose();
|
|
73
|
+
emitterMap.delete(id);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
51
76
|
|
|
52
77
|
// src/model/selectionModel.ts
|
|
53
78
|
var SelectionModel = class {
|
|
@@ -117,7 +142,7 @@ var SelectionModel = class {
|
|
|
117
142
|
return;
|
|
118
143
|
}
|
|
119
144
|
const row = this._jsonModel.lastChangeBufferPos.lineNumber;
|
|
120
|
-
const col = this._jsonModel.lastChangeBufferPos.column;
|
|
145
|
+
const col = this._jsonModel.lastChangeBufferPos.column - 1;
|
|
121
146
|
if (row < this._view.startLineNumber || row > this._view.startLineNumber + this._view.visibleLineCount) {
|
|
122
147
|
selection.removeAllRanges();
|
|
123
148
|
return;
|
|
@@ -165,14 +190,15 @@ var SelectionModel = class {
|
|
|
165
190
|
col = totalOffset;
|
|
166
191
|
}
|
|
167
192
|
row = lineElement.lineNumber || 1;
|
|
168
|
-
return { row, col };
|
|
193
|
+
return { row, col: col + 1 };
|
|
169
194
|
}
|
|
170
195
|
};
|
|
171
196
|
|
|
172
197
|
// src/worker/jsonWorkerManager.ts
|
|
198
|
+
var workerManagerMap = /* @__PURE__ */ new Map();
|
|
173
199
|
var JsonWorkerManager = class {
|
|
174
200
|
constructor() {
|
|
175
|
-
const workerRaw = decodeURIComponent("(()%20%3D%3E%20%7B%0A%20%20%2F%2F%20..%2F..%2Fnode_modules%2Fjsonc-parser%2Flib%2Fesm%2Fimpl%2Fscanner.js%0A%20%20function%20createScanner(text%2C%20ignoreTrivia%20%3D%20false)%20%7B%0A%20%20%20%20const%20len%20%3D%20text.length%3B%0A%20%20%20%20let%20pos%20%3D%200%2C%20value%20%3D%20%22%22%2C%20tokenOffset%20%3D%200%2C%20token%20%3D%2016%2C%20lineNumber%20%3D%200%2C%20lineStartOffset%20%3D%200%2C%20tokenLineStartOffset%20%3D%200%2C%20prevTokenLineStartOffset%20%3D%200%2C%20scanError%20%3D%200%3B%0A%20%20%20%20function%20scanHexDigits(count%2C%20exact)%20%7B%0A%20%20%20%20%20%20let%20digits%20%3D%200%3B%0A%20%20%20%20%20%20let%20value2%20%3D%200%3B%0A%20%20%20%20%20%20while%20(digits%20%3C%20count%20%7C%7C%20!exact)%20%7B%0A%20%20%20%20%20%20%20%20let%20ch%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20%20%20if%20(ch%20%3E%3D%2048%20%26%26%20ch%20%3C%3D%2057)%20%7B%0A%20%20%20%20%20%20%20%20%20%20value2%20%3D%20value2%20*%2016%20%2B%20ch%20-%2048%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(ch%20%3E%3D%2065%20%26%26%20ch%20%3C%3D%2070)%20%7B%0A%20%20%20%20%20%20%20%20%20%20value2%20%3D%20value2%20*%2016%20%2B%20ch%20-%2065%20%2B%2010%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(ch%20%3E%3D%2097%20%26%26%20ch%20%3C%3D%20102)%20%7B%0A%20%20%20%20%20%20%20%20%20%20value2%20%3D%20value2%20*%2016%20%2B%20ch%20-%2097%20%2B%2010%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20digits%2B%2B%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(digits%20%3C%20count)%20%7B%0A%20%20%20%20%20%20%20%20value2%20%3D%20-1%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20value2%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setPosition(newPosition)%20%7B%0A%20%20%20%20%20%20pos%20%3D%20newPosition%3B%0A%20%20%20%20%20%20value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20tokenOffset%20%3D%200%3B%0A%20%20%20%20%20%20token%20%3D%2016%3B%0A%20%20%20%20%20%20scanError%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20scanNumber()%20%7B%0A%20%20%20%20%20%20let%20start%20%3D%20pos%3B%0A%20%20%20%20%20%20if%20(text.charCodeAt(pos)%20%3D%3D%3D%2048)%20%7B%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20while%20(pos%20%3C%20text.length%20%26%26%20isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(pos%20%3C%20text.length%20%26%26%20text.charCodeAt(pos)%20%3D%3D%3D%2046)%20%7B%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20if%20(pos%20%3C%20text.length%20%26%26%20isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20while%20(pos%20%3C%20text.length%20%26%26%20isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20scanError%20%3D%203%3B%0A%20%20%20%20%20%20%20%20%20%20return%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20end%20%3D%20pos%3B%0A%20%20%20%20%20%20if%20(pos%20%3C%20text.length%20%26%26%20(text.charCodeAt(pos)%20%3D%3D%3D%2069%20%7C%7C%20text.charCodeAt(pos)%20%3D%3D%3D%20101))%20%7B%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20if%20(pos%20%3C%20text.length%20%26%26%20text.charCodeAt(pos)%20%3D%3D%3D%2043%20%7C%7C%20text.charCodeAt(pos)%20%3D%3D%3D%2045)%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(pos%20%3C%20text.length%20%26%26%20isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20while%20(pos%20%3C%20text.length%20%26%26%20isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20end%20%3D%20pos%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20scanError%20%3D%203%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20text.substring(start%2C%20end)%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20scanString()%20%7B%0A%20%20%20%20%20%20let%20result%20%3D%20%22%22%2C%20start%20%3D%20pos%3B%0A%20%20%20%20%20%20while%20(true)%20%7B%0A%20%20%20%20%20%20%20%20if%20(pos%20%3E%3D%20len)%20%7B%0A%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20scanError%20%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20ch%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%2034)%20%7B%0A%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%2092)%20%7B%0A%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(pos%20%3E%3D%20len)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20ch2%20%3D%20text.charCodeAt(pos%2B%2B)%3B%0A%20%20%20%20%20%20%20%20%20%20switch%20(ch2)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2034%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20'%22'%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2092%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%5C%5C%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2047%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%2F%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%2098%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%5Cb%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20102%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%5Cf%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20110%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20114%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%5Cr%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20116%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20%22%09%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20case%20117%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20ch3%20%3D%20scanHexDigits(4%2C%20true)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(ch3%20%3E%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20String.fromCharCode(ch3)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%204%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%205%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20start%20%3D%20pos%3B%0A%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(ch%20%3E%3D%200%20%26%26%20ch%20%3C%3D%2031)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(isLineBreak(ch))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%206%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20scanNext()%20%7B%0A%20%20%20%20%20%20value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20scanError%20%3D%200%3B%0A%20%20%20%20%20%20tokenOffset%20%3D%20pos%3B%0A%20%20%20%20%20%20lineStartOffset%20%3D%20lineNumber%3B%0A%20%20%20%20%20%20prevTokenLineStartOffset%20%3D%20tokenLineStartOffset%3B%0A%20%20%20%20%20%20if%20(pos%20%3E%3D%20len)%20%7B%0A%20%20%20%20%20%20%20%20tokenOffset%20%3D%20len%3B%0A%20%20%20%20%20%20%20%20return%20token%20%3D%2017%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20code%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20if%20(isWhiteSpace(code))%20%7B%0A%20%20%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20String.fromCharCode(code)%3B%0A%20%20%20%20%20%20%20%20%20%20code%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20%20%20%7D%20while%20(isWhiteSpace(code))%3B%0A%20%20%20%20%20%20%20%20return%20token%20%3D%2015%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(isLineBreak(code))%20%7B%0A%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20value%20%2B%3D%20String.fromCharCode(code)%3B%0A%20%20%20%20%20%20%20%20if%20(code%20%3D%3D%3D%2013%20%26%26%20text.charCodeAt(pos)%20%3D%3D%3D%2010)%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20lineNumber%2B%2B%3B%0A%20%20%20%20%20%20%20%20tokenLineStartOffset%20%3D%20pos%3B%0A%20%20%20%20%20%20%20%20return%20token%20%3D%2014%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20switch%20(code)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20tokens%3A%20%5B%5D%7B%7D%3A%2C%0A%20%20%20%20%20%20%20%20case%20123%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%201%3B%0A%20%20%20%20%20%20%20%20case%20125%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%202%3B%0A%20%20%20%20%20%20%20%20case%2091%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%203%3B%0A%20%20%20%20%20%20%20%20case%2093%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%204%3B%0A%20%20%20%20%20%20%20%20case%2058%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%206%3B%0A%20%20%20%20%20%20%20%20case%2044%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%205%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20strings%0A%20%20%20%20%20%20%20%20case%2034%3A%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20value%20%3D%20scanString()%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2010%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20comments%0A%20%20%20%20%20%20%20%20case%2047%3A%0A%20%20%20%20%20%20%20%20%20%20const%20start%20%3D%20pos%20-%201%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(text.charCodeAt(pos%20%2B%201)%20%3D%3D%3D%2047)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%20%2B%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20(pos%20%3C%20len)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(isLineBreak(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2012%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(text.charCodeAt(pos%20%2B%201)%20%3D%3D%3D%2042)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%20%2B%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20safeLength%20%3D%20len%20-%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20let%20commentClosed%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20(pos%20%3C%20safeLength)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20ch%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%2042%20%26%26%20text.charCodeAt(pos%20%2B%201)%20%3D%3D%3D%2047)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%20%2B%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20commentClosed%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(isLineBreak(ch))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%2013%20%26%26%20text.charCodeAt(pos)%20%3D%3D%3D%2010)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokenLineStartOffset%20%3D%20pos%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!commentClosed)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20scanError%20%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20text.substring(start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2013%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20String.fromCharCode(code)%3B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2016%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20numbers%0A%20%20%20%20%20%20%20%20case%2045%3A%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20String.fromCharCode(code)%3B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(pos%20%3D%3D%3D%20len%20%7C%7C%20!isDigit(text.charCodeAt(pos)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2016%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20found%20a%20minus%2C%20followed%20by%20a%20number%20so%0A%20%20%20%20%20%20%20%20%2F%2F%20we%20fall%20through%20to%20proceed%20with%20scanning%0A%20%20%20%20%20%20%20%20%2F%2F%20numbers%0A%20%20%20%20%20%20%20%20case%2048%3A%0A%20%20%20%20%20%20%20%20case%2049%3A%0A%20%20%20%20%20%20%20%20case%2050%3A%0A%20%20%20%20%20%20%20%20case%2051%3A%0A%20%20%20%20%20%20%20%20case%2052%3A%0A%20%20%20%20%20%20%20%20case%2053%3A%0A%20%20%20%20%20%20%20%20case%2054%3A%0A%20%20%20%20%20%20%20%20case%2055%3A%0A%20%20%20%20%20%20%20%20case%2056%3A%0A%20%20%20%20%20%20%20%20case%2057%3A%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20scanNumber()%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2011%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20literals%20and%20unknown%20symbols%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20while%20(pos%20%3C%20len%20%26%26%20isUnknownContentCharacter(code))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20code%20%3D%20text.charCodeAt(pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(tokenOffset%20!%3D%3D%20pos)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20text.substring(tokenOffset%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20switch%20(value)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20%22true%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%208%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20%22false%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%209%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20%22null%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%207%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2016%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20String.fromCharCode(code)%3B%0A%20%20%20%20%20%20%20%20%20%20pos%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20token%20%3D%2016%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20function%20isUnknownContentCharacter(code)%20%7B%0A%20%20%20%20%20%20if%20(isWhiteSpace(code)%20%7C%7C%20isLineBreak(code))%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20switch%20(code)%20%7B%0A%20%20%20%20%20%20%20%20case%20125%3A%0A%20%20%20%20%20%20%20%20case%2093%3A%0A%20%20%20%20%20%20%20%20case%20123%3A%0A%20%20%20%20%20%20%20%20case%2091%3A%0A%20%20%20%20%20%20%20%20case%2034%3A%0A%20%20%20%20%20%20%20%20case%2058%3A%0A%20%20%20%20%20%20%20%20case%2044%3A%0A%20%20%20%20%20%20%20%20case%2047%3A%0A%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20scanNextNonTrivia()%20%7B%0A%20%20%20%20%20%20let%20result%3B%0A%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20result%20%3D%20scanNext()%3B%0A%20%20%20%20%20%20%7D%20while%20(result%20%3E%3D%2012%20%26%26%20result%20%3C%3D%2015)%3B%0A%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20setPosition%2C%0A%20%20%20%20%20%20getPosition%3A%20()%20%3D%3E%20pos%2C%0A%20%20%20%20%20%20scan%3A%20ignoreTrivia%20%3F%20scanNextNonTrivia%20%3A%20scanNext%2C%0A%20%20%20%20%20%20getToken%3A%20()%20%3D%3E%20token%2C%0A%20%20%20%20%20%20getTokenValue%3A%20()%20%3D%3E%20value%2C%0A%20%20%20%20%20%20getTokenOffset%3A%20()%20%3D%3E%20tokenOffset%2C%0A%20%20%20%20%20%20getTokenLength%3A%20()%20%3D%3E%20pos%20-%20tokenOffset%2C%0A%20%20%20%20%20%20getTokenStartLine%3A%20()%20%3D%3E%20lineStartOffset%2C%0A%20%20%20%20%20%20getTokenStartCharacter%3A%20()%20%3D%3E%20tokenOffset%20-%20prevTokenLineStartOffset%2C%0A%20%20%20%20%20%20getTokenError%3A%20()%20%3D%3E%20scanError%0A%20%20%20%20%7D%3B%0A%20%20%7D%0A%20%20function%20isWhiteSpace(ch)%20%7B%0A%20%20%20%20return%20ch%20%3D%3D%3D%2032%20%7C%7C%20ch%20%3D%3D%3D%209%3B%0A%20%20%7D%0A%20%20function%20isLineBreak(ch)%20%7B%0A%20%20%20%20return%20ch%20%3D%3D%3D%2010%20%7C%7C%20ch%20%3D%3D%3D%2013%3B%0A%20%20%7D%0A%20%20function%20isDigit(ch)%20%7B%0A%20%20%20%20return%20ch%20%3E%3D%2048%20%26%26%20ch%20%3C%3D%2057%3B%0A%20%20%7D%0A%20%20var%20CharacterCodes%3B%0A%20%20(function(CharacterCodes2)%20%7B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22lineFeed%22%5D%20%3D%2010%5D%20%3D%20%22lineFeed%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22carriageReturn%22%5D%20%3D%2013%5D%20%3D%20%22carriageReturn%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22space%22%5D%20%3D%2032%5D%20%3D%20%22space%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_0%22%5D%20%3D%2048%5D%20%3D%20%22_0%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_1%22%5D%20%3D%2049%5D%20%3D%20%22_1%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_2%22%5D%20%3D%2050%5D%20%3D%20%22_2%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_3%22%5D%20%3D%2051%5D%20%3D%20%22_3%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_4%22%5D%20%3D%2052%5D%20%3D%20%22_4%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_5%22%5D%20%3D%2053%5D%20%3D%20%22_5%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_6%22%5D%20%3D%2054%5D%20%3D%20%22_6%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_7%22%5D%20%3D%2055%5D%20%3D%20%22_7%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_8%22%5D%20%3D%2056%5D%20%3D%20%22_8%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22_9%22%5D%20%3D%2057%5D%20%3D%20%22_9%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22a%22%5D%20%3D%2097%5D%20%3D%20%22a%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22b%22%5D%20%3D%2098%5D%20%3D%20%22b%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22c%22%5D%20%3D%2099%5D%20%3D%20%22c%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22d%22%5D%20%3D%20100%5D%20%3D%20%22d%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22e%22%5D%20%3D%20101%5D%20%3D%20%22e%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22f%22%5D%20%3D%20102%5D%20%3D%20%22f%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22g%22%5D%20%3D%20103%5D%20%3D%20%22g%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22h%22%5D%20%3D%20104%5D%20%3D%20%22h%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22i%22%5D%20%3D%20105%5D%20%3D%20%22i%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22j%22%5D%20%3D%20106%5D%20%3D%20%22j%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22k%22%5D%20%3D%20107%5D%20%3D%20%22k%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22l%22%5D%20%3D%20108%5D%20%3D%20%22l%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22m%22%5D%20%3D%20109%5D%20%3D%20%22m%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22n%22%5D%20%3D%20110%5D%20%3D%20%22n%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22o%22%5D%20%3D%20111%5D%20%3D%20%22o%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22p%22%5D%20%3D%20112%5D%20%3D%20%22p%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22q%22%5D%20%3D%20113%5D%20%3D%20%22q%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22r%22%5D%20%3D%20114%5D%20%3D%20%22r%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22s%22%5D%20%3D%20115%5D%20%3D%20%22s%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22t%22%5D%20%3D%20116%5D%20%3D%20%22t%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22u%22%5D%20%3D%20117%5D%20%3D%20%22u%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22v%22%5D%20%3D%20118%5D%20%3D%20%22v%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22w%22%5D%20%3D%20119%5D%20%3D%20%22w%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22x%22%5D%20%3D%20120%5D%20%3D%20%22x%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22y%22%5D%20%3D%20121%5D%20%3D%20%22y%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22z%22%5D%20%3D%20122%5D%20%3D%20%22z%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22A%22%5D%20%3D%2065%5D%20%3D%20%22A%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22B%22%5D%20%3D%2066%5D%20%3D%20%22B%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22C%22%5D%20%3D%2067%5D%20%3D%20%22C%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22D%22%5D%20%3D%2068%5D%20%3D%20%22D%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22E%22%5D%20%3D%2069%5D%20%3D%20%22E%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22F%22%5D%20%3D%2070%5D%20%3D%20%22F%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22G%22%5D%20%3D%2071%5D%20%3D%20%22G%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22H%22%5D%20%3D%2072%5D%20%3D%20%22H%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22I%22%5D%20%3D%2073%5D%20%3D%20%22I%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22J%22%5D%20%3D%2074%5D%20%3D%20%22J%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22K%22%5D%20%3D%2075%5D%20%3D%20%22K%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22L%22%5D%20%3D%2076%5D%20%3D%20%22L%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22M%22%5D%20%3D%2077%5D%20%3D%20%22M%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22N%22%5D%20%3D%2078%5D%20%3D%20%22N%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22O%22%5D%20%3D%2079%5D%20%3D%20%22O%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22P%22%5D%20%3D%2080%5D%20%3D%20%22P%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22Q%22%5D%20%3D%2081%5D%20%3D%20%22Q%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22R%22%5D%20%3D%2082%5D%20%3D%20%22R%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22S%22%5D%20%3D%2083%5D%20%3D%20%22S%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22T%22%5D%20%3D%2084%5D%20%3D%20%22T%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22U%22%5D%20%3D%2085%5D%20%3D%20%22U%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22V%22%5D%20%3D%2086%5D%20%3D%20%22V%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22W%22%5D%20%3D%2087%5D%20%3D%20%22W%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22X%22%5D%20%3D%2088%5D%20%3D%20%22X%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22Y%22%5D%20%3D%2089%5D%20%3D%20%22Y%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22Z%22%5D%20%3D%2090%5D%20%3D%20%22Z%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22asterisk%22%5D%20%3D%2042%5D%20%3D%20%22asterisk%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22backslash%22%5D%20%3D%2092%5D%20%3D%20%22backslash%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22closeBrace%22%5D%20%3D%20125%5D%20%3D%20%22closeBrace%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22closeBracket%22%5D%20%3D%2093%5D%20%3D%20%22closeBracket%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22colon%22%5D%20%3D%2058%5D%20%3D%20%22colon%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22comma%22%5D%20%3D%2044%5D%20%3D%20%22comma%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22dot%22%5D%20%3D%2046%5D%20%3D%20%22dot%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22doubleQuote%22%5D%20%3D%2034%5D%20%3D%20%22doubleQuote%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22minus%22%5D%20%3D%2045%5D%20%3D%20%22minus%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22openBrace%22%5D%20%3D%20123%5D%20%3D%20%22openBrace%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22openBracket%22%5D%20%3D%2091%5D%20%3D%20%22openBracket%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22plus%22%5D%20%3D%2043%5D%20%3D%20%22plus%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22slash%22%5D%20%3D%2047%5D%20%3D%20%22slash%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22formFeed%22%5D%20%3D%2012%5D%20%3D%20%22formFeed%22%3B%0A%20%20%20%20CharacterCodes2%5BCharacterCodes2%5B%22tab%22%5D%20%3D%209%5D%20%3D%20%22tab%22%3B%0A%20%20%7D)(CharacterCodes%20%7C%7C%20(CharacterCodes%20%3D%20%7B%7D))%3B%0A%0A%20%20%2F%2F%20..%2F..%2Fnode_modules%2Fjsonc-parser%2Flib%2Fesm%2Fimpl%2Fstring-intern.js%0A%20%20var%20cachedSpaces%20%3D%20new%20Array(20).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20return%20%22%20%22.repeat(index)%3B%0A%20%20%7D)%3B%0A%20%20var%20maxCachedValues%20%3D%20200%3B%0A%20%20var%20cachedBreakLinesWithSpaces%20%3D%20%7B%0A%20%20%20%20%22%20%22%3A%20%7B%0A%20%20%20%20%20%20%22%5Cn%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cn%22%20%2B%20%22%20%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%22%5Cr%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%22%20%2B%20%22%20%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%22%5Cr%5Cn%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%5Cn%22%20%2B%20%22%20%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22%09%22%3A%20%7B%0A%20%20%20%20%20%20%22%5Cn%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cn%22%20%2B%20%22%09%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%22%5Cr%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%22%20%2B%20%22%09%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%22%5Cr%5Cn%22%3A%20new%20Array(maxCachedValues).fill(0).map((_%2C%20index)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%5Cn%22%20%2B%20%22%09%22.repeat(index)%3B%0A%20%20%20%20%20%20%7D)%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20supportedEols%20%3D%20%5B%22%5Cn%22%2C%20%22%5Cr%22%2C%20%22%5Cr%5Cn%22%5D%3B%0A%0A%20%20%2F%2F%20..%2F..%2Fnode_modules%2Fjsonc-parser%2Flib%2Fesm%2Fimpl%2Fformat.js%0A%20%20function%20format(documentText%2C%20range%2C%20options)%20%7B%0A%20%20%20%20let%20initialIndentLevel%3B%0A%20%20%20%20let%20formatText%3B%0A%20%20%20%20let%20formatTextStart%3B%0A%20%20%20%20let%20rangeStart%3B%0A%20%20%20%20let%20rangeEnd%3B%0A%20%20%20%20if%20(range)%20%7B%0A%20%20%20%20%20%20rangeStart%20%3D%20range.offset%3B%0A%20%20%20%20%20%20rangeEnd%20%3D%20rangeStart%20%2B%20range.length%3B%0A%20%20%20%20%20%20formatTextStart%20%3D%20rangeStart%3B%0A%20%20%20%20%20%20while%20(formatTextStart%20%3E%200%20%26%26%20!isEOL(documentText%2C%20formatTextStart%20-%201))%20%7B%0A%20%20%20%20%20%20%20%20formatTextStart--%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20endOffset%20%3D%20rangeEnd%3B%0A%20%20%20%20%20%20while%20(endOffset%20%3C%20documentText.length%20%26%26%20!isEOL(documentText%2C%20endOffset))%20%7B%0A%20%20%20%20%20%20%20%20endOffset%2B%2B%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20formatText%20%3D%20documentText.substring(formatTextStart%2C%20endOffset)%3B%0A%20%20%20%20%20%20initialIndentLevel%20%3D%20computeIndentLevel(formatText%2C%20options)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20formatText%20%3D%20documentText%3B%0A%20%20%20%20%20%20initialIndentLevel%20%3D%200%3B%0A%20%20%20%20%20%20formatTextStart%20%3D%200%3B%0A%20%20%20%20%20%20rangeStart%20%3D%200%3B%0A%20%20%20%20%20%20rangeEnd%20%3D%20documentText.length%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20eol%20%3D%20getEOL(options%2C%20documentText)%3B%0A%20%20%20%20const%20eolFastPathSupported%20%3D%20supportedEols.includes(eol)%3B%0A%20%20%20%20let%20numberLineBreaks%20%3D%200%3B%0A%20%20%20%20let%20indentLevel%20%3D%200%3B%0A%20%20%20%20let%20indentValue%3B%0A%20%20%20%20if%20(options.insertSpaces)%20%7B%0A%20%20%20%20%20%20indentValue%20%3D%20cachedSpaces%5Boptions.tabSize%20%7C%7C%204%5D%20%3F%3F%20repeat(cachedSpaces%5B1%5D%2C%20options.tabSize%20%7C%7C%204)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20indentValue%20%3D%20%22%09%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20indentType%20%3D%20indentValue%20%3D%3D%3D%20%22%09%22%20%3F%20%22%09%22%20%3A%20%22%20%22%3B%0A%20%20%20%20let%20scanner%20%3D%20createScanner(formatText%2C%20false)%3B%0A%20%20%20%20let%20hasError%20%3D%20false%3B%0A%20%20%20%20function%20newLinesAndIndent()%20%7B%0A%20%20%20%20%20%20if%20(numberLineBreaks%20%3E%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20repeat(eol%2C%20numberLineBreaks)%20%2B%20repeat(indentValue%2C%20initialIndentLevel%20%2B%20indentLevel)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20amountOfSpaces%20%3D%20indentValue.length%20*%20(initialIndentLevel%20%2B%20indentLevel)%3B%0A%20%20%20%20%20%20if%20(!eolFastPathSupported%20%7C%7C%20amountOfSpaces%20%3E%20cachedBreakLinesWithSpaces%5BindentType%5D%5Beol%5D.length)%20%7B%0A%20%20%20%20%20%20%20%20return%20eol%20%2B%20repeat(indentValue%2C%20initialIndentLevel%20%2B%20indentLevel)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(amountOfSpaces%20%3C%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20eol%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20cachedBreakLinesWithSpaces%5BindentType%5D%5Beol%5D%5BamountOfSpaces%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20scanNext()%20%7B%0A%20%20%20%20%20%20let%20token%20%3D%20scanner.scan()%3B%0A%20%20%20%20%20%20numberLineBreaks%20%3D%200%3B%0A%20%20%20%20%20%20while%20(token%20%3D%3D%3D%2015%20%7C%7C%20token%20%3D%3D%3D%2014)%20%7B%0A%20%20%20%20%20%20%20%20if%20(token%20%3D%3D%3D%2014%20%26%26%20options.keepLines)%20%7B%0A%20%20%20%20%20%20%20%20%20%20numberLineBreaks%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(token%20%3D%3D%3D%2014)%20%7B%0A%20%20%20%20%20%20%20%20%20%20numberLineBreaks%20%3D%201%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20token%20%3D%20scanner.scan()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20hasError%20%3D%20token%20%3D%3D%3D%2016%20%7C%7C%20scanner.getTokenError()%20!%3D%3D%200%3B%0A%20%20%20%20%20%20return%20token%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20editOperations%20%3D%20%5B%5D%3B%0A%20%20%20%20function%20addEdit(text%2C%20startOffset%2C%20endOffset)%20%7B%0A%20%20%20%20%20%20if%20(!hasError%20%26%26%20(!range%20%7C%7C%20startOffset%20%3C%20rangeEnd%20%26%26%20endOffset%20%3E%20rangeStart)%20%26%26%20documentText.substring(startOffset%2C%20endOffset)%20!%3D%3D%20text)%20%7B%0A%20%20%20%20%20%20%20%20editOperations.push(%7B%20offset%3A%20startOffset%2C%20length%3A%20endOffset%20-%20startOffset%2C%20content%3A%20text%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20let%20firstToken%20%3D%20scanNext()%3B%0A%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20addEdit(repeat(eol%2C%20numberLineBreaks)%2C%200%2C%200)%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(firstToken%20!%3D%3D%2017)%20%7B%0A%20%20%20%20%20%20let%20firstTokenStart%20%3D%20scanner.getTokenOffset()%20%2B%20formatTextStart%3B%0A%20%20%20%20%20%20let%20initialIndent%20%3D%20indentValue.length%20*%20initialIndentLevel%20%3C%2020%20%26%26%20options.insertSpaces%20%3F%20cachedSpaces%5BindentValue.length%20*%20initialIndentLevel%5D%20%3A%20repeat(indentValue%2C%20initialIndentLevel)%3B%0A%20%20%20%20%20%20addEdit(initialIndent%2C%20formatTextStart%2C%20firstTokenStart)%3B%0A%20%20%20%20%7D%0A%20%20%20%20while%20(firstToken%20!%3D%3D%2017)%20%7B%0A%20%20%20%20%20%20let%20firstTokenEnd%20%3D%20scanner.getTokenOffset()%20%2B%20scanner.getTokenLength()%20%2B%20formatTextStart%3B%0A%20%20%20%20%20%20let%20secondToken%20%3D%20scanNext()%3B%0A%20%20%20%20%20%20let%20replaceContent%20%3D%20%22%22%3B%0A%20%20%20%20%20%20let%20needsLineBreak%20%3D%20false%3B%0A%20%20%20%20%20%20while%20(numberLineBreaks%20%3D%3D%3D%200%20%26%26%20(secondToken%20%3D%3D%3D%2012%20%7C%7C%20secondToken%20%3D%3D%3D%2013))%20%7B%0A%20%20%20%20%20%20%20%20let%20commentTokenStart%20%3D%20scanner.getTokenOffset()%20%2B%20formatTextStart%3B%0A%20%20%20%20%20%20%20%20addEdit(cachedSpaces%5B1%5D%2C%20firstTokenEnd%2C%20commentTokenStart)%3B%0A%20%20%20%20%20%20%20%20firstTokenEnd%20%3D%20scanner.getTokenOffset()%20%2B%20scanner.getTokenLength()%20%2B%20formatTextStart%3B%0A%20%20%20%20%20%20%20%20needsLineBreak%20%3D%20secondToken%20%3D%3D%3D%2012%3B%0A%20%20%20%20%20%20%20%20replaceContent%20%3D%20needsLineBreak%20%3F%20newLinesAndIndent()%20%3A%20%22%22%3B%0A%20%20%20%20%20%20%20%20secondToken%20%3D%20scanNext()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(secondToken%20%3D%3D%3D%202)%20%7B%0A%20%20%20%20%20%20%20%20if%20(firstToken%20!%3D%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20indentLevel--%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%3B%0A%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200%20%7C%7C%20!options.keepLines%20%26%26%20firstToken%20!%3D%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(options.keepLines)%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20(secondToken%20%3D%3D%3D%204)%20%7B%0A%20%20%20%20%20%20%20%20if%20(firstToken%20!%3D%3D%203)%20%7B%0A%20%20%20%20%20%20%20%20%20%20indentLevel--%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%3B%0A%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200%20%7C%7C%20!options.keepLines%20%26%26%20firstToken%20!%3D%3D%203)%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(options.keepLines)%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20switch%20(firstToken)%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%203%3A%0A%20%20%20%20%20%20%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20indentLevel%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200%20%7C%7C%20!options.keepLines)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%205%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200%20%7C%7C%20!options.keepLines)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%2012%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%2013%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(!needsLineBreak)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%206%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(!needsLineBreak)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%2010%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(secondToken%20%3D%3D%3D%206%20%26%26%20!needsLineBreak)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%207%3A%0A%20%20%20%20%20%20%20%20%20%20case%208%3A%0A%20%20%20%20%20%20%20%20%20%20case%209%3A%0A%20%20%20%20%20%20%20%20%20%20case%2011%3A%0A%20%20%20%20%20%20%20%20%20%20case%202%3A%0A%20%20%20%20%20%20%20%20%20%20case%204%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20((secondToken%20%3D%3D%3D%2012%20%7C%7C%20secondToken%20%3D%3D%3D%2013)%20%26%26%20!needsLineBreak)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20cachedSpaces%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(secondToken%20!%3D%3D%205%20%26%26%20secondToken%20!%3D%3D%2017)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hasError%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%2016%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20hasError%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(numberLineBreaks%20%3E%200%20%26%26%20(secondToken%20%3D%3D%3D%2012%20%7C%7C%20secondToken%20%3D%3D%3D%2013))%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(secondToken%20%3D%3D%3D%2017)%20%7B%0A%20%20%20%20%20%20%20%20if%20(options.keepLines%20%26%26%20numberLineBreaks%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20newLinesAndIndent()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20replaceContent%20%3D%20options.insertFinalNewline%20%3F%20eol%20%3A%20%22%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20secondTokenStart%20%3D%20scanner.getTokenOffset()%20%2B%20formatTextStart%3B%0A%20%20%20%20%20%20addEdit(replaceContent%2C%20firstTokenEnd%2C%20secondTokenStart)%3B%0A%20%20%20%20%20%20firstToken%20%3D%20secondToken%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20editOperations%3B%0A%20%20%7D%0A%20%20function%20repeat(s%2C%20count)%20%7B%0A%20%20%20%20let%20result%20%3D%20%22%22%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20count%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20result%20%2B%3D%20s%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20result%3B%0A%20%20%7D%0A%20%20function%20computeIndentLevel(content%2C%20options)%20%7B%0A%20%20%20%20let%20i%20%3D%200%3B%0A%20%20%20%20let%20nChars%20%3D%200%3B%0A%20%20%20%20const%20tabSize%20%3D%20options.tabSize%20%7C%7C%204%3B%0A%20%20%20%20while%20(i%20%3C%20content.length)%20%7B%0A%20%20%20%20%20%20let%20ch%20%3D%20content.charAt(i)%3B%0A%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%20cachedSpaces%5B1%5D)%20%7B%0A%20%20%20%20%20%20%20%20nChars%2B%2B%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ch%20%3D%3D%3D%20%22%09%22)%20%7B%0A%20%20%20%20%20%20%20%20nChars%20%2B%3D%20tabSize%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20Math.floor(nChars%20%2F%20tabSize)%3B%0A%20%20%7D%0A%20%20function%20getEOL(options%2C%20text)%20%7B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20text.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20ch%20%3D%20text.charAt(i)%3B%0A%20%20%20%20%20%20if%20(ch%20%3D%3D%3D%20%22%5Cr%22)%20%7B%0A%20%20%20%20%20%20%20%20if%20(i%20%2B%201%20%3C%20text.length%20%26%26%20text.charAt(i%20%2B%201)%20%3D%3D%3D%20%22%5Cn%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20%22%5Cr%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%22%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ch%20%3D%3D%3D%20%22%5Cn%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20options%20%26%26%20options.eol%20%7C%7C%20%22%5Cn%22%3B%0A%20%20%7D%0A%20%20function%20isEOL(text%2C%20offset)%20%7B%0A%20%20%20%20return%20%22%5Cr%5Cn%22.indexOf(text.charAt(offset))%20!%3D%3D%20-1%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20..%2F..%2Fnode_modules%2Fjsonc-parser%2Flib%2Fesm%2Fimpl%2Fparser.js%0A%20%20var%20ParseOptions%3B%0A%20%20(function(ParseOptions2)%20%7B%0A%20%20%20%20ParseOptions2.DEFAULT%20%3D%20%7B%0A%20%20%20%20%20%20allowTrailingComma%3A%20false%0A%20%20%20%20%7D%3B%0A%20%20%7D)(ParseOptions%20%7C%7C%20(ParseOptions%20%3D%20%7B%7D))%3B%0A%20%20function%20contains(node%2C%20offset%2C%20includeRightBound%20%3D%20false)%20%7B%0A%20%20%20%20return%20offset%20%3E%3D%20node.offset%20%26%26%20offset%20%3C%20node.offset%20%2B%20node.length%20%7C%7C%20includeRightBound%20%26%26%20offset%20%3D%3D%3D%20node.offset%20%2B%20node.length%3B%0A%20%20%7D%0A%20%20function%20findNodeAtOffset(node%2C%20offset%2C%20includeRightBound%20%3D%20false)%20%7B%0A%20%20%20%20if%20(contains(node%2C%20offset%2C%20includeRightBound))%20%7B%0A%20%20%20%20%20%20const%20children%20%3D%20node.children%3B%0A%20%20%20%20%20%20if%20(Array.isArray(children))%20%7B%0A%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20children.length%20%26%26%20children%5Bi%5D.offset%20%3C%3D%20offset%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20item%20%3D%20findNodeAtOffset(children%5Bi%5D%2C%20offset%2C%20includeRightBound)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(item)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20item%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20void%200%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20..%2F..%2Fnode_modules%2Fjsonc-parser%2Flib%2Fesm%2Fmain.js%0A%20%20var%20createScanner2%20%3D%20createScanner%3B%0A%20%20var%20ScanError%3B%0A%20%20(function(ScanError3)%20%7B%0A%20%20%20%20ScanError3%5BScanError3%5B%22None%22%5D%20%3D%200%5D%20%3D%20%22None%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22UnexpectedEndOfComment%22%5D%20%3D%201%5D%20%3D%20%22UnexpectedEndOfComment%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22UnexpectedEndOfString%22%5D%20%3D%202%5D%20%3D%20%22UnexpectedEndOfString%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22UnexpectedEndOfNumber%22%5D%20%3D%203%5D%20%3D%20%22UnexpectedEndOfNumber%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22InvalidUnicode%22%5D%20%3D%204%5D%20%3D%20%22InvalidUnicode%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22InvalidEscapeCharacter%22%5D%20%3D%205%5D%20%3D%20%22InvalidEscapeCharacter%22%3B%0A%20%20%20%20ScanError3%5BScanError3%5B%22InvalidCharacter%22%5D%20%3D%206%5D%20%3D%20%22InvalidCharacter%22%3B%0A%20%20%7D)(ScanError%20%7C%7C%20(ScanError%20%3D%20%7B%7D))%3B%0A%20%20var%20SyntaxKind%3B%0A%20%20(function(SyntaxKind2)%20%7B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22OpenBraceToken%22%5D%20%3D%201%5D%20%3D%20%22OpenBraceToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22CloseBraceToken%22%5D%20%3D%202%5D%20%3D%20%22CloseBraceToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22OpenBracketToken%22%5D%20%3D%203%5D%20%3D%20%22OpenBracketToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22CloseBracketToken%22%5D%20%3D%204%5D%20%3D%20%22CloseBracketToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22CommaToken%22%5D%20%3D%205%5D%20%3D%20%22CommaToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22ColonToken%22%5D%20%3D%206%5D%20%3D%20%22ColonToken%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22NullKeyword%22%5D%20%3D%207%5D%20%3D%20%22NullKeyword%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22TrueKeyword%22%5D%20%3D%208%5D%20%3D%20%22TrueKeyword%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22FalseKeyword%22%5D%20%3D%209%5D%20%3D%20%22FalseKeyword%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22StringLiteral%22%5D%20%3D%2010%5D%20%3D%20%22StringLiteral%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22NumericLiteral%22%5D%20%3D%2011%5D%20%3D%20%22NumericLiteral%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22LineCommentTrivia%22%5D%20%3D%2012%5D%20%3D%20%22LineCommentTrivia%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22BlockCommentTrivia%22%5D%20%3D%2013%5D%20%3D%20%22BlockCommentTrivia%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22LineBreakTrivia%22%5D%20%3D%2014%5D%20%3D%20%22LineBreakTrivia%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22Trivia%22%5D%20%3D%2015%5D%20%3D%20%22Trivia%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22Unknown%22%5D%20%3D%2016%5D%20%3D%20%22Unknown%22%3B%0A%20%20%20%20SyntaxKind2%5BSyntaxKind2%5B%22EOF%22%5D%20%3D%2017%5D%20%3D%20%22EOF%22%3B%0A%20%20%7D)(SyntaxKind%20%7C%7C%20(SyntaxKind%20%3D%20%7B%7D))%3B%0A%20%20var%20findNodeAtOffset2%20%3D%20findNodeAtOffset%3B%0A%20%20var%20ParseErrorCode%3B%0A%20%20(function(ParseErrorCode2)%20%7B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidSymbol%22%5D%20%3D%201%5D%20%3D%20%22InvalidSymbol%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidNumberFormat%22%5D%20%3D%202%5D%20%3D%20%22InvalidNumberFormat%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22PropertyNameExpected%22%5D%20%3D%203%5D%20%3D%20%22PropertyNameExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22ValueExpected%22%5D%20%3D%204%5D%20%3D%20%22ValueExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22ColonExpected%22%5D%20%3D%205%5D%20%3D%20%22ColonExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22CommaExpected%22%5D%20%3D%206%5D%20%3D%20%22CommaExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22CloseBraceExpected%22%5D%20%3D%207%5D%20%3D%20%22CloseBraceExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22CloseBracketExpected%22%5D%20%3D%208%5D%20%3D%20%22CloseBracketExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22EndOfFileExpected%22%5D%20%3D%209%5D%20%3D%20%22EndOfFileExpected%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidCommentToken%22%5D%20%3D%2010%5D%20%3D%20%22InvalidCommentToken%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22UnexpectedEndOfComment%22%5D%20%3D%2011%5D%20%3D%20%22UnexpectedEndOfComment%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22UnexpectedEndOfString%22%5D%20%3D%2012%5D%20%3D%20%22UnexpectedEndOfString%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22UnexpectedEndOfNumber%22%5D%20%3D%2013%5D%20%3D%20%22UnexpectedEndOfNumber%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidUnicode%22%5D%20%3D%2014%5D%20%3D%20%22InvalidUnicode%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidEscapeCharacter%22%5D%20%3D%2015%5D%20%3D%20%22InvalidEscapeCharacter%22%3B%0A%20%20%20%20ParseErrorCode2%5BParseErrorCode2%5B%22InvalidCharacter%22%5D%20%3D%2016%5D%20%3D%20%22InvalidCharacter%22%3B%0A%20%20%7D)(ParseErrorCode%20%7C%7C%20(ParseErrorCode%20%3D%20%7B%7D))%3B%0A%20%20function%20format2(documentText%2C%20range%2C%20options)%20%7B%0A%20%20%20%20return%20format(documentText%2C%20range%2C%20options)%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fservice%2FjsonTypes.ts%0A%20%20var%20Diagnostic%20%3D%20class%20_Diagnostic%20%7B%0A%20%20%20%20constructor(message%2C%20code%2C%20range)%20%7B%0A%20%20%20%20%20%20this.message%20%3D%20message%3B%0A%20%20%20%20%20%20this.code%20%3D%20code%3B%0A%20%20%20%20%20%20this.range%20%3D%20range%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20create(message%2C%20code%2C%20range)%20%7B%0A%20%20%20%20%20%20return%20new%20_Diagnostic(message%2C%20code%2C%20range)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20ErrRange%20%3D%20class%20_ErrRange%20%7B%0A%20%20%20%20constructor(start%2C%20end)%20%7B%0A%20%20%20%20%20%20this.start%20%3D%20start%3B%0A%20%20%20%20%20%20this.end%20%3D%20end%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20create(start%2C%20end)%20%7B%0A%20%20%20%20%20%20return%20new%20_ErrRange(start%2C%20end)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20CompletionItemKind%3B%0A%20%20((CompletionItemKind2)%20%3D%3E%20%7B%0A%20%20%20%20CompletionItemKind2.Text%20%3D%201%3B%0A%20%20%20%20CompletionItemKind2.Method%20%3D%202%3B%0A%20%20%20%20CompletionItemKind2.Function%20%3D%203%3B%0A%20%20%20%20CompletionItemKind2.Constructor%20%3D%204%3B%0A%20%20%20%20CompletionItemKind2.Field%20%3D%205%3B%0A%20%20%20%20CompletionItemKind2.Variable%20%3D%206%3B%0A%20%20%20%20CompletionItemKind2.Class%20%3D%207%3B%0A%20%20%20%20CompletionItemKind2.Interface%20%3D%208%3B%0A%20%20%20%20CompletionItemKind2.Module%20%3D%209%3B%0A%20%20%20%20CompletionItemKind2.Property%20%3D%2010%3B%0A%20%20%20%20CompletionItemKind2.Unit%20%3D%2011%3B%0A%20%20%20%20CompletionItemKind2.Value%20%3D%2012%3B%0A%20%20%20%20CompletionItemKind2.Enum%20%3D%2013%3B%0A%20%20%20%20CompletionItemKind2.Keyword%20%3D%2014%3B%0A%20%20%20%20CompletionItemKind2.Snippet%20%3D%2015%3B%0A%20%20%20%20CompletionItemKind2.Color%20%3D%2016%3B%0A%20%20%20%20CompletionItemKind2.File%20%3D%2017%3B%0A%20%20%20%20CompletionItemKind2.Reference%20%3D%2018%3B%0A%20%20%20%20CompletionItemKind2.Folder%20%3D%2019%3B%0A%20%20%20%20CompletionItemKind2.EnumMember%20%3D%2020%3B%0A%20%20%20%20CompletionItemKind2.Constant%20%3D%2021%3B%0A%20%20%20%20CompletionItemKind2.Struct%20%3D%2022%3B%0A%20%20%20%20CompletionItemKind2.Event%20%3D%2023%3B%0A%20%20%20%20CompletionItemKind2.Operator%20%3D%2024%3B%0A%20%20%20%20CompletionItemKind2.TypeParameter%20%3D%2025%3B%0A%20%20%7D)(CompletionItemKind%20%7C%7C%20(CompletionItemKind%20%3D%20%7B%7D))%3B%0A%20%20var%20InsertTextFormat%3B%0A%20%20((InsertTextFormat2)%20%3D%3E%20%7B%0A%20%20%20%20InsertTextFormat2.PlainText%20%3D%201%3B%0A%20%20%20%20InsertTextFormat2.Snippet%20%3D%202%3B%0A%20%20%7D)(InsertTextFormat%20%7C%7C%20(InsertTextFormat%20%3D%20%7B%7D))%3B%0A%20%20var%20TextEdit%3B%0A%20%20((TextEdit2)%20%3D%3E%20%7B%0A%20%20%20%20function%20replace(range%2C%20newText)%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20range%2C%0A%20%20%20%20%20%20%20%20newText%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20TextEdit2.replace%20%3D%20replace%3B%0A%20%20%7D)(TextEdit%20%7C%7C%20(TextEdit%20%3D%20%7B%7D))%3B%0A%20%20var%20CompletionItem%3B%0A%20%20((CompletionItem2)%20%3D%3E%20%7B%0A%20%20%20%20function%20create(label)%20%7B%0A%20%20%20%20%20%20return%20%7B%20label%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20CompletionItem2.create%20%3D%20create%3B%0A%20%20%7D)(CompletionItem%20%7C%7C%20(CompletionItem%20%3D%20%7B%7D))%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2Futils.ts%0A%20%20function%20isObject(val)%20%7B%0A%20%20%20%20return%20typeof%20val%20%3D%3D%3D%20%22object%22%20%26%26%20val%20!%3D%3D%20null%20%26%26%20!Array.isArray(val)%3B%0A%20%20%7D%0A%20%20function%20isNumber(val)%20%7B%0A%20%20%20%20return%20typeof%20val%20%3D%3D%3D%20%22number%22%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fservice%2Fparse.ts%0A%20%20var%20ASTNodeImpl%20%3D%20class%20%7B%0A%20%20%20%20constructor(parent%2C%20offset%2C%20length%20%3D%200)%20%7B%0A%20%20%20%20%20%20this.offset%20%3D%20offset%3B%0A%20%20%20%20%20%20this.length%20%3D%20length%3B%0A%20%20%20%20%20%20this.parent%20%3D%20parent%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20children()%20%7B%0A%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20toString()%20%7B%0A%20%20%20%20%20%20return%20%22type%3A%20%22%20%2B%20this.type%20%2B%20%22%20(%22%20%2B%20this.offset%20%2B%20%22%2F%22%20%2B%20this.length%20%2B%20%22)%22%20%2B%20(this.parent%20%3F%20%22%20parent%3A%20%7B%22%20%2B%20this.parent.toString()%20%2B%20%22%7D%22%20%3A%20%22%22)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20NullASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22null%22%3B%0A%20%20%20%20%20%20this.value%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20BooleanASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20boolValue%2C%20offset)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22boolean%22%3B%0A%20%20%20%20%20%20this.value%20%3D%20boolValue%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20ArrayASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22array%22%3B%0A%20%20%20%20%20%20this.items%20%3D%20%5B%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20children()%20%7B%0A%20%20%20%20%20%20return%20this.items%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20NumberASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22number%22%3B%0A%20%20%20%20%20%20this.isInteger%20%3D%20true%3B%0A%20%20%20%20%20%20this.value%20%3D%20Number.NaN%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20ObjectASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22object%22%3B%0A%20%20%20%20%20%20this.properties%20%3D%20%5B%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20children()%20%7B%0A%20%20%20%20%20%20return%20this.properties%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20StringASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset%2C%20length)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset%2C%20length)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22string%22%3B%0A%20%20%20%20%20%20this.value%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20PropertyASTNodeImpl%20%3D%20class%20extends%20ASTNodeImpl%20%7B%0A%20%20%20%20constructor(parent%2C%20offset%2C%20keyNode)%20%7B%0A%20%20%20%20%20%20super(parent%2C%20offset)%3B%0A%20%20%20%20%20%20this.type%20%3D%20%22property%22%3B%0A%20%20%20%20%20%20this.colonOffset%20%3D%20-1%3B%0A%20%20%20%20%20%20this.keyNode%20%3D%20keyNode%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20children()%20%7B%0A%20%20%20%20%20%20return%20this.valueNode%20%3F%20%5Bthis.keyNode%2C%20this.valueNode%5D%20%3A%20%5Bthis.keyNode%5D%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20JsonDocument%20%3D%20class%20%7B%0A%20%20%20%20constructor(root)%20%7B%0A%20%20%20%20%20%20this.root%20%3D%20root%3B%0A%20%20%20%20%7D%0A%20%20%20%20getNodeFromOffset(offset%2C%20includeRightBound%20%3D%20false)%20%7B%0A%20%20%20%20%20%20if%20(!this.root)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20findNodeAtOffset2(this.root%2C%20offset%2C%20includeRightBound)%3B%0A%20%20%20%20%7D%0A%20%20%20%20visit(visitor)%20%7B%0A%20%20%20%20%20%20if%20(this.root)%20%7B%0A%20%20%20%20%20%20%20%20const%20doVisit%20%3D%20(node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20let%20ctn%20%3D%20visitor(node)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20children%20%3D%20node.children%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(Array.isArray(children))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20children.length%20%26%26%20ctn%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ctn%20%3D%20doVisit(children%5Bi%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20ctn%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20doVisit(this.root)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20function%20parseJson(jsonModel)%20%7B%0A%20%20%20%20const%20problems%20%3D%20%5B%5D%3B%0A%20%20%20%20let%20lastProblemOffset%20%3D%20-1%3B%0A%20%20%20%20const%20text%20%3D%20jsonModel.getValue()%3B%0A%20%20%20%20const%20scanner%20%3D%20createScanner2(text%2C%20false)%3B%0A%20%20%20%20function%20_scanNext()%20%7B%0A%20%20%20%20%20%20while%20(true)%20%7B%0A%20%20%20%20%20%20%20%20const%20token2%20%3D%20scanner.scan()%3B%0A%20%20%20%20%20%20%20%20_checkScanError()%3B%0A%20%20%20%20%20%20%20%20switch%20(token2)%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%20SyntaxKind.LineBreakTrivia%3A%0A%20%20%20%20%20%20%20%20%20%20case%20SyntaxKind.Trivia%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20token2%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20function%20_checkScanError()%20%7B%0A%20%20%20%20%20%20switch%20(scanner.getTokenError())%20%7B%0A%20%20%20%20%20%20%20%20case%20ScanError.InvalidUnicode%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Invalid%20unicode%20sequence%20in%20string.%22%2C%20260%20%2F*%20InvalidUnicode%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20case%20ScanError.InvalidEscapeCharacter%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Invalid%20escape%20character%20in%20string.%22%2C%20261%20%2F*%20InvalidEscapeCharacter%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20case%20ScanError.UnexpectedEndOfNumber%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Unexpected%20end%20of%20number.%22%2C%20259%20%2F*%20UnexpectedEndOfNumber%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20case%20ScanError.UnexpectedEndOfComment%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Unexpected%20end%20of%20comment.%22%2C%20257%20%2F*%20UnexpectedEndOfComment%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20case%20ScanError.UnexpectedEndOfString%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Unexpected%20end%20of%20string.%22%2C%20258%20%2F*%20UnexpectedEndOfString%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20case%20ScanError.InvalidCharacter%3A%0A%20%20%20%20%20%20%20%20%20%20_error(%22Invalid%20characters%20in%20string.%20Control%20characters%20must%20be%20escaped.%22%2C%20262%20%2F*%20InvalidCharacter%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_errorAtRange(message%2C%20code%2C%20startOffset%2C%20endOffset)%20%7B%0A%20%20%20%20%20%20if%20(problems.length%20%3D%3D%3D%200%20%7C%7C%20startOffset%20!%3D%3D%20lastProblemOffset)%20%7B%0A%20%20%20%20%20%20%20%20const%20range%20%3D%20ErrRange.create(jsonModel.positionAt(startOffset)%2C%20jsonModel.positionAt(endOffset))%3B%0A%20%20%20%20%20%20%20%20problems.push(Diagnostic.create(message%2C%20code%2C%20range))%3B%0A%20%20%20%20%20%20%20%20lastProblemOffset%20%3D%20startOffset%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_finalize(node%2C%20scanNext)%20%7B%0A%20%20%20%20%20%20node.length%20%3D%20scanner.getTokenOffset()%20%2B%20scanner.getTokenLength()%20-%20node.offset%3B%0A%20%20%20%20%20%20if%20(scanNext)%20%7B%0A%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_error(message%2C%20code%2C%20node%20%3D%20void%200%2C%20skipUntilAfter%20%3D%20%5B%5D%2C%20skipUntil%20%3D%20%5B%5D)%20%7B%0A%20%20%20%20%20%20let%20start%20%3D%20scanner.getTokenOffset()%3B%0A%20%20%20%20%20%20let%20end%20%3D%20scanner.getPosition()%20%2B%20scanner.getTokenLength()%3B%0A%20%20%20%20%20%20if%20(start%20%3D%3D%3D%20end%20%26%26%20start%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20start--%3B%0A%20%20%20%20%20%20%20%20while%20(start%20%3E%200%20%26%26%20%2F%5Cs%2F.test(text.charAt(start)))%20%7B%0A%20%20%20%20%20%20%20%20%20%20start--%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20end%20%3D%20start%20%2B%201%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20_errorAtRange(message%2C%20code%2C%20start%2C%20end)%3B%0A%20%20%20%20%20%20if%20(node)%20%7B%0A%20%20%20%20%20%20%20%20_finalize(node%2C%20false)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(skipUntilAfter.length%20%2B%20skipUntil.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20let%20token2%20%3D%20scanner.getToken()%3B%0A%20%20%20%20%20%20%20%20while%20(token2%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(skipUntilAfter.indexOf(token2)%20!%3D%3D%20-1)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(skipUntil.indexOf(token2)%20!%3D%3D%20-1)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20token2%20%3D%20_scanNext()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseArray(parent)%20%7B%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.OpenBracketToken)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20node%20%3D%20new%20ArrayASTNodeImpl(parent%2C%20scanner.getTokenOffset())%3B%0A%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20let%20needComma%20%3D%20false%3B%0A%20%20%20%20%20%20while%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.CloseBracketToken%20%26%26%20scanner.getToken()%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.CommaToken)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!needComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_error(%22Value%20expected.%22%2C%20516%20%2F*%20ValueExpected%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20commaOffset%20%3D%20scanner.getTokenOffset()%3B%0A%20%20%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.CloseBracketToken)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(needComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_errorAtRange(%22Trailing%20comma%22%2C%20519%20%2F*%20TrailingComma%20*%2F%2C%20commaOffset%2C%20commaOffset%20%2B%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(needComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_error(%22Comma%20expected.%22%2C%20514%20%2F*%20CommaExpected%20*%2F%2C%20void%200%2C%20%5B%5D%2C%20%5BSyntaxKind.CloseBracketToken%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20item%20%3D%20_parseValue(node)%3B%0A%20%20%20%20%20%20%20%20if%20(!item)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_error(%22Value%20expected.%22%2C%20516%20%2F*%20ValueExpected%20*%2F%2C%20void%200%2C%20%5B%5D%2C%20%5BSyntaxKind.CloseBracketToken%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20node.items.push(item)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20needComma%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.CloseBracketToken)%20%7B%0A%20%20%20%20%20%20%20%20return%20_error(%22Expected%20comma%20or%20closing%20bracket%22%2C%20518%20%2F*%20CommaOrCloseBraceExpected%20*%2F%2C%20node)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20_finalize(node%2C%20true)%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20keyPlaceholder%20%3D%20new%20StringASTNodeImpl(void%200%2C%200%2C%200)%3B%0A%20%20%20%20function%20_parseProperty(parent%2C%20keysSeen)%20%7B%0A%20%20%20%20%20%20const%20node%20%3D%20new%20PropertyASTNodeImpl(parent%2C%20scanner.getTokenOffset()%2C%20keyPlaceholder)%3B%0A%20%20%20%20%20%20let%20key%20%3D%20_parseString(node)%3B%0A%20%20%20%20%20%20if%20(!key)%20%7B%0A%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.Unknown)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_error(%22Property%20keys%20must%20be%20doublequoted%22%2C%20528%20%2F*%20PropertyKeysMustBeDoublequoted%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20keyNode%20%3D%20new%20StringASTNodeImpl(node%2C%20scanner.getTokenOffset()%2C%20scanner.getTokenLength())%3B%0A%20%20%20%20%20%20%20%20%20%20keyNode.value%20%3D%20scanner.getTokenValue()%3B%0A%20%20%20%20%20%20%20%20%20%20key%20%3D%20keyNode%3B%0A%20%20%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20node.keyNode%20%3D%20key%3B%0A%20%20%20%20%20%20if%20(key.value%20!%3D%3D%20%22%2F%2F%22)%20%7B%0A%20%20%20%20%20%20%20%20const%20seen%20%3D%20keysSeen%5Bkey.value%5D%3B%0A%20%20%20%20%20%20%20%20if%20(seen)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_errorAtRange(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Duplicate%20object%20key%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20520%20%2F*%20DuplicateKey%20*%2F%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20node.keyNode.offset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20node.keyNode.offset%20%2B%20node.keyNode.length%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(isObject(seen))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_errorAtRange(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Duplicate%20object%20key%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20520%20%2F*%20DuplicateKey%20*%2F%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20seen.keyNode.offset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20seen.keyNode.offset%20%2B%20seen.keyNode.length%0A%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20keysSeen%5Bkey.value%5D%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20keysSeen%5Bkey.value%5D%20%3D%20node%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.ColonToken)%20%7B%0A%20%20%20%20%20%20%20%20node.colonOffset%20%3D%20scanner.getTokenOffset()%3B%0A%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20_error(%22Colon%20expected%22%2C%20515%20%2F*%20ColonExpected%20*%2F)%3B%0A%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.StringLiteral%20%26%26%20jsonModel.positionAt(key.offset%20%2B%20key.length).lineNumber%20%3C%20jsonModel.positionAt(scanner.getTokenOffset()).lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20node.length%20%3D%20key.length%3B%0A%20%20%20%20%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20value%20%3D%20_parseValue(node)%3B%0A%20%20%20%20%20%20if%20(!value)%20%7B%0A%20%20%20%20%20%20%20%20return%20_error(%0A%20%20%20%20%20%20%20%20%20%20%22Value%20expected%22%2C%0A%20%20%20%20%20%20%20%20%20%20516%20%2F*%20ValueExpected%20*%2F%2C%0A%20%20%20%20%20%20%20%20%20%20node%2C%0A%20%20%20%20%20%20%20%20%20%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%5BSyntaxKind.CloseBraceToken%2C%20SyntaxKind.CommaToken%5D%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20node.valueNode%20%3D%20value%3B%0A%20%20%20%20%20%20node.length%20%3D%20value.offset%20%2B%20value.length%20-%20node.offset%3B%0A%20%20%20%20%20%20return%20node%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseObject(parent)%20%7B%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.OpenBraceToken)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20node%20%3D%20new%20ObjectASTNodeImpl(parent%2C%20scanner.getTokenOffset())%3B%0A%20%20%20%20%20%20const%20keysSeen%20%3D%20%2F*%20%40__PURE__%20*%2F%20Object.create(null)%3B%0A%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20let%20needsComma%20%3D%20false%3B%0A%20%20%20%20%20%20while%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.CloseBraceToken%20%26%26%20scanner.getToken()%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.CommaToken)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!needsComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20_error(%22Property%20expected%22%2C%20513%20%2F*%20PropertyExpected%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20commaOffset%20%3D%20scanner.getTokenOffset()%3B%0A%20%20%20%20%20%20%20%20%20%20_scanNext()%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(scanner.getToken()%20%3D%3D%3D%20SyntaxKind.CloseBraceToken)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(needsComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20_errorAtRange(%22Trailing%20comma%22%2C%20519%20%2F*%20TrailingComma%20*%2F%2C%20commaOffset%2C%20commaOffset%20%2B%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(needsComma)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_error(%22Expected%20comma%22%2C%20514%20%2F*%20CommaExpected%20*%2F)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20property%20%3D%20_parseProperty(node%2C%20keysSeen)%3B%0A%20%20%20%20%20%20%20%20if%20(!property)%20%7B%0A%20%20%20%20%20%20%20%20%20%20_error(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Property%20expected%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20513%20%2F*%20PropertyExpected%20*%2F%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20void%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5BSyntaxKind.CloseBraceToken%2C%20SyntaxKind.CommaToken%5D%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20node.properties.push(property)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20needsComma%20%3D%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.CloseBraceToken)%20%7B%0A%20%20%20%20%20%20%20%20return%20_error(%22Expected%20comma%20or%20closing%20brace%22%2C%20518%20%2F*%20CommaOrCloseBraceExpected%20*%2F%2C%20node)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20_finalize(node%2C%20true)%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseString(parent)%20%7B%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.StringLiteral)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20node%20%3D%20new%20StringASTNodeImpl(parent%2C%20scanner.getTokenOffset())%3B%0A%20%20%20%20%20%20node.value%20%3D%20scanner.getTokenValue()%3B%0A%20%20%20%20%20%20return%20_finalize(node%2C%20true)%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseNumber(parent)%20%7B%0A%20%20%20%20%20%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.NumericLiteral)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20node%20%3D%20new%20NumberASTNodeImpl(parent%2C%20scanner.getTokenOffset())%3B%0A%20%20%20%20%20%20if%20(scanner.getTokenError()%20%3D%3D%3D%20ScanError.None)%20%7B%0A%20%20%20%20%20%20%20%20const%20tokenValue%20%3D%20scanner.getTokenValue()%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20numberValue%20%3D%20JSON.parse(tokenValue)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(!isNumber(numberValue))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20_error(%22Invalid%20number%20format.%22%2C%200%20%2F*%20Undefined%20*%2F%2C%20node)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20node.value%20%3D%20numberValue%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20_error(%22Invalid%20number%20format.%22%2C%200%20%2F*%20Undefined%20*%2F%2C%20node)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20node.isInteger%20%3D%20tokenValue.indexOf(%22.%22)%20%3D%3D%3D%20-1%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20_finalize(node%2C%20true)%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseLiteral(parent)%20%7B%0A%20%20%20%20%20%20let%20node%3B%0A%20%20%20%20%20%20switch%20(scanner.getToken())%20%7B%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.NullKeyword%3A%0A%20%20%20%20%20%20%20%20%20%20return%20_finalize(new%20NullASTNodeImpl(parent%2C%20scanner.getTokenOffset())%2C%20true)%3B%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.TrueKeyword%3A%0A%20%20%20%20%20%20%20%20%20%20return%20_finalize(new%20BooleanASTNodeImpl(parent%2C%20true%2C%20scanner.getTokenOffset())%2C%20true)%3B%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.FalseKeyword%3A%0A%20%20%20%20%20%20%20%20%20%20return%20_finalize(new%20BooleanASTNodeImpl(parent%2C%20false%2C%20scanner.getTokenOffset())%2C%20true)%3B%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20function%20_parseValue(parent)%20%7B%0A%20%20%20%20%20%20return%20_parseArray(parent)%20%7C%7C%20_parseObject(parent)%20%7C%7C%20_parseString(parent)%20%7C%7C%20_parseNumber(parent)%20%7C%7C%20_parseLiteral(parent)%3B%0A%20%20%20%20%7D%0A%20%20%20%20let%20_root%20%3D%20void%200%3B%0A%20%20%20%20const%20token%20%3D%20_scanNext()%3B%0A%20%20%20%20if%20(token%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20_root%20%3D%20_parseValue(_root)%3B%0A%20%20%20%20%20%20if%20(!_root)%20%7B%0A%20%20%20%20%20%20%20%20_error(%22Expected%20a%20JSON%20object%2C%20array%20or%20literal%22%2C%200%20%2F*%20Undefined%20*%2F)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(scanner.getToken()%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20%20%20_error(%22End%20of%20file%20expected.%22%2C%200%20%2F*%20Undefined%20*%2F)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20problems%2C%0A%20%20%20%20%20%20root%3A%20new%20JsonDocument(_root)%0A%20%20%20%20%7D%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fservice%2FgetRange.ts%0A%20%20function%20getFoldingRanges(jsonModel)%20%7B%0A%20%20%20%20const%20ranges%20%3D%20%5B%5D%3B%0A%20%20%20%20const%20nestingLevels%20%3D%20%5B%5D%3B%0A%20%20%20%20const%20stack%20%3D%20%5B%5D%3B%0A%20%20%20%20let%20prevStart%20%3D%20-1%3B%0A%20%20%20%20const%20scanner%20%3D%20createScanner2(jsonModel.getValue()%2C%20false)%3B%0A%20%20%20%20let%20token%20%3D%20scanner.scan()%3B%0A%20%20%20%20function%20addRange(range)%20%7B%0A%20%20%20%20%20%20ranges.push(range)%3B%0A%20%20%20%20%20%20nestingLevels.push(stack.length)%3B%0A%20%20%20%20%7D%0A%20%20%20%20while%20(token%20!%3D%3D%20SyntaxKind.EOF)%20%7B%0A%20%20%20%20%20%20switch%20(token)%20%7B%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.OpenBraceToken%3A%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.OpenBracketToken%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20startLine%20%3D%20jsonModel.positionAt(scanner.getPosition()).lineNumber%3B%0A%20%20%20%20%20%20%20%20%20%20const%20range%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20startLine%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20endLine%3A%20startLine%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3A%20token%20%3D%3D%3D%20SyntaxKind.OpenBraceToken%20%3F%20%22object%22%20%3A%20%22array%22%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20stack.push(range)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.CloseBraceToken%3A%0A%20%20%20%20%20%20%20%20case%20SyntaxKind.CloseBracketToken%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20kind%20%3D%20token%20%3D%3D%3D%20SyntaxKind.CloseBraceToken%20%3F%20%22object%22%20%3A%20%22array%22%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(stack.length%20%3E%200%20%26%26%20stack%5Bstack.length%20-%201%5D.kind%20%3D%3D%3D%20kind)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20range%20%3D%20stack.pop()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20line%20%3D%20jsonModel.positionAt(scanner.getTokenOffset()).lineNumber%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(range%20%26%26%20line%20%3E%20range.startLine%20%2B%201%20%26%26%20prevStart%20!%3D%3D%20range.startLine)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20range.endLine%20%3D%20line%20-%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20addRange(range)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20prevStart%20%3D%20range.startLine%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20token%20%3D%20scanner.scan()%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20ranges%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fservice%2FjsonService.ts%0A%20%20function%20formatJson(jsonModel%2C%20options)%20%7B%0A%20%20%20%20const%20edits%20%3D%20format2(jsonModel.getValue()%2C%20void%200%2C%20options)%3B%0A%20%20%20%20return%20edits%3B%0A%20%20%7D%0A%20%20function%20doValidate(jsonModel)%20%7B%0A%20%20%20%20const%20%7B%20root%2C%20problems%20%7D%20%3D%20parseJson(jsonModel)%3B%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20problems%2C%0A%20%20%20%20%20%20root%0A%20%20%20%20%7D%3B%0A%20%20%7D%0A%20%20function%20parseJsonAst(jsonModel)%20%7B%0A%20%20%20%20return%20parseJson(jsonModel).root%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fposition.ts%0A%20%20var%20Position%20%3D%20class%20%7B%0A%20%20%20%20constructor(lineNumber%2C%20column)%20%7B%0A%20%20%20%20%20%20this.lineNumber%20%3D%20lineNumber%3B%0A%20%20%20%20%20%20this.column%20%3D%20column%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2Frange.ts%0A%20%20var%20Range%20%3D%20class%20_Range%20%7B%0A%20%20%20%20constructor(startLineNumber%2C%20startColumn%2C%20endLineNumber%2C%20endColumn)%20%7B%0A%20%20%20%20%20%20if%20(startLineNumber%20%3E%20endLineNumber%20%7C%7C%20startLineNumber%20%3D%3D%3D%20endLineNumber%20%26%26%20startColumn%20%3E%20endColumn)%20%7B%0A%20%20%20%20%20%20%20%20this.startLineNumber%20%3D%20endLineNumber%3B%0A%20%20%20%20%20%20%20%20this.startColumn%20%3D%20endColumn%3B%0A%20%20%20%20%20%20%20%20this.endLineNumber%20%3D%20startLineNumber%3B%0A%20%20%20%20%20%20%20%20this.endColumn%20%3D%20startColumn%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this.startLineNumber%20%3D%20startLineNumber%3B%0A%20%20%20%20%20%20%20%20this.startColumn%20%3D%20startColumn%3B%0A%20%20%20%20%20%20%20%20this.endLineNumber%20%3D%20endLineNumber%3B%0A%20%20%20%20%20%20%20%20this.endColumn%20%3D%20endColumn%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20static%20create(start%2C%20end)%20%7B%0A%20%20%20%20%20%20return%20new%20_Range(start.lineNumber%2C%20start.column%2C%20end.lineNumber%2C%20end.column)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Test%20if%20the%20two%20ranges%20are%20intersecting.%20If%20the%20ranges%20are%20touching%20it%20returns%20true.%0A%20%20%20%20%20*%2F%0A%20%20%20%20static%20areIntersecting(a%2C%20b)%20%7B%0A%20%20%20%20%20%20if%20(a.endLineNumber%20%3C%20b.startLineNumber%20%7C%7C%20a.endLineNumber%20%3D%3D%3D%20b.startLineNumber%20%26%26%20a.endColumn%20%3C%3D%20b.startColumn)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(b.endLineNumber%20%3C%20a.startLineNumber%20%7C%7C%20b.endLineNumber%20%3D%3D%3D%20a.startLineNumber%20%26%26%20b.endColumn%20%3C%3D%20a.startColumn)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20A%20reunion%20of%20the%20two%20ranges.%0A%20%20%20%20%20*%20The%20smallest%20position%20will%20be%20used%20as%20the%20start%20point%2C%20and%20the%20largest%20one%20as%20the%20end%20point.%0A%20%20%20%20%20*%2F%0A%20%20%20%20plusRange(range)%20%7B%0A%20%20%20%20%20%20return%20_Range.plusRange(this%2C%20range)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20A%20reunion%20of%20the%20two%20ranges.%0A%20%20%20%20%20*%20The%20smallest%20position%20will%20be%20used%20as%20the%20start%20point%2C%20and%20the%20largest%20one%20as%20the%20end%20point.%0A%20%20%20%20%20*%2F%0A%20%20%20%20static%20plusRange(a%2C%20b)%20%7B%0A%20%20%20%20%20%20let%20startLineNumber%3B%0A%20%20%20%20%20%20let%20startColumn%3B%0A%20%20%20%20%20%20let%20endLineNumber%3B%0A%20%20%20%20%20%20let%20endColumn%3B%0A%20%20%20%20%20%20if%20(b.startLineNumber%20%3C%20a.startLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20startLineNumber%20%3D%20b.startLineNumber%3B%0A%20%20%20%20%20%20%20%20startColumn%20%3D%20b.startColumn%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(b.startLineNumber%20%3D%3D%3D%20a.startLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20startLineNumber%20%3D%20b.startLineNumber%3B%0A%20%20%20%20%20%20%20%20startColumn%20%3D%20Math.min(b.startColumn%2C%20a.startColumn)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20startLineNumber%20%3D%20a.startLineNumber%3B%0A%20%20%20%20%20%20%20%20startColumn%20%3D%20a.startColumn%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(b.endLineNumber%20%3E%20a.endLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20endLineNumber%20%3D%20b.endLineNumber%3B%0A%20%20%20%20%20%20%20%20endColumn%20%3D%20b.endColumn%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(b.endLineNumber%20%3D%3D%3D%20a.endLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20endLineNumber%20%3D%20b.endLineNumber%3B%0A%20%20%20%20%20%20%20%20endColumn%20%3D%20Math.max(b.endColumn%2C%20a.endColumn)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20endLineNumber%20%3D%20a.endLineNumber%3B%0A%20%20%20%20%20%20%20%20endColumn%20%3D%20a.endColumn%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20new%20_Range(startLineNumber%2C%20startColumn%2C%20endLineNumber%2C%20endColumn)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Return%20the%20start%20position%20(which%20will%20be%20before%20or%20equal%20to%20the%20end%20position)%0A%20%20%20%20%20*%2F%0A%20%20%20%20getStartPosition()%20%7B%0A%20%20%20%20%20%20return%20_Range.getStartPosition(this)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Return%20the%20start%20position%20(which%20will%20be%20before%20or%20equal%20to%20the%20end%20position)%0A%20%20%20%20%20*%2F%0A%20%20%20%20static%20getStartPosition(range)%20%7B%0A%20%20%20%20%20%20return%20new%20Position(range.startLineNumber%2C%20range.startColumn)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fmodel.ts%0A%20%20var%20FindMatch%20%3D%20class%20%7B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40internal%0A%20%20%20%20%20*%2F%0A%20%20%20%20constructor(range%2C%20matches)%20%7B%0A%20%20%20%20%20%20this._findMatchBrand%20%3D%20void%200%3B%0A%20%20%20%20%20%20this.range%20%3D%20range%3B%0A%20%20%20%20%20%20this.matches%20%3D%20matches%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20SearchData%20%3D%20class%20%7B%0A%20%20%20%20constructor(regex%2C%20wordSeparators%2C%20simpleSearch)%20%7B%0A%20%20%20%20%20%20this.regex%20%3D%20regex%3B%0A%20%20%20%20%20%20this.wordSeparators%20%3D%20wordSeparators%3B%0A%20%20%20%20%20%20this.simpleSearch%20%3D%20simpleSearch%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2FpieceTreeTextBuffer%2FrbTreeBase.ts%0A%20%20var%20TreeNode%20%3D%20class%20%7B%0A%20%20%20%20%2F%2F%20line%20feeds%20cnt%20in%20the%20left%20subtree%20(not%20in%20order)%0A%20%20%20%20constructor(piece%2C%20color)%20%7B%0A%20%20%20%20%20%20this.piece%20%3D%20piece%3B%0A%20%20%20%20%20%20this.color%20%3D%20color%3B%0A%20%20%20%20%20%20this.size_left%20%3D%200%3B%0A%20%20%20%20%20%20this.lf_left%20%3D%200%3B%0A%20%20%20%20%20%20this.parent%20%3D%20this%3B%0A%20%20%20%20%20%20this.left%20%3D%20this%3B%0A%20%20%20%20%20%20this.right%20%3D%20this%3B%0A%20%20%20%20%7D%0A%20%20%20%20next()%20%7B%0A%20%20%20%20%20%20if%20(this.right%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20leftest(this.right)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20node%20%3D%20this%3B%0A%20%20%20%20%20%20while%20(node.parent%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(node.parent.left%20%3D%3D%3D%20node)%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20node%20%3D%20node.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(node.parent%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20SENTINEL%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20node.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20prev()%20%7B%0A%20%20%20%20%20%20if%20(this.left%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20righttest(this.left)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20node%20%3D%20this%3B%0A%20%20%20%20%20%20while%20(node.parent%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(node.parent.right%20%3D%3D%3D%20node)%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20node%20%3D%20node.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(node.parent%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20SENTINEL%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20node.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20detach()%20%7B%0A%20%20%20%20%20%20this.parent%20%3D%20null%3B%0A%20%20%20%20%20%20this.left%20%3D%20null%3B%0A%20%20%20%20%20%20this.right%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20SENTINEL%20%3D%20new%20TreeNode(null%2C%200%20%2F*%20Black%20*%2F)%3B%0A%20%20SENTINEL.parent%20%3D%20SENTINEL%3B%0A%20%20SENTINEL.left%20%3D%20SENTINEL%3B%0A%20%20SENTINEL.right%20%3D%20SENTINEL%3B%0A%20%20SENTINEL.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20function%20leftest(node)%20%7B%0A%20%20%20%20while%20(node.left%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20node%20%3D%20node.left%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20node%3B%0A%20%20%7D%0A%20%20function%20righttest(node)%20%7B%0A%20%20%20%20while%20(node.right%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20node%20%3D%20node.right%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20node%3B%0A%20%20%7D%0A%20%20function%20calculateSize(node)%20%7B%0A%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20node.size_left%20%2B%20node.piece.length%20%2B%20calculateSize(node.right)%3B%0A%20%20%7D%0A%20%20function%20calculateLF(node)%20%7B%0A%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20node.lf_left%20%2B%20node.piece.lineFeedCnt%20%2B%20calculateLF(node.right)%3B%0A%20%20%7D%0A%20%20function%20resetSentinel()%20%7B%0A%20%20%20%20SENTINEL.parent%20%3D%20SENTINEL%3B%0A%20%20%7D%0A%20%20function%20leftRotate(tree%2C%20x)%20%7B%0A%20%20%20%20const%20y%20%3D%20x.right%3B%0A%20%20%20%20y.size_left%20%2B%3D%20x.size_left%20%2B%20(x.piece%20%3F%20x.piece.length%20%3A%200)%3B%0A%20%20%20%20y.lf_left%20%2B%3D%20x.lf_left%20%2B%20(x.piece%20%3F%20x.piece.lineFeedCnt%20%3A%200)%3B%0A%20%20%20%20x.right%20%3D%20y.left%3B%0A%20%20%20%20if%20(y.left%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20y.left.parent%20%3D%20x%3B%0A%20%20%20%20%7D%0A%20%20%20%20y.parent%20%3D%20x.parent%3B%0A%20%20%20%20if%20(x.parent%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20tree.root%20%3D%20y%3B%0A%20%20%20%20%7D%20else%20if%20(x.parent.left%20%3D%3D%3D%20x)%20%7B%0A%20%20%20%20%20%20x.parent.left%20%3D%20y%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20x.parent.right%20%3D%20y%3B%0A%20%20%20%20%7D%0A%20%20%20%20y.left%20%3D%20x%3B%0A%20%20%20%20x.parent%20%3D%20y%3B%0A%20%20%7D%0A%20%20function%20rightRotate(tree%2C%20y)%20%7B%0A%20%20%20%20const%20x%20%3D%20y.left%3B%0A%20%20%20%20y.left%20%3D%20x.right%3B%0A%20%20%20%20if%20(x.right%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20x.right.parent%20%3D%20y%3B%0A%20%20%20%20%7D%0A%20%20%20%20x.parent%20%3D%20y.parent%3B%0A%20%20%20%20y.size_left%20-%3D%20x.size_left%20%2B%20(x.piece%20%3F%20x.piece.length%20%3A%200)%3B%0A%20%20%20%20y.lf_left%20-%3D%20x.lf_left%20%2B%20(x.piece%20%3F%20x.piece.lineFeedCnt%20%3A%200)%3B%0A%20%20%20%20if%20(y.parent%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20tree.root%20%3D%20x%3B%0A%20%20%20%20%7D%20else%20if%20(y%20%3D%3D%3D%20y.parent.right)%20%7B%0A%20%20%20%20%20%20y.parent.right%20%3D%20x%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20y.parent.left%20%3D%20x%3B%0A%20%20%20%20%7D%0A%20%20%20%20x.right%20%3D%20y%3B%0A%20%20%20%20y.parent%20%3D%20x%3B%0A%20%20%7D%0A%20%20function%20rbDelete(tree%2C%20z)%20%7B%0A%20%20%20%20let%20x%3B%0A%20%20%20%20let%20y%3B%0A%20%20%20%20if%20(z.left%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20y%20%3D%20z%3B%0A%20%20%20%20%20%20x%20%3D%20y.right%3B%0A%20%20%20%20%7D%20else%20if%20(z.right%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20y%20%3D%20z%3B%0A%20%20%20%20%20%20x%20%3D%20y.left%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20y%20%3D%20leftest(z.right)%3B%0A%20%20%20%20%20%20x%20%3D%20y.right%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(y%20%3D%3D%3D%20tree.root)%20%7B%0A%20%20%20%20%20%20tree.root%20%3D%20x%3B%0A%20%20%20%20%20%20x.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20z.detach()%3B%0A%20%20%20%20%20%20resetSentinel()%3B%0A%20%20%20%20%20%20tree.root.parent%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20yWasRed%20%3D%20y.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20if%20(y%20%3D%3D%3D%20y.parent.left)%20%7B%0A%20%20%20%20%20%20y.parent.left%20%3D%20x%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20y.parent.right%20%3D%20x%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(y%20%3D%3D%3D%20z)%20%7B%0A%20%20%20%20%20%20x.parent%20%3D%20y.parent%3B%0A%20%20%20%20%20%20recomputeTreeMetadata(tree%2C%20x)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20if%20(y.parent%20%3D%3D%3D%20z)%20%7B%0A%20%20%20%20%20%20%20%20x.parent%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20x.parent%20%3D%20y.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20recomputeTreeMetadata(tree%2C%20x)%3B%0A%20%20%20%20%20%20y.left%20%3D%20z.left%3B%0A%20%20%20%20%20%20y.right%20%3D%20z.right%3B%0A%20%20%20%20%20%20y.parent%20%3D%20z.parent%3B%0A%20%20%20%20%20%20y.color%20%3D%20z.color%3B%0A%20%20%20%20%20%20if%20(z%20%3D%3D%3D%20tree.root)%20%7B%0A%20%20%20%20%20%20%20%20tree.root%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20if%20(z%20%3D%3D%3D%20z.parent.left)%20%7B%0A%20%20%20%20%20%20%20%20%20%20z.parent.left%20%3D%20y%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20z.parent.right%20%3D%20y%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(y.left%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20y.left.parent%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(y.right%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20y.right.parent%20%3D%20y%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20y.size_left%20%3D%20z.size_left%3B%0A%20%20%20%20%20%20y.lf_left%20%3D%20z.lf_left%3B%0A%20%20%20%20%20%20recomputeTreeMetadata(tree%2C%20y)%3B%0A%20%20%20%20%7D%0A%20%20%20%20z.detach()%3B%0A%20%20%20%20if%20(x.parent.left%20%3D%3D%3D%20x)%20%7B%0A%20%20%20%20%20%20const%20newSizeLeft%20%3D%20calculateSize(x)%3B%0A%20%20%20%20%20%20const%20newLFLeft%20%3D%20calculateLF(x)%3B%0A%20%20%20%20%20%20if%20(newSizeLeft%20!%3D%3D%20x.parent.size_left%20%7C%7C%20newLFLeft%20!%3D%3D%20x.parent.lf_left)%20%7B%0A%20%20%20%20%20%20%20%20const%20delta%20%3D%20newSizeLeft%20-%20x.parent.size_left%3B%0A%20%20%20%20%20%20%20%20const%20lf_delta%20%3D%20newLFLeft%20-%20x.parent.lf_left%3B%0A%20%20%20%20%20%20%20%20x.parent.size_left%20%3D%20newSizeLeft%3B%0A%20%20%20%20%20%20%20%20x.parent.lf_left%20%3D%20newLFLeft%3B%0A%20%20%20%20%20%20%20%20updateTreeMetadata(tree%2C%20x.parent%2C%20delta%2C%20lf_delta)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20recomputeTreeMetadata(tree%2C%20x.parent)%3B%0A%20%20%20%20if%20(yWasRed)%20%7B%0A%20%20%20%20%20%20resetSentinel()%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20let%20w%3B%0A%20%20%20%20while%20(x%20!%3D%3D%20tree.root%20%26%26%20x.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F)%20%7B%0A%20%20%20%20%20%20if%20(x%20%3D%3D%3D%20x.parent.left)%20%7B%0A%20%20%20%20%20%20%20%20w%20%3D%20x.parent.right%3B%0A%20%20%20%20%20%20%20%20if%20(w.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20leftRotate(tree%2C%20x.parent)%3B%0A%20%20%20%20%20%20%20%20%20%20w%20%3D%20x.parent.right%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(w.left.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F%20%26%26%20w.right.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(w.right.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20w.left.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20rightRotate(tree%2C%20w)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%20x.parent.right%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%20x.parent.color%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20w.right.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20leftRotate(tree%2C%20x.parent)%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20tree.root%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20w%20%3D%20x.parent.left%3B%0A%20%20%20%20%20%20%20%20if%20(w.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20rightRotate(tree%2C%20x.parent)%3B%0A%20%20%20%20%20%20%20%20%20%20w%20%3D%20x.parent.left%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(w.left.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F%20%26%26%20w.right.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(w.left.color%20%3D%3D%3D%200%20%2F*%20Black%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20w.right.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20leftRotate(tree%2C%20w)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%20x.parent.left%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20w.color%20%3D%20x.parent.color%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20w.left.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20rightRotate(tree%2C%20x.parent)%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20tree.root%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20x.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20resetSentinel()%3B%0A%20%20%7D%0A%20%20function%20fixInsert(tree%2C%20x)%20%7B%0A%20%20%20%20recomputeTreeMetadata(tree%2C%20x)%3B%0A%20%20%20%20while%20(x%20!%3D%3D%20tree.root%20%26%26%20x.parent.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F)%20%7B%0A%20%20%20%20%20%20if%20(x.parent%20%3D%3D%3D%20x.parent.parent.left)%20%7B%0A%20%20%20%20%20%20%20%20const%20y%20%3D%20x.parent.parent.right%3B%0A%20%20%20%20%20%20%20%20if%20(y.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20y.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent.parent%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(x%20%3D%3D%3D%20x.parent.right)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20leftRotate(tree%2C%20x)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20rightRotate(tree%2C%20x.parent.parent)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20y%20%3D%20x.parent.parent.left%3B%0A%20%20%20%20%20%20%20%20if%20(y.color%20%3D%3D%3D%201%20%2F*%20Red%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20y.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent.parent%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(x%20%3D%3D%3D%20x.parent.left)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20rightRotate(tree%2C%20x)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20x.parent.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20x.parent.parent.color%20%3D%201%20%2F*%20Red%20*%2F%3B%0A%20%20%20%20%20%20%20%20%20%20leftRotate(tree%2C%20x.parent.parent)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20tree.root.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%7D%0A%20%20function%20updateTreeMetadata(tree%2C%20x%2C%20delta%2C%20lineFeedCntDelta)%20%7B%0A%20%20%20%20while%20(x%20!%3D%3D%20tree.root%20%26%26%20x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20if%20(x.parent.left%20%3D%3D%3D%20x)%20%7B%0A%20%20%20%20%20%20%20%20x.parent.size_left%20%2B%3D%20delta%3B%0A%20%20%20%20%20%20%20%20x.parent.lf_left%20%2B%3D%20lineFeedCntDelta%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20function%20recomputeTreeMetadata(tree%2C%20x)%20%7B%0A%20%20%20%20let%20delta%20%3D%200%3B%0A%20%20%20%20let%20lf_delta%20%3D%200%3B%0A%20%20%20%20if%20(x%20%3D%3D%3D%20tree.root)%20%7B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20while%20(x%20!%3D%3D%20tree.root%20%26%26%20x%20%3D%3D%3D%20x.parent.right)%20%7B%0A%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(x%20%3D%3D%3D%20tree.root)%20%7B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20delta%20%3D%20calculateSize(x.left)%20-%20x.size_left%3B%0A%20%20%20%20lf_delta%20%3D%20calculateLF(x.left)%20-%20x.lf_left%3B%0A%20%20%20%20x.size_left%20%2B%3D%20delta%3B%0A%20%20%20%20x.lf_left%20%2B%3D%20lf_delta%3B%0A%20%20%20%20while%20(x%20!%3D%3D%20tree.root%20%26%26%20(delta%20!%3D%3D%200%20%7C%7C%20lf_delta%20!%3D%3D%200))%20%7B%0A%20%20%20%20%20%20if%20(x.parent.left%20%3D%3D%3D%20x)%20%7B%0A%20%20%20%20%20%20%20%20x.parent.size_left%20%2B%3D%20delta%3B%0A%20%20%20%20%20%20%20%20x.parent.lf_left%20%2B%3D%20lf_delta%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20x%20%3D%20x.parent%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fmap.ts%0A%20%20var%20_a%3B%0A%20%20var%20LinkedMap%20%3D%20class%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20this%5B_a%5D%20%3D%20%22LinkedMap%22%3B%0A%20%20%20%20%20%20this._map%20%3D%20%2F*%20%40__PURE__%20*%2F%20new%20Map()%3B%0A%20%20%20%20%20%20this._head%20%3D%20void%200%3B%0A%20%20%20%20%20%20this._tail%20%3D%20void%200%3B%0A%20%20%20%20%20%20this._size%20%3D%200%3B%0A%20%20%20%20%20%20this._state%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20clear()%20%7B%0A%20%20%20%20%20%20this._map.clear()%3B%0A%20%20%20%20%20%20this._head%20%3D%20void%200%3B%0A%20%20%20%20%20%20this._tail%20%3D%20void%200%3B%0A%20%20%20%20%20%20this._size%20%3D%200%3B%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20isEmpty()%20%7B%0A%20%20%20%20%20%20return%20!this._head%20%26%26%20!this._tail%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20size()%20%7B%0A%20%20%20%20%20%20return%20this._size%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20first()%20%7B%0A%20%20%20%20%20%20return%20this._head%3F.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20last()%20%7B%0A%20%20%20%20%20%20return%20this._tail%3F.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20has(key)%20%7B%0A%20%20%20%20%20%20return%20this._map.has(key)%3B%0A%20%20%20%20%7D%0A%20%20%20%20get(key%2C%20touch%20%3D%200%20%2F*%20None%20*%2F)%20%7B%0A%20%20%20%20%20%20const%20item%20%3D%20this._map.get(key)%3B%0A%20%20%20%20%20%20if%20(!item)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(touch%20!%3D%3D%200%20%2F*%20None%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20this.touch(item%2C%20touch)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20item.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(key%2C%20value%2C%20touch%20%3D%200%20%2F*%20None%20*%2F)%20%7B%0A%20%20%20%20%20%20let%20item%20%3D%20this._map.get(key)%3B%0A%20%20%20%20%20%20if%20(item)%20%7B%0A%20%20%20%20%20%20%20%20item.value%20%3D%20value%3B%0A%20%20%20%20%20%20%20%20if%20(touch%20!%3D%3D%200%20%2F*%20None%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.touch(item%2C%20touch)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20item%20%3D%20%7B%20key%2C%20value%2C%20next%3A%20void%200%2C%20previous%3A%20void%200%20%7D%3B%0A%20%20%20%20%20%20%20%20switch%20(touch)%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%200%20%2F*%20None%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.addItemLast(item)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%201%20%2F*%20AsOld%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.addItemFirst(item)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20case%202%20%2F*%20AsNew%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.addItemLast(item)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.addItemLast(item)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._map.set(key%2C%20item)%3B%0A%20%20%20%20%20%20%20%20this._size%2B%2B%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this%3B%0A%20%20%20%20%7D%0A%20%20%20%20delete(key)%20%7B%0A%20%20%20%20%20%20return%20!!this.remove(key)%3B%0A%20%20%20%20%7D%0A%20%20%20%20remove(key)%20%7B%0A%20%20%20%20%20%20const%20item%20%3D%20this._map.get(key)%3B%0A%20%20%20%20%20%20if%20(!item)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._map.delete(key)%3B%0A%20%20%20%20%20%20this.removeItem(item)%3B%0A%20%20%20%20%20%20this._size--%3B%0A%20%20%20%20%20%20return%20item.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20shift()%20%7B%0A%20%20%20%20%20%20if%20(!this._head%20%26%26%20!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20return%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(!this._head%20%7C%7C%20!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20item%20%3D%20this._head%3B%0A%20%20%20%20%20%20this._map.delete(item.key)%3B%0A%20%20%20%20%20%20this.removeItem(item)%3B%0A%20%20%20%20%20%20this._size--%3B%0A%20%20%20%20%20%20return%20item.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20forEach(callbackfn%2C%20thisArg)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._state%3B%0A%20%20%20%20%20%20let%20current%20%3D%20this._head%3B%0A%20%20%20%20%20%20while%20(current)%20%7B%0A%20%20%20%20%20%20%20%20if%20(thisArg)%20%7B%0A%20%20%20%20%20%20%20%20%20%20callbackfn.bind(thisArg)(current.value%2C%20current.key%2C%20this)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20callbackfn(current.value%2C%20current.key%2C%20this)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(this._state%20!%3D%3D%20state)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%60LinkedMap%20got%20modified%20during%20iteration.%60)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20current%20%3D%20current.next%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20keys()%20%7B%0A%20%20%20%20%20%20const%20map%20%3D%20this%3B%0A%20%20%20%20%20%20const%20state%20%3D%20this._state%3B%0A%20%20%20%20%20%20let%20current%20%3D%20this._head%3B%0A%20%20%20%20%20%20const%20iterator%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%5BSymbol.iterator%5D()%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20next()%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(map._state%20!%3D%3D%20state)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%60LinkedMap%20got%20modified%20during%20iteration.%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(current)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20result%20%3D%20%7B%20value%3A%20current.key%2C%20done%3A%20false%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.next%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%20value%3A%20void%200%2C%20done%3A%20true%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%7D%0A%20%20%20%20values()%20%7B%0A%20%20%20%20%20%20const%20map%20%3D%20this%3B%0A%20%20%20%20%20%20const%20state%20%3D%20this._state%3B%0A%20%20%20%20%20%20let%20current%20%3D%20this._head%3B%0A%20%20%20%20%20%20const%20iterator%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%5BSymbol.iterator%5D()%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20next()%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(map._state%20!%3D%3D%20state)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%60LinkedMap%20got%20modified%20during%20iteration.%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(current)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20result%20%3D%20%7B%20value%3A%20current.value%2C%20done%3A%20false%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.next%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%20value%3A%20void%200%2C%20done%3A%20true%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%7D%0A%20%20%20%20entries()%20%7B%0A%20%20%20%20%20%20const%20map%20%3D%20this%3B%0A%20%20%20%20%20%20const%20state%20%3D%20this._state%3B%0A%20%20%20%20%20%20let%20current%20%3D%20this._head%3B%0A%20%20%20%20%20%20const%20iterator%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%5BSymbol.iterator%5D()%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20next()%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(map._state%20!%3D%3D%20state)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%60LinkedMap%20got%20modified%20during%20iteration.%60)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(current)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20result%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%5Bcurrent.key%2C%20current.value%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20done%3A%20false%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20current.next%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%20value%3A%20void%200%2C%20done%3A%20true%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20return%20iterator%3B%0A%20%20%20%20%7D%0A%20%20%20%20%5B(_a%20%3D%20Symbol.toStringTag%2C%20Symbol.iterator)%5D()%20%7B%0A%20%20%20%20%20%20return%20this.entries()%3B%0A%20%20%20%20%7D%0A%20%20%20%20trimOld(newSize)%20%7B%0A%20%20%20%20%20%20if%20(newSize%20%3E%3D%20this.size)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(newSize%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20this.clear()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20current%20%3D%20this._head%3B%0A%20%20%20%20%20%20let%20currentSize%20%3D%20this.size%3B%0A%20%20%20%20%20%20while%20(current%20%26%26%20currentSize%20%3E%20newSize)%20%7B%0A%20%20%20%20%20%20%20%20this._map.delete(current.key)%3B%0A%20%20%20%20%20%20%20%20current%20%3D%20current.next%3B%0A%20%20%20%20%20%20%20%20currentSize--%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._head%20%3D%20current%3B%0A%20%20%20%20%20%20this._size%20%3D%20currentSize%3B%0A%20%20%20%20%20%20if%20(current)%20%7B%0A%20%20%20%20%20%20%20%20current.previous%20%3D%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20trimNew(newSize)%20%7B%0A%20%20%20%20%20%20if%20(newSize%20%3E%3D%20this.size)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(newSize%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20this.clear()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20current%20%3D%20this._tail%3B%0A%20%20%20%20%20%20let%20currentSize%20%3D%20this.size%3B%0A%20%20%20%20%20%20while%20(current%20%26%26%20currentSize%20%3E%20newSize)%20%7B%0A%20%20%20%20%20%20%20%20this._map.delete(current.key)%3B%0A%20%20%20%20%20%20%20%20current%20%3D%20current.previous%3B%0A%20%20%20%20%20%20%20%20currentSize--%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._tail%20%3D%20current%3B%0A%20%20%20%20%20%20this._size%20%3D%20currentSize%3B%0A%20%20%20%20%20%20if%20(current)%20%7B%0A%20%20%20%20%20%20%20%20current.next%20%3D%20void%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20addItemFirst(item)%20%7B%0A%20%20%20%20%20%20if%20(!this._head%20%26%26%20!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20this._tail%20%3D%20item%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(!this._head)%20%7B%0A%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20item.next%20%3D%20this._head%3B%0A%20%20%20%20%20%20%20%20this._head.previous%20%3D%20item%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._head%20%3D%20item%3B%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20addItemLast(item)%20%7B%0A%20%20%20%20%20%20if%20(!this._head%20%26%26%20!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20this._head%20%3D%20item%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20item.previous%20%3D%20this._tail%3B%0A%20%20%20%20%20%20%20%20this._tail.next%20%3D%20item%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._tail%20%3D%20item%3B%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20removeItem(item)%20%7B%0A%20%20%20%20%20%20if%20(item%20%3D%3D%3D%20this._head%20%26%26%20item%20%3D%3D%3D%20this._tail)%20%7B%0A%20%20%20%20%20%20%20%20this._head%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20this._tail%20%3D%20void%200%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(item%20%3D%3D%3D%20this._head)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!item.next)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20item.next.previous%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20this._head%20%3D%20item.next%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(item%20%3D%3D%3D%20this._tail)%20%7B%0A%20%20%20%20%20%20%20%20if%20(!item.previous)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20item.previous.next%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20this._tail%20%3D%20item.previous%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20next%20%3D%20item.next%3B%0A%20%20%20%20%20%20%20%20const%20previous%20%3D%20item.previous%3B%0A%20%20%20%20%20%20%20%20if%20(!next%20%7C%7C%20!previous)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20next.previous%20%3D%20previous%3B%0A%20%20%20%20%20%20%20%20previous.next%20%3D%20next%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20item.next%20%3D%20void%200%3B%0A%20%20%20%20%20%20item.previous%20%3D%20void%200%3B%0A%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%7D%0A%20%20%20%20touch(item%2C%20touch)%20%7B%0A%20%20%20%20%20%20if%20(!this._head%20%7C%7C%20!this._tail)%20%7B%0A%20%20%20%20%20%20%20%20throw%20new%20Error(%22Invalid%20list%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(touch%20!%3D%3D%201%20%2F*%20AsOld%20*%2F%20%26%26%20touch%20!%3D%3D%202%20%2F*%20AsNew%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(touch%20%3D%3D%3D%201%20%2F*%20AsOld%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20if%20(item%20%3D%3D%3D%20this._head)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20next%20%3D%20item.next%3B%0A%20%20%20%20%20%20%20%20const%20previous%20%3D%20item.previous%3B%0A%20%20%20%20%20%20%20%20if%20(item%20%3D%3D%3D%20this._tail)%20%7B%0A%20%20%20%20%20%20%20%20%20%20previous.next%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20%20%20this._tail%20%3D%20previous%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20next.previous%20%3D%20previous%3B%0A%20%20%20%20%20%20%20%20%20%20previous.next%20%3D%20next%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20item.previous%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20item.next%20%3D%20this._head%3B%0A%20%20%20%20%20%20%20%20this._head.previous%20%3D%20item%3B%0A%20%20%20%20%20%20%20%20this._head%20%3D%20item%3B%0A%20%20%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(touch%20%3D%3D%3D%202%20%2F*%20AsNew%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20if%20(item%20%3D%3D%3D%20this._tail)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20next%20%3D%20item.next%3B%0A%20%20%20%20%20%20%20%20const%20previous%20%3D%20item.previous%3B%0A%20%20%20%20%20%20%20%20if%20(item%20%3D%3D%3D%20this._head)%20%7B%0A%20%20%20%20%20%20%20%20%20%20next.previous%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20%20%20this._head%20%3D%20next%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20next.previous%20%3D%20previous%3B%0A%20%20%20%20%20%20%20%20%20%20previous.next%20%3D%20next%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20item.next%20%3D%20void%200%3B%0A%20%20%20%20%20%20%20%20item.previous%20%3D%20this._tail%3B%0A%20%20%20%20%20%20%20%20this._tail.next%20%3D%20item%3B%0A%20%20%20%20%20%20%20%20this._tail%20%3D%20item%3B%0A%20%20%20%20%20%20%20%20this._state%2B%2B%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20toJSON()%20%7B%0A%20%20%20%20%20%20const%20data%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.forEach((value%2C%20key)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20data.push(%5Bkey%2C%20value%5D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20return%20data%3B%0A%20%20%20%20%7D%0A%20%20%20%20fromJSON(data)%20%7B%0A%20%20%20%20%20%20this.clear()%3B%0A%20%20%20%20%20%20for%20(const%20%5Bkey%2C%20value%5D%20of%20data)%20%7B%0A%20%20%20%20%20%20%20%20this.set(key%2C%20value)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20Cache%20%3D%20class%20extends%20LinkedMap%20%7B%0A%20%20%20%20constructor(limit%2C%20ratio%20%3D%201)%20%7B%0A%20%20%20%20%20%20super()%3B%0A%20%20%20%20%20%20this._limit%20%3D%20limit%3B%0A%20%20%20%20%20%20this._ratio%20%3D%20Math.min(Math.max(0%2C%20ratio)%2C%201)%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20limit()%20%7B%0A%20%20%20%20%20%20return%20this._limit%3B%0A%20%20%20%20%7D%0A%20%20%20%20set%20limit(limit)%20%7B%0A%20%20%20%20%20%20this._limit%20%3D%20limit%3B%0A%20%20%20%20%20%20this.checkTrim()%3B%0A%20%20%20%20%7D%0A%20%20%20%20get%20ratio()%20%7B%0A%20%20%20%20%20%20return%20this._ratio%3B%0A%20%20%20%20%7D%0A%20%20%20%20set%20ratio(ratio)%20%7B%0A%20%20%20%20%20%20this._ratio%20%3D%20Math.min(Math.max(0%2C%20ratio)%2C%201)%3B%0A%20%20%20%20%20%20this.checkTrim()%3B%0A%20%20%20%20%7D%0A%20%20%20%20get(key%2C%20touch%20%3D%202%20%2F*%20AsNew%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20super.get(key%2C%20touch)%3B%0A%20%20%20%20%7D%0A%20%20%20%20peek(key)%20%7B%0A%20%20%20%20%20%20return%20super.get(key%2C%200%20%2F*%20None%20*%2F)%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(key%2C%20value)%20%7B%0A%20%20%20%20%20%20super.set(key%2C%20value%2C%202%20%2F*%20AsNew%20*%2F)%3B%0A%20%20%20%20%20%20return%20this%3B%0A%20%20%20%20%7D%0A%20%20%20%20checkTrim()%20%7B%0A%20%20%20%20%20%20if%20(this.size%20%3E%20this._limit)%20%7B%0A%20%20%20%20%20%20%20%20this.trim(Math.round(this._limit%20*%20this._ratio))%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20LRUCache%20%3D%20class%20extends%20Cache%20%7B%0A%20%20%20%20constructor(limit%2C%20ratio%20%3D%201)%20%7B%0A%20%20%20%20%20%20super(limit%2C%20ratio)%3B%0A%20%20%20%20%7D%0A%20%20%20%20trim(newSize)%20%7B%0A%20%20%20%20%20%20this.trimOld(newSize)%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(key%2C%20value)%20%7B%0A%20%20%20%20%20%20super.set(key%2C%20value)%3B%0A%20%20%20%20%20%20this.checkTrim()%3B%0A%20%20%20%20%20%20return%20this%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fuint.ts%0A%20%20function%20toUint8(v)%20%7B%0A%20%20%20%20if%20(v%20%3C%200)%20%7B%0A%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(v%20%3E%20255%20%2F*%20MAX_UINT_8%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20255%20%2F*%20MAX_UINT_8%20*%2F%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20v%20%7C%200%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fcommon%2FcharacterClassifier.ts%0A%20%20var%20CharacterClassifier%20%3D%20class%20_CharacterClassifier%20%7B%0A%20%20%20%20constructor(_defaultValue)%20%7B%0A%20%20%20%20%20%20const%20defaultValue%20%3D%20toUint8(_defaultValue)%3B%0A%20%20%20%20%20%20this._defaultValue%20%3D%20defaultValue%3B%0A%20%20%20%20%20%20this._asciiMap%20%3D%20_CharacterClassifier._createAsciiMap(defaultValue)%3B%0A%20%20%20%20%20%20this._map%20%3D%20%2F*%20%40__PURE__%20*%2F%20new%20Map()%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20_createAsciiMap(defaultValue)%20%7B%0A%20%20%20%20%20%20const%20asciiMap%20%3D%20new%20Uint8Array(256)%3B%0A%20%20%20%20%20%20asciiMap.fill(defaultValue)%3B%0A%20%20%20%20%20%20return%20asciiMap%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(charCode%2C%20_value)%20%7B%0A%20%20%20%20%20%20const%20value%20%3D%20toUint8(_value)%3B%0A%20%20%20%20%20%20if%20(charCode%20%3E%3D%200%20%26%26%20charCode%20%3C%20256)%20%7B%0A%20%20%20%20%20%20%20%20this._asciiMap%5BcharCode%5D%20%3D%20value%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this._map.set(charCode%2C%20value)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20get(charCode)%20%7B%0A%20%20%20%20%20%20if%20(charCode%20%3E%3D%200%20%26%26%20charCode%20%3C%20256)%20%7B%0A%20%20%20%20%20%20%20%20return%20this._asciiMap%5BcharCode%5D%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20this._map.get(charCode)%20%7C%7C%20this._defaultValue%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20clear()%20%7B%0A%20%20%20%20%20%20this._asciiMap.fill(this._defaultValue)%3B%0A%20%20%20%20%20%20this._map.clear()%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2FwordCharacterClassifier.ts%0A%20%20var%20WordCharacterClassifier%20%3D%20class%20extends%20CharacterClassifier%20%7B%0A%20%20%20%20constructor(wordSeparators%2C%20intlSegmenterLocales)%20%7B%0A%20%20%20%20%20%20super(0%20%2F*%20Regular%20*%2F)%3B%0A%20%20%20%20%20%20this._segmenter%20%3D%20null%3B%0A%20%20%20%20%20%20this._cachedLine%20%3D%20null%3B%0A%20%20%20%20%20%20this._cachedSegments%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.intlSegmenterLocales%20%3D%20intlSegmenterLocales%3B%0A%20%20%20%20%20%20if%20(this.intlSegmenterLocales.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20this._segmenter%20%3D%20new%20Intl.Segmenter(this.intlSegmenterLocales%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20granularity%3A%20%22word%22%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this._segmenter%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20wordSeparators.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20this.set(wordSeparators.charCodeAt(i)%2C%202%20%2F*%20WordSeparator%20*%2F)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.set(32%20%2F*%20Space%20*%2F%2C%201%20%2F*%20Whitespace%20*%2F)%3B%0A%20%20%20%20%20%20this.set(9%20%2F*%20Tab%20*%2F%2C%201%20%2F*%20Whitespace%20*%2F)%3B%0A%20%20%20%20%7D%0A%20%20%20%20findPrevIntlWordBeforeOrAtOffset(line%2C%20offset)%20%7B%0A%20%20%20%20%20%20let%20candidate%20%3D%20null%3B%0A%20%20%20%20%20%20for%20(const%20segment%20of%20this._getIntlSegmenterWordsOnLine(line))%20%7B%0A%20%20%20%20%20%20%20%20if%20(segment.index%20%3E%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20candidate%20%3D%20segment%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20candidate%3B%0A%20%20%20%20%7D%0A%20%20%20%20findNextIntlWordAtOrAfterOffset(lineContent%2C%20offset)%20%7B%0A%20%20%20%20%20%20for%20(const%20segment%20of%20this._getIntlSegmenterWordsOnLine(lineContent))%20%7B%0A%20%20%20%20%20%20%20%20if%20(segment.index%20%3C%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20segment%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20_getIntlSegmenterWordsOnLine(line)%20%7B%0A%20%20%20%20%20%20if%20(!this._segmenter)%20%7B%0A%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._cachedLine%20%3D%3D%3D%20line)%20%7B%0A%20%20%20%20%20%20%20%20return%20this._cachedSegments%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._cachedLine%20%3D%20line%3B%0A%20%20%20%20%20%20this._cachedSegments%20%3D%20this._filterWordSegments(this._segmenter.segment(line))%3B%0A%20%20%20%20%20%20return%20this._cachedSegments%3B%0A%20%20%20%20%7D%0A%20%20%20%20_filterWordSegments(segments)%20%7B%0A%20%20%20%20%20%20const%20result%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20for%20(const%20segment%20of%20segments)%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._isWordLike(segment))%20%7B%0A%20%20%20%20%20%20%20%20%20%20result.push(segment)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%7D%0A%20%20%20%20_isWordLike(segment)%20%7B%0A%20%20%20%20%20%20if%20(segment.isWordLike)%20%7B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20wordClassifierCache%20%3D%20new%20LRUCache(10)%3B%0A%20%20function%20getMapForWordSeparators(wordSeparators%2C%20intlSegmenterLocales)%20%7B%0A%20%20%20%20const%20key%20%3D%20%60%24%7BwordSeparators%7D%2F%24%7BintlSegmenterLocales.join(%22%2C%22)%7D%60%3B%0A%20%20%20%20let%20result%20%3D%20wordClassifierCache.get(key)%3B%0A%20%20%20%20if%20(!result)%20%7B%0A%20%20%20%20%20%20result%20%3D%20new%20WordCharacterClassifier(wordSeparators%2C%20intlSegmenterLocales)%3B%0A%20%20%20%20%20%20wordClassifierCache.set(key%2C%20result)%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20result%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fstrings.ts%0A%20%20function%20escapeRegExpCharacters(value)%20%7B%0A%20%20%20%20return%20value.replace(%2F%5B%5C%5C%5C%7B%5C%7D%5C*%5C%2B%5C%3F%5C%7C%5C%5E%5C%24%5C.%5C%5B%5C%5D%5C(%5C)%5D%2Fg%2C%20%22%5C%5C%24%26%22)%3B%0A%20%20%7D%0A%20%20function%20isHighSurrogate(charCode)%20%7B%0A%20%20%20%20return%2055296%20%3C%3D%20charCode%20%26%26%20charCode%20%3C%3D%2056319%3B%0A%20%20%7D%0A%20%20function%20isLowSurrogate(charCode)%20%7B%0A%20%20%20%20return%2056320%20%3C%3D%20charCode%20%26%26%20charCode%20%3C%3D%2057343%3B%0A%20%20%7D%0A%20%20function%20computeCodePoint(highSurrogate%2C%20lowSurrogate)%20%7B%0A%20%20%20%20return%20(highSurrogate%20-%2055296%20%3C%3C%2010)%20%2B%20(lowSurrogate%20-%2056320)%20%2B%2065536%3B%0A%20%20%7D%0A%20%20function%20getNextCodePoint(str%2C%20len%2C%20offset)%20%7B%0A%20%20%20%20const%20charCode%20%3D%20str.charCodeAt(offset)%3B%0A%20%20%20%20if%20(isHighSurrogate(charCode)%20%26%26%20offset%20%2B%201%20%3C%20len)%20%7B%0A%20%20%20%20%20%20const%20nextCharCode%20%3D%20str.charCodeAt(offset%20%2B%201)%3B%0A%20%20%20%20%20%20if%20(isLowSurrogate(nextCharCode))%20%7B%0A%20%20%20%20%20%20%20%20return%20computeCodePoint(charCode%2C%20nextCharCode)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20charCode%3B%0A%20%20%7D%0A%20%20function%20createRegExp(searchString%2C%20isRegex%2C%20options%20%3D%20%7B%7D)%20%7B%0A%20%20%20%20if%20(!searchString)%20%7B%0A%20%20%20%20%20%20throw%20new%20Error(%22Cannot%20create%20regex%20from%20empty%20string%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(!isRegex)%20%7B%0A%20%20%20%20%20%20searchString%20%3D%20escapeRegExpCharacters(searchString)%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(options.wholeWord)%20%7B%0A%20%20%20%20%20%20if%20(!%2F%5CB%2F.test(searchString.charAt(0)))%20%7B%0A%20%20%20%20%20%20%20%20searchString%20%3D%20%22%5C%5Cb%22%20%2B%20searchString%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(!%2F%5CB%2F.test(searchString.charAt(searchString.length%20-%201)))%20%7B%0A%20%20%20%20%20%20%20%20searchString%20%3D%20searchString%20%2B%20%22%5C%5Cb%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20let%20modifiers%20%3D%20%22%22%3B%0A%20%20%20%20if%20(options.global)%20%7B%0A%20%20%20%20%20%20modifiers%20%2B%3D%20%22g%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(!options.matchCase)%20%7B%0A%20%20%20%20%20%20modifiers%20%2B%3D%20%22i%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(options.multiline)%20%7B%0A%20%20%20%20%20%20modifiers%20%2B%3D%20%22m%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(options.unicode)%20%7B%0A%20%20%20%20%20%20modifiers%20%2B%3D%20%22u%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20new%20RegExp(searchString%2C%20modifiers)%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fmodel%2FtextModelSearch.ts%0A%20%20var%20LineFeedCounter%20%3D%20class%20%7B%0A%20%20%20%20constructor(text)%20%7B%0A%20%20%20%20%20%20const%20lineFeedsOffsets%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20let%20lineFeedsOffsetsLen%20%3D%200%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%2C%20textLen%20%3D%20text.length%3B%20i%20%3C%20textLen%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20if%20(text.charCodeAt(i)%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20lineFeedsOffsets%5BlineFeedsOffsetsLen%2B%2B%5D%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._lineFeedsOffsets%20%3D%20lineFeedsOffsets%3B%0A%20%20%20%20%7D%0A%20%20%20%20findLineFeedCountBeforeOffset(offset)%20%7B%0A%20%20%20%20%20%20const%20lineFeedsOffsets%20%3D%20this._lineFeedsOffsets%3B%0A%20%20%20%20%20%20let%20min%20%3D%200%3B%0A%20%20%20%20%20%20let%20max%20%3D%20lineFeedsOffsets.length%20-%201%3B%0A%20%20%20%20%20%20if%20(max%20%3D%3D%3D%20-1)%20%7B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(offset%20%3C%3D%20lineFeedsOffsets%5B0%5D)%20%7B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20while%20(min%20%3C%20max)%20%7B%0A%20%20%20%20%20%20%20%20const%20mid%20%3D%20min%20%2B%20((max%20-%20min)%20%2F%202%20%3E%3E%200)%3B%0A%20%20%20%20%20%20%20%20if%20(lineFeedsOffsets%5Bmid%5D%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20max%20%3D%20mid%20-%201%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(lineFeedsOffsets%5Bmid%20%2B%201%5D%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20min%20%3D%20mid%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20max%20%3D%20mid%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20min%20%3D%20mid%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20min%20%2B%201%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20TextModelSearch%20%3D%20class%20%7B%0A%20%20%20%20static%20findMatches(model%2C%20searchParams%2C%20searchRange%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20searchData%20%3D%20searchParams.parseSearchRequest()%3B%0A%20%20%20%20%20%20if%20(!searchData)%20return%20%5B%5D%3B%0A%20%20%20%20%20%20if%20(searchData.regex.multiline)%20%7B%0A%20%20%20%20%20%20%20%20return%20this._doFindMatchesMultiline(%0A%20%20%20%20%20%20%20%20%20%20model%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange%2C%0A%20%20%20%20%20%20%20%20%20%20new%20Searcher(searchData.wordSeparators%2C%20searchData.regex)%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._doFindMatchesLineByLine(model%2C%20searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20_doFindMatchesMultiline(model%2C%20searchRange%2C%20searcher%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20pos%20%3D%20searchRange.getStartPosition()%3B%0A%20%20%20%20%20%20const%20deltaOffset%20%3D%20model.getOffsetAt(pos.lineNumber%2C%20pos.column)%3B%0A%20%20%20%20%20%20const%20text%20%3D%20model.getValueInRange(searchRange%2C%201%20%2F*%20LF%20*%2F)%3B%0A%20%20%20%20%20%20const%20lfCounter%20%3D%20model.getEOL()%20%3D%3D%3D%20%22%5Cr%5Cn%22%20%3F%20new%20LineFeedCounter(text)%20%3A%20null%3B%0A%20%20%20%20%20%20const%20result%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20let%20counter%20%3D%200%3B%0A%20%20%20%20%20%20let%20m%3B%0A%20%20%20%20%20%20searcher.reset(0)%3B%0A%20%20%20%20%20%20while%20(m%20%3D%20searcher.next(text))%20%7B%0A%20%20%20%20%20%20%20%20result%5Bcounter%2B%2B%5D%20%3D%20createFindMatch(%0A%20%20%20%20%20%20%20%20%20%20this._getMultilineMatchRange(model%2C%20deltaOffset%2C%20text%2C%20lfCounter%2C%20m.index%2C%20m%5B0%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20m%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20if%20(counter%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Multiline%20search%20always%20executes%20on%20the%20lines%20concatenated%20with%20%5Cn.%0A%20%20%20%20%20*%20We%20must%20therefore%20compensate%20for%20the%20count%20of%20%5Cn%20in%20case%20the%20model%20is%20CRLF%0A%20%20%20%20%20*%2F%0A%20%20%20%20static%20_getMultilineMatchRange(model%2C%20deltaOffset%2C%20text%2C%20lfCounter%2C%20matchIndex%2C%20match0)%20%7B%0A%20%20%20%20%20%20let%20startOffset%3B%0A%20%20%20%20%20%20let%20lineFeedCountBeforeMatch%20%3D%200%3B%0A%20%20%20%20%20%20if%20(lfCounter)%20%7B%0A%20%20%20%20%20%20%20%20lineFeedCountBeforeMatch%20%3D%20lfCounter.findLineFeedCountBeforeOffset(matchIndex)%3B%0A%20%20%20%20%20%20%20%20startOffset%20%3D%20deltaOffset%20%2B%20matchIndex%20%2B%20lineFeedCountBeforeMatch%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20startOffset%20%3D%20deltaOffset%20%2B%20matchIndex%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20endOffset%3B%0A%20%20%20%20%20%20if%20(lfCounter)%20%7B%0A%20%20%20%20%20%20%20%20const%20lineFeedCountBeforeEndOfMatch%20%3D%20lfCounter.findLineFeedCountBeforeOffset(matchIndex%20%2B%20match0.length)%3B%0A%20%20%20%20%20%20%20%20const%20lineFeedCountInMatch%20%3D%20lineFeedCountBeforeEndOfMatch%20-%20lineFeedCountBeforeMatch%3B%0A%20%20%20%20%20%20%20%20endOffset%20%3D%20startOffset%20%2B%20match0.length%20%2B%20lineFeedCountInMatch%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20endOffset%20%3D%20startOffset%20%2B%20match0.length%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20startPosition%20%3D%20model.positionAt(startOffset)%3B%0A%20%20%20%20%20%20const%20endPosition%20%3D%20model.positionAt(endOffset)%3B%0A%20%20%20%20%20%20return%20new%20Range(startPosition.lineNumber%2C%20startPosition.column%2C%20endPosition.lineNumber%2C%20endPosition.column)%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20_doFindMatchesLineByLine(model%2C%20searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20res%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20let%20resLen%20%3D%200%3B%0A%20%20%20%20%20%20if%20(searchRange.startLineNumber%20%3D%3D%3D%20searchRange.endLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20const%20text2%20%3D%20model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn%20-%201%2C%20searchRange.endColumn%20-%201)%3B%0A%20%20%20%20%20%20%20%20resLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20text2%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.startLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.startColumn%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20resLen%2C%0A%20%20%20%20%20%20%20%20%20%20res%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20text%20%3D%20model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn%20-%201)%3B%0A%20%20%20%20%20%20resLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20text%2C%0A%20%20%20%20%20%20%20%20searchRange.startLineNumber%2C%0A%20%20%20%20%20%20%20%20searchRange.startColumn%20-%201%2C%0A%20%20%20%20%20%20%20%20resLen%2C%0A%20%20%20%20%20%20%20%20res%2C%0A%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20for%20(let%20lineNumber%20%3D%20searchRange.startLineNumber%20%2B%201%3B%20lineNumber%20%3C%20searchRange.endLineNumber%20%26%26%20resLen%20%3C%20limitResultCount%3B%20lineNumber%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20resLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20model.getLineContent(lineNumber)%2C%0A%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20resLen%2C%0A%20%20%20%20%20%20%20%20%20%20res%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(resLen%20%3C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20const%20text2%20%3D%20model.getLineContent(searchRange.endLineNumber).substring(0%2C%20searchRange.endColumn%20-%201)%3B%0A%20%20%20%20%20%20%20%20resLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20text2%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.endLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20resLen%2C%0A%20%20%20%20%20%20%20%20%20%20res%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20res%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20_findMatchesInLine(searchData%2C%20text%2C%20lineNumber%2C%20deltaOffset%2C%20resultLen%2C%20result%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20wordSeparators%20%3D%20searchData.wordSeparators%3B%0A%20%20%20%20%20%20if%20(!captureMatches%20%26%26%20searchData.simpleSearch)%20%7B%0A%20%20%20%20%20%20%20%20const%20searchString%20%3D%20searchData.simpleSearch%3B%0A%20%20%20%20%20%20%20%20const%20searchStringLen%20%3D%20searchString.length%3B%0A%20%20%20%20%20%20%20%20const%20textLength%20%3D%20text.length%3B%0A%20%20%20%20%20%20%20%20let%20lastMatchIndex%20%3D%20-searchStringLen%3B%0A%20%20%20%20%20%20%20%20while%20((lastMatchIndex%20%3D%20text.indexOf(searchString%2C%20lastMatchIndex%20%2B%20searchStringLen))%20!%3D%3D%20-1)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!wordSeparators%20%7C%7C%20isValidMatch(wordSeparators%2C%20text%2C%20textLength%2C%20lastMatchIndex%2C%20searchStringLen))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20result%5BresultLen%2B%2B%5D%20%3D%20new%20FindMatch(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20new%20Range(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastMatchIndex%20%2B%201%20%2B%20deltaOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastMatchIndex%20%2B%201%20%2B%20searchStringLen%20%2B%20deltaOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20searcher%20%3D%20new%20Searcher(searchData.wordSeparators%2C%20searchData.regex)%3B%0A%20%20%20%20%20%20let%20m%3B%0A%20%20%20%20%20%20searcher.reset(0)%3B%0A%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20m%20%3D%20searcher.next(text)%3B%0A%20%20%20%20%20%20%20%20if%20(m)%20%7B%0A%20%20%20%20%20%20%20%20%20%20result%5BresultLen%2B%2B%5D%20%3D%20createFindMatch(%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Range(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20m.index%20%2B%201%20%2B%20deltaOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20m.index%20%2B%201%20%2B%20m%5B0%5D.length%20%2B%20deltaOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20m%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20captureMatches%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20while%20(m)%3B%0A%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20SearchParams%20%3D%20class%20%7B%0A%20%20%20%20constructor(searchString%2C%20isRegex%2C%20matchCase%2C%20wordSeparators)%20%7B%0A%20%20%20%20%20%20this.searchString%20%3D%20searchString%3B%0A%20%20%20%20%20%20this.isRegex%20%3D%20isRegex%3B%0A%20%20%20%20%20%20this.matchCase%20%3D%20matchCase%3B%0A%20%20%20%20%20%20this.wordSeparators%20%3D%20wordSeparators%3B%0A%20%20%20%20%7D%0A%20%20%20%20parseSearchRequest()%20%7B%0A%20%20%20%20%20%20if%20(this.searchString%20%3D%3D%3D%20%22%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20multiline%3B%0A%20%20%20%20%20%20if%20(this.isRegex)%20%7B%0A%20%20%20%20%20%20%20%20multiline%20%3D%20isMultilineRegexSource(this.searchString)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20multiline%20%3D%20this.searchString.indexOf(%22%5Cn%22)%20%3E%3D%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20regex%20%3D%20null%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20regex%20%3D%20createRegExp(this.searchString%2C%20this.isRegex%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20matchCase%3A%20this.matchCase%2C%0A%20%20%20%20%20%20%20%20%20%20wholeWord%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20multiline%2C%0A%20%20%20%20%20%20%20%20%20%20global%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20unicode%3A%20true%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%20catch%20(err)%20%7B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(!regex)%20%7B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20canUseSimpleSearch%20%3D%20!this.isRegex%20%26%26%20!multiline%3B%0A%20%20%20%20%20%20if%20(canUseSimpleSearch%20%26%26%20this.searchString.toLowerCase()%20!%3D%3D%20this.searchString.toUpperCase())%20%7B%0A%20%20%20%20%20%20%20%20canUseSimpleSearch%20%3D%20this.matchCase%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20new%20SearchData(%0A%20%20%20%20%20%20%20%20regex%2C%0A%20%20%20%20%20%20%20%20this.wordSeparators%20%3F%20getMapForWordSeparators(this.wordSeparators%2C%20%5B%5D)%20%3A%20null%2C%0A%20%20%20%20%20%20%20%20canUseSimpleSearch%20%3F%20this.searchString%20%3A%20null%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20function%20isMultilineRegexSource(searchString)%20%7B%0A%20%20%20%20if%20(!searchString%20%7C%7C%20searchString.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20searchString.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20chCode%20%3D%20searchString.charCodeAt(i)%3B%0A%20%20%20%20%20%20if%20(chCode%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(chCode%20%3D%3D%3D%2092%20%2F*%20Backslash%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%20%20%20%20if%20(i%20%3E%3D%20len)%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20nextChCode%20%3D%20searchString.charCodeAt(i)%3B%0A%20%20%20%20%20%20%20%20if%20(nextChCode%20%3D%3D%3D%20110%20%2F*%20n%20*%2F%20%7C%7C%20nextChCode%20%3D%3D%3D%20114%20%2F*%20r%20*%2F%20%7C%7C%20nextChCode%20%3D%3D%3D%2087%20%2F*%20W%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%20%20function%20leftIsWordBounday(wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength)%20%7B%0A%20%20%20%20if%20(matchStartIndex%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20charBefore%20%3D%20text.charCodeAt(matchStartIndex%20-%201)%3B%0A%20%20%20%20if%20(wordSeparators.get(charBefore)%20!%3D%3D%200%20%2F*%20Regular%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(charBefore%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F%20%7C%7C%20charBefore%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(matchLength%20%3E%200)%20%7B%0A%20%20%20%20%20%20const%20firstCharInMatch%20%3D%20text.charCodeAt(matchStartIndex)%3B%0A%20%20%20%20%20%20if%20(wordSeparators.get(firstCharInMatch)%20!%3D%3D%200%20%2F*%20Regular%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%20%20function%20rightIsWordBounday(wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength)%20%7B%0A%20%20%20%20if%20(matchStartIndex%20%2B%20matchLength%20%3D%3D%3D%20textLength)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20charAfter%20%3D%20text.charCodeAt(matchStartIndex%20%2B%20matchLength)%3B%0A%20%20%20%20if%20(wordSeparators.get(charAfter)%20!%3D%3D%200%20%2F*%20Regular%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(charAfter%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F%20%7C%7C%20charAfter%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(matchLength%20%3E%200)%20%7B%0A%20%20%20%20%20%20const%20lastCharInMatch%20%3D%20text.charCodeAt(matchStartIndex%20%2B%20matchLength%20-%201)%3B%0A%20%20%20%20%20%20if%20(wordSeparators.get(lastCharInMatch)%20!%3D%3D%200%20%2F*%20Regular%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%20%20function%20isValidMatch(wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength)%20%7B%0A%20%20%20%20return%20leftIsWordBounday(wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength)%20%26%26%20rightIsWordBounday(wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength)%3B%0A%20%20%7D%0A%20%20var%20Searcher%20%3D%20class%20%7B%0A%20%20%20%20constructor(wordSeparators%2C%20searchRegex)%20%7B%0A%20%20%20%20%20%20this._wordSeparators%20%3D%20wordSeparators%3B%0A%20%20%20%20%20%20this._searchRegex%20%3D%20searchRegex%3B%0A%20%20%20%20%20%20this._prevMatchStartIndex%20%3D%20-1%3B%0A%20%20%20%20%20%20this._prevMatchLength%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20reset(lastIndex)%20%7B%0A%20%20%20%20%20%20this._searchRegex.lastIndex%20%3D%20lastIndex%3B%0A%20%20%20%20%20%20this._prevMatchStartIndex%20%3D%20-1%3B%0A%20%20%20%20%20%20this._prevMatchLength%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20next(text)%20%7B%0A%20%20%20%20%20%20const%20textLength%20%3D%20text.length%3B%0A%20%20%20%20%20%20let%20m%3B%0A%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._prevMatchStartIndex%20%2B%20this._prevMatchLength%20%3D%3D%3D%20textLength)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20m%20%3D%20this._searchRegex.exec(text)%3B%0A%20%20%20%20%20%20%20%20if%20(!m)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20matchStartIndex%20%3D%20m.index%3B%0A%20%20%20%20%20%20%20%20const%20matchLength%20%3D%20m%5B0%5D.length%3B%0A%20%20%20%20%20%20%20%20if%20(matchStartIndex%20%3D%3D%3D%20this._prevMatchStartIndex%20%26%26%20matchLength%20%3D%3D%3D%20this._prevMatchLength)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(matchLength%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(getNextCodePoint(text%2C%20textLength%2C%20this._searchRegex.lastIndex)%20%3E%2065535)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._searchRegex.lastIndex%20%2B%3D%202%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._searchRegex.lastIndex%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._prevMatchStartIndex%20%3D%20matchStartIndex%3B%0A%20%20%20%20%20%20%20%20this._prevMatchLength%20%3D%20matchLength%3B%0A%20%20%20%20%20%20%20%20if%20(!this._wordSeparators%20%7C%7C%20isValidMatch(this._wordSeparators%2C%20text%2C%20textLength%2C%20matchStartIndex%2C%20matchLength))%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20m%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20while%20(m)%3B%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20function%20createFindMatch(range%2C%20rawMatches%2C%20captureMatches)%20%7B%0A%20%20%20%20if%20(!captureMatches)%20%7B%0A%20%20%20%20%20%20return%20new%20FindMatch(range%2C%20null)%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20matches%20%3D%20%5B%5D%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20rawMatches.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20matches%5Bi%5D%20%3D%20rawMatches%5Bi%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20new%20FindMatch(range%2C%20matches)%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2FpieceTreeTextBuffer%2FpieceTreeBase.ts%0A%20%20var%20AverageBufferSize%20%3D%2065535%3B%0A%20%20function%20createUintArray(arr)%20%7B%0A%20%20%20%20let%20r%3B%0A%20%20%20%20if%20(arr%5Barr.length%20-%201%5D%20%3C%2065536)%20%7B%0A%20%20%20%20%20%20r%20%3D%20new%20Uint16Array(arr.length)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20r%20%3D%20new%20Uint32Array(arr.length)%3B%0A%20%20%20%20%7D%0A%20%20%20%20r.set(arr%2C%200)%3B%0A%20%20%20%20return%20r%3B%0A%20%20%7D%0A%20%20var%20LineStarts%20%3D%20class%20%7B%0A%20%20%20%20constructor(lineStarts%2C%20cr%2C%20lf%2C%20crlf%2C%20isBasicASCII)%20%7B%0A%20%20%20%20%20%20this.lineStarts%20%3D%20lineStarts%3B%0A%20%20%20%20%20%20this.cr%20%3D%20cr%3B%0A%20%20%20%20%20%20this.lf%20%3D%20lf%3B%0A%20%20%20%20%20%20this.crlf%20%3D%20crlf%3B%0A%20%20%20%20%20%20this.isBasicASCII%20%3D%20isBasicASCII%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20function%20createLineStartsFast(str%2C%20readonly%20%3D%20true)%20%7B%0A%20%20%20%20const%20r%20%3D%20%5B0%5D%3B%0A%20%20%20%20let%20rLength%20%3D%201%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20str.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20chr%20%3D%20str.charCodeAt(i)%3B%0A%20%20%20%20%20%20if%20(chr%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20if%20(i%20%2B%201%20%3C%20len%20%26%26%20str.charCodeAt(i%20%2B%201)%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%202%3B%0A%20%20%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20(chr%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%201%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20(readonly)%20%7B%0A%20%20%20%20%20%20return%20createUintArray(r)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20return%20r%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20function%20createLineStarts(r%2C%20str)%20%7B%0A%20%20%20%20r.length%20%3D%200%3B%0A%20%20%20%20r%5B0%5D%20%3D%200%3B%0A%20%20%20%20let%20rLength%20%3D%201%3B%0A%20%20%20%20let%20cr%20%3D%200%2C%20lf%20%3D%200%2C%20crlf%20%3D%200%3B%0A%20%20%20%20let%20isBasicASCII%20%3D%20true%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20str.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20chr%20%3D%20str.charCodeAt(i)%3B%0A%20%20%20%20%20%20if%20(chr%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20if%20(i%20%2B%201%20%3C%20len%20%26%26%20str.charCodeAt(i%20%2B%201)%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20crlf%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%202%3B%0A%20%20%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20cr%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20(chr%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20lf%2B%2B%3B%0A%20%20%20%20%20%20%20%20r%5BrLength%2B%2B%5D%20%3D%20i%20%2B%201%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20if%20(isBasicASCII)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(chr%20!%3D%3D%209%20%2F*%20Tab%20*%2F%20%26%26%20(chr%20%3C%2032%20%7C%7C%20chr%20%3E%20126))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20isBasicASCII%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20const%20result%20%3D%20new%20LineStarts(createUintArray(r)%2C%20cr%2C%20lf%2C%20crlf%2C%20isBasicASCII)%3B%0A%20%20%20%20r.length%20%3D%200%3B%0A%20%20%20%20return%20result%3B%0A%20%20%7D%0A%20%20var%20Piece%20%3D%20class%20%7B%0A%20%20%20%20constructor(bufferIndex%2C%20start%2C%20end%2C%20lineFeedCnt%2C%20length)%20%7B%0A%20%20%20%20%20%20this.bufferIndex%20%3D%20bufferIndex%3B%0A%20%20%20%20%20%20this.start%20%3D%20start%3B%0A%20%20%20%20%20%20this.end%20%3D%20end%3B%0A%20%20%20%20%20%20this.lineFeedCnt%20%3D%20lineFeedCnt%3B%0A%20%20%20%20%20%20this.length%20%3D%20length%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20StringBuffer%20%3D%20class%20%7B%0A%20%20%20%20constructor(buffer%2C%20lineStarts)%20%7B%0A%20%20%20%20%20%20this.buffer%20%3D%20buffer%3B%0A%20%20%20%20%20%20this.lineStarts%20%3D%20lineStarts%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20PieceTreeSnapshot%20%3D%20class%20%7B%0A%20%20%20%20constructor(tree%2C%20BOM)%20%7B%0A%20%20%20%20%20%20this._pieces%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this._tree%20%3D%20tree%3B%0A%20%20%20%20%20%20this._BOM%20%3D%20BOM%3B%0A%20%20%20%20%20%20this._index%20%3D%200%3B%0A%20%20%20%20%20%20if%20(tree.root%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20tree.iterate(tree.root%2C%20(node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(node%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this._pieces.push(node.piece)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20read()%20%7B%0A%20%20%20%20%20%20if%20(this._pieces.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._index%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this._index%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20return%20this._BOM%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._index%20%3E%20this._pieces.length%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._index%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20this._BOM%20%2B%20this._tree.getPieceContent(this._pieces%5Bthis._index%2B%2B%5D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._tree.getPieceContent(this._pieces%5Bthis._index%2B%2B%5D)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20PieceTreeSearchCache%20%3D%20class%20%7B%0A%20%20%20%20constructor(limit)%20%7B%0A%20%20%20%20%20%20this._limit%20%3D%20limit%3B%0A%20%20%20%20%20%20this._cache%20%3D%20%5B%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20get(offset)%20%7B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%20this._cache.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--)%20%7B%0A%20%20%20%20%20%20%20%20const%20nodePos%20%3D%20this._cache%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20(nodePos.nodeStartOffset%20%3C%3D%20offset%20%26%26%20nodePos.nodeStartOffset%20%2B%20nodePos.node.piece.length%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20nodePos%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20get2(lineNumber)%20%7B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%20this._cache.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--)%20%7B%0A%20%20%20%20%20%20%20%20const%20nodePos%20%3D%20this._cache%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20(nodePos.nodeStartLineNumber%20%26%26%20nodePos.nodeStartLineNumber%20%3C%20lineNumber%20%26%26%20nodePos.nodeStartLineNumber%20%2B%20nodePos.node.piece.lineFeedCnt%20%3E%3D%20lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20nodePos%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(nodePosition)%20%7B%0A%20%20%20%20%20%20if%20(this._cache.length%20%3E%3D%20this._limit)%20%7B%0A%20%20%20%20%20%20%20%20this._cache.shift()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._cache.push(nodePosition)%3B%0A%20%20%20%20%7D%0A%20%20%20%20validate(offset)%20%7B%0A%20%20%20%20%20%20let%20hasInvalidVal%20%3D%20false%3B%0A%20%20%20%20%20%20const%20tmp%20%3D%20this._cache%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20tmp.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20const%20nodePos%20%3D%20tmp%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20if%20(nodePos.node.parent%20%3D%3D%3D%20null%20%7C%7C%20nodePos.nodeStartOffset%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20tmp%5Bi%5D%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20hasInvalidVal%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(hasInvalidVal)%20%7B%0A%20%20%20%20%20%20%20%20const%20newArr%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20for%20(const%20entry%20of%20tmp)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(entry%20!%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20newArr.push(entry)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._cache%20%3D%20newArr%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20PieceTreeBase%20%3D%20class%20%7B%0A%20%20%20%20constructor(chunks%2C%20eol%2C%20eolNormalized)%20%7B%0A%20%20%20%20%20%20this.create(chunks%2C%20eol%2C%20eolNormalized)%3B%0A%20%20%20%20%7D%0A%20%20%20%20create(chunks%2C%20eol%2C%20eolNormalized)%20%7B%0A%20%20%20%20%20%20this._buffers%20%3D%20%5Bnew%20StringBuffer(%22%22%2C%20%5B0%5D)%5D%3B%0A%20%20%20%20%20%20this._lastChangeBufferPos%20%3D%20%7B%20line%3A%200%2C%20column%3A%200%20%7D%3B%0A%20%20%20%20%20%20this.root%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20this._lineCnt%20%3D%201%3B%0A%20%20%20%20%20%20this._length%20%3D%200%3B%0A%20%20%20%20%20%20this._EOL%20%3D%20eol%3B%0A%20%20%20%20%20%20this._EOLLength%20%3D%20eol.length%3B%0A%20%20%20%20%20%20this._EOLNormalized%20%3D%20eolNormalized%3B%0A%20%20%20%20%20%20let%20lastNode%20%3D%20null%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20chunks.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20if%20(chunks%5Bi%5D.buffer.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!chunks%5Bi%5D.lineStarts)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20chunks%5Bi%5D.lineStarts%20%3D%20createLineStartsFast(chunks%5Bi%5D.buffer)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20piece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20%20%20i%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20line%3A%200%2C%20column%3A%200%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20chunks%5Bi%5D.lineStarts.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20column%3A%20chunks%5Bi%5D.buffer.length%20-%20chunks%5Bi%5D.lineStarts%5Bchunks%5Bi%5D.lineStarts.length%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20chunks%5Bi%5D.lineStarts.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20chunks%5Bi%5D.buffer.length%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20this._buffers.push(chunks%5Bi%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20lastNode%20%3D%20this.rbInsertRight(lastNode%2C%20piece)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._searchCache%20%3D%20new%20PieceTreeSearchCache(1)%3B%0A%20%20%20%20%20%20this._lastVisitedLine%20%3D%20%7B%20lineNumber%3A%200%2C%20value%3A%20%22%22%20%7D%3B%0A%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%7D%0A%20%20%20%20normalizeEOL(eol)%20%7B%0A%20%20%20%20%20%20const%20averageBufferSize%20%3D%20AverageBufferSize%3B%0A%20%20%20%20%20%20const%20min%20%3D%20averageBufferSize%20-%20Math.floor(averageBufferSize%20%2F%203)%3B%0A%20%20%20%20%20%20const%20max%20%3D%20min%20*%202%3B%0A%20%20%20%20%20%20let%20tempChunk%20%3D%20%22%22%3B%0A%20%20%20%20%20%20let%20tempChunkLen%20%3D%200%3B%0A%20%20%20%20%20%20const%20chunks%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.iterate(this.root%2C%20(node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20str%20%3D%20this.getNodeContent(node)%3B%0A%20%20%20%20%20%20%20%20const%20len%20%3D%20str.length%3B%0A%20%20%20%20%20%20%20%20if%20(tempChunkLen%20%3C%3D%20min%20%7C%7C%20tempChunkLen%20%2B%20len%20%3C%20max)%20%7B%0A%20%20%20%20%20%20%20%20%20%20tempChunk%20%2B%3D%20str%3B%0A%20%20%20%20%20%20%20%20%20%20tempChunkLen%20%2B%3D%20len%3B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20text%20%3D%20tempChunk.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2C%20eol)%3B%0A%20%20%20%20%20%20%20%20chunks.push(new%20StringBuffer(text%2C%20createLineStartsFast(text)))%3B%0A%20%20%20%20%20%20%20%20tempChunk%20%3D%20str%3B%0A%20%20%20%20%20%20%20%20tempChunkLen%20%3D%20len%3B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20if%20(tempChunkLen%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20const%20text%20%3D%20tempChunk.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2C%20eol)%3B%0A%20%20%20%20%20%20%20%20chunks.push(new%20StringBuffer(text%2C%20createLineStartsFast(text)))%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.create(chunks%2C%20eol%2C%20true)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23region%20Buffer%20API%0A%20%20%20%20getEOL()%20%7B%0A%20%20%20%20%20%20return%20this._EOL%3B%0A%20%20%20%20%7D%0A%20%20%20%20setEOL(newEOL)%20%7B%0A%20%20%20%20%20%20this._EOL%20%3D%20newEOL%3B%0A%20%20%20%20%20%20this._EOLLength%20%3D%20this._EOL.length%3B%0A%20%20%20%20%20%20this.normalizeEOL(newEOL)%3B%0A%20%20%20%20%7D%0A%20%20%20%20createSnapshot(BOM)%20%7B%0A%20%20%20%20%20%20return%20new%20PieceTreeSnapshot(this%2C%20BOM)%3B%0A%20%20%20%20%7D%0A%20%20%20%20equal(other)%20%7B%0A%20%20%20%20%20%20if%20(this.getLength()%20!%3D%3D%20other.getLength())%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this.getLineCount()%20!%3D%3D%20other.getLineCount())%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20offset%20%3D%200%3B%0A%20%20%20%20%20%20const%20ret%20%3D%20this.iterate(this.root%2C%20(node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20str%20%3D%20this.getNodeContent(node)%3B%0A%20%20%20%20%20%20%20%20const%20len%20%3D%20str.length%3B%0A%20%20%20%20%20%20%20%20const%20startPosition%20%3D%20other.nodeAt(offset)%3B%0A%20%20%20%20%20%20%20%20const%20endPosition%20%3D%20other.nodeAt(offset%20%2B%20len)%3B%0A%20%20%20%20%20%20%20%20const%20val%20%3D%20other.getValueInRange2(startPosition%2C%20endPosition)%3B%0A%20%20%20%20%20%20%20%20offset%20%2B%3D%20len%3B%0A%20%20%20%20%20%20%20%20return%20str%20%3D%3D%3D%20val%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20return%20ret%3B%0A%20%20%20%20%7D%0A%20%20%20%20getOffsetAt(lineNumber%2C%20column)%20%7B%0A%20%20%20%20%20%20let%20leftLen%20%3D%200%3B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(x.left%20!%3D%3D%20SENTINEL%20%26%26%20x.lf_left%20%2B%201%20%3E%3D%20lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.left%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.lf_left%20%2B%20x.piece.lineFeedCnt%20%2B%201%20%3E%3D%20lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20leftLen%20%2B%3D%20x.size_left%3B%0A%20%20%20%20%20%20%20%20%20%20const%20accumualtedValInCurrentIndex%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%202)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20leftLen%20%2B%3D%20accumualtedValInCurrentIndex%20%2B%20column%20-%201%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20lineNumber%20-%3D%20x.lf_left%20%2B%20x.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20%20%20%20%20leftLen%20%2B%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20leftLen%3B%0A%20%20%20%20%7D%0A%20%20%20%20getPositionAt(offset)%20%7B%0A%20%20%20%20%20%20offset%20%3D%20Math.floor(offset)%3B%0A%20%20%20%20%20%20offset%20%3D%20Math.max(0%2C%20offset)%3B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20let%20lfCnt%20%3D%200%3B%0A%20%20%20%20%20%20const%20originalOffset%20%3D%20offset%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(x.size_left%20!%3D%3D%200%20%26%26%20x.size_left%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.left%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.size_left%20%2B%20x.piece.length%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20out%20%3D%20this.getIndexOf(x%2C%20offset%20-%20x.size_left)%3B%0A%20%20%20%20%20%20%20%20%20%20lfCnt%20%2B%3D%20x.lf_left%20%2B%20out.index%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(out.index%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20lineStartOffset%20%3D%20this.getOffsetAt(lfCnt%20%2B%201%2C%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20column%20%3D%20originalOffset%20-%20lineStartOffset%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Position(lfCnt%20%2B%201%2C%20column%20%2B%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20new%20Position(lfCnt%20%2B%201%2C%20out.remainder%20%2B%201)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20offset%20-%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20lfCnt%20%2B%3D%20x.lf_left%20%2B%20x.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(x.right%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20lineStartOffset%20%3D%20this.getOffsetAt(lfCnt%20%2B%201%2C%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20column%20%3D%20originalOffset%20-%20offset%20-%20lineStartOffset%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Position(lfCnt%20%2B%201%2C%20column%20%2B%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20new%20Position(1%2C%201)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getValueInRange(range%2C%20eol)%20%7B%0A%20%20%20%20%20%20if%20(range.startLineNumber%20%3D%3D%3D%20range.endLineNumber%20%26%26%20range.startColumn%20%3D%3D%3D%20range.endColumn)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20startPosition%20%3D%20this.nodeAt2(range.startLineNumber%2C%20range.startColumn)%3B%0A%20%20%20%20%20%20const%20endPosition%20%3D%20this.nodeAt2(range.endLineNumber%2C%20range.endColumn)%3B%0A%20%20%20%20%20%20const%20value%20%3D%20this.getValueInRange2(startPosition%2C%20endPosition)%3B%0A%20%20%20%20%20%20if%20(eol)%20%7B%0A%20%20%20%20%20%20%20%20if%20(eol%20!%3D%3D%20this._EOL%20%7C%7C%20!this._EOLNormalized)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20value.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2C%20eol)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(eol%20%3D%3D%3D%20this.getEOL()%20%26%26%20this._EOLNormalized)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20value%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20value.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2C%20eol)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20value%3B%0A%20%20%20%20%7D%0A%20%20%20%20getValueInRange2(startPosition%2C%20endPosition)%20%7B%0A%20%20%20%20%20%20if%20(startPosition.node%20%3D%3D%3D%20endPosition.node)%20%7B%0A%20%20%20%20%20%20%20%20const%20node%20%3D%20startPosition.node%3B%0A%20%20%20%20%20%20%20%20const%20buffer2%20%3D%20this._buffers%5Bnode.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20const%20startOffset2%20%3D%20this.offsetInBuffer(node.piece.bufferIndex%2C%20node.piece.start)%3B%0A%20%20%20%20%20%20%20%20return%20buffer2.substring(startOffset2%20%2B%20startPosition.remainder%2C%20startOffset2%20%2B%20endPosition.remainder)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20x%20%3D%20startPosition.node%3B%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20let%20ret%20%3D%20buffer.substring(startOffset%20%2B%20startPosition.remainder%2C%20startOffset%20%2B%20x.piece.length)%3B%0A%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20const%20buffer2%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20const%20startOffset2%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20if%20(x%20%3D%3D%3D%20endPosition.node)%20%7B%0A%20%20%20%20%20%20%20%20%20%20ret%20%2B%3D%20buffer2.substring(startOffset2%2C%20startOffset2%20%2B%20endPosition.remainder)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20ret%20%2B%3D%20buffer2.substr(startOffset2%2C%20x.piece.length)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20ret%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLinesContent()%20%7B%0A%20%20%20%20%20%20const%20lines%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20let%20linesLength%20%3D%200%3B%0A%20%20%20%20%20%20let%20currentLine%20%3D%20%22%22%3B%0A%20%20%20%20%20%20let%20danglingCR%20%3D%20false%3B%0A%20%20%20%20%20%20this.iterate(this.root%2C%20(node)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20%20%20let%20pieceLength%20%3D%20piece.length%3B%0A%20%20%20%20%20%20%20%20if%20(pieceLength%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bpiece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5Bpiece.bufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20%20%20const%20pieceStartLine%20%3D%20piece.start.line%3B%0A%20%20%20%20%20%20%20%20const%20pieceEndLine%20%3D%20piece.end.line%3B%0A%20%20%20%20%20%20%20%20let%20pieceStartOffset%20%3D%20lineStarts%5BpieceStartLine%5D%20%2B%20piece.start.column%3B%0A%20%20%20%20%20%20%20%20if%20(danglingCR)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(buffer.charCodeAt(pieceStartOffset)%20%3D%3D%3D%2010%20%2F*%20LineFeed%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20pieceStartOffset%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20pieceLength--%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20lines%5BlinesLength%2B%2B%5D%20%3D%20currentLine%3B%0A%20%20%20%20%20%20%20%20%20%20currentLine%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20danglingCR%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(pieceLength%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(pieceStartLine%20%3D%3D%3D%20pieceEndLine)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!this._EOLNormalized%20%26%26%20buffer.charCodeAt(pieceStartOffset%20%2B%20pieceLength%20-%201)%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20danglingCR%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20currentLine%20%2B%3D%20buffer.substr(pieceStartOffset%2C%20pieceLength%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20currentLine%20%2B%3D%20buffer.substr(pieceStartOffset%2C%20pieceLength)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20currentLine%20%2B%3D%20this._EOLNormalized%20%3F%20buffer.substring(%0A%20%20%20%20%20%20%20%20%20%20pieceStartOffset%2C%0A%20%20%20%20%20%20%20%20%20%20Math.max(pieceStartOffset%2C%20lineStarts%5BpieceStartLine%20%2B%201%5D%20-%20this._EOLLength)%0A%20%20%20%20%20%20%20%20)%20%3A%20buffer.substring(pieceStartOffset%2C%20lineStarts%5BpieceStartLine%20%2B%201%5D).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%20%22%22)%3B%0A%20%20%20%20%20%20%20%20lines%5BlinesLength%2B%2B%5D%20%3D%20currentLine%3B%0A%20%20%20%20%20%20%20%20for%20(let%20line%20%3D%20pieceStartLine%20%2B%201%3B%20line%20%3C%20pieceEndLine%3B%20line%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentLine%20%3D%20this._EOLNormalized%20%3F%20buffer.substring(lineStarts%5Bline%5D%2C%20lineStarts%5Bline%20%2B%201%5D%20-%20this._EOLLength)%20%3A%20buffer.substring(lineStarts%5Bline%5D%2C%20lineStarts%5Bline%20%2B%201%5D).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%20%22%22)%3B%0A%20%20%20%20%20%20%20%20%20%20lines%5BlinesLength%2B%2B%5D%20%3D%20currentLine%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(!this._EOLNormalized%20%26%26%20buffer.charCodeAt(lineStarts%5BpieceEndLine%5D%20%2B%20piece.end.column%20-%201)%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20danglingCR%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(piece.end.column%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20linesLength--%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20currentLine%20%3D%20buffer.substr(lineStarts%5BpieceEndLine%5D%2C%20piece.end.column%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentLine%20%3D%20buffer.substr(lineStarts%5BpieceEndLine%5D%2C%20piece.end.column)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20if%20(danglingCR)%20%7B%0A%20%20%20%20%20%20%20%20lines%5BlinesLength%2B%2B%5D%20%3D%20currentLine%3B%0A%20%20%20%20%20%20%20%20currentLine%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20lines%5BlinesLength%2B%2B%5D%20%3D%20currentLine%3B%0A%20%20%20%20%20%20return%20lines%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLength()%20%7B%0A%20%20%20%20%20%20return%20this._length%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLineCount()%20%7B%0A%20%20%20%20%20%20return%20this._lineCnt%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLineContent(lineNumber)%20%7B%0A%20%20%20%20%20%20if%20(this._lastVisitedLine.lineNumber%20%3D%3D%3D%20lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20return%20this._lastVisitedLine.value%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._lastVisitedLine.lineNumber%20%3D%20lineNumber%3B%0A%20%20%20%20%20%20if%20(lineNumber%20%3D%3D%3D%20this._lineCnt)%20%7B%0A%20%20%20%20%20%20%20%20this._lastVisitedLine.value%20%3D%20this.getLineRawContent(lineNumber)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(this._EOLNormalized)%20%7B%0A%20%20%20%20%20%20%20%20this._lastVisitedLine.value%20%3D%20this.getLineRawContent(lineNumber%2C%20this._EOLLength)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this._lastVisitedLine.value%20%3D%20this.getLineRawContent(lineNumber).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%20%22%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._lastVisitedLine.value%3B%0A%20%20%20%20%7D%0A%20%20%20%20_getCharCode(nodePos)%20%7B%0A%20%20%20%20%20%20if%20(nodePos.remainder%20%3D%3D%3D%20nodePos.node.piece.length)%20%7B%0A%20%20%20%20%20%20%20%20const%20matchingNode%20%3D%20nodePos.node.next()%3B%0A%20%20%20%20%20%20%20%20if%20(!matchingNode)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5BmatchingNode.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(matchingNode.piece.bufferIndex%2C%20matchingNode.piece.start)%3B%0A%20%20%20%20%20%20%20%20return%20buffer.buffer.charCodeAt(startOffset)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5BnodePos.node.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(nodePos.node.piece.bufferIndex%2C%20nodePos.node.piece.start)%3B%0A%20%20%20%20%20%20%20%20const%20targetOffset%20%3D%20startOffset%20%2B%20nodePos.remainder%3B%0A%20%20%20%20%20%20%20%20return%20buffer.buffer.charCodeAt(targetOffset)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20getLineCharCode(lineNumber%2C%20index)%20%7B%0A%20%20%20%20%20%20const%20nodePos%20%3D%20this.nodeAt2(lineNumber%2C%20index%20%2B%201)%3B%0A%20%20%20%20%20%20return%20this._getCharCode(nodePos)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLineLength(lineNumber)%20%7B%0A%20%20%20%20%20%20if%20(lineNumber%20%3D%3D%3D%20this.getLineCount())%20%7B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.getOffsetAt(lineNumber%2C%201)%3B%0A%20%20%20%20%20%20%20%20return%20this.getLength()%20-%20startOffset%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this.getOffsetAt(lineNumber%20%2B%201%2C%201)%20-%20this.getOffsetAt(lineNumber%2C%201)%20-%20this._EOLLength%3B%0A%20%20%20%20%7D%0A%20%20%20%20getCharCode(offset)%20%7B%0A%20%20%20%20%20%20const%20nodePos%20%3D%20this.nodeAt(offset)%3B%0A%20%20%20%20%20%20return%20this._getCharCode(nodePos)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getNearestChunk(offset)%20%7B%0A%20%20%20%20%20%20const%20nodePos%20%3D%20this.nodeAt(offset)%3B%0A%20%20%20%20%20%20if%20(nodePos.remainder%20%3D%3D%3D%20nodePos.node.piece.length)%20%7B%0A%20%20%20%20%20%20%20%20const%20matchingNode%20%3D%20nodePos.node.next()%3B%0A%20%20%20%20%20%20%20%20if%20(!matchingNode%20%7C%7C%20matchingNode%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5BmatchingNode.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(matchingNode.piece.bufferIndex%2C%20matchingNode.piece.start)%3B%0A%20%20%20%20%20%20%20%20return%20buffer.buffer.substring(startOffset%2C%20startOffset%20%2B%20matchingNode.piece.length)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5BnodePos.node.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(nodePos.node.piece.bufferIndex%2C%20nodePos.node.piece.start)%3B%0A%20%20%20%20%20%20%20%20const%20targetOffset%20%3D%20startOffset%20%2B%20nodePos.remainder%3B%0A%20%20%20%20%20%20%20%20const%20targetEnd%20%3D%20startOffset%20%2B%20nodePos.node.piece.length%3B%0A%20%20%20%20%20%20%20%20return%20buffer.buffer.substring(targetOffset%2C%20targetEnd)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20findMatchesInNode(node%2C%20searcher%2C%20startLineNumber%2C%20startColumn%2C%20startCursor%2C%20endCursor%2C%20searchData%2C%20captureMatches%2C%20limitResultCount%2C%20resultLen%2C%20result)%20%7B%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bnode.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20const%20startOffsetInBuffer%20%3D%20this.offsetInBuffer(node.piece.bufferIndex%2C%20node.piece.start)%3B%0A%20%20%20%20%20%20const%20start%20%3D%20this.offsetInBuffer(node.piece.bufferIndex%2C%20startCursor)%3B%0A%20%20%20%20%20%20const%20end%20%3D%20this.offsetInBuffer(node.piece.bufferIndex%2C%20endCursor)%3B%0A%20%20%20%20%20%20let%20m%3B%0A%20%20%20%20%20%20const%20ret%20%3D%20%7B%20line%3A%200%2C%20column%3A%200%20%7D%3B%0A%20%20%20%20%20%20let%20searchText%3B%0A%20%20%20%20%20%20let%20offsetInBuffer%3B%0A%20%20%20%20%20%20if%20(searcher._wordSeparators)%20%7B%0A%20%20%20%20%20%20%20%20searchText%20%3D%20buffer.buffer.substring(start%2C%20end)%3B%0A%20%20%20%20%20%20%20%20offsetInBuffer%20%3D%20(offset)%20%3D%3E%20offset%20%2B%20start%3B%0A%20%20%20%20%20%20%20%20searcher.reset(0)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20searchText%20%3D%20buffer.buffer%3B%0A%20%20%20%20%20%20%20%20offsetInBuffer%20%3D%20(offset)%20%3D%3E%20offset%3B%0A%20%20%20%20%20%20%20%20searcher.reset(start)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20m%20%3D%20searcher.next(searchText)%3B%0A%20%20%20%20%20%20%20%20if%20(m)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(offsetInBuffer(m.index)%20%3E%3D%20end)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20this.positionInBuffer(node%2C%20offsetInBuffer(m.index)%20-%20startOffsetInBuffer%2C%20ret)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20lineFeedCnt%20%3D%20this.getLineFeedCnt(node.piece.bufferIndex%2C%20startCursor%2C%20ret)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20retStartColumn%20%3D%20ret.line%20%3D%3D%3D%20startCursor.line%20%3F%20ret.column%20-%20startCursor.column%20%2B%20startColumn%20%3A%20ret.column%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%20%20const%20retEndColumn%20%3D%20retStartColumn%20%2B%20m%5B0%5D.length%3B%0A%20%20%20%20%20%20%20%20%20%20result%5BresultLen%2B%2B%5D%20%3D%20createFindMatch(%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Range(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20startLineNumber%20%2B%20lineFeedCnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20retStartColumn%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20startLineNumber%20%2B%20lineFeedCnt%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20retEndColumn%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20m%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20captureMatches%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(offsetInBuffer(m.index)%20%2B%20m%5B0%5D.length%20%3E%3D%20end)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20while%20(m)%3B%0A%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%7D%0A%20%20%20%20findMatchesLineByLine(searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20result%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20let%20resultLen%20%3D%200%3B%0A%20%20%20%20%20%20const%20searcher%20%3D%20new%20Searcher(searchData.wordSeparators%2C%20searchData.regex)%3B%0A%20%20%20%20%20%20let%20startPosition%20%3D%20this.nodeAt2(searchRange.startLineNumber%2C%20searchRange.startColumn)%3B%0A%20%20%20%20%20%20if%20(startPosition%20%3D%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20endPosition%20%3D%20this.nodeAt2(searchRange.endLineNumber%2C%20searchRange.endColumn)%3B%0A%20%20%20%20%20%20if%20(endPosition%20%3D%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20start%20%3D%20this.positionInBuffer(startPosition.node%2C%20startPosition.remainder)%3B%0A%20%20%20%20%20%20const%20end%20%3D%20this.positionInBuffer(endPosition.node%2C%20endPosition.remainder)%3B%0A%20%20%20%20%20%20if%20(startPosition.node%20%3D%3D%3D%20endPosition.node)%20%7B%0A%20%20%20%20%20%20%20%20this.findMatchesInNode(%0A%20%20%20%20%20%20%20%20%20%20startPosition.node%2C%0A%20%20%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.startLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.startColumn%2C%0A%20%20%20%20%20%20%20%20%20%20start%2C%0A%20%20%20%20%20%20%20%20%20%20end%2C%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%2C%0A%20%20%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20%20%20result%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20startLineNumber%20%3D%20searchRange.startLineNumber%3B%0A%20%20%20%20%20%20let%20currentNode%20%3D%20startPosition.node%3B%0A%20%20%20%20%20%20while%20(currentNode%20!%3D%3D%20endPosition.node)%20%7B%0A%20%20%20%20%20%20%20%20const%20lineBreakCnt%20%3D%20this.getLineFeedCnt(currentNode.piece.bufferIndex%2C%20start%2C%20currentNode.piece.end)%3B%0A%20%20%20%20%20%20%20%20if%20(lineBreakCnt%20%3E%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5BcurrentNode.piece.bufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20%20%20%20%20const%20startOffsetInBuffer%20%3D%20this.offsetInBuffer(currentNode.piece.bufferIndex%2C%20currentNode.piece.start)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20nextLineStartOffset%20%3D%20lineStarts%5Bstart.line%20%2B%20lineBreakCnt%5D%3B%0A%20%20%20%20%20%20%20%20%20%20const%20startColumn3%20%3D%20startLineNumber%20%3D%3D%3D%20searchRange.startLineNumber%20%3F%20searchRange.startColumn%20%3A%201%3B%0A%20%20%20%20%20%20%20%20%20%20resultLen%20%3D%20this.findMatchesInNode(%0A%20%20%20%20%20%20%20%20%20%20%20%20currentNode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20startLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20startColumn3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20start%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20this.positionInBuffer(currentNode%2C%20nextLineStartOffset%20-%20startOffsetInBuffer)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20limitResultCount%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20result%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20startLineNumber%20%2B%3D%20lineBreakCnt%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20startColumn2%20%3D%20startLineNumber%20%3D%3D%3D%20searchRange.startLineNumber%20%3F%20searchRange.startColumn%20-%201%20%3A%200%3B%0A%20%20%20%20%20%20%20%20if%20(startLineNumber%20%3D%3D%3D%20searchRange.endLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20text%20%3D%20this.getLineContent(startLineNumber).substring(startColumn2%2C%20searchRange.endColumn%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20resultLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20searchRange.endLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20startColumn2%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20result%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20resultLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20%20%20this.getLineContent(startLineNumber).substr(startColumn2)%2C%0A%20%20%20%20%20%20%20%20%20%20startLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20startColumn2%2C%0A%20%20%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20%20%20result%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20startLineNumber%2B%2B%3B%0A%20%20%20%20%20%20%20%20startPosition%20%3D%20this.nodeAt2(startLineNumber%2C%201)%3B%0A%20%20%20%20%20%20%20%20currentNode%20%3D%20startPosition.node%3B%0A%20%20%20%20%20%20%20%20start%20%3D%20this.positionInBuffer(startPosition.node%2C%20startPosition.remainder)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(startLineNumber%20%3D%3D%3D%20searchRange.endLineNumber)%20%7B%0A%20%20%20%20%20%20%20%20const%20startColumn2%20%3D%20startLineNumber%20%3D%3D%3D%20searchRange.startLineNumber%20%3F%20searchRange.startColumn%20-%201%20%3A%200%3B%0A%20%20%20%20%20%20%20%20const%20text%20%3D%20this.getLineContent(startLineNumber).substring(startColumn2%2C%20searchRange.endColumn%20-%201)%3B%0A%20%20%20%20%20%20%20%20resultLen%20%3D%20this._findMatchesInLine(%0A%20%20%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20%20%20text%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange.endLineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20startColumn2%2C%0A%20%20%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20%20%20result%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20startColumn%20%3D%20startLineNumber%20%3D%3D%3D%20searchRange.startLineNumber%20%3F%20searchRange.startColumn%20%3A%201%3B%0A%20%20%20%20%20%20resultLen%20%3D%20this.findMatchesInNode(%0A%20%20%20%20%20%20%20%20endPosition.node%2C%0A%20%20%20%20%20%20%20%20searcher%2C%0A%20%20%20%20%20%20%20%20startLineNumber%2C%0A%20%20%20%20%20%20%20%20startColumn%2C%0A%20%20%20%20%20%20%20%20start%2C%0A%20%20%20%20%20%20%20%20end%2C%0A%20%20%20%20%20%20%20%20searchData%2C%0A%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20limitResultCount%2C%0A%20%20%20%20%20%20%20%20resultLen%2C%0A%20%20%20%20%20%20%20%20result%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20return%20result%3B%0A%20%20%20%20%7D%0A%20%20%20%20_findMatchesInLine(searchData%2C%20searcher%2C%20text%2C%20lineNumber%2C%20deltaOffset%2C%20resultLen%2C%20result%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20const%20wordSeparators%20%3D%20searchData.wordSeparators%3B%0A%20%20%20%20%20%20if%20(!captureMatches%20%26%26%20searchData.simpleSearch)%20%7B%0A%20%20%20%20%20%20%20%20const%20searchString%20%3D%20searchData.simpleSearch%3B%0A%20%20%20%20%20%20%20%20const%20searchStringLen%20%3D%20searchString.length%3B%0A%20%20%20%20%20%20%20%20const%20textLength%20%3D%20text.length%3B%0A%20%20%20%20%20%20%20%20let%20lastMatchIndex%20%3D%20-searchStringLen%3B%0A%20%20%20%20%20%20%20%20while%20((lastMatchIndex%20%3D%20text.indexOf(searchString%2C%20lastMatchIndex%20%2B%20searchStringLen))%20!%3D%3D%20-1)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!wordSeparators%20%7C%7C%20isValidMatch(wordSeparators%2C%20text%2C%20textLength%2C%20lastMatchIndex%2C%20searchStringLen))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20result%5BresultLen%2B%2B%5D%20%3D%20new%20FindMatch(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20new%20Range(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastMatchIndex%20%2B%201%20%2B%20deltaOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastMatchIndex%20%2B%201%20%2B%20searchStringLen%20%2B%20deltaOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20m%3B%0A%20%20%20%20%20%20searcher.reset(0)%3B%0A%20%20%20%20%20%20do%20%7B%0A%20%20%20%20%20%20%20%20m%20%3D%20searcher.next(text)%3B%0A%20%20%20%20%20%20%20%20if%20(m)%20%7B%0A%20%20%20%20%20%20%20%20%20%20result%5BresultLen%2B%2B%5D%20%3D%20createFindMatch(%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Range(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20m.index%20%2B%201%20%2B%20deltaOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20m.index%20%2B%201%20%2B%20m%5B0%5D.length%20%2B%20deltaOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20m%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20captureMatches%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(resultLen%20%3E%3D%20limitResultCount)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20while%20(m)%3B%0A%20%20%20%20%20%20return%20resultLen%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23endregion%0A%20%20%20%20%2F%2F%20%23region%20Piece%20Table%0A%20%20%20%20insert(offset%2C%20value%2C%20eolNormalized%20%3D%20false)%20%7B%0A%20%20%20%20%20%20this._EOLNormalized%20%3D%20this._EOLNormalized%20%26%26%20eolNormalized%3B%0A%20%20%20%20%20%20this._lastVisitedLine.lineNumber%20%3D%200%3B%0A%20%20%20%20%20%20this._lastVisitedLine.value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20if%20(this.root%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20const%20%7B%20node%2C%20remainder%2C%20nodeStartOffset%20%7D%20%3D%20this.nodeAt(offset)%3B%0A%20%20%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20%20%20const%20bufferIndex%20%3D%20piece.bufferIndex%3B%0A%20%20%20%20%20%20%20%20const%20insertPosInBuffer%20%3D%20this.positionInBuffer(node%2C%20remainder)%3B%0A%20%20%20%20%20%20%20%20if%20(node.piece.bufferIndex%20%3D%3D%3D%200%20%26%26%20piece.end.line%20%3D%3D%3D%20this._lastChangeBufferPos.line%20%26%26%20piece.end.column%20%3D%3D%3D%20this._lastChangeBufferPos.column%20%26%26%20nodeStartOffset%20%2B%20piece.length%20%3D%3D%3D%20offset%20%26%26%20value.length%20%3C%20AverageBufferSize)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.appendToNode(node%2C%20value)%3B%0A%20%20%20%20%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(nodeStartOffset%20%3D%3D%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.insertContentToNodeLeft(value%2C%20node)%3B%0A%20%20%20%20%20%20%20%20%20%20this._searchCache.validate(offset)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(nodeStartOffset%20%2B%20node.piece.length%20%3E%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20nodesToDel%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%20%20let%20newRightPiece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20%20%20piece.bufferIndex%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20insertPosInBuffer%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20piece.end%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20this.getLineFeedCnt(piece.bufferIndex%2C%20insertPosInBuffer%2C%20piece.end)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20this.offsetInBuffer(bufferIndex%2C%20piece.end)%20-%20this.offsetInBuffer(bufferIndex%2C%20insertPosInBuffer)%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.endWithCR(value))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20headOfRight%20%3D%20this.nodeCharCodeAt(node%2C%20remainder)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(headOfRight%20%3D%3D%3D%2010)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20newStart%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20newRightPiece.start.line%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20column%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20newRightPiece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20newRightPiece.bufferIndex%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20newStart%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20newRightPiece.end%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.getLineFeedCnt(newRightPiece.bufferIndex%2C%20newStart%2C%20newRightPiece.end)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20newRightPiece.length%20-%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.startWithLF(value))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20tailOfLeft%20%3D%20this.nodeCharCodeAt(node%2C%20remainder%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(tailOfLeft%20%3D%3D%3D%2013)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20previousPos%20%3D%20this.positionInBuffer(node%2C%20remainder%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.deleteNodeTail(node%2C%20previousPos)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20%22%5Cr%22%20%2B%20value%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(node.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodesToDel.push(node)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.deleteNodeTail(node%2C%20insertPosInBuffer)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.deleteNodeTail(node%2C%20insertPosInBuffer)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20newPieces%20%3D%20this.createNewPieces(value)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(newRightPiece.length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.rbInsertRight(node%2C%20newRightPiece)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20let%20tmpNode%20%3D%20node%3B%0A%20%20%20%20%20%20%20%20%20%20for%20(let%20k%20%3D%200%3B%20k%20%3C%20newPieces.length%3B%20k%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20tmpNode%20%3D%20this.rbInsertRight(tmpNode%2C%20newPieces%5Bk%5D)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20this.deleteNodes(nodesToDel)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.insertContentToNodeRight(value%2C%20node)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20pieces%20%3D%20this.createNewPieces(value)%3B%0A%20%20%20%20%20%20%20%20let%20node%20%3D%20this.rbInsertLeft(null%2C%20pieces%5B0%5D)%3B%0A%20%20%20%20%20%20%20%20for%20(let%20k%20%3D%201%3B%20k%20%3C%20pieces.length%3B%20k%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20node%20%3D%20this.rbInsertRight(node%2C%20pieces%5Bk%5D)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%7D%0A%20%20%20%20delete(offset%2C%20cnt)%20%7B%0A%20%20%20%20%20%20this._lastVisitedLine.lineNumber%20%3D%200%3B%0A%20%20%20%20%20%20this._lastVisitedLine.value%20%3D%20%22%22%3B%0A%20%20%20%20%20%20if%20(cnt%20%3C%3D%200%20%7C%7C%20this.root%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20startPosition%20%3D%20this.nodeAt(offset)%3B%0A%20%20%20%20%20%20const%20endPosition%20%3D%20this.nodeAt(offset%20%2B%20cnt)%3B%0A%20%20%20%20%20%20const%20startNode%20%3D%20startPosition.node%3B%0A%20%20%20%20%20%20const%20endNode%20%3D%20endPosition.node%3B%0A%20%20%20%20%20%20if%20(startNode%20%3D%3D%3D%20endNode)%20%7B%0A%20%20%20%20%20%20%20%20const%20startSplitPosInBuffer2%20%3D%20this.positionInBuffer(startNode%2C%20startPosition.remainder)%3B%0A%20%20%20%20%20%20%20%20const%20endSplitPosInBuffer2%20%3D%20this.positionInBuffer(startNode%2C%20endPosition.remainder)%3B%0A%20%20%20%20%20%20%20%20if%20(startPosition.nodeStartOffset%20%3D%3D%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(cnt%20%3D%3D%3D%20startNode.piece.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20next%20%3D%20startNode.next()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20rbDelete(this%2C%20startNode)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.validateCRLFWithPrevNode(next)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20this.deleteNodeHead(startNode%2C%20endSplitPosInBuffer2)%3B%0A%20%20%20%20%20%20%20%20%20%20this._searchCache.validate(offset)%3B%0A%20%20%20%20%20%20%20%20%20%20this.validateCRLFWithPrevNode(startNode)%3B%0A%20%20%20%20%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(startPosition.nodeStartOffset%20%2B%20startNode.piece.length%20%3D%3D%3D%20offset%20%2B%20cnt)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.deleteNodeTail(startNode%2C%20startSplitPosInBuffer2)%3B%0A%20%20%20%20%20%20%20%20%20%20this.validateCRLFWithNextNode(startNode)%3B%0A%20%20%20%20%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this.shrinkNode(startNode%2C%20startSplitPosInBuffer2%2C%20endSplitPosInBuffer2)%3B%0A%20%20%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20nodesToDel%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20const%20startSplitPosInBuffer%20%3D%20this.positionInBuffer(startNode%2C%20startPosition.remainder)%3B%0A%20%20%20%20%20%20this.deleteNodeTail(startNode%2C%20startSplitPosInBuffer)%3B%0A%20%20%20%20%20%20this._searchCache.validate(offset)%3B%0A%20%20%20%20%20%20if%20(startNode.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20nodesToDel.push(startNode)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20endSplitPosInBuffer%20%3D%20this.positionInBuffer(endNode%2C%20endPosition.remainder)%3B%0A%20%20%20%20%20%20this.deleteNodeHead(endNode%2C%20endSplitPosInBuffer)%3B%0A%20%20%20%20%20%20if%20(endNode.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20nodesToDel.push(endNode)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20secondNode%20%3D%20startNode.next()%3B%0A%20%20%20%20%20%20for%20(let%20node%20%3D%20secondNode%3B%20node%20!%3D%3D%20SENTINEL%20%26%26%20node%20!%3D%3D%20endNode%3B%20node%20%3D%20node.next())%20%7B%0A%20%20%20%20%20%20%20%20nodesToDel.push(node)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20prev%20%3D%20startNode.piece.length%20%3D%3D%3D%200%20%3F%20startNode.prev()%20%3A%20startNode%3B%0A%20%20%20%20%20%20this.deleteNodes(nodesToDel)%3B%0A%20%20%20%20%20%20this.validateCRLFWithNextNode(prev)%3B%0A%20%20%20%20%20%20this.computeBufferMetadata()%3B%0A%20%20%20%20%7D%0A%20%20%20%20insertContentToNodeLeft(value%2C%20node)%20%7B%0A%20%20%20%20%20%20const%20nodesToDel%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.endWithCR(value)%20%26%26%20this.startWithLF(node))%20%7B%0A%20%20%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20%20%20const%20newStart%20%3D%20%7B%20line%3A%20piece.start.line%20%2B%201%2C%20column%3A%200%20%7D%3B%0A%20%20%20%20%20%20%20%20const%20nPiece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20piece.bufferIndex%2C%0A%20%20%20%20%20%20%20%20%20%20newStart%2C%0A%20%20%20%20%20%20%20%20%20%20piece.end%2C%0A%20%20%20%20%20%20%20%20%20%20this.getLineFeedCnt(piece.bufferIndex%2C%20newStart%2C%20piece.end)%2C%0A%20%20%20%20%20%20%20%20%20%20piece.length%20-%201%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20node.piece%20%3D%20nPiece%3B%0A%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20updateTreeMetadata(this%2C%20node%2C%20-1%2C%20-1)%3B%0A%20%20%20%20%20%20%20%20if%20(node.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20nodesToDel.push(node)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20newPieces%20%3D%20this.createNewPieces(value)%3B%0A%20%20%20%20%20%20let%20newNode%20%3D%20this.rbInsertLeft(node%2C%20newPieces%5BnewPieces.length%20-%201%5D)%3B%0A%20%20%20%20%20%20for%20(let%20k%20%3D%20newPieces.length%20-%202%3B%20k%20%3E%3D%200%3B%20k--)%20%7B%0A%20%20%20%20%20%20%20%20newNode%20%3D%20this.rbInsertLeft(newNode%2C%20newPieces%5Bk%5D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.validateCRLFWithPrevNode(newNode)%3B%0A%20%20%20%20%20%20this.deleteNodes(nodesToDel)%3B%0A%20%20%20%20%7D%0A%20%20%20%20insertContentToNodeRight(value%2C%20node)%20%7B%0A%20%20%20%20%20%20if%20(this.adjustCarriageReturnFromNext(value%2C%20node))%20%7B%0A%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20newPieces%20%3D%20this.createNewPieces(value)%3B%0A%20%20%20%20%20%20const%20newNode%20%3D%20this.rbInsertRight(node%2C%20newPieces%5B0%5D)%3B%0A%20%20%20%20%20%20let%20tmpNode%20%3D%20newNode%3B%0A%20%20%20%20%20%20for%20(let%20k%20%3D%201%3B%20k%20%3C%20newPieces.length%3B%20k%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20tmpNode%20%3D%20this.rbInsertRight(tmpNode%2C%20newPieces%5Bk%5D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.validateCRLFWithPrevNode(newNode)%3B%0A%20%20%20%20%7D%0A%20%20%20%20positionInBuffer(node%2C%20remainder%2C%20ret)%20%7B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20bufferIndex%20%3D%20node.piece.bufferIndex%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5BbufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20lineStarts%5Bpiece.start.line%5D%20%2B%20piece.start.column%3B%0A%20%20%20%20%20%20const%20offset%20%3D%20startOffset%20%2B%20remainder%3B%0A%20%20%20%20%20%20let%20low%20%3D%20piece.start.line%3B%0A%20%20%20%20%20%20let%20high%20%3D%20piece.end.line%3B%0A%20%20%20%20%20%20let%20mid%20%3D%200%3B%0A%20%20%20%20%20%20let%20midStop%20%3D%200%3B%0A%20%20%20%20%20%20let%20midStart%20%3D%200%3B%0A%20%20%20%20%20%20while%20(low%20%3C%3D%20high)%20%7B%0A%20%20%20%20%20%20%20%20mid%20%3D%20low%20%2B%20(high%20-%20low)%20%2F%202%20%7C%200%3B%0A%20%20%20%20%20%20%20%20midStart%20%3D%20lineStarts%5Bmid%5D%3B%0A%20%20%20%20%20%20%20%20if%20(mid%20%3D%3D%3D%20high)%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20midStop%20%3D%20lineStarts%5Bmid%20%2B%201%5D%3B%0A%20%20%20%20%20%20%20%20if%20(offset%20%3C%20midStart)%20%7B%0A%20%20%20%20%20%20%20%20%20%20high%20%3D%20mid%20-%201%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(offset%20%3E%3D%20midStop)%20%7B%0A%20%20%20%20%20%20%20%20%20%20low%20%3D%20mid%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(ret)%20%7B%0A%20%20%20%20%20%20%20%20ret.line%20%3D%20mid%3B%0A%20%20%20%20%20%20%20%20ret.column%20%3D%20offset%20-%20midStart%3B%0A%20%20%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20line%3A%20mid%2C%0A%20%20%20%20%20%20%20%20column%3A%20offset%20-%20midStart%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLineFeedCnt(bufferIndex%2C%20start%2C%20end)%20%7B%0A%20%20%20%20%20%20if%20(end.column%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20end.line%20-%20start.line%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5BbufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20if%20(end.line%20%3D%3D%3D%20lineStarts.length%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20end.line%20-%20start.line%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20nextLineStartOffset%20%3D%20lineStarts%5Bend.line%20%2B%201%5D%3B%0A%20%20%20%20%20%20const%20endOffset%20%3D%20lineStarts%5Bend.line%5D%20%2B%20end.column%3B%0A%20%20%20%20%20%20if%20(nextLineStartOffset%20%3E%20endOffset%20%2B%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20end.line%20-%20start.line%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20previousCharOffset%20%3D%20endOffset%20-%201%3B%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5BbufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20if%20(buffer.charCodeAt(previousCharOffset)%20%3D%3D%3D%2013)%20%7B%0A%20%20%20%20%20%20%20%20return%20end.line%20-%20start.line%20%2B%201%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20end.line%20-%20start.line%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20offsetInBuffer(bufferIndex%2C%20cursor)%20%7B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5BbufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20return%20lineStarts%5Bcursor.line%5D%20%2B%20cursor.column%3B%0A%20%20%20%20%7D%0A%20%20%20%20deleteNodes(nodes)%20%7B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20nodes.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20rbDelete(this%2C%20nodes%5Bi%5D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20createNewPieces(text)%20%7B%0A%20%20%20%20%20%20if%20(text.length%20%3E%20AverageBufferSize)%20%7B%0A%20%20%20%20%20%20%20%20const%20newPieces%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20while%20(text.length%20%3E%20AverageBufferSize)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20lastChar%20%3D%20text.charCodeAt(AverageBufferSize%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20let%20splitText%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(lastChar%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F%20%7C%7C%20lastChar%20%3E%3D%2055296%20%26%26%20lastChar%20%3C%3D%2056319)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20splitText%20%3D%20text.substring(0%2C%20AverageBufferSize%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20text%20%3D%20text.substring(AverageBufferSize%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20splitText%20%3D%20text.substring(0%2C%20AverageBufferSize)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20text%20%3D%20text.substring(AverageBufferSize)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20const%20lineStarts3%20%3D%20createLineStartsFast(splitText)%3B%0A%20%20%20%20%20%20%20%20%20%20newPieces.push(%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20this._buffers.length%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20line%3A%200%2C%20column%3A%200%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20lineStarts3.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20column%3A%20splitText.length%20-%20lineStarts3%5BlineStarts3.length%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineStarts3.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20splitText.length%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20this._buffers.push(new%20StringBuffer(splitText%2C%20lineStarts3))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20const%20lineStarts2%20%3D%20createLineStartsFast(text)%3B%0A%20%20%20%20%20%20%20%20newPieces.push(%0A%20%20%20%20%20%20%20%20%20%20new%20Piece(%0A%20%20%20%20%20%20%20%20%20%20%20%20this._buffers.length%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%20line%3A%200%2C%20column%3A%200%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20lineStarts2.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20column%3A%20text.length%20-%20lineStarts2%5BlineStarts2.length%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lineStarts2.length%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text.length%0A%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20this._buffers.push(new%20StringBuffer(text%2C%20lineStarts2))%3B%0A%20%20%20%20%20%20%20%20return%20newPieces%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20startOffset%20%3D%20this._buffers%5B0%5D.buffer.length%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20createLineStartsFast(text%2C%20false)%3B%0A%20%20%20%20%20%20let%20start%20%3D%20this._lastChangeBufferPos%3B%0A%20%20%20%20%20%20if%20(this._buffers%5B0%5D.lineStarts%5Bthis._buffers%5B0%5D.lineStarts.length%20-%201%5D%20%3D%3D%3D%20startOffset%20%26%26%20startOffset%20!%3D%3D%200%20%26%26%20this.startWithLF(text)%20%26%26%20this.endWithCR(this._buffers%5B0%5D.buffer))%20%7B%0A%20%20%20%20%20%20%20%20this._lastChangeBufferPos%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20line%3A%20this._lastChangeBufferPos.line%2C%0A%20%20%20%20%20%20%20%20%20%20column%3A%20this._lastChangeBufferPos.column%20%2B%201%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20start%20%3D%20this._lastChangeBufferPos%3B%0A%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20lineStarts.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20lineStarts%5Bi%5D%20%2B%3D%20startOffset%20%2B%201%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._buffers%5B0%5D.lineStarts%20%3D%20this._buffers%5B0%5D.lineStarts.concat(lineStarts.slice(1))%3B%0A%20%20%20%20%20%20%20%20this._buffers%5B0%5D.buffer%20%2B%3D%20%22_%22%20%2B%20text%3B%0A%20%20%20%20%20%20%20%20startOffset%20%2B%3D%201%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20if%20(startOffset%20!%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20lineStarts.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20lineStarts%5Bi%5D%20%2B%3D%20startOffset%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._buffers%5B0%5D.lineStarts%20%3D%20this._buffers%5B0%5D.lineStarts.concat(lineStarts.slice(1))%3B%0A%20%20%20%20%20%20%20%20this._buffers%5B0%5D.buffer%20%2B%3D%20text%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20endOffset%20%3D%20this._buffers%5B0%5D.buffer.length%3B%0A%20%20%20%20%20%20const%20endIndex%20%3D%20this._buffers%5B0%5D.lineStarts.length%20-%201%3B%0A%20%20%20%20%20%20const%20endColumn%20%3D%20endOffset%20-%20this._buffers%5B0%5D.lineStarts%5BendIndex%5D%3B%0A%20%20%20%20%20%20const%20endPos%20%3D%20%7B%20line%3A%20endIndex%2C%20column%3A%20endColumn%20%7D%3B%0A%20%20%20%20%20%20const%20newPiece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20start%2C%0A%20%20%20%20%20%20%20%20endPos%2C%0A%20%20%20%20%20%20%20%20this.getLineFeedCnt(0%2C%20start%2C%20endPos)%2C%0A%20%20%20%20%20%20%20%20endOffset%20-%20startOffset%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20this._lastChangeBufferPos%20%3D%20endPos%3B%0A%20%20%20%20%20%20return%20%5BnewPiece%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLinesRawContent()%20%7B%0A%20%20%20%20%20%20return%20this.getContentOfSubTree(this.root)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getLineRawContent(lineNumber%2C%20endOffset%20%3D%200)%20%7B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20let%20ret%20%3D%20%22%22%3B%0A%20%20%20%20%20%20const%20cache%20%3D%20this._searchCache.get2(lineNumber)%3B%0A%20%20%20%20%20%20if%20(cache)%20%7B%0A%20%20%20%20%20%20%20%20x%20%3D%20cache.node%3B%0A%20%20%20%20%20%20%20%20const%20prevAccumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20cache.nodeStartLineNumber%20-%201)%3B%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20if%20(cache.nodeStartLineNumber%20%2B%20x.piece.lineFeedCnt%20%3D%3D%3D%20lineNumber)%20%7B%0A%20%20%20%20%20%20%20%20%20%20ret%20%3D%20buffer.substring(startOffset%20%2B%20prevAccumulatedValue%2C%20startOffset%20%2B%20x.piece.length)%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20accumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20cache.nodeStartLineNumber)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20buffer.substring(startOffset%20%2B%20prevAccumulatedValue%2C%20startOffset%20%2B%20accumulatedValue%20-%20endOffset)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20let%20nodeStartOffset%20%3D%200%3B%0A%20%20%20%20%20%20%20%20const%20originalLineNumber%20%3D%20lineNumber%3B%0A%20%20%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(x.left%20!%3D%3D%20SENTINEL%20%26%26%20x.lf_left%20%3E%3D%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.left%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.lf_left%20%2B%20x.piece.lineFeedCnt%20%3E%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20prevAccumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%202)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20accumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this._searchCache.set(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodeStartLineNumber%3A%20originalLineNumber%20-%20(lineNumber%20-%201%20-%20x.lf_left)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20buffer.substring(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20startOffset%20%2B%20prevAccumulatedValue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20startOffset%20%2B%20accumulatedValue%20-%20endOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.lf_left%20%2B%20x.piece.lineFeedCnt%20%3D%3D%3D%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20prevAccumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%202)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20ret%20%3D%20buffer.substring(startOffset%20%2B%20prevAccumulatedValue%2C%20startOffset%20%2B%20x.piece.length)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20lineNumber%20-%3D%20x.lf_left%20%2B%20x.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bx.piece.bufferIndex%5D.buffer%3B%0A%20%20%20%20%20%20%20%20if%20(x.piece.lineFeedCnt%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20accumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%200)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20%20%20ret%20%2B%3D%20buffer.substring(startOffset%2C%20startOffset%20%2B%20accumulatedValue%20-%20endOffset)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20ret%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(x.piece.bufferIndex%2C%20x.piece.start)%3B%0A%20%20%20%20%20%20%20%20%20%20ret%20%2B%3D%20buffer.substr(startOffset%2C%20x.piece.length)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20ret%3B%0A%20%20%20%20%7D%0A%20%20%20%20computeBufferMetadata()%20%7B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20let%20lfCnt%20%3D%201%3B%0A%20%20%20%20%20%20let%20len%20%3D%200%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20lfCnt%20%2B%3D%20x.lf_left%20%2B%20x.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20%20%20len%20%2B%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._lineCnt%20%3D%20lfCnt%3B%0A%20%20%20%20%20%20this._length%20%3D%20len%3B%0A%20%20%20%20%20%20this._searchCache.validate(this._length)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23region%20node%20operations%0A%20%20%20%20getIndexOf(node%2C%20accumulatedValue)%20%7B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20pos%20%3D%20this.positionInBuffer(node%2C%20accumulatedValue)%3B%0A%20%20%20%20%20%20const%20lineCnt%20%3D%20pos.line%20-%20piece.start.line%3B%0A%20%20%20%20%20%20if%20(this.offsetInBuffer(piece.bufferIndex%2C%20piece.end)%20-%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.start)%20%3D%3D%3D%20accumulatedValue)%20%7B%0A%20%20%20%20%20%20%20%20const%20realLineCnt%20%3D%20this.getLineFeedCnt(node.piece.bufferIndex%2C%20piece.start%2C%20pos)%3B%0A%20%20%20%20%20%20%20%20if%20(realLineCnt%20!%3D%3D%20lineCnt)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20%7B%20index%3A%20realLineCnt%2C%20remainder%3A%200%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20%7B%20index%3A%20lineCnt%2C%20remainder%3A%20pos.column%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20getAccumulatedValue(node%2C%20index)%20%7B%0A%20%20%20%20%20%20if%20(index%20%3C%200)%20%7B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5Bpiece.bufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20const%20expectedLineStartIndex%20%3D%20piece.start.line%20%2B%20index%20%2B%201%3B%0A%20%20%20%20%20%20if%20(expectedLineStartIndex%20%3E%20piece.end.line)%20%7B%0A%20%20%20%20%20%20%20%20return%20lineStarts%5Bpiece.end.line%5D%20%2B%20piece.end.column%20-%20lineStarts%5Bpiece.start.line%5D%20-%20piece.start.column%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20lineStarts%5BexpectedLineStartIndex%5D%20-%20lineStarts%5Bpiece.start.line%5D%20-%20piece.start.column%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20deleteNodeTail(node%2C%20pos)%20%7B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20originalLFCnt%20%3D%20piece.lineFeedCnt%3B%0A%20%20%20%20%20%20const%20originalEndOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.end)%3B%0A%20%20%20%20%20%20const%20newEnd%20%3D%20pos%3B%0A%20%20%20%20%20%20const%20newEndOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20newEnd)%3B%0A%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(piece.bufferIndex%2C%20piece.start%2C%20newEnd)%3B%0A%20%20%20%20%20%20const%20lf_delta%20%3D%20newLineFeedCnt%20-%20originalLFCnt%3B%0A%20%20%20%20%20%20const%20size_delta%20%3D%20newEndOffset%20-%20originalEndOffset%3B%0A%20%20%20%20%20%20const%20newLength%20%3D%20piece.length%20%2B%20size_delta%3B%0A%20%20%20%20%20%20node.piece%20%3D%20new%20Piece(piece.bufferIndex%2C%20piece.start%2C%20newEnd%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20node%2C%20size_delta%2C%20lf_delta)%3B%0A%20%20%20%20%7D%0A%20%20%20%20deleteNodeHead(node%2C%20pos)%20%7B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20originalLFCnt%20%3D%20piece.lineFeedCnt%3B%0A%20%20%20%20%20%20const%20originalStartOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.start)%3B%0A%20%20%20%20%20%20const%20newStart%20%3D%20pos%3B%0A%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(piece.bufferIndex%2C%20newStart%2C%20piece.end)%3B%0A%20%20%20%20%20%20const%20newStartOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20newStart)%3B%0A%20%20%20%20%20%20const%20lf_delta%20%3D%20newLineFeedCnt%20-%20originalLFCnt%3B%0A%20%20%20%20%20%20const%20size_delta%20%3D%20originalStartOffset%20-%20newStartOffset%3B%0A%20%20%20%20%20%20const%20newLength%20%3D%20piece.length%20%2B%20size_delta%3B%0A%20%20%20%20%20%20node.piece%20%3D%20new%20Piece(piece.bufferIndex%2C%20newStart%2C%20piece.end%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20node%2C%20size_delta%2C%20lf_delta)%3B%0A%20%20%20%20%7D%0A%20%20%20%20shrinkNode(node%2C%20start%2C%20end)%20%7B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20originalStartPos%20%3D%20piece.start%3B%0A%20%20%20%20%20%20const%20originalEndPos%20%3D%20piece.end%3B%0A%20%20%20%20%20%20const%20oldLength%20%3D%20piece.length%3B%0A%20%20%20%20%20%20const%20oldLFCnt%20%3D%20piece.lineFeedCnt%3B%0A%20%20%20%20%20%20const%20newEnd%20%3D%20start%3B%0A%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(piece.bufferIndex%2C%20piece.start%2C%20newEnd)%3B%0A%20%20%20%20%20%20const%20newLength%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20start)%20-%20this.offsetInBuffer(piece.bufferIndex%2C%20originalStartPos)%3B%0A%20%20%20%20%20%20node.piece%20%3D%20new%20Piece(piece.bufferIndex%2C%20piece.start%2C%20newEnd%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20node%2C%20newLength%20-%20oldLength%2C%20newLineFeedCnt%20-%20oldLFCnt)%3B%0A%20%20%20%20%20%20const%20newPiece%20%3D%20new%20Piece(%0A%20%20%20%20%20%20%20%20piece.bufferIndex%2C%0A%20%20%20%20%20%20%20%20end%2C%0A%20%20%20%20%20%20%20%20originalEndPos%2C%0A%20%20%20%20%20%20%20%20this.getLineFeedCnt(piece.bufferIndex%2C%20end%2C%20originalEndPos)%2C%0A%20%20%20%20%20%20%20%20this.offsetInBuffer(piece.bufferIndex%2C%20originalEndPos)%20-%20this.offsetInBuffer(piece.bufferIndex%2C%20end)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20const%20newNode%20%3D%20this.rbInsertRight(node%2C%20newPiece)%3B%0A%20%20%20%20%20%20this.validateCRLFWithPrevNode(newNode)%3B%0A%20%20%20%20%7D%0A%20%20%20%20appendToNode(node%2C%20value)%20%7B%0A%20%20%20%20%20%20if%20(this.adjustCarriageReturnFromNext(value%2C%20node))%20%7B%0A%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20hitCRLF%20%3D%20this.shouldCheckCRLF()%20%26%26%20this.startWithLF(value)%20%26%26%20this.endWithCR(node)%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20this._buffers%5B0%5D.buffer.length%3B%0A%20%20%20%20%20%20this._buffers%5B0%5D.buffer%20%2B%3D%20value%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20createLineStartsFast(value%2C%20false)%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20lineStarts.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20lineStarts%5Bi%5D%20%2B%3D%20startOffset%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(hitCRLF)%20%7B%0A%20%20%20%20%20%20%20%20const%20prevStartOffset%20%3D%20this._buffers%5B0%5D.lineStarts%5Bthis._buffers%5B0%5D.lineStarts.length%20-%202%5D%3B%0A%20%20%20%20%20%20%20%20this._buffers%5B0%5D.lineStarts.pop()%3B%0A%20%20%20%20%20%20%20%20this._lastChangeBufferPos%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20line%3A%20this._lastChangeBufferPos.line%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20column%3A%20startOffset%20-%20prevStartOffset%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._buffers%5B0%5D.lineStarts%20%3D%20this._buffers%5B0%5D.lineStarts.concat(lineStarts.slice(1))%3B%0A%20%20%20%20%20%20const%20endIndex%20%3D%20this._buffers%5B0%5D.lineStarts.length%20-%201%3B%0A%20%20%20%20%20%20const%20endColumn%20%3D%20this._buffers%5B0%5D.buffer.length%20-%20this._buffers%5B0%5D.lineStarts%5BendIndex%5D%3B%0A%20%20%20%20%20%20const%20newEnd%20%3D%20%7B%20line%3A%20endIndex%2C%20column%3A%20endColumn%20%7D%3B%0A%20%20%20%20%20%20const%20newLength%20%3D%20node.piece.length%20%2B%20value.length%3B%0A%20%20%20%20%20%20const%20oldLineFeedCnt%20%3D%20node.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(0%2C%20node.piece.start%2C%20newEnd)%3B%0A%20%20%20%20%20%20const%20lf_delta%20%3D%20newLineFeedCnt%20-%20oldLineFeedCnt%3B%0A%20%20%20%20%20%20node.piece%20%3D%20new%20Piece(node.piece.bufferIndex%2C%20node.piece.start%2C%20newEnd%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20this._lastChangeBufferPos%20%3D%20newEnd%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20node%2C%20value.length%2C%20lf_delta)%3B%0A%20%20%20%20%7D%0A%20%20%20%20nodeAt(offset)%20%7B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20const%20cache%20%3D%20this._searchCache.get(offset)%3B%0A%20%20%20%20%20%20if%20(cache)%20%7B%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20node%3A%20cache.node%2C%0A%20%20%20%20%20%20%20%20%20%20nodeStartOffset%3A%20cache.nodeStartOffset%2C%0A%20%20%20%20%20%20%20%20%20%20remainder%3A%20offset%20-%20cache.nodeStartOffset%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20nodeStartOffset%20%3D%200%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(x.size_left%20%3E%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.left%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.size_left%20%2B%20x.piece.length%20%3E%3D%20offset)%20%7B%0A%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%3B%0A%20%20%20%20%20%20%20%20%20%20const%20ret%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20remainder%3A%20offset%20-%20x.size_left%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20this._searchCache.set(ret)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20ret%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20offset%20-%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20nodeAt2(lineNumber%2C%20column)%20%7B%0A%20%20%20%20%20%20let%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20let%20nodeStartOffset%20%3D%200%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(x.left%20!%3D%3D%20SENTINEL%20%26%26%20x.lf_left%20%3E%3D%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.left%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.lf_left%20%2B%20x.piece.lineFeedCnt%20%3E%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20prevAccumualtedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%202)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20accumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%201)%3B%0A%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%3B%0A%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20remainder%3A%20Math.min(prevAccumualtedValue%20%2B%20column%20-%201%2C%20accumulatedValue)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(x.lf_left%20%2B%20x.piece.lineFeedCnt%20%3D%3D%3D%20lineNumber%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20prevAccumualtedValue%20%3D%20this.getAccumulatedValue(x%2C%20lineNumber%20-%20x.lf_left%20-%202)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(prevAccumualtedValue%20%2B%20column%20-%201%20%3C%3D%20x.piece.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20remainder%3A%20prevAccumualtedValue%20%2B%20column%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20column%20-%3D%20x.piece.length%20-%20prevAccumualtedValue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20lineNumber%20-%3D%20x.lf_left%20%2B%20x.piece.lineFeedCnt%3B%0A%20%20%20%20%20%20%20%20%20%20nodeStartOffset%20%2B%3D%20x.size_left%20%2B%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20x%20%3D%20x.right%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20while%20(x%20!%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20if%20(x.piece.lineFeedCnt%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20accumulatedValue%20%3D%20this.getAccumulatedValue(x%2C%200)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20nodeStartOffset2%20%3D%20this.offsetOfNode(x)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20remainder%3A%20Math.min(column%20-%201%2C%20accumulatedValue)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%3A%20nodeStartOffset2%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(x.piece.length%20%3E%3D%20column%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20nodeStartOffset2%20%3D%20this.offsetOfNode(x)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%3A%20x%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20remainder%3A%20column%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodeStartOffset%3A%20nodeStartOffset2%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20column%20-%3D%20x.piece.length%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20x%20%3D%20x.next()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20nodeCharCodeAt(node%2C%20offset)%20%7B%0A%20%20%20%20%20%20if%20(node.piece.lineFeedCnt%20%3C%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20-1%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bnode.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20const%20newOffset%20%3D%20this.offsetInBuffer(node.piece.bufferIndex%2C%20node.piece.start)%20%2B%20offset%3B%0A%20%20%20%20%20%20return%20buffer.buffer.charCodeAt(newOffset)%3B%0A%20%20%20%20%7D%0A%20%20%20%20offsetOfNode(node)%20%7B%0A%20%20%20%20%20%20if%20(!node)%20%7B%0A%20%20%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20let%20pos%20%3D%20node.size_left%3B%0A%20%20%20%20%20%20while%20(node%20!%3D%3D%20this.root)%20%7B%0A%20%20%20%20%20%20%20%20if%20(node.parent.right%20%3D%3D%3D%20node)%20%7B%0A%20%20%20%20%20%20%20%20%20%20pos%20%2B%3D%20node.parent.size_left%20%2B%20node.parent.piece.length%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20node%20%3D%20node.parent%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20pos%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23endregion%0A%20%20%20%20%2F%2F%20%23region%20CRLF%0A%20%20%20%20shouldCheckCRLF()%20%7B%0A%20%20%20%20%20%20return%20!(this._EOLNormalized%20%26%26%20this._EOL%20%3D%3D%3D%20%22%5Cn%22)%3B%0A%20%20%20%20%7D%0A%20%20%20%20startWithLF(val)%20%7B%0A%20%20%20%20%20%20if%20(typeof%20val%20%3D%3D%3D%20%22string%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20val.charCodeAt(0)%20%3D%3D%3D%2010%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(val%20%3D%3D%3D%20SENTINEL%20%7C%7C%20val.piece.lineFeedCnt%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20piece%20%3D%20val.piece%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5Bpiece.bufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20const%20line%20%3D%20piece.start.line%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20lineStarts%5Bline%5D%20%2B%20piece.start.column%3B%0A%20%20%20%20%20%20if%20(line%20%3D%3D%3D%20lineStarts.length%20-%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20nextLineOffset%20%3D%20lineStarts%5Bline%20%2B%201%5D%3B%0A%20%20%20%20%20%20if%20(nextLineOffset%20%3E%20startOffset%20%2B%201)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._buffers%5Bpiece.bufferIndex%5D.buffer.charCodeAt(startOffset)%20%3D%3D%3D%2010%3B%0A%20%20%20%20%7D%0A%20%20%20%20endWithCR(val)%20%7B%0A%20%20%20%20%20%20if%20(typeof%20val%20%3D%3D%3D%20%22string%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20val.charCodeAt(val.length%20-%201)%20%3D%3D%3D%2013%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(val%20%3D%3D%3D%20SENTINEL%20%7C%7C%20val.piece.lineFeedCnt%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this.nodeCharCodeAt(val%2C%20val.piece.length%20-%201)%20%3D%3D%3D%2013%3B%0A%20%20%20%20%7D%0A%20%20%20%20validateCRLFWithPrevNode(nextNode)%20%7B%0A%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.startWithLF(nextNode))%20%7B%0A%20%20%20%20%20%20%20%20const%20node%20%3D%20nextNode.prev()%3B%0A%20%20%20%20%20%20%20%20if%20(this.endWithCR(node))%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.fixCRLF(node%2C%20nextNode)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20validateCRLFWithNextNode(node)%20%7B%0A%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.endWithCR(node))%20%7B%0A%20%20%20%20%20%20%20%20const%20nextNode%20%3D%20node.next()%3B%0A%20%20%20%20%20%20%20%20if%20(this.startWithLF(nextNode))%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.fixCRLF(node%2C%20nextNode)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20fixCRLF(prev%2C%20next)%20%7B%0A%20%20%20%20%20%20const%20nodesToDel%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20this._buffers%5Bprev.piece.bufferIndex%5D.lineStarts%3B%0A%20%20%20%20%20%20let%20newEnd%3B%0A%20%20%20%20%20%20if%20(prev.piece.end.column%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20newEnd%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20line%3A%20prev.piece.end.line%20-%201%2C%0A%20%20%20%20%20%20%20%20%20%20column%3A%20lineStarts%5Bprev.piece.end.line%5D%20-%20lineStarts%5Bprev.piece.end.line%20-%201%5D%20-%201%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20newEnd%20%3D%20%7B%20line%3A%20prev.piece.end.line%2C%20column%3A%20prev.piece.end.column%20-%201%20%7D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20prevNewLength%20%3D%20prev.piece.length%20-%201%3B%0A%20%20%20%20%20%20const%20prevNewLFCnt%20%3D%20prev.piece.lineFeedCnt%20-%201%3B%0A%20%20%20%20%20%20prev.piece%20%3D%20new%20Piece(prev.piece.bufferIndex%2C%20prev.piece.start%2C%20newEnd%2C%20prevNewLFCnt%2C%20prevNewLength)%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20prev%2C%20-1%2C%20-1)%3B%0A%20%20%20%20%20%20if%20(prev.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20nodesToDel.push(prev)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20newStart%20%3D%20%7B%0A%20%20%20%20%20%20%20%20line%3A%20next.piece.start.line%20%2B%201%2C%0A%20%20%20%20%20%20%20%20column%3A%200%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20const%20newLength%20%3D%20next.piece.length%20-%201%3B%0A%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(next.piece.bufferIndex%2C%20newStart%2C%20next.piece.end)%3B%0A%20%20%20%20%20%20next.piece%20%3D%20new%20Piece(next.piece.bufferIndex%2C%20newStart%2C%20next.piece.end%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20updateTreeMetadata(this%2C%20next%2C%20-1%2C%20-1)%3B%0A%20%20%20%20%20%20if%20(next.piece.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20nodesToDel.push(next)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20pieces%20%3D%20this.createNewPieces(%22%5Cr%5Cn%22)%3B%0A%20%20%20%20%20%20this.rbInsertRight(prev%2C%20pieces%5B0%5D)%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20nodesToDel.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20rbDelete(this%2C%20nodesToDel%5Bi%5D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20adjustCarriageReturnFromNext(value%2C%20node)%20%7B%0A%20%20%20%20%20%20if%20(this.shouldCheckCRLF()%20%26%26%20this.endWithCR(value))%20%7B%0A%20%20%20%20%20%20%20%20const%20nextNode%20%3D%20node.next()%3B%0A%20%20%20%20%20%20%20%20if%20(this.startWithLF(nextNode))%20%7B%0A%20%20%20%20%20%20%20%20%20%20value%20%2B%3D%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(nextNode.piece.length%20%3D%3D%3D%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20rbDelete(this%2C%20nextNode)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20piece%20%3D%20nextNode.piece%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20newStart%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20piece.start.line%20%2B%201%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20column%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20newLength%20%3D%20piece.length%20-%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20newLineFeedCnt%20%3D%20this.getLineFeedCnt(piece.bufferIndex%2C%20newStart%2C%20piece.end)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20nextNode.piece%20%3D%20new%20Piece(piece.bufferIndex%2C%20newStart%2C%20piece.end%2C%20newLineFeedCnt%2C%20newLength)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20updateTreeMetadata(this%2C%20nextNode%2C%20-1%2C%20-1)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23endregion%0A%20%20%20%20%2F%2F%20%23endregion%0A%20%20%20%20%2F%2F%20%23region%20Tree%20operations%0A%20%20%20%20iterate(node%2C%20callback)%20%7B%0A%20%20%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20callback(SENTINEL)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20leftRet%20%3D%20this.iterate(node.left%2C%20callback)%3B%0A%20%20%20%20%20%20if%20(!leftRet)%20%7B%0A%20%20%20%20%20%20%20%20return%20leftRet%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20callback(node)%20%26%26%20this.iterate(node.right%2C%20callback)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getNodeContent(node)%20%7B%0A%20%20%20%20%20%20if%20(node%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bnode.piece.bufferIndex%5D%3B%0A%20%20%20%20%20%20const%20piece%20%3D%20node.piece%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.start)%3B%0A%20%20%20%20%20%20const%20endOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.end)%3B%0A%20%20%20%20%20%20const%20currentContent%20%3D%20buffer.buffer.substring(startOffset%2C%20endOffset)%3B%0A%20%20%20%20%20%20return%20currentContent%3B%0A%20%20%20%20%7D%0A%20%20%20%20getPieceContent(piece)%20%7B%0A%20%20%20%20%20%20const%20buffer%20%3D%20this._buffers%5Bpiece.bufferIndex%5D%3B%0A%20%20%20%20%20%20const%20startOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.start)%3B%0A%20%20%20%20%20%20const%20endOffset%20%3D%20this.offsetInBuffer(piece.bufferIndex%2C%20piece.end)%3B%0A%20%20%20%20%20%20const%20currentContent%20%3D%20buffer.buffer.substring(startOffset%2C%20endOffset)%3B%0A%20%20%20%20%20%20return%20currentContent%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%20%20%20%20%20node%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%0A%20%20%20%20%20*%20%20%20%20%20%2F%20%20%5C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%20%20%5C%0A%20%20%20%20%20*%20%20%20%20a%20%20%20b%20%20%20%20%3C----%20%20%20a%20%20%20%20b%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20z%0A%20%20%20%20%20*%2F%0A%20%20%20%20rbInsertRight(node%2C%20p)%20%7B%0A%20%20%20%20%20%20const%20z%20%3D%20new%20TreeNode(p%2C%201%20%2F*%20Red%20*%2F)%3B%0A%20%20%20%20%20%20z.left%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.right%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.parent%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.size_left%20%3D%200%3B%0A%20%20%20%20%20%20z.lf_left%20%3D%200%3B%0A%20%20%20%20%20%20const%20x%20%3D%20this.root%3B%0A%20%20%20%20%20%20if%20(x%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20this.root%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(node.right%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20node.right%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.parent%20%3D%20node%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20nextNode%20%3D%20leftest(node.right)%3B%0A%20%20%20%20%20%20%20%20nextNode.left%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.parent%20%3D%20nextNode%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20fixInsert(this%2C%20z)%3B%0A%20%20%20%20%20%20return%20z%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%20%20%20%20%20node%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%0A%20%20%20%20%20*%20%20%20%20%20%2F%20%20%5C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%20%20%5C%0A%20%20%20%20%20*%20%20%20%20a%20%20%20b%20%20%20%20%20----%3E%20%20%20a%20%20%20%20b%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5C%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20z%0A%20%20%20%20%20*%2F%0A%20%20%20%20rbInsertLeft(node%2C%20p)%20%7B%0A%20%20%20%20%20%20const%20z%20%3D%20new%20TreeNode(p%2C%201%20%2F*%20Red%20*%2F)%3B%0A%20%20%20%20%20%20z.left%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.right%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.parent%20%3D%20SENTINEL%3B%0A%20%20%20%20%20%20z.size_left%20%3D%200%3B%0A%20%20%20%20%20%20z.lf_left%20%3D%200%3B%0A%20%20%20%20%20%20if%20(this.root%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20this.root%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.color%20%3D%200%20%2F*%20Black%20*%2F%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(node.left%20%3D%3D%3D%20SENTINEL)%20%7B%0A%20%20%20%20%20%20%20%20node.left%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.parent%20%3D%20node%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20const%20prevNode%20%3D%20righttest(node.left)%3B%0A%20%20%20%20%20%20%20%20prevNode.right%20%3D%20z%3B%0A%20%20%20%20%20%20%20%20z.parent%20%3D%20prevNode%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20fixInsert(this%2C%20z)%3B%0A%20%20%20%20%20%20return%20z%3B%0A%20%20%20%20%7D%0A%20%20%20%20getContentOfSubTree(node)%20%7B%0A%20%20%20%20%20%20let%20str%20%3D%20%22%22%3B%0A%20%20%20%20%20%20this.iterate(node%2C%20(node2)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20str%20%2B%3D%20this.getNodeContent(node2)%3B%0A%20%20%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20return%20str%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20%23endregion%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2FpieceTreeTextBuffer%2FpieceTreeTextBufferBuilder.ts%0A%20%20var%20UTF8_BOM_CHARACTER%20%3D%20String.fromCharCode(65279%20%2F*%20UTF8_BOM%20*%2F)%3B%0A%20%20function%20startsWithUTF8BOM(str)%20%7B%0A%20%20%20%20return%20!!(str%20%26%26%20str.length%20%3E%200%20%26%26%20str.charCodeAt(0)%20%3D%3D%3D%2065279%20%2F*%20UTF8_BOM%20*%2F)%3B%0A%20%20%7D%0A%20%20var%20PieceTreeTextBufferFactory%20%3D%20class%20%7B%0A%20%20%20%20constructor(_chunks%2C%20_bom%2C%20_cr%2C%20_lf%2C%20_crlf%2C%20_normalizeEOL)%20%7B%0A%20%20%20%20%20%20this._chunks%20%3D%20_chunks%3B%0A%20%20%20%20%20%20this._bom%20%3D%20_bom%3B%0A%20%20%20%20%20%20this._cr%20%3D%20_cr%3B%0A%20%20%20%20%20%20this._lf%20%3D%20_lf%3B%0A%20%20%20%20%20%20this._crlf%20%3D%20_crlf%3B%0A%20%20%20%20%20%20this._normalizeEOL%20%3D%20_normalizeEOL%3B%0A%20%20%20%20%7D%0A%20%20%20%20_getEOL(defaultEOL)%20%7B%0A%20%20%20%20%20%20const%20totalEOLCount%20%3D%20this._cr%20%2B%20this._lf%20%2B%20this._crlf%3B%0A%20%20%20%20%20%20const%20totalCRCount%20%3D%20this._cr%20%2B%20this._crlf%3B%0A%20%20%20%20%20%20if%20(totalEOLCount%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%20defaultEOL%20%3D%3D%3D%201%20%2F*%20LF%20*%2F%20%3F%20%22%5Cn%22%20%3A%20%22%5Cr%5Cn%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(totalCRCount%20%3E%20totalEOLCount%20%2F%202)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%5Cr%5Cn%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20%22%5Cn%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20create(defaultEOL)%20%7B%0A%20%20%20%20%20%20const%20eol%20%3D%20this._getEOL(defaultEOL)%3B%0A%20%20%20%20%20%20const%20chunks%20%3D%20this._chunks%3B%0A%20%20%20%20%20%20if%20(this._normalizeEOL%20%26%26%20(eol%20%3D%3D%3D%20%22%5Cr%5Cn%22%20%26%26%20(this._cr%20%3E%200%20%7C%7C%20this._lf%20%3E%200)%20%7C%7C%20eol%20%3D%3D%3D%20%22%5Cn%22%20%26%26%20(this._cr%20%3E%200%20%7C%7C%20this._crlf%20%3E%200)))%20%7B%0A%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%2C%20len%20%3D%20chunks.length%3B%20i%20%3C%20len%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20str%20%3D%20chunks%5Bi%5D.buffer.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2C%20eol)%3B%0A%20%20%20%20%20%20%20%20%20%20const%20newLineStart%20%3D%20createLineStartsFast(str)%3B%0A%20%20%20%20%20%20%20%20%20%20chunks%5Bi%5D%20%3D%20new%20StringBuffer(str%2C%20newLineStart)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20new%20PieceTreeBase(chunks%2C%20eol%2C%20this._normalizeEOL)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getFirstLineText(lengthLimit)%20%7B%0A%20%20%20%20%20%20return%20this._chunks%5B0%5D.buffer.substr(0%2C%20100).split(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2F)%5B0%5D%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20PieceTreeTextBufferBuilder%20%3D%20class%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20this.chunks%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.BOM%20%3D%20%22%22%3B%0A%20%20%20%20%20%20this._hasPreviousChar%20%3D%20false%3B%0A%20%20%20%20%20%20this._previousChar%20%3D%200%3B%0A%20%20%20%20%20%20this._tmpLineStarts%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.cr%20%3D%200%3B%0A%20%20%20%20%20%20this.lf%20%3D%200%3B%0A%20%20%20%20%20%20this.crlf%20%3D%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20acceptChunk(chunk)%20%7B%0A%20%20%20%20%20%20if%20(chunk.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this.chunks.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20if%20(startsWithUTF8BOM(chunk))%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.BOM%20%3D%20UTF8_BOM_CHARACTER%3B%0A%20%20%20%20%20%20%20%20%20%20chunk%20%3D%20chunk.substr(1)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20lastChar%20%3D%20chunk.charCodeAt(chunk.length%20-%201)%3B%0A%20%20%20%20%20%20if%20(lastChar%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F%20%7C%7C%20lastChar%20%3E%3D%2055296%20%26%26%20lastChar%20%3C%3D%2056319)%20%7B%0A%20%20%20%20%20%20%20%20this._acceptChunk1(chunk.substr(0%2C%20chunk.length%20-%201)%2C%20false)%3B%0A%20%20%20%20%20%20%20%20this._hasPreviousChar%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this._previousChar%20%3D%20lastChar%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this._acceptChunk1(chunk%2C%20false)%3B%0A%20%20%20%20%20%20%20%20this._hasPreviousChar%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20this._previousChar%20%3D%20lastChar%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20_acceptChunk1(chunk%2C%20allowEmptyStrings)%20%7B%0A%20%20%20%20%20%20if%20(!allowEmptyStrings%20%26%26%20chunk.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._hasPreviousChar)%20%7B%0A%20%20%20%20%20%20%20%20this._acceptChunk2(String.fromCharCode(this._previousChar)%20%2B%20chunk)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this._acceptChunk2(chunk)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20_acceptChunk2(chunk)%20%7B%0A%20%20%20%20%20%20const%20lineStarts%20%3D%20createLineStarts(this._tmpLineStarts%2C%20chunk)%3B%0A%20%20%20%20%20%20this.chunks.push(new%20StringBuffer(chunk%2C%20lineStarts.lineStarts))%3B%0A%20%20%20%20%20%20this.cr%20%2B%3D%20lineStarts.cr%3B%0A%20%20%20%20%20%20this.lf%20%2B%3D%20lineStarts.lf%3B%0A%20%20%20%20%20%20this.crlf%20%2B%3D%20lineStarts.crlf%3B%0A%20%20%20%20%7D%0A%20%20%20%20finish(normalizeEOL%20%3D%20true)%20%7B%0A%20%20%20%20%20%20this._finish()%3B%0A%20%20%20%20%20%20return%20new%20PieceTreeTextBufferFactory(this.chunks%2C%20this.BOM%2C%20this.cr%2C%20this.lf%2C%20this.crlf%2C%20normalizeEOL)%3B%0A%20%20%20%20%7D%0A%20%20%20%20_finish()%20%7B%0A%20%20%20%20%20%20if%20(this.chunks.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20this._acceptChunk1(%22%22%2C%20true)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._hasPreviousChar)%20%7B%0A%20%20%20%20%20%20%20%20this._hasPreviousChar%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20const%20lastChunk%20%3D%20this.chunks%5Bthis.chunks.length%20-%201%5D%3B%0A%20%20%20%20%20%20%20%20lastChunk.buffer%20%2B%3D%20String.fromCharCode(this._previousChar)%3B%0A%20%20%20%20%20%20%20%20const%20newLineStarts%20%3D%20createLineStartsFast(lastChunk.buffer)%3B%0A%20%20%20%20%20%20%20%20lastChunk.lineStarts%20%3D%20newLineStarts%3B%0A%20%20%20%20%20%20%20%20if%20(this._previousChar%20%3D%3D%3D%2013%20%2F*%20CarriageReturn%20*%2F)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.cr%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fcommon%2Femitter.ts%0A%20%20var%20Emitter%20%3D%20class%20_Emitter%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20this.listeners%20%3D%20%7B%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20%7B%0A%20%20%20%20%20%20this.instance%20%3D%20null%3B%0A%20%20%20%20%7D%0A%20%20%20%20static%20getInstance()%20%7B%0A%20%20%20%20%20%20if%20(!_Emitter.instance)%20%7B%0A%20%20%20%20%20%20%20%20_Emitter.instance%20%3D%20new%20_Emitter()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20_Emitter.instance%3B%0A%20%20%20%20%7D%0A%20%20%20%20on(event%2C%20listener)%20%7B%0A%20%20%20%20%20%20if%20(!this.listeners%5Bevent%5D)%20%7B%0A%20%20%20%20%20%20%20%20this.listeners%5Bevent%5D%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.listeners%5Bevent%5D.push(listener)%3B%0A%20%20%20%20%7D%0A%20%20%20%20off(event%2C%20listener)%20%7B%0A%20%20%20%20%20%20if%20(!this.listeners%5Bevent%5D)%20return%3B%0A%20%20%20%20%20%20this.listeners%5Bevent%5D%20%3D%20this.listeners%5Bevent%5D.filter((l)%20%3D%3E%20l%20!%3D%3D%20listener)%3B%0A%20%20%20%20%7D%0A%20%20%20%20emit(event%2C%20data)%20%7B%0A%20%20%20%20%20%20if%20(!this.listeners%5Bevent%5D)%20return%3B%0A%20%20%20%20%20%20for%20(const%20listener%20of%20this.listeners%5Bevent%5D)%20%7B%0A%20%20%20%20%20%20%20%20listener(data)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20emitter%20%3D%20Emitter.getInstance()%3B%0A%0A%20%20%2F%2F%20src%2Fworker%2FjsonWorkerManager.ts%0A%20%20var%20JsonWorkerManager%20%3D%20class%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20const%20workerRaw%20%3D%20decodeURIComponent(%22%25WORKER_RAW%25%22)%3B%0A%20%20%20%20%20%20const%20blob%20%3D%20new%20Blob(%5BworkerRaw%5D%2C%20%7B%20type%3A%20%22application%2Fjavascript%22%20%7D)%3B%0A%20%20%20%20%20%20const%20workerURL%20%3D%20URL.createObjectURL(blob)%3B%0A%20%20%20%20%20%20this._worker%20%3D%20new%20Worker(workerURL)%3B%0A%20%20%20%20%20%20this._callbacks%20%3D%20%2F*%20%40__PURE__%20*%2F%20new%20Map()%3B%0A%20%20%20%20%20%20this._worker.onmessage%20%3D%20this._handleWorkerMessage.bind(this)%3B%0A%20%20%20%20%7D%0A%20%20%20%20async%20init(value)%20%7B%0A%20%20%20%20%20%20await%20this._sendRequest(%22init%22%2C%20%7B%20value%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20updateModel(op)%20%7B%0A%20%20%20%20%20%20return%20this._sendRequest(%22updateModel%22%2C%20%7B%20op%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20formatJson(options)%20%7B%0A%20%20%20%20%20%20return%20this._sendRequest(%22format%22%2C%20%7B%20options%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20foldRange()%20%7B%0A%20%20%20%20%20%20return%20this._sendRequest(%22foldRange%22%2C%20%7B%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20validate()%20%7B%0A%20%20%20%20%20%20return%20this._sendRequest(%22validate%22%2C%20%7B%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20_sendRequest(method%2C%20params)%20%7B%0A%20%20%20%20%20%20return%20new%20Promise((resolve%2C%20reject)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20messageId%20%3D%20Date.now()%20%2B%20Math.random()%3B%0A%20%20%20%20%20%20%20%20this._callbacks.set(messageId%2C%20resolve)%3B%0A%20%20%20%20%20%20%20%20this._worker.postMessage(%7B%20messageId%2C%20method%2C%20params%20%7D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20_handleWorkerMessage(event)%20%7B%0A%20%20%20%20%20%20const%20%7B%20messageId%2C%20result%2C%20error%20%7D%20%3D%20event.data%3B%0A%20%20%20%20%20%20const%20callback%20%3D%20this._callbacks.get(messageId)%3B%0A%20%20%20%20%20%20if%20(callback)%20%7B%0A%20%20%20%20%20%20%20%20if%20(error)%20%7B%0A%20%20%20%20%20%20%20%20%20%20callback(new%20Error(error))%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20callback(result)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20this._callbacks.delete(messageId)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%20%20var%20jsonWorkerManager%20%3D%20null%3B%0A%20%20function%20getJsonWorkerManager()%20%7B%0A%20%20%20%20if%20(!jsonWorkerManager)%20%7B%0A%20%20%20%20%20%20jsonWorkerManager%20%3D%20new%20JsonWorkerManager()%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20jsonWorkerManager%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fcommon%2Fworker.ts%0A%20%20var%20isWebWorker%20%3D%20typeof%20self%20%3D%3D%3D%20%22object%22%20%26%26%20self.constructor%20%26%26%20self.constructor.name%20%3D%3D%3D%20%22DedicatedWorkerGlobalScope%22%3B%0A%20%20function%20isInWorkerThread()%20%7B%0A%20%20%20%20return%20isWebWorker%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fmodel%2FjsonModel.ts%0A%20%20var%20JSONModel%20%3D%20class%20%7B%0A%20%20%20%20constructor(value%2C%20normalizeEOL%20%3D%20true)%20%7B%0A%20%20%20%20%20%20this._undoStack%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this._redoStack%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20this.MAX_STACK_SIZE%20%3D%2020%3B%0A%20%20%20%20%20%20this.lastChangeBufferPos%20%3D%20%7B%0A%20%20%20%20%20%20%20%20lineNumber%3A%201%2C%0A%20%20%20%20%20%20%20%20column%3A%200%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20this._jsonWorkerManager%20%3D%20null%3B%0A%20%20%20%20%20%20this._normalizeEOL%20%3D%20normalizeEOL%3B%0A%20%20%20%20%20%20this._pieceTree%20%3D%20this.createTextBuffer(value)%3B%0A%20%20%20%20%20%20if%20(!isInWorkerThread())%20%7B%0A%20%20%20%20%20%20%20%20this._jsonWorkerManager%20%3D%20getJsonWorkerManager()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20createTextBufferFactory(value)%20%7B%0A%20%20%20%20%20%20const%20builder%20%3D%20new%20PieceTreeTextBufferBuilder()%3B%0A%20%20%20%20%20%20builder.acceptChunk(value)%3B%0A%20%20%20%20%20%20return%20builder.finish(this._normalizeEOL)%3B%0A%20%20%20%20%7D%0A%20%20%20%20createTextBuffer(value)%20%7B%0A%20%20%20%20%20%20return%20this.createTextBufferFactory(value).create(1%20%2F*%20LF%20*%2F)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E8%A1%8C%E6%95%B0%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E6%95%B0%0A%20%20%20%20%20*%2F%0A%20%20%20%20getLineCount()%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getLineCount()%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E8%A1%8C%E5%86%85%E5%AE%B9%0A%20%20%20%20%20*%20%40param%20lineNumber%20%E8%A1%8C%E5%8F%B7%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E5%86%85%E5%AE%B9%0A%20%20%20%20%20*%2F%0A%20%20%20%20getLineContent(lineNumber)%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getLineContent(lineNumber)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E8%A1%8C%E9%95%BF%E5%BA%A6%0A%20%20%20%20%20*%20%40param%20lineNumber%20%E8%A1%8C%E5%8F%B7%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E5%86%85%E5%AE%B9%0A%20%20%20%20%20*%2F%0A%20%20%20%20getLineLength(lineNumber)%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getLineLength(lineNumber)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%20%40param%20lineNumber%20%E8%A1%8C%E5%8F%B7%0A%20%20%20%20%20*%20%40param%20column%20%E5%88%97%E5%8F%B7%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%2F%0A%20%20%20%20getOffsetAt(lineNumber%2C%20column)%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getOffsetAt(lineNumber%2C%20column)%3B%0A%20%20%20%20%7D%0A%20%20%20%20positionAt(offset)%20%7B%0A%20%20%20%20%20%20offset%20%3D%20Math.min(this._pieceTree.getLength()%2C%20Math.max(0%2C%20offset))%3B%0A%20%20%20%20%20%20return%20this._pieceTree.getPositionAt(offset)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E8%A1%8C%E9%A6%96%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%20%40param%20lineNumber%20%E8%A1%8C%E5%8F%B7%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E9%A6%96%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%2F%0A%20%20%20%20getLineStartOffset(lineNumber)%20%7B%0A%20%20%20%20%20%20return%20this.getOffsetAt(lineNumber%2C%201)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E8%A1%8C%E5%B0%BE%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%20%40param%20lineNumber%20%E8%A1%8C%E5%8F%B7%0A%20%20%20%20%20*%20%40returns%20%E8%A1%8C%E5%B0%BE%E5%81%8F%E7%A7%BB%0A%20%20%20%20%20*%2F%0A%20%20%20%20getLineEndOffset(lineNumber)%20%7B%0A%20%20%20%20%20%20const%20lineLength%20%3D%20this.getLineLength(lineNumber)%3B%0A%20%20%20%20%20%20return%20this.getOffsetAt(lineNumber%2C%20lineLength%20%2B%201)%3B%0A%20%20%20%20%7D%0A%20%20%20%20applyOperation(op)%20%7B%0A%20%20%20%20%20%20if%20(Array.isArray(op))%20%7B%0A%20%20%20%20%20%20%20%20op.forEach((o)%20%3D%3E%20this.applyOperation(o))%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._updateLastChangeBufferPos(op)%3B%0A%20%20%20%20%20%20switch%20(op.type)%20%7B%0A%20%20%20%20%20%20%20%20case%20%22insert%22%3A%0A%20%20%20%20%20%20%20%20%20%20this._pieceTree.insert(op.rangeOffset%20%2B%201%2C%20op.newText)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22delete%22%3A%0A%20%20%20%20%20%20%20%20%20%20this._pieceTree.delete(op.rangeOffset%20%2B%201%2C%20op.rangeLength)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22replace%22%3A%0A%20%20%20%20%20%20%20%20%20%20this._pieceTree.delete(op.rangeOffset%20%2B%201%2C%20op.oldText.length)%3B%0A%20%20%20%20%20%20%20%20%20%20this._pieceTree.insert(op.rangeOffset%20%2B%201%2C%20op.newText)%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(!isInWorkerThread())%20%7B%0A%20%20%20%20%20%20%20%20emitter.emit(%22contentChanged%22%2C%20op)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(this._jsonWorkerManager)%20%7B%0A%20%20%20%20%20%20%20%20this._jsonWorkerManager.updateModel(op).then((res)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20this._jsonWorkerManager%3F.validate()%3B%0A%20%20%20%20%20%20%20%20%7D).then((result)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20emitter.emit(%22problemsChanged%22%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20problems%3A%20result.problems%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20root%3A%20result.root%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20_updateLastChangeBufferPos(op)%20%7B%0A%20%20%20%20%20%20switch%20(op.type)%20%7B%0A%20%20%20%20%20%20%20%20case%20%22insert%22%3A%0A%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.column%20%2B%3D%20op.newText.length%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(op.newText%20%3D%3D%3D%20%22%5Cn%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.lineNumber%20%2B%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.column%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22delete%22%3A%0A%20%20%20%20%20%20%20%20%20%20if%20(this.lastChangeBufferPos.column%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.lineNumber%20-%3D%201%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.column%20%3D%20this.getLineLength(this.lastChangeBufferPos.lineNumber)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20startColumn%20%3D%20op.range.startColumn%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20newColumn2%20%3D%20op.rangeLength%20%3D%3D%3D%201%20%3F%20startColumn%20-%201%20%3A%20startColumn%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.column%20%3D%20newColumn2%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22replace%22%3A%0A%20%20%20%20%20%20%20%20%20%20const%20newLineNumber%20%3D%20op.range.startLineNumber%3B%0A%20%20%20%20%20%20%20%20%20%20const%20newColumn%20%3D%20op.range.startColumn%20%2B%20op.newText.length%3B%0A%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.lineNumber%20%3D%20newLineNumber%3B%0A%20%20%20%20%20%20%20%20%20%20this.lastChangeBufferPos.column%20%3D%20newColumn%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20pushUndoStack(op)%20%7B%0A%20%20%20%20%20%20this._undoStack.push(%7B%20...op%20%7D)%3B%0A%20%20%20%20%20%20if%20(this._undoStack.length%20%3E%20this.MAX_STACK_SIZE)%20%7B%0A%20%20%20%20%20%20%20%20this._undoStack.shift()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20pushRedoStack(op)%20%7B%0A%20%20%20%20%20%20this._redoStack.push(%7B%20...op%20%7D)%3B%0A%20%20%20%20%20%20if%20(this._redoStack.length%20%3E%20this.MAX_STACK_SIZE)%20%7B%0A%20%20%20%20%20%20%20%20this._redoStack.shift()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20canUndo()%20%7B%0A%20%20%20%20%20%20return%20this._undoStack.length%20%3E%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20canRedo()%20%7B%0A%20%20%20%20%20%20return%20this._redoStack.length%20%3E%200%3B%0A%20%20%20%20%7D%0A%20%20%20%20undo()%20%7B%0A%20%20%20%20%20%20if%20(!this.canUndo())%20return%3B%0A%20%20%20%20%20%20const%20op%20%3D%20this._undoStack.pop()%3B%0A%20%20%20%20%20%20const%20reverseOp%20%3D%20this._createReverseOperation(op)%3B%0A%20%20%20%20%20%20this.pushRedoStack(op)%3B%0A%20%20%20%20%20%20this.applyOperation(reverseOp)%3B%0A%20%20%20%20%7D%0A%20%20%20%20redo()%20%7B%0A%20%20%20%20%20%20if%20(!this.canRedo())%20return%3B%0A%20%20%20%20%20%20const%20op%20%3D%20this._redoStack.pop()%3B%0A%20%20%20%20%20%20this.pushUndoStack(op)%3B%0A%20%20%20%20%20%20this.applyOperation(op)%3B%0A%20%20%20%20%7D%0A%20%20%20%20_createReverseOperation(op)%20%7B%0A%20%20%20%20%20%20const%20reverseOp%20%3D%20%7B%0A%20%20%20%20%20%20%20%20...op%2C%0A%20%20%20%20%20%20%20%20oldText%3A%20op.newText%2C%0A%20%20%20%20%20%20%20%20newText%3A%20op.oldText%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20switch%20(op.type)%20%7B%0A%20%20%20%20%20%20%20%20case%20%22insert%22%3A%0A%20%20%20%20%20%20%20%20%20%20reverseOp.type%20%3D%20%22delete%22%3B%0A%20%20%20%20%20%20%20%20%20%20reverseOp.rangeLength%20%3D%20op.newText.length%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22delete%22%3A%0A%20%20%20%20%20%20%20%20%20%20reverseOp.type%20%3D%20%22insert%22%3B%0A%20%20%20%20%20%20%20%20%20%20reverseOp.rangeLength%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20case%20%22replace%22%3A%0A%20%20%20%20%20%20%20%20%20%20reverseOp.rangeLength%20%3D%20op.newText.length%3B%0A%20%20%20%20%20%20%20%20%20%20const%20preNewText%20%3D%20op.newText%3B%0A%20%20%20%20%20%20%20%20%20%20reverseOp.oldText%20%3D%20preNewText%3B%0A%20%20%20%20%20%20%20%20%20%20reverseOp.newText%20%3D%20op.oldText%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20reverseOp%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%8E%B7%E5%8F%96%E5%80%BC%0A%20%20%20%20%20*%20%40returns%20%E5%80%BC%0A%20%20%20%20%20*%2F%0A%20%20%20%20getValue()%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getValueInRange(%7B%0A%20%20%20%20%20%20%20%20startLineNumber%3A%201%2C%0A%20%20%20%20%20%20%20%20startColumn%3A%201%2C%0A%20%20%20%20%20%20%20%20endLineNumber%3A%20this._pieceTree.getLineCount()%2C%0A%20%20%20%20%20%20%20%20endColumn%3A%20this._pieceTree.getLineContent(this._pieceTree.getLineCount()).length%20%2B%201%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E8%AE%BE%E7%BD%AE%E5%80%BC%0A%20%20%20%20%20*%20%40param%20value%20%E5%80%BC%0A%20%20%20%20%20*%2F%0A%20%20%20%20setValue(value)%20%7B%0A%20%20%20%20%20%20const%20builder%20%3D%20new%20PieceTreeTextBufferBuilder()%3B%0A%20%20%20%20%20%20builder.acceptChunk(value)%3B%0A%20%20%20%20%20%20this._pieceTree%20%3D%20builder.finish(this._normalizeEOL).create(1)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getEOL()%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getEOL()%3B%0A%20%20%20%20%7D%0A%20%20%20%20_getEndOfLine(eol)%20%7B%0A%20%20%20%20%20%20switch%20(eol)%20%7B%0A%20%20%20%20%20%20%20%20case%201%20%2F*%20LF%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%22%5Cn%22%3B%0A%20%20%20%20%20%20%20%20case%202%20%2F*%20CRLF%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20return%20%22%5Cr%5Cn%22%3B%0A%20%20%20%20%20%20%20%20case%200%20%2F*%20TextDefined%20*%2F%3A%0A%20%20%20%20%20%20%20%20%20%20return%20this.getEOL()%3B%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Unknown%20EOL%20preference%22)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20getValueInRange(range%2C%20eol%20%3D%200%20%2F*%20TextDefined%20*%2F)%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.getValueInRange(range%2C%20this._getEndOfLine(eol))%3B%0A%20%20%20%20%7D%0A%20%20%20%20getFullModelRange()%20%7B%0A%20%20%20%20%20%20const%20lineCount%20%3D%20this.getLineCount()%3B%0A%20%20%20%20%20%20return%20new%20Range(1%2C%201%2C%20lineCount%2C%20this.getLineLength(lineCount)%20%2B%201)%3B%0A%20%20%20%20%7D%0A%20%20%20%20findMatchesLineByLine(searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%20%7B%0A%20%20%20%20%20%20return%20this._pieceTree.findMatchesLineByLine(searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%E6%9F%A5%E6%89%BE%E5%8C%B9%E9%85%8D%0A%20%20%20%20%20*%20%40param%20searchString%20%E6%90%9C%E7%B4%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20%20*%20%40param%20rawSearchScope%20%E6%90%9C%E7%B4%A2%E8%8C%83%E5%9B%B4%0A%20%20%20%20%20*%20%40param%20isRegex%20%E6%98%AF%E5%90%A6%E4%B8%BA%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%0A%20%20%20%20%20*%20%40param%20matchCase%20%E6%98%AF%E5%90%A6%E5%8C%B9%E9%85%8D%E5%A4%A7%E5%B0%8F%E5%86%99%0A%20%20%20%20%20*%20%40param%20wordSeparators%20%E5%88%86%E9%9A%94%E7%AC%A6%0A%20%20%20%20%20*%20%40param%20captureMatches%20%E6%98%AF%E5%90%A6%E6%8D%95%E8%8E%B7%E5%8C%B9%E9%85%8D%0A%20%20%20%20%20*%20%40param%20limitResultCount%20%E9%99%90%E5%88%B6%E7%BB%93%E6%9E%9C%E6%95%B0%E9%87%8F%0A%20%20%20%20%20*%20%40returns%20%E5%8C%B9%E9%85%8D%E7%BB%93%E6%9E%9C%0A%20%20%20%20%20*%20Based%20on%20https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fvscode%20with%20modifications%20for%20custom%20requirements%0A%20%20%20%20%20*%2F%0A%20%20%20%20findMatches(searchString%2C%20rawSearchScope%2C%20isRegex%2C%20matchCase%2C%20wordSeparators%2C%20captureMatches%2C%20limitResultCount%20%3D%20Infinity)%20%7B%0A%20%20%20%20%20%20let%20searchRanges%20%3D%20null%3B%0A%20%20%20%20%20%20if%20(searchRanges%20%3D%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20searchRanges%20%3D%20%5Bthis.getFullModelRange()%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20searchRanges%20%3D%20searchRanges.sort(%0A%20%20%20%20%20%20%20%20(d1%2C%20d2)%20%3D%3E%20d1.startLineNumber%20-%20d2.startLineNumber%20%7C%7C%20d1.startColumn%20-%20d2.startColumn%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20const%20uniqueSearchRanges%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20uniqueSearchRanges.push(%0A%20%20%20%20%20%20%20%20searchRanges.reduce((prev%2C%20curr)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(Range.areIntersecting(prev%2C%20curr))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20prev.plusRange(curr)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20uniqueSearchRanges.push(prev)%3B%0A%20%20%20%20%20%20%20%20%20%20return%20curr%3B%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20let%20matchMapper%3B%0A%20%20%20%20%20%20if%20(!isRegex%20%26%26%20searchString.indexOf(%22%5Cn%22)%20%3C%200)%20%7B%0A%20%20%20%20%20%20%20%20const%20searchParams%20%3D%20new%20SearchParams(searchString%2C%20isRegex%2C%20matchCase%2C%20wordSeparators)%3B%0A%20%20%20%20%20%20%20%20const%20searchData%20%3D%20searchParams.parseSearchRequest()%3B%0A%20%20%20%20%20%20%20%20if%20(!searchData)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20matchMapper%20%3D%20(searchRange)%20%3D%3E%20this.findMatchesLineByLine(searchRange%2C%20searchData%2C%20captureMatches%2C%20limitResultCount)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20matchMapper%20%3D%20(searchRange)%20%3D%3E%20TextModelSearch.findMatches(%0A%20%20%20%20%20%20%20%20%20%20this%2C%0A%20%20%20%20%20%20%20%20%20%20new%20SearchParams(searchString%2C%20isRegex%2C%20matchCase%2C%20wordSeparators)%2C%0A%20%20%20%20%20%20%20%20%20%20searchRange%2C%0A%20%20%20%20%20%20%20%20%20%20captureMatches%2C%0A%20%20%20%20%20%20%20%20%20%20limitResultCount%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20uniqueSearchRanges.map(matchMapper).reduce((arr%2C%20matches)%20%3D%3E%20arr.concat(matches)%2C%20%5B%5D)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fmodel%2Findex.ts%0A%20%20function%20createModel(text%2C%20normalizeEOL%20%3D%20true)%20%7B%0A%20%20%20%20return%20new%20JSONModel(text%2C%20normalizeEOL)%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20src%2Fworker%2FjsonWorker.ts%0A%20%20var%20JsonWorker%20%3D%20class%20%7B%0A%20%20%20%20constructor(value)%20%7B%0A%20%20%20%20%20%20this._model%20%3D%20null%3B%0A%20%20%20%20%20%20this._model%20%3D%20createModel(value)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getModel()%20%7B%0A%20%20%20%20%20%20return%20this._model%3B%0A%20%20%20%20%7D%0A%20%20%20%20format(options)%20%7B%0A%20%20%20%20%20%20if%20(!this._model)%20throw%20new%20Error(%22Model%20not%20initialized%22)%3B%0A%20%20%20%20%20%20return%20formatJson(this._model%2C%20options)%3B%0A%20%20%20%20%7D%0A%20%20%20%20foldRange()%20%7B%0A%20%20%20%20%20%20if%20(!this._model)%20throw%20new%20Error(%22Model%20not%20initialized%22)%3B%0A%20%20%20%20%20%20return%20getFoldingRanges(this._model)%3B%0A%20%20%20%20%7D%0A%20%20%20%20validate()%20%7B%0A%20%20%20%20%20%20if%20(!this._model)%20throw%20new%20Error(%22Model%20not%20initialized%22)%3B%0A%20%20%20%20%20%20return%20doValidate(this._model)%3B%0A%20%20%20%20%7D%0A%20%20%20%20updateModel(op)%20%7B%0A%20%20%20%20%20%20this._model%3F.applyOperation(op)%3B%0A%20%20%20%20%20%20return%20op%3B%0A%20%20%20%20%7D%0A%20%20%20%20parse()%20%7B%0A%20%20%20%20%20%20if%20(!this._model)%20throw%20new%20Error(%22Model%20not%20initialized%22)%3B%0A%20%20%20%20%20%20return%20parseJsonAst(this._model)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20src%2Fworker%2Fjson.worker.ts%0A%20%20var%20jsonWorker%20%3D%20null%3B%0A%20%20self.onmessage%20%3D%20(e)%20%3D%3E%20%7B%0A%20%20%20%20const%20%7B%20method%2C%20params%2C%20messageId%20%7D%20%3D%20e.data%3B%0A%20%20%20%20if%20(method%20%3D%3D%3D%20%22init%22)%20%7B%0A%20%20%20%20%20%20jsonWorker%20%3D%20new%20JsonWorker(params.value)%3B%0A%20%20%20%20%20%20self.postMessage(%7B%20messageId%2C%20result%3A%20%22Worker%20initialized%22%20%7D)%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(!jsonWorker)%20%7B%0A%20%20%20%20%20%20self.postMessage(%7B%20messageId%2C%20error%3A%20%22Worker%20not%20initialized%22%20%7D)%3B%0A%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20let%20result%3B%0A%20%20%20%20switch%20(method)%20%7B%0A%20%20%20%20%20%20case%20%22updateModel%22%3A%0A%20%20%20%20%20%20%20%20jsonWorker.updateModel(params.op)%3B%0A%20%20%20%20%20%20%20%20result%20%3D%20jsonWorker.getModel()%3F.getValue()%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22format%22%3A%0A%20%20%20%20%20%20%20%20result%20%3D%20jsonWorker.format(params.options)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22foldRange%22%3A%0A%20%20%20%20%20%20%20%20result%20%3D%20jsonWorker.foldRange()%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22validate%22%3A%0A%20%20%20%20%20%20%20%20result%20%3D%20jsonWorker.validate()%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20result%20%3D%20%7B%20error%3A%20%22Unknown%20method%22%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20self.postMessage(%7B%20messageId%2C%20result%20%7D)%3B%0A%20%20%7D%3B%0A%7D)()%3B%0A");
|
|
201
|
+
const workerRaw = decodeURIComponent("(()%3D%3E%7Bfunction%20%24(r%2Ce%3D!1)%7Blet%20t%3Dr.length%2Cn%3D0%2Ci%3D%22%22%2Cs%3D0%2Co%3D16%2Ca%3D0%2Cl%3D0%2Cf%3D0%2Cu%3D0%2Cc%3D0%3Bfunction%20d(x%2C_)%7Blet%20g%3D0%2Ch%3D0%3Bfor(%3Bg%3Cx%7C%7C!_%3B)%7Blet%20p%3Dr.charCodeAt(n)%3Bif(p%3E%3D48%26%26p%3C%3D57)h%3Dh*16%2Bp-48%3Belse%20if(p%3E%3D65%26%26p%3C%3D70)h%3Dh*16%2Bp-65%2B10%3Belse%20if(p%3E%3D97%26%26p%3C%3D102)h%3Dh*16%2Bp-97%2B10%3Belse%20break%3Bn%2B%2B%2Cg%2B%2B%7Dreturn%20g%3Cx%26%26(h%3D-1)%2Ch%7Dfunction%20b(x)%7Bn%3Dx%2Ci%3D%22%22%2Cs%3D0%2Co%3D16%2Cc%3D0%7Dfunction%20k()%7Blet%20x%3Dn%3Bif(r.charCodeAt(n)%3D%3D%3D48)n%2B%2B%3Belse%20for(n%2B%2B%3Bn%3Cr.length%26%26U(r.charCodeAt(n))%3B)n%2B%2B%3Bif(n%3Cr.length%26%26r.charCodeAt(n)%3D%3D%3D46)if(n%2B%2B%2Cn%3Cr.length%26%26U(r.charCodeAt(n)))for(n%2B%2B%3Bn%3Cr.length%26%26U(r.charCodeAt(n))%3B)n%2B%2B%3Belse%20return%20c%3D3%2Cr.substring(x%2Cn)%3Blet%20_%3Dn%3Bif(n%3Cr.length%26%26(r.charCodeAt(n)%3D%3D%3D69%7C%7Cr.charCodeAt(n)%3D%3D%3D101))if(n%2B%2B%2C(n%3Cr.length%26%26r.charCodeAt(n)%3D%3D%3D43%7C%7Cr.charCodeAt(n)%3D%3D%3D45)%26%26n%2B%2B%2Cn%3Cr.length%26%26U(r.charCodeAt(n)))%7Bfor(n%2B%2B%3Bn%3Cr.length%26%26U(r.charCodeAt(n))%3B)n%2B%2B%3B_%3Dn%7Delse%20c%3D3%3Breturn%20r.substring(x%2C_)%7Dfunction%20L()%7Blet%20x%3D%22%22%2C_%3Dn%3Bfor(%3B%3B)%7Bif(n%3E%3Dt)%7Bx%2B%3Dr.substring(_%2Cn)%2Cc%3D2%3Bbreak%7Dlet%20g%3Dr.charCodeAt(n)%3Bif(g%3D%3D%3D34)%7Bx%2B%3Dr.substring(_%2Cn)%2Cn%2B%2B%3Bbreak%7Dif(g%3D%3D%3D92)%7Bif(x%2B%3Dr.substring(_%2Cn)%2Cn%2B%2B%2Cn%3E%3Dt)%7Bc%3D2%3Bbreak%7Dswitch(r.charCodeAt(n%2B%2B))%7Bcase%2034%3Ax%2B%3D'%22'%3Bbreak%3Bcase%2092%3Ax%2B%3D%22%5C%5C%22%3Bbreak%3Bcase%2047%3Ax%2B%3D%22%2F%22%3Bbreak%3Bcase%2098%3Ax%2B%3D%22%5Cb%22%3Bbreak%3Bcase%20102%3Ax%2B%3D%22%5Cf%22%3Bbreak%3Bcase%20110%3Ax%2B%3D%60%0A%60%3Bbreak%3Bcase%20114%3Ax%2B%3D%22%5Cr%22%3Bbreak%3Bcase%20116%3Ax%2B%3D%22%09%22%3Bbreak%3Bcase%20117%3Alet%20p%3Dd(4%2C!0)%3Bp%3E%3D0%3Fx%2B%3DString.fromCharCode(p)%3Ac%3D4%3Bbreak%3Bdefault%3Ac%3D5%7D_%3Dn%3Bcontinue%7Dif(g%3E%3D0%26%26g%3C%3D31)if(q(g))%7Bx%2B%3Dr.substring(_%2Cn)%2Cc%3D2%3Bbreak%7Delse%20c%3D6%3Bn%2B%2B%7Dreturn%20x%7Dfunction%20S()%7Bif(i%3D%22%22%2Cc%3D0%2Cs%3Dn%2Cl%3Da%2Cu%3Df%2Cn%3E%3Dt)return%20s%3Dt%2Co%3D17%3Blet%20x%3Dr.charCodeAt(n)%3Bif(ke(x))%7Bdo%20n%2B%2B%2Ci%2B%3DString.fromCharCode(x)%2Cx%3Dr.charCodeAt(n)%3Bwhile(ke(x))%3Breturn%20o%3D15%7Dif(q(x))return%20n%2B%2B%2Ci%2B%3DString.fromCharCode(x)%2Cx%3D%3D%3D13%26%26r.charCodeAt(n)%3D%3D%3D10%26%26(n%2B%2B%2Ci%2B%3D%60%0A%60)%2Ca%2B%2B%2Cf%3Dn%2Co%3D14%3Bswitch(x)%7Bcase%20123%3Areturn%20n%2B%2B%2Co%3D1%3Bcase%20125%3Areturn%20n%2B%2B%2Co%3D2%3Bcase%2091%3Areturn%20n%2B%2B%2Co%3D3%3Bcase%2093%3Areturn%20n%2B%2B%2Co%3D4%3Bcase%2058%3Areturn%20n%2B%2B%2Co%3D6%3Bcase%2044%3Areturn%20n%2B%2B%2Co%3D5%3Bcase%2034%3Areturn%20n%2B%2B%2Ci%3DL()%2Co%3D10%3Bcase%2047%3Alet%20_%3Dn-1%3Bif(r.charCodeAt(n%2B1)%3D%3D%3D47)%7Bfor(n%2B%3D2%3Bn%3Ct%26%26!q(r.charCodeAt(n))%3B)n%2B%2B%3Breturn%20i%3Dr.substring(_%2Cn)%2Co%3D12%7Dif(r.charCodeAt(n%2B1)%3D%3D%3D42)%7Bn%2B%3D2%3Blet%20g%3Dt-1%2Ch%3D!1%3Bfor(%3Bn%3Cg%3B)%7Blet%20p%3Dr.charCodeAt(n)%3Bif(p%3D%3D%3D42%26%26r.charCodeAt(n%2B1)%3D%3D%3D47)%7Bn%2B%3D2%2Ch%3D!0%3Bbreak%7Dn%2B%2B%2Cq(p)%26%26(p%3D%3D%3D13%26%26r.charCodeAt(n)%3D%3D%3D10%26%26n%2B%2B%2Ca%2B%2B%2Cf%3Dn)%7Dreturn%20h%7C%7C(n%2B%2B%2Cc%3D1)%2Ci%3Dr.substring(_%2Cn)%2Co%3D13%7Dreturn%20i%2B%3DString.fromCharCode(x)%2Cn%2B%2B%2Co%3D16%3Bcase%2045%3Aif(i%2B%3DString.fromCharCode(x)%2Cn%2B%2B%2Cn%3D%3D%3Dt%7C%7C!U(r.charCodeAt(n)))return%20o%3D16%3Bcase%2048%3Acase%2049%3Acase%2050%3Acase%2051%3Acase%2052%3Acase%2053%3Acase%2054%3Acase%2055%3Acase%2056%3Acase%2057%3Areturn%20i%2B%3Dk()%2Co%3D11%3Bdefault%3Afor(%3Bn%3Ct%26%26w(x)%3B)n%2B%2B%2Cx%3Dr.charCodeAt(n)%3Bif(s!%3D%3Dn)%7Bswitch(i%3Dr.substring(s%2Cn)%2Ci)%7Bcase%22true%22%3Areturn%20o%3D8%3Bcase%22false%22%3Areturn%20o%3D9%3Bcase%22null%22%3Areturn%20o%3D7%7Dreturn%20o%3D16%7Dreturn%20i%2B%3DString.fromCharCode(x)%2Cn%2B%2B%2Co%3D16%7D%7Dfunction%20w(x)%7Bif(ke(x)%7C%7Cq(x))return!1%3Bswitch(x)%7Bcase%20125%3Acase%2093%3Acase%20123%3Acase%2091%3Acase%2034%3Acase%2058%3Acase%2044%3Acase%2047%3Areturn!1%7Dreturn!0%7Dfunction%20I()%7Blet%20x%3Bdo%20x%3DS()%3Bwhile(x%3E%3D12%26%26x%3C%3D15)%3Breturn%20x%7Dreturn%7BsetPosition%3Ab%2CgetPosition%3A()%3D%3En%2Cscan%3Ae%3FI%3AS%2CgetToken%3A()%3D%3Eo%2CgetTokenValue%3A()%3D%3Ei%2CgetTokenOffset%3A()%3D%3Es%2CgetTokenLength%3A()%3D%3En-s%2CgetTokenStartLine%3A()%3D%3El%2CgetTokenStartCharacter%3A()%3D%3Es-u%2CgetTokenError%3A()%3D%3Ec%7D%7Dfunction%20ke(r)%7Breturn%20r%3D%3D%3D32%7C%7Cr%3D%3D%3D9%7Dfunction%20q(r)%7Breturn%20r%3D%3D%3D10%7C%7Cr%3D%3D%3D13%7Dfunction%20U(r)%7Breturn%20r%3E%3D48%26%26r%3C%3D57%7Dvar%20Qe%3B(function(r)%7Br%5Br.lineFeed%3D10%5D%3D%22lineFeed%22%2Cr%5Br.carriageReturn%3D13%5D%3D%22carriageReturn%22%2Cr%5Br.space%3D32%5D%3D%22space%22%2Cr%5Br._0%3D48%5D%3D%22_0%22%2Cr%5Br._1%3D49%5D%3D%22_1%22%2Cr%5Br._2%3D50%5D%3D%22_2%22%2Cr%5Br._3%3D51%5D%3D%22_3%22%2Cr%5Br._4%3D52%5D%3D%22_4%22%2Cr%5Br._5%3D53%5D%3D%22_5%22%2Cr%5Br._6%3D54%5D%3D%22_6%22%2Cr%5Br._7%3D55%5D%3D%22_7%22%2Cr%5Br._8%3D56%5D%3D%22_8%22%2Cr%5Br._9%3D57%5D%3D%22_9%22%2Cr%5Br.a%3D97%5D%3D%22a%22%2Cr%5Br.b%3D98%5D%3D%22b%22%2Cr%5Br.c%3D99%5D%3D%22c%22%2Cr%5Br.d%3D100%5D%3D%22d%22%2Cr%5Br.e%3D101%5D%3D%22e%22%2Cr%5Br.f%3D102%5D%3D%22f%22%2Cr%5Br.g%3D103%5D%3D%22g%22%2Cr%5Br.h%3D104%5D%3D%22h%22%2Cr%5Br.i%3D105%5D%3D%22i%22%2Cr%5Br.j%3D106%5D%3D%22j%22%2Cr%5Br.k%3D107%5D%3D%22k%22%2Cr%5Br.l%3D108%5D%3D%22l%22%2Cr%5Br.m%3D109%5D%3D%22m%22%2Cr%5Br.n%3D110%5D%3D%22n%22%2Cr%5Br.o%3D111%5D%3D%22o%22%2Cr%5Br.p%3D112%5D%3D%22p%22%2Cr%5Br.q%3D113%5D%3D%22q%22%2Cr%5Br.r%3D114%5D%3D%22r%22%2Cr%5Br.s%3D115%5D%3D%22s%22%2Cr%5Br.t%3D116%5D%3D%22t%22%2Cr%5Br.u%3D117%5D%3D%22u%22%2Cr%5Br.v%3D118%5D%3D%22v%22%2Cr%5Br.w%3D119%5D%3D%22w%22%2Cr%5Br.x%3D120%5D%3D%22x%22%2Cr%5Br.y%3D121%5D%3D%22y%22%2Cr%5Br.z%3D122%5D%3D%22z%22%2Cr%5Br.A%3D65%5D%3D%22A%22%2Cr%5Br.B%3D66%5D%3D%22B%22%2Cr%5Br.C%3D67%5D%3D%22C%22%2Cr%5Br.D%3D68%5D%3D%22D%22%2Cr%5Br.E%3D69%5D%3D%22E%22%2Cr%5Br.F%3D70%5D%3D%22F%22%2Cr%5Br.G%3D71%5D%3D%22G%22%2Cr%5Br.H%3D72%5D%3D%22H%22%2Cr%5Br.I%3D73%5D%3D%22I%22%2Cr%5Br.J%3D74%5D%3D%22J%22%2Cr%5Br.K%3D75%5D%3D%22K%22%2Cr%5Br.L%3D76%5D%3D%22L%22%2Cr%5Br.M%3D77%5D%3D%22M%22%2Cr%5Br.N%3D78%5D%3D%22N%22%2Cr%5Br.O%3D79%5D%3D%22O%22%2Cr%5Br.P%3D80%5D%3D%22P%22%2Cr%5Br.Q%3D81%5D%3D%22Q%22%2Cr%5Br.R%3D82%5D%3D%22R%22%2Cr%5Br.S%3D83%5D%3D%22S%22%2Cr%5Br.T%3D84%5D%3D%22T%22%2Cr%5Br.U%3D85%5D%3D%22U%22%2Cr%5Br.V%3D86%5D%3D%22V%22%2Cr%5Br.W%3D87%5D%3D%22W%22%2Cr%5Br.X%3D88%5D%3D%22X%22%2Cr%5Br.Y%3D89%5D%3D%22Y%22%2Cr%5Br.Z%3D90%5D%3D%22Z%22%2Cr%5Br.asterisk%3D42%5D%3D%22asterisk%22%2Cr%5Br.backslash%3D92%5D%3D%22backslash%22%2Cr%5Br.closeBrace%3D125%5D%3D%22closeBrace%22%2Cr%5Br.closeBracket%3D93%5D%3D%22closeBracket%22%2Cr%5Br.colon%3D58%5D%3D%22colon%22%2Cr%5Br.comma%3D44%5D%3D%22comma%22%2Cr%5Br.dot%3D46%5D%3D%22dot%22%2Cr%5Br.doubleQuote%3D34%5D%3D%22doubleQuote%22%2Cr%5Br.minus%3D45%5D%3D%22minus%22%2Cr%5Br.openBrace%3D123%5D%3D%22openBrace%22%2Cr%5Br.openBracket%3D91%5D%3D%22openBracket%22%2Cr%5Br.plus%3D43%5D%3D%22plus%22%2Cr%5Br.slash%3D47%5D%3D%22slash%22%2Cr%5Br.formFeed%3D12%5D%3D%22formFeed%22%2Cr%5Br.tab%3D9%5D%3D%22tab%22%7D)(Qe%7C%7C(Qe%3D%7B%7D))%3Bvar%20O%3Dnew%20Array(20).fill(0).map((r%2Ce)%3D%3E%22%20%22.repeat(e))%2CJ%3D200%2CLe%3D%7B%22%20%22%3A%7B%22%5Cn%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%60%0A%60%2B%22%20%22.repeat(e))%2C%22%5Cr%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%22%5Cr%22%2B%22%20%22.repeat(e))%2C%22%5Cr%5Cn%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%60%5Cr%0A%60%2B%22%20%22.repeat(e))%7D%2C%22%09%22%3A%7B%22%5Cn%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%60%0A%60%2B%22%09%22.repeat(e))%2C%22%5Cr%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%22%5Cr%22%2B%22%09%22.repeat(e))%2C%22%5Cr%5Cn%22%3Anew%20Array(J).fill(0).map((r%2Ce)%3D%3E%60%5Cr%0A%60%2B%22%09%22.repeat(e))%7D%7D%2CYe%3D%5B%60%0A%60%2C%22%5Cr%22%2C%60%5Cr%0A%60%5D%3Bfunction%20ye(r%2Ce%2Ct)%7Blet%20n%2Ci%2Cs%2Co%2Ca%3Bif(e)%7Bfor(o%3De.offset%2Ca%3Do%2Be.length%2Cs%3Do%3Bs%3E0%26%26!Se(r%2Cs-1)%3B)s--%3Blet%20g%3Da%3Bfor(%3Bg%3Cr.length%26%26!Se(r%2Cg)%3B)g%2B%2B%3Bi%3Dr.substring(s%2Cg)%2Cn%3Dkt(i%2Ct)%7Delse%20i%3Dr%2Cn%3D0%2Cs%3D0%2Co%3D0%2Ca%3Dr.length%3Blet%20l%3DLt(t%2Cr)%2Cf%3DYe.includes(l)%2Cu%3D0%2Cc%3D0%2Cd%3Bt.insertSpaces%3Fd%3DO%5Bt.tabSize%7C%7C4%5D%3F%3Fz(O%5B1%5D%2Ct.tabSize%7C%7C4)%3Ad%3D%22%09%22%3Blet%20b%3Dd%3D%3D%3D%22%09%22%3F%22%09%22%3A%22%20%22%2Ck%3D%24(i%2C!1)%2CL%3D!1%3Bfunction%20S()%7Bif(u%3E1)return%20z(l%2Cu)%2Bz(d%2Cn%2Bc)%3Blet%20g%3Dd.length*(n%2Bc)%3Breturn!f%7C%7Cg%3ELe%5Bb%5D%5Bl%5D.length%3Fl%2Bz(d%2Cn%2Bc)%3Ag%3C%3D0%3Fl%3ALe%5Bb%5D%5Bl%5D%5Bg%5D%7Dfunction%20w()%7Blet%20g%3Dk.scan()%3Bfor(u%3D0%3Bg%3D%3D%3D15%7C%7Cg%3D%3D%3D14%3B)g%3D%3D%3D14%26%26t.keepLines%3Fu%2B%3D1%3Ag%3D%3D%3D14%26%26(u%3D1)%2Cg%3Dk.scan()%3Breturn%20L%3Dg%3D%3D%3D16%7C%7Ck.getTokenError()!%3D%3D0%2Cg%7Dlet%20I%3D%5B%5D%3Bfunction%20x(g%2Ch%2Cp)%7B!L%26%26(!e%7C%7Ch%3Ca%26%26p%3Eo)%26%26r.substring(h%2Cp)!%3D%3Dg%26%26I.push(%7Boffset%3Ah%2Clength%3Ap-h%2Ccontent%3Ag%7D)%7Dlet%20_%3Dw()%3Bif(t.keepLines%26%26u%3E0%26%26x(z(l%2Cu)%2C0%2C0)%2C_!%3D%3D17)%7Blet%20g%3Dk.getTokenOffset()%2Bs%2Ch%3Dd.length*n%3C20%26%26t.insertSpaces%3FO%5Bd.length*n%5D%3Az(d%2Cn)%3Bx(h%2Cs%2Cg)%7Dfor(%3B_!%3D%3D17%3B)%7Blet%20g%3Dk.getTokenOffset()%2Bk.getTokenLength()%2Bs%2Ch%3Dw()%2Cp%3D%22%22%2Cy%3D!1%3Bfor(%3Bu%3D%3D%3D0%26%26(h%3D%3D%3D12%7C%7Ch%3D%3D%3D13)%3B)%7Blet%20D%3Dk.getTokenOffset()%2Bs%3Bx(O%5B1%5D%2Cg%2CD)%2Cg%3Dk.getTokenOffset()%2Bk.getTokenLength()%2Bs%2Cy%3Dh%3D%3D%3D12%2Cp%3Dy%3FS()%3A%22%22%2Ch%3Dw()%7Dif(h%3D%3D%3D2)_!%3D%3D1%26%26c--%2Ct.keepLines%26%26u%3E0%7C%7C!t.keepLines%26%26_!%3D%3D1%3Fp%3DS()%3At.keepLines%26%26(p%3DO%5B1%5D)%3Belse%20if(h%3D%3D%3D4)_!%3D%3D3%26%26c--%2Ct.keepLines%26%26u%3E0%7C%7C!t.keepLines%26%26_!%3D%3D3%3Fp%3DS()%3At.keepLines%26%26(p%3DO%5B1%5D)%3Belse%7Bswitch(_)%7Bcase%203%3Acase%201%3Ac%2B%2B%2Ct.keepLines%26%26u%3E0%7C%7C!t.keepLines%3Fp%3DS()%3Ap%3DO%5B1%5D%3Bbreak%3Bcase%205%3At.keepLines%26%26u%3E0%7C%7C!t.keepLines%3Fp%3DS()%3Ap%3DO%5B1%5D%3Bbreak%3Bcase%2012%3Ap%3DS()%3Bbreak%3Bcase%2013%3Au%3E0%3Fp%3DS()%3Ay%7C%7C(p%3DO%5B1%5D)%3Bbreak%3Bcase%206%3At.keepLines%26%26u%3E0%3Fp%3DS()%3Ay%7C%7C(p%3DO%5B1%5D)%3Bbreak%3Bcase%2010%3At.keepLines%26%26u%3E0%3Fp%3DS()%3Ah%3D%3D%3D6%26%26!y%26%26(p%3D%22%22)%3Bbreak%3Bcase%207%3Acase%208%3Acase%209%3Acase%2011%3Acase%202%3Acase%204%3At.keepLines%26%26u%3E0%3Fp%3DS()%3A(h%3D%3D%3D12%7C%7Ch%3D%3D%3D13)%26%26!y%3Fp%3DO%5B1%5D%3Ah!%3D%3D5%26%26h!%3D%3D17%26%26(L%3D!0)%3Bbreak%3Bcase%2016%3AL%3D!0%3Bbreak%7Du%3E0%26%26(h%3D%3D%3D12%7C%7Ch%3D%3D%3D13)%26%26(p%3DS())%7Dh%3D%3D%3D17%26%26(t.keepLines%26%26u%3E0%3Fp%3DS()%3Ap%3Dt.insertFinalNewline%3Fl%3A%22%22)%3Blet%20N%3Dk.getTokenOffset()%2Bs%3Bx(p%2Cg%2CN)%2C_%3Dh%7Dreturn%20I%7Dfunction%20z(r%2Ce)%7Blet%20t%3D%22%22%3Bfor(let%20n%3D0%3Bn%3Ce%3Bn%2B%2B)t%2B%3Dr%3Breturn%20t%7Dfunction%20kt(r%2Ce)%7Blet%20t%3D0%2Cn%3D0%2Ci%3De.tabSize%7C%7C4%3Bfor(%3Bt%3Cr.length%3B)%7Blet%20s%3Dr.charAt(t)%3Bif(s%3D%3D%3DO%5B1%5D)n%2B%2B%3Belse%20if(s%3D%3D%3D%22%09%22)n%2B%3Di%3Belse%20break%3Bt%2B%2B%7Dreturn%20Math.floor(n%2Fi)%7Dfunction%20Lt(r%2Ce)%7Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%2B)%7Blet%20n%3De.charAt(t)%3Bif(n%3D%3D%3D%22%5Cr%22)return%20t%2B1%3Ce.length%26%26e.charAt(t%2B1)%3D%3D%3D%60%0A%60%3F%60%5Cr%0A%60%3A%22%5Cr%22%3Bif(n%3D%3D%3D%60%0A%60)return%60%0A%60%7Dreturn%20r%26%26r.eol%7C%7C%60%0A%60%7Dfunction%20Se(r%2Ce)%7Breturn%60%5Cr%0A%60.indexOf(r.charAt(e))!%3D%3D-1%7Dvar%20et%3B(function(r)%7Br.DEFAULT%3D%7BallowTrailingComma%3A!1%7D%7D)(et%7C%7C(et%3D%7B%7D))%3Bfunction%20yt(r%2Ce%2Ct%3D!1)%7Breturn%20e%3E%3Dr.offset%26%26e%3Cr.offset%2Br.length%7C%7Ct%26%26e%3D%3D%3Dr.offset%2Br.length%7Dfunction%20we(r%2Ce%2Ct%3D!1)%7Bif(yt(r%2Ce%2Ct))%7Blet%20n%3Dr.children%3Bif(Array.isArray(n))for(let%20i%3D0%3Bi%3Cn.length%26%26n%5Bi%5D.offset%3C%3De%3Bi%2B%2B)%7Blet%20s%3Dwe(n%5Bi%5D%2Ce%2Ct)%3Bif(s)return%20s%7Dreturn%20r%7D%7Dvar%20ie%3D%24%2CB%3B(function(r)%7Br%5Br.None%3D0%5D%3D%22None%22%2Cr%5Br.UnexpectedEndOfComment%3D1%5D%3D%22UnexpectedEndOfComment%22%2Cr%5Br.UnexpectedEndOfString%3D2%5D%3D%22UnexpectedEndOfString%22%2Cr%5Br.UnexpectedEndOfNumber%3D3%5D%3D%22UnexpectedEndOfNumber%22%2Cr%5Br.InvalidUnicode%3D4%5D%3D%22InvalidUnicode%22%2Cr%5Br.InvalidEscapeCharacter%3D5%5D%3D%22InvalidEscapeCharacter%22%2Cr%5Br.InvalidCharacter%3D6%5D%3D%22InvalidCharacter%22%7D)(B%7C%7C(B%3D%7B%7D))%3Bvar%20T%3B(function(r)%7Br%5Br.OpenBraceToken%3D1%5D%3D%22OpenBraceToken%22%2Cr%5Br.CloseBraceToken%3D2%5D%3D%22CloseBraceToken%22%2Cr%5Br.OpenBracketToken%3D3%5D%3D%22OpenBracketToken%22%2Cr%5Br.CloseBracketToken%3D4%5D%3D%22CloseBracketToken%22%2Cr%5Br.CommaToken%3D5%5D%3D%22CommaToken%22%2Cr%5Br.ColonToken%3D6%5D%3D%22ColonToken%22%2Cr%5Br.NullKeyword%3D7%5D%3D%22NullKeyword%22%2Cr%5Br.TrueKeyword%3D8%5D%3D%22TrueKeyword%22%2Cr%5Br.FalseKeyword%3D9%5D%3D%22FalseKeyword%22%2Cr%5Br.StringLiteral%3D10%5D%3D%22StringLiteral%22%2Cr%5Br.NumericLiteral%3D11%5D%3D%22NumericLiteral%22%2Cr%5Br.LineCommentTrivia%3D12%5D%3D%22LineCommentTrivia%22%2Cr%5Br.BlockCommentTrivia%3D13%5D%3D%22BlockCommentTrivia%22%2Cr%5Br.LineBreakTrivia%3D14%5D%3D%22LineBreakTrivia%22%2Cr%5Br.Trivia%3D15%5D%3D%22Trivia%22%2Cr%5Br.Unknown%3D16%5D%3D%22Unknown%22%2Cr%5Br.EOF%3D17%5D%3D%22EOF%22%7D)(T%7C%7C(T%3D%7B%7D))%3Bvar%20nt%3Dwe%3Bvar%20tt%3B(function(r)%7Br%5Br.InvalidSymbol%3D1%5D%3D%22InvalidSymbol%22%2Cr%5Br.InvalidNumberFormat%3D2%5D%3D%22InvalidNumberFormat%22%2Cr%5Br.PropertyNameExpected%3D3%5D%3D%22PropertyNameExpected%22%2Cr%5Br.ValueExpected%3D4%5D%3D%22ValueExpected%22%2Cr%5Br.ColonExpected%3D5%5D%3D%22ColonExpected%22%2Cr%5Br.CommaExpected%3D6%5D%3D%22CommaExpected%22%2Cr%5Br.CloseBraceExpected%3D7%5D%3D%22CloseBraceExpected%22%2Cr%5Br.CloseBracketExpected%3D8%5D%3D%22CloseBracketExpected%22%2Cr%5Br.EndOfFileExpected%3D9%5D%3D%22EndOfFileExpected%22%2Cr%5Br.InvalidCommentToken%3D10%5D%3D%22InvalidCommentToken%22%2Cr%5Br.UnexpectedEndOfComment%3D11%5D%3D%22UnexpectedEndOfComment%22%2Cr%5Br.UnexpectedEndOfString%3D12%5D%3D%22UnexpectedEndOfString%22%2Cr%5Br.UnexpectedEndOfNumber%3D13%5D%3D%22UnexpectedEndOfNumber%22%2Cr%5Br.InvalidUnicode%3D14%5D%3D%22InvalidUnicode%22%2Cr%5Br.InvalidEscapeCharacter%3D15%5D%3D%22InvalidEscapeCharacter%22%2Cr%5Br.InvalidCharacter%3D16%5D%3D%22InvalidCharacter%22%7D)(tt%7C%7C(tt%3D%7B%7D))%3Bfunction%20rt(r%2Ce%2Ct)%7Breturn%20ye(r%2Ce%2Ct)%7Dvar%20se%3Dclass%20r%7Bconstructor(e%2Ct%2Cn)%7Bthis.message%3De%2Cthis.code%3Dt%2Cthis.range%3Dn%7Dstatic%20create(e%2Ct%2Cn)%7Breturn%20new%20r(e%2Ct%2Cn)%7D%7D%2Coe%3Dclass%20r%7Bconstructor(e%2Ct)%7Bthis.start%3De%2Cthis.end%3Dt%7Dstatic%20create(e%2Ct)%7Breturn%20new%20r(e%2Ct)%7D%7D%2CBt%3B(N%3D%3E(N.Text%3D1%2CN.Method%3D2%2CN.Function%3D3%2CN.Constructor%3D4%2CN.Field%3D5%2CN.Variable%3D6%2CN.Class%3D7%2CN.Interface%3D8%2CN.Module%3D9%2CN.Property%3D10%2CN.Unit%3D11%2CN.Value%3D12%2CN.Enum%3D13%2CN.Keyword%3D14%2CN.Snippet%3D15%2CN.Color%3D16%2CN.File%3D17%2CN.Reference%3D18%2CN.Folder%3D19%2CN.EnumMember%3D20%2CN.Constant%3D21%2CN.Struct%3D22%2CN.Event%3D23%2CN.Operator%3D24%2CN.TypeParameter%3D25))(Bt%7C%7C%3D%7B%7D)%3Bvar%20Ct%3B(t%3D%3E(t.PlainText%3D1%2Ct.Snippet%3D2))(Ct%7C%7C%3D%7B%7D)%3Bvar%20Et%3B(e%3D%3E%7Bfunction%20r(t%2Cn)%7Breturn%7Brange%3At%2CnewText%3An%7D%7De.replace%3Dr%7D)(Et%7C%7C%3D%7B%7D)%3Bvar%20Mt%3B(e%3D%3E%7Bfunction%20r(t)%7Breturn%7Blabel%3At%7D%7De.create%3Dr%7D)(Mt%7C%7C%3D%7B%7D)%3Bfunction%20it(r)%7Breturn%20typeof%20r%3D%3D%22object%22%26%26r!%3D%3Dnull%26%26!Array.isArray(r)%7Dfunction%20st(r)%7Breturn%20typeof%20r%3D%3D%22number%22%7Dvar%20F%3Dclass%7Bconstructor(e%2Ct%2Cn%3D0)%7Bthis.offset%3Dt%2Cthis.length%3Dn%2Cthis.parent%3De%7Dget%20children()%7Breturn%5B%5D%7DtoString()%7Breturn%22type%3A%20%22%2Bthis.type%2B%22%20(%22%2Bthis.offset%2B%22%2F%22%2Bthis.length%2B%22)%22%2B(this.parent%3F%22%20parent%3A%20%7B%22%2Bthis.parent.toString()%2B%22%7D%22%3A%22%22)%7D%7D%2Cve%3Dclass%20extends%20F%7Bconstructor(t%2Cn)%7Bsuper(t%2Cn)%3Bthis.type%3D%22null%22%3Bthis.value%3Dnull%7D%7D%2Cle%3Dclass%20extends%20F%7Bconstructor(t%2Cn%2Ci)%7Bsuper(t%2Ci)%3Bthis.type%3D%22boolean%22%3Bthis.value%3Dn%7D%7D%2CIe%3Dclass%20extends%20F%7Bconstructor(t%2Cn)%7Bsuper(t%2Cn)%3Bthis.type%3D%22array%22%3Bthis.items%3D%5B%5D%7Dget%20children()%7Breturn%20this.items%7D%7D%2COe%3Dclass%20extends%20F%7Bconstructor(t%2Cn)%7Bsuper(t%2Cn)%3Bthis.type%3D%22number%22%3Bthis.isInteger%3D!0%2Cthis.value%3DNumber.NaN%7D%7D%2CAe%3Dclass%20extends%20F%7Bconstructor(t%2Cn)%7Bsuper(t%2Cn)%3Bthis.type%3D%22object%22%3Bthis.properties%3D%5B%5D%7Dget%20children()%7Breturn%20this.properties%7D%7D%2CX%3Dclass%20extends%20F%7Bconstructor(t%2Cn%2Ci)%7Bsuper(t%2Cn%2Ci)%3Bthis.type%3D%22string%22%3Bthis.value%3D%22%22%7D%7D%2CBe%3Dclass%20extends%20F%7Bconstructor(t%2Cn%2Ci)%7Bsuper(t%2Cn)%3Bthis.type%3D%22property%22%3Bthis.colonOffset%3D-1%2Cthis.keyNode%3Di%7Dget%20children()%7Breturn%20this.valueNode%3F%5Bthis.keyNode%2Cthis.valueNode%5D%3A%5Bthis.keyNode%5D%7D%7D%2CCe%3Dclass%7Bconstructor(e)%7Bthis.root%3De%7DgetNodeFromOffset(e%2Ct%3D!1)%7Bif(this.root)return%20nt(this.root%2Ce%2Ct)%7Dvisit(e)%7Bif(this.root)%7Blet%20t%3Dn%3D%3E%7Blet%20i%3De(n)%2Cs%3Dn.children%3Bif(Array.isArray(s))for(let%20o%3D0%3Bo%3Cs.length%26%26i%3Bo%2B%2B)i%3Dt(s%5Bo%5D)%3Breturn%20i%7D%3Bt(this.root)%7D%7D%7D%3Bfunction%20Ee(r)%7Blet%20e%3D%5B%5D%2Ct%3D-1%2Cn%3Dr.getValue()%2Ci%3Die(n%2C!1)%3Bfunction%20s()%7Bfor(%3B%3B)%7Blet%20_%3Di.scan()%3Bswitch(o()%2C_)%7Bcase%20T.LineBreakTrivia%3Acase%20T.Trivia%3Abreak%3Bdefault%3Areturn%20_%7D%7D%7Dfunction%20o()%7Bswitch(i.getTokenError())%7Bcase%20B.InvalidUnicode%3Areturn%20f(%22Invalid%20unicode%20sequence%20in%20string.%22%2C260)%2C!0%3Bcase%20B.InvalidEscapeCharacter%3Areturn%20f(%22Invalid%20escape%20character%20in%20string.%22%2C261)%2C!0%3Bcase%20B.UnexpectedEndOfNumber%3Areturn%20f(%22Unexpected%20end%20of%20number.%22%2C259)%2C!0%3Bcase%20B.UnexpectedEndOfComment%3Areturn%20f(%22Unexpected%20end%20of%20comment.%22%2C257)%2C!0%3Bcase%20B.UnexpectedEndOfString%3Areturn%20f(%22Unexpected%20end%20of%20string.%22%2C258)%2C!0%3Bcase%20B.InvalidCharacter%3Areturn%20f(%22Invalid%20characters%20in%20string.%20Control%20characters%20must%20be%20escaped.%22%2C262)%2C!0%7Dreturn!1%7Dfunction%20a(_%2Cg%2Ch%2Cp)%7Bif(e.length%3D%3D%3D0%7C%7Ch!%3D%3Dt)%7Blet%20y%3Doe.create(r.positionAt(h)%2Cr.positionAt(p))%3Be.push(se.create(_%2Cg%2Cy))%2Ct%3Dh%7D%7Dfunction%20l(_%2Cg)%7Breturn%20_.length%3Di.getTokenOffset()%2Bi.getTokenLength()-_.offset%2Cg%26%26s()%2C_%7Dfunction%20f(_%2Cg%2Ch%3Dvoid%200%2Cp%3D%5B%5D%2Cy%3D%5B%5D)%7Blet%20N%3Di.getTokenOffset()%2CD%3Di.getPosition()%2Bi.getTokenLength()%3Bif(N%3D%3D%3DD%26%26N%3E0)%7Bfor(N--%3BN%3E0%26%26%2F%5Cs%2F.test(n.charAt(N))%3B)N--%3BD%3DN%2B1%7Dif(a(_%2Cg%2CN%2CD)%2Ch%26%26l(h%2C!1)%2Cp.length%2By.length%3E0)%7Blet%20re%3Di.getToken()%3Bfor(%3Bre!%3D%3DT.EOF%3B)%7Bif(p.indexOf(re)!%3D%3D-1)%7Bs()%3Bbreak%7Delse%20if(y.indexOf(re)!%3D%3D-1)break%3Bre%3Ds()%7D%7Dreturn%20h%7Dfunction%20u(_)%7Bif(i.getToken()!%3D%3DT.OpenBracketToken)return%3Blet%20g%3Dnew%20Ie(_%2Ci.getTokenOffset())%3Bs()%3Blet%20h%3D!1%3Bfor(%3Bi.getToken()!%3D%3DT.CloseBracketToken%26%26i.getToken()!%3D%3DT.EOF%3B)%7Bif(i.getToken()%3D%3D%3DT.CommaToken)%7Bh%7C%7Cf(%22Value%20expected.%22%2C516)%3Blet%20y%3Di.getTokenOffset()%3Bif(s()%2Ci.getToken()%3D%3D%3DT.CloseBracketToken)%7Bh%26%26a(%22Trailing%20comma%22%2C519%2Cy%2Cy%2B1)%3Bcontinue%7D%7Delse%20if(h)%7Bf(%22Comma%20expected.%22%2C514%2Cvoid%200%2C%5B%5D%2C%5BT.CloseBracketToken%5D)%3Bbreak%7Dlet%20p%3Dw(g)%3Bif(p)g.items.push(p)%3Belse%7Bf(%22Value%20expected.%22%2C516%2Cvoid%200%2C%5B%5D%2C%5BT.CloseBracketToken%5D)%3Bbreak%7Dh%3D!0%7Dreturn%20i.getToken()!%3D%3DT.CloseBracketToken%3Ff(%22Expected%20comma%20or%20closing%20bracket%22%2C518%2Cg)%3Al(g%2C!0)%7Dlet%20c%3Dnew%20X(void%200%2C0%2C0)%3Bfunction%20d(_%2Cg)%7Blet%20h%3Dnew%20Be(_%2Ci.getTokenOffset()%2Cc)%2Cp%3Dk(h)%3Bif(!p)if(i.getToken()%3D%3D%3DT.Unknown)%7Bf(%22Property%20keys%20must%20be%20doublequoted%22%2C528)%3Blet%20N%3Dnew%20X(h%2Ci.getTokenOffset()%2Ci.getTokenLength())%3BN.value%3Di.getTokenValue()%2Cp%3DN%2Cs()%7Delse%20return%3Bif(h.keyNode%3Dp%2Cp.value!%3D%3D%22%2F%2F%22)%7Blet%20N%3Dg%5Bp.value%5D%3BN%3F(a(%22Duplicate%20object%20key%22%2C520%2Ch.keyNode.offset%2Ch.keyNode.offset%2Bh.keyNode.length)%2Cit(N)%26%26a(%22Duplicate%20object%20key%22%2C520%2CN.keyNode.offset%2CN.keyNode.offset%2BN.keyNode.length)%2Cg%5Bp.value%5D%3D!0)%3Ag%5Bp.value%5D%3Dh%7Dif(i.getToken()%3D%3D%3DT.ColonToken)h.colonOffset%3Di.getTokenOffset()%2Cs()%3Belse%20if(f(%22Colon%20expected%22%2C515)%2Ci.getToken()%3D%3D%3DT.StringLiteral%26%26r.positionAt(p.offset%2Bp.length).lineNumber%3Cr.positionAt(i.getTokenOffset()).lineNumber)return%20h.length%3Dp.length%2Ch%3Blet%20y%3Dw(h)%3Breturn%20y%3F(h.valueNode%3Dy%2Ch.length%3Dy.offset%2By.length-h.offset%2Ch)%3Af(%22Value%20expected%22%2C516%2Ch%2C%5B%5D%2C%5BT.CloseBraceToken%2CT.CommaToken%5D)%7Dfunction%20b(_)%7Bif(i.getToken()!%3D%3DT.OpenBraceToken)return%3Blet%20g%3Dnew%20Ae(_%2Ci.getTokenOffset())%2Ch%3DObject.create(null)%3Bs()%3Blet%20p%3D!1%3Bfor(%3Bi.getToken()!%3D%3DT.CloseBraceToken%26%26i.getToken()!%3D%3DT.EOF%3B)%7Bif(i.getToken()%3D%3D%3DT.CommaToken)%7Bp%7C%7Cf(%22Property%20expected%22%2C513)%3Blet%20N%3Di.getTokenOffset()%3Bif(s()%2Ci.getToken()%3D%3D%3DT.CloseBraceToken)%7Bp%26%26a(%22Trailing%20comma%22%2C519%2CN%2CN%2B1)%3Bcontinue%7D%7Delse%20p%26%26f(%22Expected%20comma%22%2C514)%3Blet%20y%3Dd(g%2Ch)%3By%3Fg.properties.push(y)%3Af(%22Property%20expected%22%2C513%2Cvoid%200%2C%5B%5D%2C%5BT.CloseBraceToken%2CT.CommaToken%5D)%2Cp%3D!0%7Dreturn%20i.getToken()!%3D%3DT.CloseBraceToken%3Ff(%22Expected%20comma%20or%20closing%20brace%22%2C518%2Cg)%3Al(g%2C!0)%7Dfunction%20k(_)%7Bif(i.getToken()!%3D%3DT.StringLiteral)return%3Blet%20g%3Dnew%20X(_%2Ci.getTokenOffset())%3Breturn%20g.value%3Di.getTokenValue()%2Cl(g%2C!0)%7Dfunction%20L(_)%7Bif(i.getToken()!%3D%3DT.NumericLiteral)return%3Blet%20g%3Dnew%20Oe(_%2Ci.getTokenOffset())%3Bif(i.getTokenError()%3D%3D%3DB.None)%7Blet%20h%3Di.getTokenValue()%3Btry%7Blet%20p%3DJSON.parse(h)%3Bif(!st(p))return%20f(%22Invalid%20number%20format.%22%2C0%2Cg)%3Bg.value%3Dp%7Dcatch%7Breturn%20f(%22Invalid%20number%20format.%22%2C0%2Cg)%7Dg.isInteger%3Dh.indexOf(%22.%22)%3D%3D%3D-1%7Dreturn%20l(g%2C!0)%7Dfunction%20S(_)%7Blet%20g%3Bswitch(i.getToken())%7Bcase%20T.NullKeyword%3Areturn%20l(new%20ve(_%2Ci.getTokenOffset())%2C!0)%3Bcase%20T.TrueKeyword%3Areturn%20l(new%20le(_%2C!0%2Ci.getTokenOffset())%2C!0)%3Bcase%20T.FalseKeyword%3Areturn%20l(new%20le(_%2C!1%2Ci.getTokenOffset())%2C!0)%3Bdefault%3Areturn%7D%7Dfunction%20w(_)%7Breturn%20u(_)%7C%7Cb(_)%7C%7Ck(_)%7C%7CL(_)%7C%7CS(_)%7Dlet%20I%3Breturn%20s()!%3D%3DT.EOF%26%26(I%3Dw(I)%2CI%3Fi.getToken()!%3D%3DT.EOF%26%26f(%22End%20of%20file%20expected.%22%2C0)%3Af(%22Expected%20a%20JSON%20object%2C%20array%20or%20literal%22%2C0))%2C%7Bproblems%3Ae%2Croot%3Anew%20Ce(I)%7D%7Dfunction%20Me(r)%7Blet%20e%3D%5B%5D%2Ct%3D%5B%5D%2Cn%3D%5B%5D%2Ci%3D-1%2Cs%3Die(r.getValue()%2C!1)%2Co%3Ds.scan()%3Bfunction%20a(l)%7Be.push(l)%2Ct.push(n.length)%7Dfor(%3Bo!%3D%3DT.EOF%3B)%7Bswitch(o)%7Bcase%20T.OpenBraceToken%3Acase%20T.OpenBracketToken%3A%7Blet%20l%3Dr.positionAt(s.getPosition()).lineNumber%2Cf%3D%7BstartLine%3Al%2CendLine%3Al%2Ckind%3Ao%3D%3D%3DT.OpenBraceToken%3F%22object%22%3A%22array%22%7D%3Bn.push(f)%3Bbreak%7Dcase%20T.CloseBraceToken%3Acase%20T.CloseBracketToken%3A%7Blet%20l%3Do%3D%3D%3DT.CloseBraceToken%3F%22object%22%3A%22array%22%3Bif(n.length%3E0%26%26n%5Bn.length-1%5D.kind%3D%3D%3Dl)%7Blet%20f%3Dn.pop()%2Cu%3Dr.positionAt(s.getTokenOffset()).lineNumber%3Bf%26%26u%3Ef.startLine%2B1%26%26i!%3D%3Df.startLine%26%26(f.endLine%3Du-1%2Ca(f)%2Ci%3Df.startLine)%7Dbreak%7D%7Do%3Ds.scan()%7Dreturn%20e%7Dfunction%20ot(r%2Ce)%7Breturn%20rt(r.getValue()%2Cvoid%200%2Ce)%7Dfunction%20lt(r)%7Blet%7Broot%3Ae%2Cproblems%3At%7D%3DEe(r)%3Breturn%7Bproblems%3At%2Croot%3Ae%7D%7Dfunction%20at(r)%7Breturn%20Ee(r).root%7Dvar%20P%3Dclass%7Bconstructor(e%2Ct)%7Bthis.lineNumber%3De%2Cthis.column%3Dt%7D%7D%3Bvar%20A%3Dclass%20r%7Bconstructor(e%2Ct%2Cn%2Ci)%7Be%3En%7C%7Ce%3D%3D%3Dn%26%26t%3Ei%3F(this.startLineNumber%3Dn%2Cthis.startColumn%3Di%2Cthis.endLineNumber%3De%2Cthis.endColumn%3Dt)%3A(this.startLineNumber%3De%2Cthis.startColumn%3Dt%2Cthis.endLineNumber%3Dn%2Cthis.endColumn%3Di)%7Dstatic%20create(e%2Ct)%7Breturn%20new%20r(e.lineNumber%2Ce.column%2Ct.lineNumber%2Ct.column)%7Dstatic%20areIntersecting(e%2Ct)%7Breturn!(e.endLineNumber%3Ct.startLineNumber%7C%7Ce.endLineNumber%3D%3D%3Dt.startLineNumber%26%26e.endColumn%3C%3Dt.startColumn%7C%7Ct.endLineNumber%3Ce.startLineNumber%7C%7Ct.endLineNumber%3D%3D%3De.startLineNumber%26%26t.endColumn%3C%3De.startColumn)%7DplusRange(e)%7Breturn%20r.plusRange(this%2Ce)%7Dstatic%20plusRange(e%2Ct)%7Blet%20n%2Ci%2Cs%2Co%3Breturn%20t.startLineNumber%3Ce.startLineNumber%3F(n%3Dt.startLineNumber%2Ci%3Dt.startColumn)%3At.startLineNumber%3D%3D%3De.startLineNumber%3F(n%3Dt.startLineNumber%2Ci%3DMath.min(t.startColumn%2Ce.startColumn))%3A(n%3De.startLineNumber%2Ci%3De.startColumn)%2Ct.endLineNumber%3Ee.endLineNumber%3F(s%3Dt.endLineNumber%2Co%3Dt.endColumn)%3At.endLineNumber%3D%3D%3De.endLineNumber%3F(s%3Dt.endLineNumber%2Co%3DMath.max(t.endColumn%2Ce.endColumn))%3A(s%3De.endLineNumber%2Co%3De.endColumn)%2Cnew%20r(n%2Ci%2Cs%2Co)%7DgetStartPosition()%7Breturn%20r.getStartPosition(this)%7Dstatic%20getStartPosition(e)%7Breturn%20new%20P(e.startLineNumber%2Ce.startColumn)%7D%7D%3Bvar%20V%3Dclass%7Bconstructor(e%2Ct)%7Bthis._findMatchBrand%3Dvoid%200%3Bthis.range%3De%2Cthis.matches%3Dt%7D%7D%2Cae%3Dclass%7Bconstructor(e%2Ct%2Cn)%7Bthis.regex%3De%2Cthis.wordSeparators%3Dt%2Cthis.simpleSearch%3Dn%7D%7D%3Bvar%20j%3Dclass%7Bconstructor(e%2Ct)%7Bthis.piece%3De%2Cthis.color%3Dt%2Cthis.size_left%3D0%2Cthis.lf_left%3D0%2Cthis.parent%3Dthis%2Cthis.left%3Dthis%2Cthis.right%3Dthis%7Dnext()%7Bif(this.right!%3D%3Dm)return%20fe(this.right)%3Blet%20e%3Dthis%3Bfor(%3Be.parent!%3D%3Dm%26%26e.parent.left!%3D%3De%3B)e%3De.parent%3Breturn%20e.parent%3D%3D%3Dm%3Fm%3Ae.parent%7Dprev()%7Bif(this.left!%3D%3Dm)return%20Pe(this.left)%3Blet%20e%3Dthis%3Bfor(%3Be.parent!%3D%3Dm%26%26e.parent.right!%3D%3De%3B)e%3De.parent%3Breturn%20e.parent%3D%3D%3Dm%3Fm%3Ae.parent%7Ddetach()%7Bthis.parent%3Dnull%2Cthis.left%3Dnull%2Cthis.right%3Dnull%7D%7D%3Bvar%20m%3Dnew%20j(null%2C0)%3Bm.parent%3Dm%3Bm.left%3Dm%3Bm.right%3Dm%3Bm.color%3D0%3Bfunction%20fe(r)%7Bfor(%3Br.left!%3D%3Dm%3B)r%3Dr.left%3Breturn%20r%7Dfunction%20Pe(r)%7Bfor(%3Br.right!%3D%3Dm%3B)r%3Dr.right%3Breturn%20r%7Dfunction%20Re(r)%7Breturn%20r%3D%3D%3Dm%3F0%3Ar.size_left%2Br.piece.length%2BRe(r.right)%7Dfunction%20Ve(r)%7Breturn%20r%3D%3D%3Dm%3F0%3Ar.lf_left%2Br.piece.lineFeedCnt%2BVe(r.right)%7Dfunction%20Fe()%7Bm.parent%3Dm%7Dfunction%20G(r%2Ce)%7Blet%20t%3De.right%3Bt.size_left%2B%3De.size_left%2B(e.piece%3Fe.piece.length%3A0)%2Ct.lf_left%2B%3De.lf_left%2B(e.piece%3Fe.piece.lineFeedCnt%3A0)%2Ce.right%3Dt.left%2Ct.left!%3D%3Dm%26%26(t.left.parent%3De)%2Ct.parent%3De.parent%2Ce.parent%3D%3D%3Dm%3Fr.root%3Dt%3Ae.parent.left%3D%3D%3De%3Fe.parent.left%3Dt%3Ae.parent.right%3Dt%2Ct.left%3De%2Ce.parent%3Dt%7Dfunction%20Z(r%2Ce)%7Blet%20t%3De.left%3Be.left%3Dt.right%2Ct.right!%3D%3Dm%26%26(t.right.parent%3De)%2Ct.parent%3De.parent%2Ce.size_left-%3Dt.size_left%2B(t.piece%3Ft.piece.length%3A0)%2Ce.lf_left-%3Dt.lf_left%2B(t.piece%3Ft.piece.lineFeedCnt%3A0)%2Ce.parent%3D%3D%3Dm%3Fr.root%3Dt%3Ae%3D%3D%3De.parent.right%3Fe.parent.right%3Dt%3Ae.parent.left%3Dt%2Ct.right%3De%2Ce.parent%3Dt%7Dfunction%20Q(r%2Ce)%7Blet%20t%2Cn%3Bif(e.left%3D%3D%3Dm%3F(n%3De%2Ct%3Dn.right)%3Ae.right%3D%3D%3Dm%3F(n%3De%2Ct%3Dn.left)%3A(n%3Dfe(e.right)%2Ct%3Dn.right)%2Cn%3D%3D%3Dr.root)%7Br.root%3Dt%2Ct.color%3D0%2Ce.detach()%2CFe()%2Cr.root.parent%3Dm%3Breturn%7Dlet%20i%3Dn.color%3D%3D%3D1%3Bif(n%3D%3D%3Dn.parent.left%3Fn.parent.left%3Dt%3An.parent.right%3Dt%2Cn%3D%3D%3De%3F(t.parent%3Dn.parent%2CH(r%2Ct))%3A(n.parent%3D%3D%3De%3Ft.parent%3Dn%3At.parent%3Dn.parent%2CH(r%2Ct)%2Cn.left%3De.left%2Cn.right%3De.right%2Cn.parent%3De.parent%2Cn.color%3De.color%2Ce%3D%3D%3Dr.root%3Fr.root%3Dn%3Ae%3D%3D%3De.parent.left%3Fe.parent.left%3Dn%3Ae.parent.right%3Dn%2Cn.left!%3D%3Dm%26%26(n.left.parent%3Dn)%2Cn.right!%3D%3Dm%26%26(n.right.parent%3Dn)%2Cn.size_left%3De.size_left%2Cn.lf_left%3De.lf_left%2CH(r%2Cn))%2Ce.detach()%2Ct.parent.left%3D%3D%3Dt)%7Blet%20o%3DRe(t)%2Ca%3DVe(t)%3Bif(o!%3D%3Dt.parent.size_left%7C%7Ca!%3D%3Dt.parent.lf_left)%7Blet%20l%3Do-t.parent.size_left%2Cf%3Da-t.parent.lf_left%3Bt.parent.size_left%3Do%2Ct.parent.lf_left%3Da%2CC(r%2Ct.parent%2Cl%2Cf)%7D%7Dif(H(r%2Ct.parent)%2Ci)%7BFe()%3Breturn%7Dlet%20s%3Bfor(%3Bt!%3D%3Dr.root%26%26t.color%3D%3D%3D0%3B)t%3D%3D%3Dt.parent.left%3F(s%3Dt.parent.right%2Cs.color%3D%3D%3D1%26%26(s.color%3D0%2Ct.parent.color%3D1%2CG(r%2Ct.parent)%2Cs%3Dt.parent.right)%2Cs.left.color%3D%3D%3D0%26%26s.right.color%3D%3D%3D0%3F(s.color%3D1%2Ct%3Dt.parent)%3A(s.right.color%3D%3D%3D0%26%26(s.left.color%3D0%2Cs.color%3D1%2CZ(r%2Cs)%2Cs%3Dt.parent.right)%2Cs.color%3Dt.parent.color%2Ct.parent.color%3D0%2Cs.right.color%3D0%2CG(r%2Ct.parent)%2Ct%3Dr.root))%3A(s%3Dt.parent.left%2Cs.color%3D%3D%3D1%26%26(s.color%3D0%2Ct.parent.color%3D1%2CZ(r%2Ct.parent)%2Cs%3Dt.parent.left)%2Cs.left.color%3D%3D%3D0%26%26s.right.color%3D%3D%3D0%3F(s.color%3D1%2Ct%3Dt.parent)%3A(s.left.color%3D%3D%3D0%26%26(s.right.color%3D0%2Cs.color%3D1%2CG(r%2Cs)%2Cs%3Dt.parent.left)%2Cs.color%3Dt.parent.color%2Ct.parent.color%3D0%2Cs.left.color%3D0%2CZ(r%2Ct.parent)%2Ct%3Dr.root))%3Bt.color%3D0%2CFe()%7Dfunction%20We(r%2Ce)%7Bfor(H(r%2Ce)%3Be!%3D%3Dr.root%26%26e.parent.color%3D%3D%3D1%3B)if(e.parent%3D%3D%3De.parent.parent.left)%7Blet%20t%3De.parent.parent.right%3Bt.color%3D%3D%3D1%3F(e.parent.color%3D0%2Ct.color%3D0%2Ce.parent.parent.color%3D1%2Ce%3De.parent.parent)%3A(e%3D%3D%3De.parent.right%26%26(e%3De.parent%2CG(r%2Ce))%2Ce.parent.color%3D0%2Ce.parent.parent.color%3D1%2CZ(r%2Ce.parent.parent))%7Delse%7Blet%20t%3De.parent.parent.left%3Bt.color%3D%3D%3D1%3F(e.parent.color%3D0%2Ct.color%3D0%2Ce.parent.parent.color%3D1%2Ce%3De.parent.parent)%3A(e%3D%3D%3De.parent.left%26%26(e%3De.parent%2CZ(r%2Ce))%2Ce.parent.color%3D0%2Ce.parent.parent.color%3D1%2CG(r%2Ce.parent.parent))%7Dr.root.color%3D0%7Dfunction%20C(r%2Ce%2Ct%2Cn)%7Bfor(%3Be!%3D%3Dr.root%26%26e!%3D%3Dm%3B)e.parent.left%3D%3D%3De%26%26(e.parent.size_left%2B%3Dt%2Ce.parent.lf_left%2B%3Dn)%2Ce%3De.parent%7Dfunction%20H(r%2Ce)%7Blet%20t%3D0%2Cn%3D0%3Bif(e!%3D%3Dr.root)%7Bfor(%3Be!%3D%3Dr.root%26%26e%3D%3D%3De.parent.right%3B)e%3De.parent%3Bif(e!%3D%3Dr.root)for(e%3De.parent%2Ct%3DRe(e.left)-e.size_left%2Cn%3DVe(e.left)-e.lf_left%2Ce.size_left%2B%3Dt%2Ce.lf_left%2B%3Dn%3Be!%3D%3Dr.root%26%26(t!%3D%3D0%7C%7Cn!%3D%3D0)%3B)e.parent.left%3D%3D%3De%26%26(e.parent.size_left%2B%3Dt%2Ce.parent.lf_left%2B%3Dn)%2Ce%3De.parent%7D%7Dvar%20ft%2CUe%3Dclass%7Bconstructor()%7Bthis%5Bft%5D%3D%22LinkedMap%22%3Bthis._map%3Dnew%20Map%2Cthis._head%3Dvoid%200%2Cthis._tail%3Dvoid%200%2Cthis._size%3D0%2Cthis._state%3D0%7Dclear()%7Bthis._map.clear()%2Cthis._head%3Dvoid%200%2Cthis._tail%3Dvoid%200%2Cthis._size%3D0%2Cthis._state%2B%2B%7DisEmpty()%7Breturn!this._head%26%26!this._tail%7Dget%20size()%7Breturn%20this._size%7Dget%20first()%7Breturn%20this._head%3F.value%7Dget%20last()%7Breturn%20this._tail%3F.value%7Dhas(e)%7Breturn%20this._map.has(e)%7Dget(e%2Ct%3D0)%7Blet%20n%3Dthis._map.get(e)%3Bif(n)return%20t!%3D%3D0%26%26this.touch(n%2Ct)%2Cn.value%7Dset(e%2Ct%2Cn%3D0)%7Blet%20i%3Dthis._map.get(e)%3Bif(i)i.value%3Dt%2Cn!%3D%3D0%26%26this.touch(i%2Cn)%3Belse%7Bswitch(i%3D%7Bkey%3Ae%2Cvalue%3At%2Cnext%3Avoid%200%2Cprevious%3Avoid%200%7D%2Cn)%7Bcase%200%3Athis.addItemLast(i)%3Bbreak%3Bcase%201%3Athis.addItemFirst(i)%3Bbreak%3Bcase%202%3Athis.addItemLast(i)%3Bbreak%3Bdefault%3Athis.addItemLast(i)%3Bbreak%7Dthis._map.set(e%2Ci)%2Cthis._size%2B%2B%7Dreturn%20this%7Ddelete(e)%7Breturn!!this.remove(e)%7Dremove(e)%7Blet%20t%3Dthis._map.get(e)%3Bif(t)return%20this._map.delete(e)%2Cthis.removeItem(t)%2Cthis._size--%2Ct.value%7Dshift()%7Bif(!this._head%26%26!this._tail)return%3Bif(!this._head%7C%7C!this._tail)throw%20new%20Error(%22Invalid%20list%22)%3Blet%20e%3Dthis._head%3Breturn%20this._map.delete(e.key)%2Cthis.removeItem(e)%2Cthis._size--%2Ce.value%7DforEach(e%2Ct)%7Blet%20n%3Dthis._state%2Ci%3Dthis._head%3Bfor(%3Bi%3B)%7Bif(t%3Fe.bind(t)(i.value%2Ci.key%2Cthis)%3Ae(i.value%2Ci.key%2Cthis)%2Cthis._state!%3D%3Dn)throw%20new%20Error(%22LinkedMap%20got%20modified%20during%20iteration.%22)%3Bi%3Di.next%7D%7Dkeys()%7Blet%20e%3Dthis%2Ct%3Dthis._state%2Cn%3Dthis._head%2Ci%3D%7B%5BSymbol.iterator%5D()%7Breturn%20i%7D%2Cnext()%7Bif(e._state!%3D%3Dt)throw%20new%20Error(%22LinkedMap%20got%20modified%20during%20iteration.%22)%3Bif(n)%7Blet%20s%3D%7Bvalue%3An.key%2Cdone%3A!1%7D%3Breturn%20n%3Dn.next%2Cs%7Delse%20return%7Bvalue%3Avoid%200%2Cdone%3A!0%7D%7D%7D%3Breturn%20i%7Dvalues()%7Blet%20e%3Dthis%2Ct%3Dthis._state%2Cn%3Dthis._head%2Ci%3D%7B%5BSymbol.iterator%5D()%7Breturn%20i%7D%2Cnext()%7Bif(e._state!%3D%3Dt)throw%20new%20Error(%22LinkedMap%20got%20modified%20during%20iteration.%22)%3Bif(n)%7Blet%20s%3D%7Bvalue%3An.value%2Cdone%3A!1%7D%3Breturn%20n%3Dn.next%2Cs%7Delse%20return%7Bvalue%3Avoid%200%2Cdone%3A!0%7D%7D%7D%3Breturn%20i%7Dentries()%7Blet%20e%3Dthis%2Ct%3Dthis._state%2Cn%3Dthis._head%2Ci%3D%7B%5BSymbol.iterator%5D()%7Breturn%20i%7D%2Cnext()%7Bif(e._state!%3D%3Dt)throw%20new%20Error(%22LinkedMap%20got%20modified%20during%20iteration.%22)%3Bif(n)%7Blet%20s%3D%7Bvalue%3A%5Bn.key%2Cn.value%5D%2Cdone%3A!1%7D%3Breturn%20n%3Dn.next%2Cs%7Delse%20return%7Bvalue%3Avoid%200%2Cdone%3A!0%7D%7D%7D%3Breturn%20i%7D%5B(ft%3DSymbol.toStringTag%2CSymbol.iterator)%5D()%7Breturn%20this.entries()%7DtrimOld(e)%7Bif(e%3E%3Dthis.size)return%3Bif(e%3D%3D%3D0)%7Bthis.clear()%3Breturn%7Dlet%20t%3Dthis._head%2Cn%3Dthis.size%3Bfor(%3Bt%26%26n%3Ee%3B)this._map.delete(t.key)%2Ct%3Dt.next%2Cn--%3Bthis._head%3Dt%2Cthis._size%3Dn%2Ct%26%26(t.previous%3Dvoid%200)%2Cthis._state%2B%2B%7DtrimNew(e)%7Bif(e%3E%3Dthis.size)return%3Bif(e%3D%3D%3D0)%7Bthis.clear()%3Breturn%7Dlet%20t%3Dthis._tail%2Cn%3Dthis.size%3Bfor(%3Bt%26%26n%3Ee%3B)this._map.delete(t.key)%2Ct%3Dt.previous%2Cn--%3Bthis._tail%3Dt%2Cthis._size%3Dn%2Ct%26%26(t.next%3Dvoid%200)%2Cthis._state%2B%2B%7DaddItemFirst(e)%7Bif(!this._head%26%26!this._tail)this._tail%3De%3Belse%20if(this._head)e.next%3Dthis._head%2Cthis._head.previous%3De%3Belse%20throw%20new%20Error(%22Invalid%20list%22)%3Bthis._head%3De%2Cthis._state%2B%2B%7DaddItemLast(e)%7Bif(!this._head%26%26!this._tail)this._head%3De%3Belse%20if(this._tail)e.previous%3Dthis._tail%2Cthis._tail.next%3De%3Belse%20throw%20new%20Error(%22Invalid%20list%22)%3Bthis._tail%3De%2Cthis._state%2B%2B%7DremoveItem(e)%7Bif(e%3D%3D%3Dthis._head%26%26e%3D%3D%3Dthis._tail)this._head%3Dvoid%200%2Cthis._tail%3Dvoid%200%3Belse%20if(e%3D%3D%3Dthis._head)%7Bif(!e.next)throw%20new%20Error(%22Invalid%20list%22)%3Be.next.previous%3Dvoid%200%2Cthis._head%3De.next%7Delse%20if(e%3D%3D%3Dthis._tail)%7Bif(!e.previous)throw%20new%20Error(%22Invalid%20list%22)%3Be.previous.next%3Dvoid%200%2Cthis._tail%3De.previous%7Delse%7Blet%20t%3De.next%2Cn%3De.previous%3Bif(!t%7C%7C!n)throw%20new%20Error(%22Invalid%20list%22)%3Bt.previous%3Dn%2Cn.next%3Dt%7De.next%3Dvoid%200%2Ce.previous%3Dvoid%200%2Cthis._state%2B%2B%7Dtouch(e%2Ct)%7Bif(!this._head%7C%7C!this._tail)throw%20new%20Error(%22Invalid%20list%22)%3Bif(!(t!%3D%3D1%26%26t!%3D%3D2))%7Bif(t%3D%3D%3D1)%7Bif(e%3D%3D%3Dthis._head)return%3Blet%20n%3De.next%2Ci%3De.previous%3Be%3D%3D%3Dthis._tail%3F(i.next%3Dvoid%200%2Cthis._tail%3Di)%3A(n.previous%3Di%2Ci.next%3Dn)%2Ce.previous%3Dvoid%200%2Ce.next%3Dthis._head%2Cthis._head.previous%3De%2Cthis._head%3De%2Cthis._state%2B%2B%7Delse%20if(t%3D%3D%3D2)%7Bif(e%3D%3D%3Dthis._tail)return%3Blet%20n%3De.next%2Ci%3De.previous%3Be%3D%3D%3Dthis._head%3F(n.previous%3Dvoid%200%2Cthis._head%3Dn)%3A(n.previous%3Di%2Ci.next%3Dn)%2Ce.next%3Dvoid%200%2Ce.previous%3Dthis._tail%2Cthis._tail.next%3De%2Cthis._tail%3De%2Cthis._state%2B%2B%7D%7D%7DtoJSON()%7Blet%20e%3D%5B%5D%3Breturn%20this.forEach((t%2Cn)%3D%3E%7Be.push(%5Bn%2Ct%5D)%7D)%2Ce%7DfromJSON(e)%7Bthis.clear()%3Bfor(let%5Bt%2Cn%5Dof%20e)this.set(t%2Cn)%7D%7D%2CJe%3Dclass%20extends%20Ue%7Bconstructor(e%2Ct%3D1)%7Bsuper()%2Cthis._limit%3De%2Cthis._ratio%3DMath.min(Math.max(0%2Ct)%2C1)%7Dget%20limit()%7Breturn%20this._limit%7Dset%20limit(e)%7Bthis._limit%3De%2Cthis.checkTrim()%7Dget%20ratio()%7Breturn%20this._ratio%7Dset%20ratio(e)%7Bthis._ratio%3DMath.min(Math.max(0%2Ce)%2C1)%2Cthis.checkTrim()%7Dget(e%2Ct%3D2)%7Breturn%20super.get(e%2Ct)%7Dpeek(e)%7Breturn%20super.get(e%2C0)%7Dset(e%2Ct)%7Breturn%20super.set(e%2Ct%2C2)%2Cthis%7DcheckTrim()%7Bthis.size%3Ethis._limit%26%26this.trim(Math.round(this._limit*this._ratio))%7D%7D%2Cue%3Dclass%20extends%20Je%7Bconstructor(e%2Ct%3D1)%7Bsuper(e%2Ct)%7Dtrim(e)%7Bthis.trimOld(e)%7Dset(e%2Ct)%7Breturn%20super.set(e%2Ct)%2Cthis.checkTrim()%2Cthis%7D%7D%3Bfunction%20ze(r)%7Breturn%20r%3C0%3F0%3Ar%3E255%3F255%3Ar%7C0%7Dvar%20ce%3Dclass%20r%7Bconstructor(e)%7Blet%20t%3Dze(e)%3Bthis._defaultValue%3Dt%2Cthis._asciiMap%3Dr._createAsciiMap(t)%2Cthis._map%3Dnew%20Map%7Dstatic%20_createAsciiMap(e)%7Blet%20t%3Dnew%20Uint8Array(256)%3Breturn%20t.fill(e)%2Ct%7Dset(e%2Ct)%7Blet%20n%3Dze(t)%3Be%3E%3D0%26%26e%3C256%3Fthis._asciiMap%5Be%5D%3Dn%3Athis._map.set(e%2Cn)%7Dget(e)%7Breturn%20e%3E%3D0%26%26e%3C256%3Fthis._asciiMap%5Be%5D%3Athis._map.get(e)%7C%7Cthis._defaultValue%7Dclear()%7Bthis._asciiMap.fill(this._defaultValue)%2Cthis._map.clear()%7D%7D%3Bvar%20je%3Dclass%20extends%20ce%7Bconstructor(t%2Cn)%7Bsuper(0)%3Bthis._segmenter%3Dnull%3Bthis._cachedLine%3Dnull%3Bthis._cachedSegments%3D%5B%5D%3Bthis.intlSegmenterLocales%3Dn%2Cthis.intlSegmenterLocales.length%3E0%3Fthis._segmenter%3Dnew%20Intl.Segmenter(this.intlSegmenterLocales%2C%7Bgranularity%3A%22word%22%7D)%3Athis._segmenter%3Dnull%3Bfor(let%20i%3D0%2Cs%3Dt.length%3Bi%3Cs%3Bi%2B%2B)this.set(t.charCodeAt(i)%2C2)%3Bthis.set(32%2C1)%2Cthis.set(9%2C1)%7DfindPrevIntlWordBeforeOrAtOffset(t%2Cn)%7Blet%20i%3Dnull%3Bfor(let%20s%20of%20this._getIntlSegmenterWordsOnLine(t))%7Bif(s.index%3En)break%3Bi%3Ds%7Dreturn%20i%7DfindNextIntlWordAtOrAfterOffset(t%2Cn)%7Bfor(let%20i%20of%20this._getIntlSegmenterWordsOnLine(t))if(!(i.index%3Cn))return%20i%3Breturn%20null%7D_getIntlSegmenterWordsOnLine(t)%7Breturn%20this._segmenter%3Fthis._cachedLine%3D%3D%3Dt%3Fthis._cachedSegments%3A(this._cachedLine%3Dt%2Cthis._cachedSegments%3Dthis._filterWordSegments(this._segmenter.segment(t))%2Cthis._cachedSegments)%3A%5B%5D%7D_filterWordSegments(t)%7Blet%20n%3D%5B%5D%3Bfor(let%20i%20of%20t)this._isWordLike(i)%26%26n.push(i)%3Breturn%20n%7D_isWordLike(t)%7Breturn!!t.isWordLike%7D%7D%2Cut%3Dnew%20ue(10)%3Bfunction%20ct(r%2Ce)%7Blet%20t%3D%60%24%7Br%7D%2F%24%7Be.join(%22%2C%22)%7D%60%2Cn%3Dut.get(t)%3Breturn%20n%7C%7C(n%3Dnew%20je(r%2Ce)%2Cut.set(t%2Cn))%2Cn%7Dfunction%20Ft(r)%7Breturn%20r.replace(%2F%5B%5C%5C%5C%7B%5C%7D%5C*%5C%2B%5C%3F%5C%7C%5C%5E%5C%24%5C.%5C%5B%5C%5D%5C(%5C)%5D%2Fg%2C%22%5C%5C%24%26%22)%7Dfunction%20Pt(r)%7Breturn%2055296%3C%3Dr%26%26r%3C%3D56319%7Dfunction%20Rt(r)%7Breturn%2056320%3C%3Dr%26%26r%3C%3D57343%7Dfunction%20Vt(r%2Ce)%7Breturn(r-55296%3C%3C10)%2B(e-56320)%2B65536%7Dfunction%20dt(r%2Ce%2Ct)%7Blet%20n%3Dr.charCodeAt(t)%3Bif(Pt(n)%26%26t%2B1%3Ce)%7Blet%20i%3Dr.charCodeAt(t%2B1)%3Bif(Rt(i))return%20Vt(n%2Ci)%7Dreturn%20n%7Dfunction%20ht(r%2Ce%2Ct%3D%7B%7D)%7Bif(!r)throw%20new%20Error(%22Cannot%20create%20regex%20from%20empty%20string%22)%3Be%7C%7C(r%3DFt(r))%2Ct.wholeWord%26%26(%2F%5CB%2F.test(r.charAt(0))%7C%7C(r%3D%22%5C%5Cb%22%2Br)%2C%2F%5CB%2F.test(r.charAt(r.length-1))%7C%7C(r%3Dr%2B%22%5C%5Cb%22))%3Blet%20n%3D%22%22%3Breturn%20t.global%26%26(n%2B%3D%22g%22)%2Ct.matchCase%7C%7C(n%2B%3D%22i%22)%2Ct.multiline%26%26(n%2B%3D%22m%22)%2Ct.unicode%26%26(n%2B%3D%22u%22)%2Cnew%20RegExp(r%2Cn)%7Dvar%20Ke%3Dclass%7Bconstructor(e)%7Blet%20t%3D%5B%5D%2Cn%3D0%3Bfor(let%20i%3D0%2Cs%3De.length%3Bi%3Cs%3Bi%2B%2B)e.charCodeAt(i)%3D%3D%3D10%26%26(t%5Bn%2B%2B%5D%3Di)%3Bthis._lineFeedsOffsets%3Dt%7DfindLineFeedCountBeforeOffset(e)%7Blet%20t%3Dthis._lineFeedsOffsets%2Cn%3D0%2Ci%3Dt.length-1%3Bif(i%3D%3D%3D-1%7C%7Ce%3C%3Dt%5B0%5D)return%200%3Bfor(%3Bn%3Ci%3B)%7Blet%20s%3Dn%2B((i-n)%2F2%3E%3E0)%3Bt%5Bs%5D%3E%3De%3Fi%3Ds-1%3At%5Bs%2B1%5D%3E%3De%3F(n%3Ds%2Ci%3Ds)%3An%3Ds%2B1%7Dreturn%20n%2B1%7D%7D%2Cde%3Dclass%7Bstatic%20findMatches(e%2Ct%2Cn%2Ci%2Cs)%7Blet%20o%3Dt.parseSearchRequest()%3Breturn%20o%3Fo.regex.multiline%3Fthis._doFindMatchesMultiline(e%2Cn%2Cnew%20K(o.wordSeparators%2Co.regex)%2Ci%2Cs)%3Athis._doFindMatchesLineByLine(e%2Cn%2Co%2Ci%2Cs)%3A%5B%5D%7Dstatic%20_doFindMatchesMultiline(e%2Ct%2Cn%2Ci%2Cs)%7Blet%20o%3Dt.getStartPosition()%2Ca%3De.getOffsetAt(o.lineNumber%2Co.column)%2Cl%3De.getValueInRange(t%2C1)%2Cf%3De.getEOL()%3D%3D%3D%60%5Cr%0A%60%3Fnew%20Ke(l)%3Anull%2Cu%3D%5B%5D%2Cc%3D0%2Cd%3Bfor(n.reset(0)%3Bd%3Dn.next(l)%3B)if(u%5Bc%2B%2B%5D%3Dee(this._getMultilineMatchRange(e%2Ca%2Cl%2Cf%2Cd.index%2Cd%5B0%5D)%2Cd%2Ci)%2Cc%3E%3Ds)return%20u%3Breturn%20u%7Dstatic%20_getMultilineMatchRange(e%2Ct%2Cn%2Ci%2Cs%2Co)%7Blet%20a%2Cl%3D0%3Bi%3F(l%3Di.findLineFeedCountBeforeOffset(s)%2Ca%3Dt%2Bs%2Bl)%3Aa%3Dt%2Bs%3Blet%20f%3Bif(i)%7Blet%20b%3Di.findLineFeedCountBeforeOffset(s%2Bo.length)-l%3Bf%3Da%2Bo.length%2Bb%7Delse%20f%3Da%2Bo.length%3Blet%20u%3De.positionAt(a)%2Cc%3De.positionAt(f)%3Breturn%20new%20A(u.lineNumber%2Cu.column%2Cc.lineNumber%2Cc.column)%7Dstatic%20_doFindMatchesLineByLine(e%2Ct%2Cn%2Ci%2Cs)%7Blet%20o%3D%5B%5D%2Ca%3D0%3Bif(t.startLineNumber%3D%3D%3Dt.endLineNumber)%7Blet%20f%3De.getLineContent(t.startLineNumber).substring(t.startColumn-1%2Ct.endColumn-1)%3Ba%3Dthis._findMatchesInLine(n%2Cf%2Ct.startLineNumber%2Ct.startColumn-1%2Ca%2Co%2Ci%2Cs)%7Dlet%20l%3De.getLineContent(t.startLineNumber).substring(t.startColumn-1)%3Ba%3Dthis._findMatchesInLine(n%2Cl%2Ct.startLineNumber%2Ct.startColumn-1%2Ca%2Co%2Ci%2Cs)%3Bfor(let%20f%3Dt.startLineNumber%2B1%3Bf%3Ct.endLineNumber%26%26a%3Cs%3Bf%2B%2B)a%3Dthis._findMatchesInLine(n%2Ce.getLineContent(f)%2Cf%2C0%2Ca%2Co%2Ci%2Cs)%3Bif(a%3Cs)%7Blet%20f%3De.getLineContent(t.endLineNumber).substring(0%2Ct.endColumn-1)%3Ba%3Dthis._findMatchesInLine(n%2Cf%2Ct.endLineNumber%2C0%2Ca%2Co%2Ci%2Cs)%7Dreturn%20o%7Dstatic%20_findMatchesInLine(e%2Ct%2Cn%2Ci%2Cs%2Co%2Ca%2Cl)%7Blet%20f%3De.wordSeparators%3Bif(!a%26%26e.simpleSearch)%7Blet%20d%3De.simpleSearch%2Cb%3Dd.length%2Ck%3Dt.length%2CL%3D-b%3Bfor(%3B(L%3Dt.indexOf(d%2CL%2Bb))!%3D%3D-1%3B)if((!f%7C%7Che(f%2Ct%2Ck%2CL%2Cb))%26%26(o%5Bs%2B%2B%5D%3Dnew%20V(new%20A(n%2CL%2B1%2Bi%2Cn%2CL%2B1%2Bb%2Bi)%2Cnull)%2Cs%3E%3Dl))return%20s%7Dlet%20u%3Dnew%20K(e.wordSeparators%2Ce.regex)%2Cc%3Bu.reset(0)%3Bdo%20if(c%3Du.next(t)%2Cc%26%26(o%5Bs%2B%2B%5D%3Dee(new%20A(n%2Cc.index%2B1%2Bi%2Cn%2Cc.index%2B1%2Bc%5B0%5D.length%2Bi)%2Cc%2Ca)%2Cs%3E%3Dl))return%20s%3Bwhile(c)%3Breturn%20s%7D%7D%2CY%3Dclass%7Bconstructor(e%2Ct%2Cn%2Ci)%7Bthis.searchString%3De%2Cthis.isRegex%3Dt%2Cthis.matchCase%3Dn%2Cthis.wordSeparators%3Di%7DparseSearchRequest()%7Bif(this.searchString%3D%3D%3D%22%22)return%20null%3Blet%20e%3Bthis.isRegex%3Fe%3DWt(this.searchString)%3Ae%3Dthis.searchString.indexOf(%60%0A%60)%3E%3D0%3Blet%20t%3Dnull%3Btry%7Bt%3Dht(this.searchString%2Cthis.isRegex%2C%7BmatchCase%3Athis.matchCase%2CwholeWord%3A!1%2Cmultiline%3Ae%2Cglobal%3A!0%2Cunicode%3A!0%7D)%7Dcatch%7Breturn%20null%7Dif(!t)return%20null%3Blet%20n%3D!this.isRegex%26%26!e%3Breturn%20n%26%26this.searchString.toLowerCase()!%3D%3Dthis.searchString.toUpperCase()%26%26(n%3Dthis.matchCase)%2Cnew%20ae(t%2Cthis.wordSeparators%3Fct(this.wordSeparators%2C%5B%5D)%3Anull%2Cn%3Fthis.searchString%3Anull)%7D%7D%3Bfunction%20Wt(r)%7Bif(!r%7C%7Cr.length%3D%3D%3D0)return!1%3Bfor(let%20e%3D0%2Ct%3Dr.length%3Be%3Ct%3Be%2B%2B)%7Blet%20n%3Dr.charCodeAt(e)%3Bif(n%3D%3D%3D10)return!0%3Bif(n%3D%3D%3D92)%7Bif(e%2B%2B%2Ce%3E%3Dt)break%3Blet%20i%3Dr.charCodeAt(e)%3Bif(i%3D%3D%3D110%7C%7Ci%3D%3D%3D114%7C%7Ci%3D%3D%3D87)return!0%7D%7Dreturn!1%7Dfunction%20Ut(r%2Ce%2Ct%2Cn%2Ci)%7Bif(n%3D%3D%3D0)return!0%3Blet%20s%3De.charCodeAt(n-1)%3Bif(r.get(s)!%3D%3D0%7C%7Cs%3D%3D%3D13%7C%7Cs%3D%3D%3D10)return!0%3Bif(i%3E0)%7Blet%20o%3De.charCodeAt(n)%3Bif(r.get(o)!%3D%3D0)return!0%7Dreturn!1%7Dfunction%20Jt(r%2Ce%2Ct%2Cn%2Ci)%7Bif(n%2Bi%3D%3D%3Dt)return!0%3Blet%20s%3De.charCodeAt(n%2Bi)%3Bif(r.get(s)!%3D%3D0%7C%7Cs%3D%3D%3D13%7C%7Cs%3D%3D%3D10)return!0%3Bif(i%3E0)%7Blet%20o%3De.charCodeAt(n%2Bi-1)%3Bif(r.get(o)!%3D%3D0)return!0%7Dreturn!1%7Dfunction%20he(r%2Ce%2Ct%2Cn%2Ci)%7Breturn%20Ut(r%2Ce%2Ct%2Cn%2Ci)%26%26Jt(r%2Ce%2Ct%2Cn%2Ci)%7Dvar%20K%3Dclass%7Bconstructor(e%2Ct)%7Bthis._wordSeparators%3De%2Cthis._searchRegex%3Dt%2Cthis._prevMatchStartIndex%3D-1%2Cthis._prevMatchLength%3D0%7Dreset(e)%7Bthis._searchRegex.lastIndex%3De%2Cthis._prevMatchStartIndex%3D-1%2Cthis._prevMatchLength%3D0%7Dnext(e)%7Blet%20t%3De.length%2Cn%3Bdo%7Bif(this._prevMatchStartIndex%2Bthis._prevMatchLength%3D%3D%3Dt%7C%7C(n%3Dthis._searchRegex.exec(e)%2C!n))return%20null%3Blet%20i%3Dn.index%2Cs%3Dn%5B0%5D.length%3Bif(i%3D%3D%3Dthis._prevMatchStartIndex%26%26s%3D%3D%3Dthis._prevMatchLength)%7Bif(s%3D%3D%3D0)%7Bdt(e%2Ct%2Cthis._searchRegex.lastIndex)%3E65535%3Fthis._searchRegex.lastIndex%2B%3D2%3Athis._searchRegex.lastIndex%2B%3D1%3Bcontinue%7Dreturn%20null%7Dif(this._prevMatchStartIndex%3Di%2Cthis._prevMatchLength%3Ds%2C!this._wordSeparators%7C%7Che(this._wordSeparators%2Ce%2Ct%2Ci%2Cs))return%20n%7Dwhile(n)%3Breturn%20null%7D%7D%3Bfunction%20ee(r%2Ce%2Ct)%7Bif(!t)return%20new%20V(r%2Cnull)%3Blet%20n%3D%5B%5D%3Bfor(let%20i%3D0%2Cs%3De.length%3Bi%3Cs%3Bi%2B%2B)n%5Bi%5D%3De%5Bi%5D%3Breturn%20new%20V(r%2Cn)%7Dvar%20R%3D65535%3Bfunction%20pt(r)%7Blet%20e%3Breturn%20r%5Br.length-1%5D%3C65536%3Fe%3Dnew%20Uint16Array(r.length)%3Ae%3Dnew%20Uint32Array(r.length)%2Ce.set(r%2C0)%2Ce%7Dvar%20De%3Dclass%7Bconstructor(e%2Ct%2Cn%2Ci%2Cs)%7Bthis.lineStarts%3De%3Bthis.cr%3Dt%3Bthis.lf%3Dn%3Bthis.crlf%3Di%3Bthis.isBasicASCII%3Ds%7D%7D%3Bfunction%20E(r%2Ce%3D!0)%7Blet%20t%3D%5B0%5D%2Cn%3D1%3Bfor(let%20i%3D0%2Cs%3Dr.length%3Bi%3Cs%3Bi%2B%2B)%7Blet%20o%3Dr.charCodeAt(i)%3Bo%3D%3D%3D13%3Fi%2B1%3Cs%26%26r.charCodeAt(i%2B1)%3D%3D%3D10%3F(t%5Bn%2B%2B%5D%3Di%2B2%2Ci%2B%2B)%3At%5Bn%2B%2B%5D%3Di%2B1%3Ao%3D%3D%3D10%26%26(t%5Bn%2B%2B%5D%3Di%2B1)%7Dreturn%20e%3Fpt(t)%3At%7Dfunction%20gt(r%2Ce)%7Br.length%3D0%2Cr%5B0%5D%3D0%3Blet%20t%3D1%2Cn%3D0%2Ci%3D0%2Cs%3D0%2Co%3D!0%3Bfor(let%20l%3D0%2Cf%3De.length%3Bl%3Cf%3Bl%2B%2B)%7Blet%20u%3De.charCodeAt(l)%3Bu%3D%3D%3D13%3Fl%2B1%3Cf%26%26e.charCodeAt(l%2B1)%3D%3D%3D10%3F(s%2B%2B%2Cr%5Bt%2B%2B%5D%3Dl%2B2%2Cl%2B%2B)%3A(n%2B%2B%2Cr%5Bt%2B%2B%5D%3Dl%2B1)%3Au%3D%3D%3D10%3F(i%2B%2B%2Cr%5Bt%2B%2B%5D%3Dl%2B1)%3Ao%26%26u!%3D%3D9%26%26(u%3C32%7C%7Cu%3E126)%26%26(o%3D!1)%7Dlet%20a%3Dnew%20De(pt(r)%2Cn%2Ci%2Cs%2Co)%3Breturn%20r.length%3D0%2Ca%7Dvar%20v%3Dclass%7Bconstructor(e%2Ct%2Cn%2Ci%2Cs)%7Bthis.bufferIndex%3De%2Cthis.start%3Dt%2Cthis.end%3Dn%2Cthis.lineFeedCnt%3Di%2Cthis.length%3Ds%7D%7D%2CM%3Dclass%7Bconstructor(e%2Ct)%7Bthis.buffer%3De%2Cthis.lineStarts%3Dt%7D%7D%2Cqe%3Dclass%7Bconstructor(e%2Ct)%7Bthis._pieces%3D%5B%5D%2Cthis._tree%3De%2Cthis._BOM%3Dt%2Cthis._index%3D0%2Ce.root!%3D%3Dm%26%26e.iterate(e.root%2Cn%3D%3E(n!%3D%3Dm%26%26this._pieces.push(n.piece)%2C!0))%7Dread()%7Breturn%20this._pieces.length%3D%3D%3D0%3Fthis._index%3D%3D%3D0%3F(this._index%2B%2B%2Cthis._BOM)%3Anull%3Athis._index%3Ethis._pieces.length-1%3Fnull%3Athis._index%3D%3D%3D0%3Fthis._BOM%2Bthis._tree.getPieceContent(this._pieces%5Bthis._index%2B%2B%5D)%3Athis._tree.getPieceContent(this._pieces%5Bthis._index%2B%2B%5D)%7D%7D%2C%24e%3Dclass%7Bconstructor(e)%7Bthis._limit%3De%2Cthis._cache%3D%5B%5D%7Dget(e)%7Bfor(let%20t%3Dthis._cache.length-1%3Bt%3E%3D0%3Bt--)%7Blet%20n%3Dthis._cache%5Bt%5D%3Bif(n.nodeStartOffset%3C%3De%26%26n.nodeStartOffset%2Bn.node.piece.length%3E%3De)return%20n%7Dreturn%20null%7Dget2(e)%7Bfor(let%20t%3Dthis._cache.length-1%3Bt%3E%3D0%3Bt--)%7Blet%20n%3Dthis._cache%5Bt%5D%3Bif(n.nodeStartLineNumber%26%26n.nodeStartLineNumber%3Ce%26%26n.nodeStartLineNumber%2Bn.node.piece.lineFeedCnt%3E%3De)return%20n%7Dreturn%20null%7Dset(e)%7Bthis._cache.length%3E%3Dthis._limit%26%26this._cache.shift()%2Cthis._cache.push(e)%7Dvalidate(e)%7Blet%20t%3D!1%2Cn%3Dthis._cache%3Bfor(let%20i%3D0%3Bi%3Cn.length%3Bi%2B%2B)%7Blet%20s%3Dn%5Bi%5D%3Bif(s.node.parent%3D%3D%3Dnull%7C%7Cs.nodeStartOffset%3E%3De)%7Bn%5Bi%5D%3Dnull%2Ct%3D!0%3Bcontinue%7D%7Dif(t)%7Blet%20i%3D%5B%5D%3Bfor(let%20s%20of%20n)s!%3D%3Dnull%26%26i.push(s)%3Bthis._cache%3Di%7D%7D%7D%2Cpe%3Dclass%7Bconstructor(e%2Ct%2Cn)%7Bthis.create(e%2Ct%2Cn)%7Dcreate(e%2Ct%2Cn)%7Bthis._buffers%3D%5Bnew%20M(%22%22%2C%5B0%5D)%5D%2Cthis._lastChangeBufferPos%3D%7Bline%3A0%2Ccolumn%3A0%7D%2Cthis.root%3Dm%2Cthis._lineCnt%3D1%2Cthis._length%3D0%2Cthis._EOL%3Dt%2Cthis._EOLLength%3Dt.length%2Cthis._EOLNormalized%3Dn%3Blet%20i%3Dnull%3Bfor(let%20s%3D0%2Co%3De.length%3Bs%3Co%3Bs%2B%2B)if(e%5Bs%5D.buffer.length%3E0)%7Be%5Bs%5D.lineStarts%7C%7C(e%5Bs%5D.lineStarts%3DE(e%5Bs%5D.buffer))%3Blet%20a%3Dnew%20v(s%2B1%2C%7Bline%3A0%2Ccolumn%3A0%7D%2C%7Bline%3Ae%5Bs%5D.lineStarts.length-1%2Ccolumn%3Ae%5Bs%5D.buffer.length-e%5Bs%5D.lineStarts%5Be%5Bs%5D.lineStarts.length-1%5D%7D%2Ce%5Bs%5D.lineStarts.length-1%2Ce%5Bs%5D.buffer.length)%3Bthis._buffers.push(e%5Bs%5D)%2Ci%3Dthis.rbInsertRight(i%2Ca)%7Dthis._searchCache%3Dnew%20%24e(1)%2Cthis._lastVisitedLine%3D%7BlineNumber%3A0%2Cvalue%3A%22%22%7D%2Cthis.computeBufferMetadata()%7DnormalizeEOL(e)%7Blet%20t%3DR%2Cn%3Dt-Math.floor(t%2F3)%2Ci%3Dn*2%2Cs%3D%22%22%2Co%3D0%2Ca%3D%5B%5D%3Bif(this.iterate(this.root%2Cl%3D%3E%7Blet%20f%3Dthis.getNodeContent(l)%2Cu%3Df.length%3Bif(o%3C%3Dn%7C%7Co%2Bu%3Ci)return%20s%2B%3Df%2Co%2B%3Du%2C!0%3Blet%20c%3Ds.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2Ce)%3Breturn%20a.push(new%20M(c%2CE(c)))%2Cs%3Df%2Co%3Du%2C!0%7D)%2Co%3E0)%7Blet%20l%3Ds.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2Ce)%3Ba.push(new%20M(l%2CE(l)))%7Dthis.create(a%2Ce%2C!0)%7DgetEOL()%7Breturn%20this._EOL%7DsetEOL(e)%7Bthis._EOL%3De%2Cthis._EOLLength%3Dthis._EOL.length%2Cthis.normalizeEOL(e)%7DcreateSnapshot(e)%7Breturn%20new%20qe(this%2Ce)%7Dequal(e)%7Bif(this.getLength()!%3D%3De.getLength()%7C%7Cthis.getLineCount()!%3D%3De.getLineCount())return!1%3Blet%20t%3D0%3Breturn%20this.iterate(this.root%2Ci%3D%3E%7Bif(i%3D%3D%3Dm)return!0%3Blet%20s%3Dthis.getNodeContent(i)%2Co%3Ds.length%2Ca%3De.nodeAt(t)%2Cl%3De.nodeAt(t%2Bo)%2Cf%3De.getValueInRange2(a%2Cl)%3Breturn%20t%2B%3Do%2Cs%3D%3D%3Df%7D)%7DgetOffsetAt(e%2Ct)%7Blet%20n%3D0%2Ci%3Dthis.root%3Bfor(%3Bi!%3D%3Dm%3B)if(i.left!%3D%3Dm%26%26i.lf_left%2B1%3E%3De)i%3Di.left%3Belse%20if(i.lf_left%2Bi.piece.lineFeedCnt%2B1%3E%3De)%7Bn%2B%3Di.size_left%3Blet%20s%3Dthis.getAccumulatedValue(i%2Ce-i.lf_left-2)%3Breturn%20n%2B%3Ds%2Bt-1%7Delse%20e-%3Di.lf_left%2Bi.piece.lineFeedCnt%2Cn%2B%3Di.size_left%2Bi.piece.length%2Ci%3Di.right%3Breturn%20n%7DgetPositionAt(e)%7Be%3DMath.floor(e)%2Ce%3DMath.max(0%2Ce)%3Blet%20t%3Dthis.root%2Cn%3D0%2Ci%3De%3Bfor(%3Bt!%3D%3Dm%3B)if(t.size_left!%3D%3D0%26%26t.size_left%3E%3De)t%3Dt.left%3Belse%20if(t.size_left%2Bt.piece.length%3E%3De)%7Blet%20s%3Dthis.getIndexOf(t%2Ce-t.size_left)%3Bif(n%2B%3Dt.lf_left%2Bs.index%2Cs.index%3D%3D%3D0)%7Blet%20o%3Dthis.getOffsetAt(n%2B1%2C1)%2Ca%3Di-o%3Breturn%20new%20P(n%2B1%2Ca%2B1)%7Dreturn%20new%20P(n%2B1%2Cs.remainder%2B1)%7Delse%20if(e-%3Dt.size_left%2Bt.piece.length%2Cn%2B%3Dt.lf_left%2Bt.piece.lineFeedCnt%2Ct.right%3D%3D%3Dm)%7Blet%20s%3Dthis.getOffsetAt(n%2B1%2C1)%2Co%3Di-e-s%3Breturn%20new%20P(n%2B1%2Co%2B1)%7Delse%20t%3Dt.right%3Breturn%20new%20P(1%2C1)%7DgetValueInRange(e%2Ct)%7Bif(e.startLineNumber%3D%3D%3De.endLineNumber%26%26e.startColumn%3D%3D%3De.endColumn)return%22%22%3Blet%20n%3Dthis.nodeAt2(e.startLineNumber%2Ce.startColumn)%2Ci%3Dthis.nodeAt2(e.endLineNumber%2Ce.endColumn)%2Cs%3Dthis.getValueInRange2(n%2Ci)%3Breturn%20t%3Ft!%3D%3Dthis._EOL%7C%7C!this._EOLNormalized%3Fs.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2Ct)%3At%3D%3D%3Dthis.getEOL()%26%26this._EOLNormalized%3Fs%3As.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2Ct)%3As%7DgetValueInRange2(e%2Ct)%7Bif(e.node%3D%3D%3Dt.node)%7Blet%20a%3De.node%2Cl%3Dthis._buffers%5Ba.piece.bufferIndex%5D.buffer%2Cf%3Dthis.offsetInBuffer(a.piece.bufferIndex%2Ca.piece.start)%3Breturn%20l.substring(f%2Be.remainder%2Cf%2Bt.remainder)%7Dlet%20n%3De.node%2Ci%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%2Cs%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%2Co%3Di.substring(s%2Be.remainder%2Cs%2Bn.piece.length)%3Bfor(n%3Dn.next()%3Bn!%3D%3Dm%3B)%7Blet%20a%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%2Cl%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Bif(n%3D%3D%3Dt.node)%7Bo%2B%3Da.substring(l%2Cl%2Bt.remainder)%3Bbreak%7Delse%20o%2B%3Da.substr(l%2Cn.piece.length)%3Bn%3Dn.next()%7Dreturn%20o%7DgetLinesContent()%7Blet%20e%3D%5B%5D%2Ct%3D0%2Cn%3D%22%22%2Ci%3D!1%3Breturn%20this.iterate(this.root%2Cs%3D%3E%7Bif(s%3D%3D%3Dm)return!0%3Blet%20o%3Ds.piece%2Ca%3Do.length%3Bif(a%3D%3D%3D0)return!0%3Blet%20l%3Dthis._buffers%5Bo.bufferIndex%5D.buffer%2Cf%3Dthis._buffers%5Bo.bufferIndex%5D.lineStarts%2Cu%3Do.start.line%2Cc%3Do.end.line%2Cd%3Df%5Bu%5D%2Bo.start.column%3Bif(i%26%26(l.charCodeAt(d)%3D%3D%3D10%26%26(d%2B%2B%2Ca--)%2Ce%5Bt%2B%2B%5D%3Dn%2Cn%3D%22%22%2Ci%3D!1%2Ca%3D%3D%3D0))return!0%3Bif(u%3D%3D%3Dc)return!this._EOLNormalized%26%26l.charCodeAt(d%2Ba-1)%3D%3D%3D13%3F(i%3D!0%2Cn%2B%3Dl.substr(d%2Ca-1))%3An%2B%3Dl.substr(d%2Ca)%2C!0%3Bn%2B%3Dthis._EOLNormalized%3Fl.substring(d%2CMath.max(d%2Cf%5Bu%2B1%5D-this._EOLLength))%3Al.substring(d%2Cf%5Bu%2B1%5D).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%22%22)%2Ce%5Bt%2B%2B%5D%3Dn%3Bfor(let%20b%3Du%2B1%3Bb%3Cc%3Bb%2B%2B)n%3Dthis._EOLNormalized%3Fl.substring(f%5Bb%5D%2Cf%5Bb%2B1%5D-this._EOLLength)%3Al.substring(f%5Bb%5D%2Cf%5Bb%2B1%5D).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%22%22)%2Ce%5Bt%2B%2B%5D%3Dn%3Breturn!this._EOLNormalized%26%26l.charCodeAt(f%5Bc%5D%2Bo.end.column-1)%3D%3D%3D13%3F(i%3D!0%2Co.end.column%3D%3D%3D0%3Ft--%3An%3Dl.substr(f%5Bc%5D%2Co.end.column-1))%3An%3Dl.substr(f%5Bc%5D%2Co.end.column)%2C!0%7D)%2Ci%26%26(e%5Bt%2B%2B%5D%3Dn%2Cn%3D%22%22)%2Ce%5Bt%2B%2B%5D%3Dn%2Ce%7DgetLength()%7Breturn%20this._length%7DgetLineCount()%7Breturn%20this._lineCnt%7DgetLineContent(e)%7Breturn%20this._lastVisitedLine.lineNumber%3D%3D%3De%3Fthis._lastVisitedLine.value%3A(this._lastVisitedLine.lineNumber%3De%2Ce%3D%3D%3Dthis._lineCnt%3Fthis._lastVisitedLine.value%3Dthis.getLineRawContent(e)%3Athis._EOLNormalized%3Fthis._lastVisitedLine.value%3Dthis.getLineRawContent(e%2Cthis._EOLLength)%3Athis._lastVisitedLine.value%3Dthis.getLineRawContent(e).replace(%2F(%5Cr%5Cn%7C%5Cr%7C%5Cn)%24%2F%2C%22%22)%2Cthis._lastVisitedLine.value)%7D_getCharCode(e)%7Bif(e.remainder%3D%3D%3De.node.piece.length)%7Blet%20t%3De.node.next()%3Bif(!t)return%200%3Blet%20n%3Dthis._buffers%5Bt.piece.bufferIndex%5D%2Ci%3Dthis.offsetInBuffer(t.piece.bufferIndex%2Ct.piece.start)%3Breturn%20n.buffer.charCodeAt(i)%7Delse%7Blet%20t%3Dthis._buffers%5Be.node.piece.bufferIndex%5D%2Ci%3Dthis.offsetInBuffer(e.node.piece.bufferIndex%2Ce.node.piece.start)%2Be.remainder%3Breturn%20t.buffer.charCodeAt(i)%7D%7DgetLineCharCode(e%2Ct)%7Blet%20n%3Dthis.nodeAt2(e%2Ct%2B1)%3Breturn%20this._getCharCode(n)%7DgetLineLength(e)%7Bif(e%3D%3D%3Dthis.getLineCount())%7Blet%20t%3Dthis.getOffsetAt(e%2C1)%3Breturn%20this.getLength()-t%7Dreturn%20this.getOffsetAt(e%2B1%2C1)-this.getOffsetAt(e%2C1)-this._EOLLength%7DgetCharCode(e)%7Blet%20t%3Dthis.nodeAt(e)%3Breturn%20this._getCharCode(t)%7DgetNearestChunk(e)%7Blet%20t%3Dthis.nodeAt(e)%3Bif(t.remainder%3D%3D%3Dt.node.piece.length)%7Blet%20n%3Dt.node.next()%3Bif(!n%7C%7Cn%3D%3D%3Dm)return%22%22%3Blet%20i%3Dthis._buffers%5Bn.piece.bufferIndex%5D%2Cs%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Breturn%20i.buffer.substring(s%2Cs%2Bn.piece.length)%7Delse%7Blet%20n%3Dthis._buffers%5Bt.node.piece.bufferIndex%5D%2Ci%3Dthis.offsetInBuffer(t.node.piece.bufferIndex%2Ct.node.piece.start)%2Cs%3Di%2Bt.remainder%2Co%3Di%2Bt.node.piece.length%3Breturn%20n.buffer.substring(s%2Co)%7D%7DfindMatchesInNode(e%2Ct%2Cn%2Ci%2Cs%2Co%2Ca%2Cl%2Cf%2Cu%2Cc)%7Blet%20d%3Dthis._buffers%5Be.piece.bufferIndex%5D%2Cb%3Dthis.offsetInBuffer(e.piece.bufferIndex%2Ce.piece.start)%2Ck%3Dthis.offsetInBuffer(e.piece.bufferIndex%2Cs)%2CL%3Dthis.offsetInBuffer(e.piece.bufferIndex%2Co)%2CS%2Cw%3D%7Bline%3A0%2Ccolumn%3A0%7D%2CI%2Cx%3Bt._wordSeparators%3F(I%3Dd.buffer.substring(k%2CL)%2Cx%3D_%3D%3E_%2Bk%2Ct.reset(0))%3A(I%3Dd.buffer%2Cx%3D_%3D%3E_%2Ct.reset(k))%3Bdo%20if(S%3Dt.next(I)%2CS)%7Bif(x(S.index)%3E%3DL)return%20u%3Bthis.positionInBuffer(e%2Cx(S.index)-b%2Cw)%3Blet%20_%3Dthis.getLineFeedCnt(e.piece.bufferIndex%2Cs%2Cw)%2Cg%3Dw.line%3D%3D%3Ds.line%3Fw.column-s.column%2Bi%3Aw.column%2B1%2Ch%3Dg%2BS%5B0%5D.length%3Bif(c%5Bu%2B%2B%5D%3Dee(new%20A(n%2B_%2Cg%2Cn%2B_%2Ch)%2CS%2Cl)%2Cx(S.index)%2BS%5B0%5D.length%3E%3DL%7C%7Cu%3E%3Df)return%20u%7Dwhile(S)%3Breturn%20u%7DfindMatchesLineByLine(e%2Ct%2Cn%2Ci)%7Blet%20s%3D%5B%5D%2Co%3D0%2Ca%3Dnew%20K(t.wordSeparators%2Ct.regex)%2Cl%3Dthis.nodeAt2(e.startLineNumber%2Ce.startColumn)%3Bif(l%3D%3D%3Dnull)return%5B%5D%3Blet%20f%3Dthis.nodeAt2(e.endLineNumber%2Ce.endColumn)%3Bif(f%3D%3D%3Dnull)return%5B%5D%3Blet%20u%3Dthis.positionInBuffer(l.node%2Cl.remainder)%2Cc%3Dthis.positionInBuffer(f.node%2Cf.remainder)%3Bif(l.node%3D%3D%3Df.node)return%20this.findMatchesInNode(l.node%2Ca%2Ce.startLineNumber%2Ce.startColumn%2Cu%2Cc%2Ct%2Cn%2Ci%2Co%2Cs)%2Cs%3Blet%20d%3De.startLineNumber%2Cb%3Dl.node%3Bfor(%3Bb!%3D%3Df.node%3B)%7Blet%20L%3Dthis.getLineFeedCnt(b.piece.bufferIndex%2Cu%2Cb.piece.end)%3Bif(L%3E%3D1)%7Blet%20w%3Dthis._buffers%5Bb.piece.bufferIndex%5D.lineStarts%2CI%3Dthis.offsetInBuffer(b.piece.bufferIndex%2Cb.piece.start)%2Cx%3Dw%5Bu.line%2BL%5D%2C_%3Dd%3D%3D%3De.startLineNumber%3Fe.startColumn%3A1%3Bif(o%3Dthis.findMatchesInNode(b%2Ca%2Cd%2C_%2Cu%2Cthis.positionInBuffer(b%2Cx-I)%2Ct%2Cn%2Ci%2Co%2Cs)%2Co%3E%3Di)return%20s%3Bd%2B%3DL%7Dlet%20S%3Dd%3D%3D%3De.startLineNumber%3Fe.startColumn-1%3A0%3Bif(d%3D%3D%3De.endLineNumber)%7Blet%20w%3Dthis.getLineContent(d).substring(S%2Ce.endColumn-1)%3Breturn%20o%3Dthis._findMatchesInLine(t%2Ca%2Cw%2Ce.endLineNumber%2CS%2Co%2Cs%2Cn%2Ci)%2Cs%7Dif(o%3Dthis._findMatchesInLine(t%2Ca%2Cthis.getLineContent(d).substr(S)%2Cd%2CS%2Co%2Cs%2Cn%2Ci)%2Co%3E%3Di)return%20s%3Bd%2B%2B%2Cl%3Dthis.nodeAt2(d%2C1)%2Cb%3Dl.node%2Cu%3Dthis.positionInBuffer(l.node%2Cl.remainder)%7Dif(d%3D%3D%3De.endLineNumber)%7Blet%20L%3Dd%3D%3D%3De.startLineNumber%3Fe.startColumn-1%3A0%2CS%3Dthis.getLineContent(d).substring(L%2Ce.endColumn-1)%3Breturn%20o%3Dthis._findMatchesInLine(t%2Ca%2CS%2Ce.endLineNumber%2CL%2Co%2Cs%2Cn%2Ci)%2Cs%7Dlet%20k%3Dd%3D%3D%3De.startLineNumber%3Fe.startColumn%3A1%3Breturn%20o%3Dthis.findMatchesInNode(f.node%2Ca%2Cd%2Ck%2Cu%2Cc%2Ct%2Cn%2Ci%2Co%2Cs)%2Cs%7D_findMatchesInLine(e%2Ct%2Cn%2Ci%2Cs%2Co%2Ca%2Cl%2Cf)%7Blet%20u%3De.wordSeparators%3Bif(!l%26%26e.simpleSearch)%7Blet%20d%3De.simpleSearch%2Cb%3Dd.length%2Ck%3Dn.length%2CL%3D-b%3Bfor(%3B(L%3Dn.indexOf(d%2CL%2Bb))!%3D%3D-1%3B)if((!u%7C%7Che(u%2Cn%2Ck%2CL%2Cb))%26%26(a%5Bo%2B%2B%5D%3Dnew%20V(new%20A(i%2CL%2B1%2Bs%2Ci%2CL%2B1%2Bb%2Bs)%2Cnull)%2Co%3E%3Df))return%20o%3Breturn%20o%7Dlet%20c%3Bt.reset(0)%3Bdo%20if(c%3Dt.next(n)%2Cc%26%26(a%5Bo%2B%2B%5D%3Dee(new%20A(i%2Cc.index%2B1%2Bs%2Ci%2Cc.index%2B1%2Bc%5B0%5D.length%2Bs)%2Cc%2Cl)%2Co%3E%3Df))return%20o%3Bwhile(c)%3Breturn%20o%7Dinsert(e%2Ct%2Cn%3D!1)%7Bif(this._EOLNormalized%3Dthis._EOLNormalized%26%26n%2Cthis._lastVisitedLine.lineNumber%3D0%2Cthis._lastVisitedLine.value%3D%22%22%2Cthis.root!%3D%3Dm)%7Blet%7Bnode%3Ai%2Cremainder%3As%2CnodeStartOffset%3Ao%7D%3Dthis.nodeAt(e)%2Ca%3Di.piece%2Cl%3Da.bufferIndex%2Cf%3Dthis.positionInBuffer(i%2Cs)%3Bif(i.piece.bufferIndex%3D%3D%3D0%26%26a.end.line%3D%3D%3Dthis._lastChangeBufferPos.line%26%26a.end.column%3D%3D%3Dthis._lastChangeBufferPos.column%26%26o%2Ba.length%3D%3D%3De%26%26t.length%3CR)%7Bthis.appendToNode(i%2Ct)%2Cthis.computeBufferMetadata()%3Breturn%7Dif(o%3D%3D%3De)this.insertContentToNodeLeft(t%2Ci)%2Cthis._searchCache.validate(e)%3Belse%20if(o%2Bi.piece.length%3Ee)%7Blet%20u%3D%5B%5D%2Cc%3Dnew%20v(a.bufferIndex%2Cf%2Ca.end%2Cthis.getLineFeedCnt(a.bufferIndex%2Cf%2Ca.end)%2Cthis.offsetInBuffer(l%2Ca.end)-this.offsetInBuffer(l%2Cf))%3Bif(this.shouldCheckCRLF()%26%26this.endWithCR(t)%26%26this.nodeCharCodeAt(i%2Cs)%3D%3D%3D10)%7Blet%20L%3D%7Bline%3Ac.start.line%2B1%2Ccolumn%3A0%7D%3Bc%3Dnew%20v(c.bufferIndex%2CL%2Cc.end%2Cthis.getLineFeedCnt(c.bufferIndex%2CL%2Cc.end)%2Cc.length-1)%2Ct%2B%3D%60%0A%60%7Dif(this.shouldCheckCRLF()%26%26this.startWithLF(t))if(this.nodeCharCodeAt(i%2Cs-1)%3D%3D%3D13)%7Blet%20L%3Dthis.positionInBuffer(i%2Cs-1)%3Bthis.deleteNodeTail(i%2CL)%2Ct%3D%22%5Cr%22%2Bt%2Ci.piece.length%3D%3D%3D0%26%26u.push(i)%7Delse%20this.deleteNodeTail(i%2Cf)%3Belse%20this.deleteNodeTail(i%2Cf)%3Blet%20d%3Dthis.createNewPieces(t)%3Bc.length%3E0%26%26this.rbInsertRight(i%2Cc)%3Blet%20b%3Di%3Bfor(let%20k%3D0%3Bk%3Cd.length%3Bk%2B%2B)b%3Dthis.rbInsertRight(b%2Cd%5Bk%5D)%3Bthis.deleteNodes(u)%7Delse%20this.insertContentToNodeRight(t%2Ci)%7Delse%7Blet%20i%3Dthis.createNewPieces(t)%2Cs%3Dthis.rbInsertLeft(null%2Ci%5B0%5D)%3Bfor(let%20o%3D1%3Bo%3Ci.length%3Bo%2B%2B)s%3Dthis.rbInsertRight(s%2Ci%5Bo%5D)%7Dthis.computeBufferMetadata()%7Ddelete(e%2Ct)%7Bif(this._lastVisitedLine.lineNumber%3D0%2Cthis._lastVisitedLine.value%3D%22%22%2Ct%3C%3D0%7C%7Cthis.root%3D%3D%3Dm)return%3Blet%20n%3Dthis.nodeAt(e)%2Ci%3Dthis.nodeAt(e%2Bt)%2Cs%3Dn.node%2Co%3Di.node%3Bif(s%3D%3D%3Do)%7Blet%20d%3Dthis.positionInBuffer(s%2Cn.remainder)%2Cb%3Dthis.positionInBuffer(s%2Ci.remainder)%3Bif(n.nodeStartOffset%3D%3D%3De)%7Bif(t%3D%3D%3Ds.piece.length)%7Blet%20k%3Ds.next()%3BQ(this%2Cs)%2Cthis.validateCRLFWithPrevNode(k)%2Cthis.computeBufferMetadata()%3Breturn%7Dthis.deleteNodeHead(s%2Cb)%2Cthis._searchCache.validate(e)%2Cthis.validateCRLFWithPrevNode(s)%2Cthis.computeBufferMetadata()%3Breturn%7Dif(n.nodeStartOffset%2Bs.piece.length%3D%3D%3De%2Bt)%7Bthis.deleteNodeTail(s%2Cd)%2Cthis.validateCRLFWithNextNode(s)%2Cthis.computeBufferMetadata()%3Breturn%7Dthis.shrinkNode(s%2Cd%2Cb)%2Cthis.computeBufferMetadata()%3Breturn%7Dlet%20a%3D%5B%5D%2Cl%3Dthis.positionInBuffer(s%2Cn.remainder)%3Bthis.deleteNodeTail(s%2Cl)%2Cthis._searchCache.validate(e)%2Cs.piece.length%3D%3D%3D0%26%26a.push(s)%3Blet%20f%3Dthis.positionInBuffer(o%2Ci.remainder)%3Bthis.deleteNodeHead(o%2Cf)%2Co.piece.length%3D%3D%3D0%26%26a.push(o)%3Blet%20u%3Ds.next()%3Bfor(let%20d%3Du%3Bd!%3D%3Dm%26%26d!%3D%3Do%3Bd%3Dd.next())a.push(d)%3Blet%20c%3Ds.piece.length%3D%3D%3D0%3Fs.prev()%3As%3Bthis.deleteNodes(a)%2Cthis.validateCRLFWithNextNode(c)%2Cthis.computeBufferMetadata()%7DinsertContentToNodeLeft(e%2Ct)%7Blet%20n%3D%5B%5D%3Bif(this.shouldCheckCRLF()%26%26this.endWithCR(e)%26%26this.startWithLF(t))%7Blet%20o%3Dt.piece%2Ca%3D%7Bline%3Ao.start.line%2B1%2Ccolumn%3A0%7D%2Cl%3Dnew%20v(o.bufferIndex%2Ca%2Co.end%2Cthis.getLineFeedCnt(o.bufferIndex%2Ca%2Co.end)%2Co.length-1)%3Bt.piece%3Dl%2Ce%2B%3D%60%0A%60%2CC(this%2Ct%2C-1%2C-1)%2Ct.piece.length%3D%3D%3D0%26%26n.push(t)%7Dlet%20i%3Dthis.createNewPieces(e)%2Cs%3Dthis.rbInsertLeft(t%2Ci%5Bi.length-1%5D)%3Bfor(let%20o%3Di.length-2%3Bo%3E%3D0%3Bo--)s%3Dthis.rbInsertLeft(s%2Ci%5Bo%5D)%3Bthis.validateCRLFWithPrevNode(s)%2Cthis.deleteNodes(n)%7DinsertContentToNodeRight(e%2Ct)%7Bthis.adjustCarriageReturnFromNext(e%2Ct)%26%26(e%2B%3D%60%0A%60)%3Blet%20n%3Dthis.createNewPieces(e)%2Ci%3Dthis.rbInsertRight(t%2Cn%5B0%5D)%2Cs%3Di%3Bfor(let%20o%3D1%3Bo%3Cn.length%3Bo%2B%2B)s%3Dthis.rbInsertRight(s%2Cn%5Bo%5D)%3Bthis.validateCRLFWithPrevNode(i)%7DpositionInBuffer(e%2Ct%2Cn)%7Blet%20i%3De.piece%2Cs%3De.piece.bufferIndex%2Co%3Dthis._buffers%5Bs%5D.lineStarts%2Cl%3Do%5Bi.start.line%5D%2Bi.start.column%2Bt%2Cf%3Di.start.line%2Cu%3Di.end.line%2Cc%3D0%2Cd%3D0%2Cb%3D0%3Bfor(%3Bf%3C%3Du%26%26(c%3Df%2B(u-f)%2F2%7C0%2Cb%3Do%5Bc%5D%2Cc!%3D%3Du)%3B)if(d%3Do%5Bc%2B1%5D%2Cl%3Cb)u%3Dc-1%3Belse%20if(l%3E%3Dd)f%3Dc%2B1%3Belse%20break%3Breturn%20n%3F(n.line%3Dc%2Cn.column%3Dl-b%2Cnull)%3A%7Bline%3Ac%2Ccolumn%3Al-b%7D%7DgetLineFeedCnt(e%2Ct%2Cn)%7Bif(n.column%3D%3D%3D0)return%20n.line-t.line%3Blet%20i%3Dthis._buffers%5Be%5D.lineStarts%3Bif(n.line%3D%3D%3Di.length-1)return%20n.line-t.line%3Blet%20s%3Di%5Bn.line%2B1%5D%2Co%3Di%5Bn.line%5D%2Bn.column%3Bif(s%3Eo%2B1)return%20n.line-t.line%3Blet%20a%3Do-1%3Breturn%20this._buffers%5Be%5D.buffer.charCodeAt(a)%3D%3D%3D13%3Fn.line-t.line%2B1%3An.line-t.line%7DoffsetInBuffer(e%2Ct)%7Breturn%20this._buffers%5Be%5D.lineStarts%5Bt.line%5D%2Bt.column%7DdeleteNodes(e)%7Bfor(let%20t%3D0%3Bt%3Ce.length%3Bt%2B%2B)Q(this%2Ce%5Bt%5D)%7DcreateNewPieces(e)%7Bif(e.length%3ER)%7Blet%20u%3D%5B%5D%3Bfor(%3Be.length%3ER%3B)%7Blet%20d%3De.charCodeAt(R-1)%2Cb%3Bd%3D%3D%3D13%7C%7Cd%3E%3D55296%26%26d%3C%3D56319%3F(b%3De.substring(0%2CR-1)%2Ce%3De.substring(R-1))%3A(b%3De.substring(0%2CR)%2Ce%3De.substring(R))%3Blet%20k%3DE(b)%3Bu.push(new%20v(this._buffers.length%2C%7Bline%3A0%2Ccolumn%3A0%7D%2C%7Bline%3Ak.length-1%2Ccolumn%3Ab.length-k%5Bk.length-1%5D%7D%2Ck.length-1%2Cb.length))%2Cthis._buffers.push(new%20M(b%2Ck))%7Dlet%20c%3DE(e)%3Breturn%20u.push(new%20v(this._buffers.length%2C%7Bline%3A0%2Ccolumn%3A0%7D%2C%7Bline%3Ac.length-1%2Ccolumn%3Ae.length-c%5Bc.length-1%5D%7D%2Cc.length-1%2Ce.length))%2Cthis._buffers.push(new%20M(e%2Cc))%2Cu%7Dlet%20t%3Dthis._buffers%5B0%5D.buffer.length%2Cn%3DE(e%2C!1)%2Ci%3Dthis._lastChangeBufferPos%3Bif(this._buffers%5B0%5D.lineStarts%5Bthis._buffers%5B0%5D.lineStarts.length-1%5D%3D%3D%3Dt%26%26t!%3D%3D0%26%26this.startWithLF(e)%26%26this.endWithCR(this._buffers%5B0%5D.buffer))%7Bthis._lastChangeBufferPos%3D%7Bline%3Athis._lastChangeBufferPos.line%2Ccolumn%3Athis._lastChangeBufferPos.column%2B1%7D%2Ci%3Dthis._lastChangeBufferPos%3Bfor(let%20u%3D0%3Bu%3Cn.length%3Bu%2B%2B)n%5Bu%5D%2B%3Dt%2B1%3Bthis._buffers%5B0%5D.lineStarts%3Dthis._buffers%5B0%5D.lineStarts.concat(n.slice(1))%2Cthis._buffers%5B0%5D.buffer%2B%3D%22_%22%2Be%2Ct%2B%3D1%7Delse%7Bif(t!%3D%3D0)for(let%20u%3D0%3Bu%3Cn.length%3Bu%2B%2B)n%5Bu%5D%2B%3Dt%3Bthis._buffers%5B0%5D.lineStarts%3Dthis._buffers%5B0%5D.lineStarts.concat(n.slice(1))%2Cthis._buffers%5B0%5D.buffer%2B%3De%7Dlet%20s%3Dthis._buffers%5B0%5D.buffer.length%2Co%3Dthis._buffers%5B0%5D.lineStarts.length-1%2Ca%3Ds-this._buffers%5B0%5D.lineStarts%5Bo%5D%2Cl%3D%7Bline%3Ao%2Ccolumn%3Aa%7D%2Cf%3Dnew%20v(0%2Ci%2Cl%2Cthis.getLineFeedCnt(0%2Ci%2Cl)%2Cs-t)%3Breturn%20this._lastChangeBufferPos%3Dl%2C%5Bf%5D%7DgetLinesRawContent()%7Breturn%20this.getContentOfSubTree(this.root)%7DgetLineRawContent(e%2Ct%3D0)%7Blet%20n%3Dthis.root%2Ci%3D%22%22%2Cs%3Dthis._searchCache.get2(e)%3Bif(s)%7Bn%3Ds.node%3Blet%20o%3Dthis.getAccumulatedValue(n%2Ce-s.nodeStartLineNumber-1)%2Ca%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%2Cl%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Bif(s.nodeStartLineNumber%2Bn.piece.lineFeedCnt%3D%3D%3De)i%3Da.substring(l%2Bo%2Cl%2Bn.piece.length)%3Belse%7Blet%20f%3Dthis.getAccumulatedValue(n%2Ce-s.nodeStartLineNumber)%3Breturn%20a.substring(l%2Bo%2Cl%2Bf-t)%7D%7Delse%7Blet%20o%3D0%2Ca%3De%3Bfor(%3Bn!%3D%3Dm%3B)if(n.left!%3D%3Dm%26%26n.lf_left%3E%3De-1)n%3Dn.left%3Belse%20if(n.lf_left%2Bn.piece.lineFeedCnt%3Ee-1)%7Blet%20l%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-2)%2Cf%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-1)%2Cu%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%2Cc%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Breturn%20o%2B%3Dn.size_left%2Cthis._searchCache.set(%7Bnode%3An%2CnodeStartOffset%3Ao%2CnodeStartLineNumber%3Aa-(e-1-n.lf_left)%7D)%2Cu.substring(c%2Bl%2Cc%2Bf-t)%7Delse%20if(n.lf_left%2Bn.piece.lineFeedCnt%3D%3D%3De-1)%7Blet%20l%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-2)%2Cf%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%2Cu%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Bi%3Df.substring(u%2Bl%2Cu%2Bn.piece.length)%3Bbreak%7Delse%20e-%3Dn.lf_left%2Bn.piece.lineFeedCnt%2Co%2B%3Dn.size_left%2Bn.piece.length%2Cn%3Dn.right%7Dfor(n%3Dn.next()%3Bn!%3D%3Dm%3B)%7Blet%20o%3Dthis._buffers%5Bn.piece.bufferIndex%5D.buffer%3Bif(n.piece.lineFeedCnt%3E0)%7Blet%20a%3Dthis.getAccumulatedValue(n%2C0)%2Cl%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Breturn%20i%2B%3Do.substring(l%2Cl%2Ba-t)%2Ci%7Delse%7Blet%20a%3Dthis.offsetInBuffer(n.piece.bufferIndex%2Cn.piece.start)%3Bi%2B%3Do.substr(a%2Cn.piece.length)%7Dn%3Dn.next()%7Dreturn%20i%7DcomputeBufferMetadata()%7Blet%20e%3Dthis.root%2Ct%3D1%2Cn%3D0%3Bfor(%3Be!%3D%3Dm%3B)t%2B%3De.lf_left%2Be.piece.lineFeedCnt%2Cn%2B%3De.size_left%2Be.piece.length%2Ce%3De.right%3Bthis._lineCnt%3Dt%2Cthis._length%3Dn%2Cthis._searchCache.validate(this._length)%7DgetIndexOf(e%2Ct)%7Blet%20n%3De.piece%2Ci%3Dthis.positionInBuffer(e%2Ct)%2Cs%3Di.line-n.start.line%3Bif(this.offsetInBuffer(n.bufferIndex%2Cn.end)-this.offsetInBuffer(n.bufferIndex%2Cn.start)%3D%3D%3Dt)%7Blet%20o%3Dthis.getLineFeedCnt(e.piece.bufferIndex%2Cn.start%2Ci)%3Bif(o!%3D%3Ds)return%7Bindex%3Ao%2Cremainder%3A0%7D%7Dreturn%7Bindex%3As%2Cremainder%3Ai.column%7D%7DgetAccumulatedValue(e%2Ct)%7Bif(t%3C0)return%200%3Blet%20n%3De.piece%2Ci%3Dthis._buffers%5Bn.bufferIndex%5D.lineStarts%2Cs%3Dn.start.line%2Bt%2B1%3Breturn%20s%3En.end.line%3Fi%5Bn.end.line%5D%2Bn.end.column-i%5Bn.start.line%5D-n.start.column%3Ai%5Bs%5D-i%5Bn.start.line%5D-n.start.column%7DdeleteNodeTail(e%2Ct)%7Blet%20n%3De.piece%2Ci%3Dn.lineFeedCnt%2Cs%3Dthis.offsetInBuffer(n.bufferIndex%2Cn.end)%2Co%3Dt%2Ca%3Dthis.offsetInBuffer(n.bufferIndex%2Co)%2Cl%3Dthis.getLineFeedCnt(n.bufferIndex%2Cn.start%2Co)%2Cf%3Dl-i%2Cu%3Da-s%2Cc%3Dn.length%2Bu%3Be.piece%3Dnew%20v(n.bufferIndex%2Cn.start%2Co%2Cl%2Cc)%2CC(this%2Ce%2Cu%2Cf)%7DdeleteNodeHead(e%2Ct)%7Blet%20n%3De.piece%2Ci%3Dn.lineFeedCnt%2Cs%3Dthis.offsetInBuffer(n.bufferIndex%2Cn.start)%2Co%3Dt%2Ca%3Dthis.getLineFeedCnt(n.bufferIndex%2Co%2Cn.end)%2Cl%3Dthis.offsetInBuffer(n.bufferIndex%2Co)%2Cf%3Da-i%2Cu%3Ds-l%2Cc%3Dn.length%2Bu%3Be.piece%3Dnew%20v(n.bufferIndex%2Co%2Cn.end%2Ca%2Cc)%2CC(this%2Ce%2Cu%2Cf)%7DshrinkNode(e%2Ct%2Cn)%7Blet%20i%3De.piece%2Cs%3Di.start%2Co%3Di.end%2Ca%3Di.length%2Cl%3Di.lineFeedCnt%2Cf%3Dt%2Cu%3Dthis.getLineFeedCnt(i.bufferIndex%2Ci.start%2Cf)%2Cc%3Dthis.offsetInBuffer(i.bufferIndex%2Ct)-this.offsetInBuffer(i.bufferIndex%2Cs)%3Be.piece%3Dnew%20v(i.bufferIndex%2Ci.start%2Cf%2Cu%2Cc)%2CC(this%2Ce%2Cc-a%2Cu-l)%3Blet%20d%3Dnew%20v(i.bufferIndex%2Cn%2Co%2Cthis.getLineFeedCnt(i.bufferIndex%2Cn%2Co)%2Cthis.offsetInBuffer(i.bufferIndex%2Co)-this.offsetInBuffer(i.bufferIndex%2Cn))%2Cb%3Dthis.rbInsertRight(e%2Cd)%3Bthis.validateCRLFWithPrevNode(b)%7DappendToNode(e%2Ct)%7Bthis.adjustCarriageReturnFromNext(t%2Ce)%26%26(t%2B%3D%60%0A%60)%3Blet%20n%3Dthis.shouldCheckCRLF()%26%26this.startWithLF(t)%26%26this.endWithCR(e)%2Ci%3Dthis._buffers%5B0%5D.buffer.length%3Bthis._buffers%5B0%5D.buffer%2B%3Dt%3Blet%20s%3DE(t%2C!1)%3Bfor(let%20b%3D0%3Bb%3Cs.length%3Bb%2B%2B)s%5Bb%5D%2B%3Di%3Bif(n)%7Blet%20b%3Dthis._buffers%5B0%5D.lineStarts%5Bthis._buffers%5B0%5D.lineStarts.length-2%5D%3Bthis._buffers%5B0%5D.lineStarts.pop()%2Cthis._lastChangeBufferPos%3D%7Bline%3Athis._lastChangeBufferPos.line-1%2Ccolumn%3Ai-b%7D%7Dthis._buffers%5B0%5D.lineStarts%3Dthis._buffers%5B0%5D.lineStarts.concat(s.slice(1))%3Blet%20o%3Dthis._buffers%5B0%5D.lineStarts.length-1%2Ca%3Dthis._buffers%5B0%5D.buffer.length-this._buffers%5B0%5D.lineStarts%5Bo%5D%2Cl%3D%7Bline%3Ao%2Ccolumn%3Aa%7D%2Cf%3De.piece.length%2Bt.length%2Cu%3De.piece.lineFeedCnt%2Cc%3Dthis.getLineFeedCnt(0%2Ce.piece.start%2Cl)%2Cd%3Dc-u%3Be.piece%3Dnew%20v(e.piece.bufferIndex%2Ce.piece.start%2Cl%2Cc%2Cf)%2Cthis._lastChangeBufferPos%3Dl%2CC(this%2Ce%2Ct.length%2Cd)%7DnodeAt(e)%7Blet%20t%3Dthis.root%2Cn%3Dthis._searchCache.get(e)%3Bif(n)return%7Bnode%3An.node%2CnodeStartOffset%3An.nodeStartOffset%2Cremainder%3Ae-n.nodeStartOffset%7D%3Blet%20i%3D0%3Bfor(%3Bt!%3D%3Dm%3B)if(t.size_left%3Ee)t%3Dt.left%3Belse%20if(t.size_left%2Bt.piece.length%3E%3De)%7Bi%2B%3Dt.size_left%3Blet%20s%3D%7Bnode%3At%2Cremainder%3Ae-t.size_left%2CnodeStartOffset%3Ai%7D%3Breturn%20this._searchCache.set(s)%2Cs%7Delse%20e-%3Dt.size_left%2Bt.piece.length%2Ci%2B%3Dt.size_left%2Bt.piece.length%2Ct%3Dt.right%3Breturn%20null%7DnodeAt2(e%2Ct)%7Blet%20n%3Dthis.root%2Ci%3D0%3Bfor(%3Bn!%3D%3Dm%3B)if(n.left!%3D%3Dm%26%26n.lf_left%3E%3De-1)n%3Dn.left%3Belse%20if(n.lf_left%2Bn.piece.lineFeedCnt%3Ee-1)%7Blet%20s%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-2)%2Co%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-1)%3Breturn%20i%2B%3Dn.size_left%2C%7Bnode%3An%2Cremainder%3AMath.min(s%2Bt-1%2Co)%2CnodeStartOffset%3Ai%7D%7Delse%20if(n.lf_left%2Bn.piece.lineFeedCnt%3D%3D%3De-1)%7Blet%20s%3Dthis.getAccumulatedValue(n%2Ce-n.lf_left-2)%3Bif(s%2Bt-1%3C%3Dn.piece.length)return%7Bnode%3An%2Cremainder%3As%2Bt-1%2CnodeStartOffset%3Ai%7D%3Bt-%3Dn.piece.length-s%3Bbreak%7Delse%20e-%3Dn.lf_left%2Bn.piece.lineFeedCnt%2Ci%2B%3Dn.size_left%2Bn.piece.length%2Cn%3Dn.right%3Bfor(n%3Dn.next()%3Bn!%3D%3Dm%3B)%7Bif(n.piece.lineFeedCnt%3E0)%7Blet%20s%3Dthis.getAccumulatedValue(n%2C0)%2Co%3Dthis.offsetOfNode(n)%3Breturn%7Bnode%3An%2Cremainder%3AMath.min(t-1%2Cs)%2CnodeStartOffset%3Ao%7D%7Delse%20if(n.piece.length%3E%3Dt-1)%7Blet%20s%3Dthis.offsetOfNode(n)%3Breturn%7Bnode%3An%2Cremainder%3At-1%2CnodeStartOffset%3As%7D%7Delse%20t-%3Dn.piece.length%3Bn%3Dn.next()%7Dreturn%20null%7DnodeCharCodeAt(e%2Ct)%7Bif(e.piece.lineFeedCnt%3C1)return-1%3Blet%20n%3Dthis._buffers%5Be.piece.bufferIndex%5D%2Ci%3Dthis.offsetInBuffer(e.piece.bufferIndex%2Ce.piece.start)%2Bt%3Breturn%20n.buffer.charCodeAt(i)%7DoffsetOfNode(e)%7Bif(!e)return%200%3Blet%20t%3De.size_left%3Bfor(%3Be!%3D%3Dthis.root%3B)e.parent.right%3D%3D%3De%26%26(t%2B%3De.parent.size_left%2Be.parent.piece.length)%2Ce%3De.parent%3Breturn%20t%7DshouldCheckCRLF()%7Breturn!(this._EOLNormalized%26%26this._EOL%3D%3D%3D%60%0A%60)%7DstartWithLF(e)%7Bif(typeof%20e%3D%3D%22string%22)return%20e.charCodeAt(0)%3D%3D%3D10%3Bif(e%3D%3D%3Dm%7C%7Ce.piece.lineFeedCnt%3D%3D%3D0)return!1%3Blet%20t%3De.piece%2Cn%3Dthis._buffers%5Bt.bufferIndex%5D.lineStarts%2Ci%3Dt.start.line%2Cs%3Dn%5Bi%5D%2Bt.start.column%3Breturn%20i%3D%3D%3Dn.length-1%7C%7Cn%5Bi%2B1%5D%3Es%2B1%3F!1%3Athis._buffers%5Bt.bufferIndex%5D.buffer.charCodeAt(s)%3D%3D%3D10%7DendWithCR(e)%7Breturn%20typeof%20e%3D%3D%22string%22%3Fe.charCodeAt(e.length-1)%3D%3D%3D13%3Ae%3D%3D%3Dm%7C%7Ce.piece.lineFeedCnt%3D%3D%3D0%3F!1%3Athis.nodeCharCodeAt(e%2Ce.piece.length-1)%3D%3D%3D13%7DvalidateCRLFWithPrevNode(e)%7Bif(this.shouldCheckCRLF()%26%26this.startWithLF(e))%7Blet%20t%3De.prev()%3Bthis.endWithCR(t)%26%26this.fixCRLF(t%2Ce)%7D%7DvalidateCRLFWithNextNode(e)%7Bif(this.shouldCheckCRLF()%26%26this.endWithCR(e))%7Blet%20t%3De.next()%3Bthis.startWithLF(t)%26%26this.fixCRLF(e%2Ct)%7D%7DfixCRLF(e%2Ct)%7Blet%20n%3D%5B%5D%2Ci%3Dthis._buffers%5Be.piece.bufferIndex%5D.lineStarts%2Cs%3Be.piece.end.column%3D%3D%3D0%3Fs%3D%7Bline%3Ae.piece.end.line-1%2Ccolumn%3Ai%5Be.piece.end.line%5D-i%5Be.piece.end.line-1%5D-1%7D%3As%3D%7Bline%3Ae.piece.end.line%2Ccolumn%3Ae.piece.end.column-1%7D%3Blet%20o%3De.piece.length-1%2Ca%3De.piece.lineFeedCnt-1%3Be.piece%3Dnew%20v(e.piece.bufferIndex%2Ce.piece.start%2Cs%2Ca%2Co)%2CC(this%2Ce%2C-1%2C-1)%2Ce.piece.length%3D%3D%3D0%26%26n.push(e)%3Blet%20l%3D%7Bline%3At.piece.start.line%2B1%2Ccolumn%3A0%7D%2Cf%3Dt.piece.length-1%2Cu%3Dthis.getLineFeedCnt(t.piece.bufferIndex%2Cl%2Ct.piece.end)%3Bt.piece%3Dnew%20v(t.piece.bufferIndex%2Cl%2Ct.piece.end%2Cu%2Cf)%2CC(this%2Ct%2C-1%2C-1)%2Ct.piece.length%3D%3D%3D0%26%26n.push(t)%3Blet%20c%3Dthis.createNewPieces(%60%5Cr%0A%60)%3Bthis.rbInsertRight(e%2Cc%5B0%5D)%3Bfor(let%20d%3D0%3Bd%3Cn.length%3Bd%2B%2B)Q(this%2Cn%5Bd%5D)%7DadjustCarriageReturnFromNext(e%2Ct)%7Bif(this.shouldCheckCRLF()%26%26this.endWithCR(e))%7Blet%20n%3Dt.next()%3Bif(this.startWithLF(n))%7Bif(e%2B%3D%60%0A%60%2Cn.piece.length%3D%3D%3D1)Q(this%2Cn)%3Belse%7Blet%20i%3Dn.piece%2Cs%3D%7Bline%3Ai.start.line%2B1%2Ccolumn%3A0%7D%2Co%3Di.length-1%2Ca%3Dthis.getLineFeedCnt(i.bufferIndex%2Cs%2Ci.end)%3Bn.piece%3Dnew%20v(i.bufferIndex%2Cs%2Ci.end%2Ca%2Co)%2CC(this%2Cn%2C-1%2C-1)%7Dreturn!0%7D%7Dreturn!1%7Diterate(e%2Ct)%7Bif(e%3D%3D%3Dm)return%20t(m)%3Blet%20n%3Dthis.iterate(e.left%2Ct)%3Breturn%20n%26%26t(e)%26%26this.iterate(e.right%2Ct)%7DgetNodeContent(e)%7Bif(e%3D%3D%3Dm)return%22%22%3Blet%20t%3Dthis._buffers%5Be.piece.bufferIndex%5D%2Cn%3De.piece%2Ci%3Dthis.offsetInBuffer(n.bufferIndex%2Cn.start)%2Cs%3Dthis.offsetInBuffer(n.bufferIndex%2Cn.end)%3Breturn%20t.buffer.substring(i%2Cs)%7DgetPieceContent(e)%7Blet%20t%3Dthis._buffers%5Be.bufferIndex%5D%2Cn%3Dthis.offsetInBuffer(e.bufferIndex%2Ce.start)%2Ci%3Dthis.offsetInBuffer(e.bufferIndex%2Ce.end)%3Breturn%20t.buffer.substring(n%2Ci)%7DrbInsertRight(e%2Ct)%7Blet%20n%3Dnew%20j(t%2C1)%3Bif(n.left%3Dm%2Cn.right%3Dm%2Cn.parent%3Dm%2Cn.size_left%3D0%2Cn.lf_left%3D0%2Cthis.root%3D%3D%3Dm)this.root%3Dn%2Cn.color%3D0%3Belse%20if(e.right%3D%3D%3Dm)e.right%3Dn%2Cn.parent%3De%3Belse%7Blet%20s%3Dfe(e.right)%3Bs.left%3Dn%2Cn.parent%3Ds%7Dreturn%20We(this%2Cn)%2Cn%7DrbInsertLeft(e%2Ct)%7Blet%20n%3Dnew%20j(t%2C1)%3Bif(n.left%3Dm%2Cn.right%3Dm%2Cn.parent%3Dm%2Cn.size_left%3D0%2Cn.lf_left%3D0%2Cthis.root%3D%3D%3Dm)this.root%3Dn%2Cn.color%3D0%3Belse%20if(e.left%3D%3D%3Dm)e.left%3Dn%2Cn.parent%3De%3Belse%7Blet%20i%3DPe(e.left)%3Bi.right%3Dn%2Cn.parent%3Di%7Dreturn%20We(this%2Cn)%2Cn%7DgetContentOfSubTree(e)%7Blet%20t%3D%22%22%3Breturn%20this.iterate(e%2Cn%3D%3E(t%2B%3Dthis.getNodeContent(n)%2C!0))%2Ct%7D%7D%3Bvar%20zt%3DString.fromCharCode(65279)%3Bfunction%20jt(r)%7Breturn!!(r%26%26r.length%3E0%26%26r.charCodeAt(0)%3D%3D%3D65279)%7Dvar%20Xe%3Dclass%7Bconstructor(e%2Ct%2Cn%2Ci%2Cs%2Co)%7Bthis._chunks%3De%3Bthis._bom%3Dt%3Bthis._cr%3Dn%3Bthis._lf%3Di%3Bthis._crlf%3Ds%3Bthis._normalizeEOL%3Do%7D_getEOL(e)%7Blet%20t%3Dthis._cr%2Bthis._lf%2Bthis._crlf%2Cn%3Dthis._cr%2Bthis._crlf%3Breturn%20t%3D%3D%3D0%3Fe%3D%3D%3D1%3F%60%0A%60%3A%60%5Cr%0A%60%3An%3Et%2F2%3F%60%5Cr%0A%60%3A%60%0A%60%7Dcreate(e)%7Blet%20t%3Dthis._getEOL(e)%2Cn%3Dthis._chunks%3Bif(this._normalizeEOL%26%26(t%3D%3D%3D%60%5Cr%0A%60%26%26(this._cr%3E0%7C%7Cthis._lf%3E0)%7C%7Ct%3D%3D%3D%60%0A%60%26%26(this._cr%3E0%7C%7Cthis._crlf%3E0)))for(let%20i%3D0%2Cs%3Dn.length%3Bi%3Cs%3Bi%2B%2B)%7Blet%20o%3Dn%5Bi%5D.buffer.replace(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2Fg%2Ct)%2Ca%3DE(o)%3Bn%5Bi%5D%3Dnew%20M(o%2Ca)%7Dreturn%20new%20pe(n%2Ct%2Cthis._normalizeEOL)%7DgetFirstLineText(e)%7Breturn%20this._chunks%5B0%5D.buffer.substr(0%2C100).split(%2F%5Cr%5Cn%7C%5Cr%7C%5Cn%2F)%5B0%5D%7D%7D%2Cte%3Dclass%7Bconstructor()%7Bthis.chunks%3D%5B%5D%2Cthis.BOM%3D%22%22%2Cthis._hasPreviousChar%3D!1%2Cthis._previousChar%3D0%2Cthis._tmpLineStarts%3D%5B%5D%2Cthis.cr%3D0%2Cthis.lf%3D0%2Cthis.crlf%3D0%7DacceptChunk(e)%7Bif(e.length%3D%3D%3D0)return%3Bthis.chunks.length%3D%3D%3D0%26%26jt(e)%26%26(this.BOM%3Dzt%2Ce%3De.substr(1))%3Blet%20t%3De.charCodeAt(e.length-1)%3Bt%3D%3D%3D13%7C%7Ct%3E%3D55296%26%26t%3C%3D56319%3F(this._acceptChunk1(e.substr(0%2Ce.length-1)%2C!1)%2Cthis._hasPreviousChar%3D!0%2Cthis._previousChar%3Dt)%3A(this._acceptChunk1(e%2C!1)%2Cthis._hasPreviousChar%3D!1%2Cthis._previousChar%3Dt)%7D_acceptChunk1(e%2Ct)%7B!t%26%26e.length%3D%3D%3D0%7C%7C(this._hasPreviousChar%3Fthis._acceptChunk2(String.fromCharCode(this._previousChar)%2Be)%3Athis._acceptChunk2(e))%7D_acceptChunk2(e)%7Blet%20t%3Dgt(this._tmpLineStarts%2Ce)%3Bthis.chunks.push(new%20M(e%2Ct.lineStarts))%2Cthis.cr%2B%3Dt.cr%2Cthis.lf%2B%3Dt.lf%2Cthis.crlf%2B%3Dt.crlf%7Dfinish(e%3D!0)%7Breturn%20this._finish()%2Cnew%20Xe(this.chunks%2Cthis.BOM%2Cthis.cr%2Cthis.lf%2Cthis.crlf%2Ce)%7D_finish()%7Bif(this.chunks.length%3D%3D%3D0%26%26this._acceptChunk1(%22%22%2C!0)%2Cthis._hasPreviousChar)%7Bthis._hasPreviousChar%3D!1%3Blet%20e%3Dthis.chunks%5Bthis.chunks.length-1%5D%3Be.buffer%2B%3DString.fromCharCode(this._previousChar)%3Blet%20t%3DE(e.buffer)%3Be.lineStarts%3Dt%2Cthis._previousChar%3D%3D%3D13%26%26this.cr%2B%2B%7D%7D%7D%3Bvar%20Kt%3D%22default%22%3Bfunction%20ge()%7Breturn%20Kt%7Dvar%20mt%3Dnew%20Map%2CHe%3Dclass%7Bconstructor()%7Bthis.listeners%3D%7B%7D%7Don(e%2Ct)%7Bthis.listeners%5Be%5D%7C%7C(this.listeners%5Be%5D%3D%5B%5D)%2Cthis.listeners%5Be%5D%3F.push(t)%7Doff(e%2Ct)%7Bthis.listeners%5Be%5D%26%26(this.listeners%5Be%5D%3Dthis.listeners%5Be%5D%3F.filter(n%3D%3En!%3D%3Dt))%7Ddispose()%7Bthis.listeners%3D%7B%7D%7DremoveAllListeners()%7Bthis.listeners%3D%7B%7D%7Demit(e%2Ct)%7Bif(this.listeners%5Be%5D)for(let%20n%20of%20this.listeners%5Be%5D)n(t)%7D%7D%2Cbt%3D()%3D%3E%7Blet%20r%3Dge()%3Bif(!r)throw%20new%20Error(%22currentNameSpaceId%20is%20not%20set%22)%3Blet%20e%3Dmt.get(r)%3Breturn%20e%7C%7C(e%3Dnew%20He%2Cmt.set(r%2Ce))%2Ce%7D%3Bvar%20_t%3Dnew%20Map%2CGe%3Dclass%7Bconstructor()%7Blet%20e%3DdecodeURIComponent(%22%25WORKER_RAW%25%22)%2Ct%3Dnew%20Blob(%5Be%5D%2C%7Btype%3A%22application%2Fjavascript%22%7D)%2Cn%3DURL.createObjectURL(t)%3Bthis._worker%3Dnew%20Worker(n)%2Cthis._callbacks%3Dnew%20Map%2Cthis._worker.onmessage%3Dthis._handleWorkerMessage.bind(this)%7Dasync%20init(e)%7Bawait%20this._sendRequest(%22init%22%2C%7Bvalue%3Ae%7D)%7DupdateModel(e)%7Breturn%20this._sendRequest(%22updateModel%22%2C%7Bop%3Ae%7D)%7DformatJson(e)%7Breturn%20this._sendRequest(%22format%22%2C%7Boptions%3Ae%7D)%7DfoldRange()%7Breturn%20this._sendRequest(%22foldRange%22%2C%7B%7D)%7Dvalidate()%7Breturn%20this._sendRequest(%22validate%22%2C%7B%7D)%7D_sendRequest(e%2Ct)%7Breturn%20new%20Promise((n%2Ci)%3D%3E%7Blet%20s%3DDate.now()%2BMath.random()%3Bthis._callbacks.set(s%2Cn)%2Cthis._worker.postMessage(%7BmessageId%3As%2Cmethod%3Ae%2Cparams%3At%7D)%7D)%7D_handleWorkerMessage(e)%7Blet%7BmessageId%3At%2Cresult%3An%2Cerror%3Ai%7D%3De.data%2Cs%3Dthis._callbacks.get(t)%3Bs%26%26(s(i%3Fnew%20Error(i)%3An)%2Cthis._callbacks.delete(t))%7Ddispose()%7Bthis._worker.terminate()%2Cthis._callbacks.clear()%7D%7D%3Bfunction%20xt()%7Blet%20r%3Dge()%3Bif(!r)throw%20new%20Error(%22No%20active%20worker%20ID%20set%22)%3Blet%20e%3D_t.get(r)%3Breturn%20e%7C%7C(e%3Dnew%20Ge%2C_t.set(r%2Ce))%2Ce%7Dvar%20Dt%3Dtypeof%20self%3D%3D%22object%22%26%26self.constructor%26%26self.constructor.name%3D%3D%3D%22DedicatedWorkerGlobalScope%22%3Bfunction%20Ze()%7Breturn%20Dt%7Dvar%20ne%3Dclass%7Bconstructor(e%2Ct)%7Bthis.model%3De%3Bthis.operation%3Dt%3Bthis.oldPos%3D%7B...e.lastChangeBufferPos%7D%2Cthis.model.updateLastChangeBufferPos(t)%2Cthis.newPos%3D%7B...e.lastChangeBufferPos%7D%7DupdateBufferPos(e)%7Bthis.model.lastChangeBufferPos%3D%7B...e%3Fthis.oldPos%3Athis.newPos%7D%7D%7D%2Cme%3Dclass%20extends%20ne%7Bexecute()%7Bthis.model.pieceTree.insert(this.operation.rangeOffset%2Cthis.operation.newText)%2Cthis.updateBufferPos(!1)%7Dundo()%7Bthis.model.pieceTree.delete(this.operation.rangeOffset%2Cthis.operation.newText.length)%2Cthis.updateBufferPos(!0)%7D%7D%2Cbe%3Dclass%20extends%20ne%7Bexecute()%7Bthis.model.pieceTree.delete(this.operation.rangeOffset%2Cthis.operation.rangeLength)%2Cthis.updateBufferPos(!1)%7Dundo()%7Bthis.model.pieceTree.insert(this.operation.rangeOffset%2Cthis.operation.oldText)%2Cthis.updateBufferPos(!0)%7D%7D%2C_e%3Dclass%20extends%20ne%7Bexecute()%7Bthis.model.pieceTree.delete(this.operation.rangeOffset%2Cthis.operation.oldText.length)%2Cthis.model.pieceTree.insert(this.operation.rangeOffset%2Cthis.operation.newText)%2Cthis.updateBufferPos(!1)%7Dundo()%7Bthis.model.pieceTree.delete(this.operation.rangeOffset%2Cthis.operation.newText.length)%2Cthis.model.pieceTree.insert(this.operation.rangeOffset%2Cthis.operation.oldText)%2Cthis.updateBufferPos(!0)%7D%7D%2Cxe%3Dclass%7Bconstructor(e%2Ct)%7Bthis.model%3De%3Bthis.operation%3Dt%3Bthis.oldPos%3D%7B...e.lastChangeBufferPos%7D%2Cthis.newPos%3D%7B...e.lastChangeBufferPos%7D%7Dexecute()%7Bfor(let%20e%3D0%3Be%3Cthis.operation.length%3Be%2B%2B)%7Blet%20t%3Dthis.operation%5Be%5D%3Bswitch(t.type)%7Bcase%22insert%22%3Athis.model.pieceTree.insert(t.rangeOffset%2Ct.newText)%3Bbreak%3Bcase%22delete%22%3Athis.model.pieceTree.delete(t.rangeOffset%2Ct.rangeLength)%3Bbreak%3Bcase%22replace%22%3Athis.model.pieceTree.delete(t.rangeOffset%2Ct.oldText.length)%2Cthis.model.pieceTree.insert(t.rangeOffset%2Ct.newText)%3Bbreak%7D%7Dthis.model.lastChangeBufferPos%3D%7B...this.newPos%7D%7Dundo()%7Bfor(let%20e%3Dthis.operation.length-1%3Be%3E%3D0%3Be--)%7Blet%20t%3Dthis.operation%5Be%5D%3Bt.newText%26%26t.oldText%3F(this.model.pieceTree.delete(t.rangeOffset%2Ct.newText.length)%2Cthis.model.pieceTree.insert(t.rangeOffset%2Ct.oldText))%3At.newText%3Fthis.model.pieceTree.delete(t.rangeOffset%2Ct.newText.length)%3Athis.model.pieceTree.insert(t.rangeOffset%2Ct.oldText)%7Dthis.model.lastChangeBufferPos%3D%7B...this.oldPos%7D%7D%7D%3Bvar%20Ne%3Dclass%7Bconstructor(e%2Ct%3D!0)%7Bthis._undoStack%3D%5B%5D%3Bthis._redoStack%3D%5B%5D%3Bthis.MAX_STACK_SIZE%3D20%3Bthis.lastChangeBufferPos%3D%7BlineNumber%3A1%2Ccolumn%3A1%7D%3Bthis._jsonWorkerManager%3Dnull%3Bthis.emitter%3Dnull%3Bthis._normalizeEOL%3Dt%2Cthis._pieceTree%3Dthis.createTextBuffer(e)%2CZe()%7C%7C(this._jsonWorkerManager%3Dxt()%2Cthis.emitter%3Dbt())%7Dget%20pieceTree()%7Breturn%20this._pieceTree%7DcreateTextBufferFactory(e)%7Blet%20t%3Dnew%20te%3Breturn%20t.acceptChunk(e)%2Ct.finish(this._normalizeEOL)%7DcreateTextBuffer(e)%7Breturn%20this.createTextBufferFactory(e).create(1)%7DgetLineCount()%7Breturn%20this._pieceTree.getLineCount()%7DgetLineContent(e)%7Breturn%20this._pieceTree.getLineContent(e)%7DgetLineLength(e)%7Breturn%20this._pieceTree.getLineLength(e)%7DgetOffsetAt(e%2Ct)%7Breturn%20this._pieceTree.getOffsetAt(e%2Ct)%7DpositionAt(e)%7Breturn%20e%3DMath.min(this._pieceTree.getLength()%2CMath.max(0%2Ce))%2Cthis._pieceTree.getPositionAt(e)%7D_createCommand(e)%7Bif(Array.isArray(e))return%20new%20xe(this%2Ce)%3Bswitch(e.type)%7Bcase%22insert%22%3Areturn%20new%20me(this%2Ce)%3Bcase%22delete%22%3Areturn%20new%20be(this%2Ce)%3Bcase%22replace%22%3Areturn%20new%20_e(this%2Ce)%3Bdefault%3Athrow%20new%20Error(%22Unknown%20operation%20type%22)%7D%7DapplyOperation(e)%7Bthis._redoStack%3D%5B%5D%3Blet%20t%3Dthis._createCommand(e)%3Bthis.pushUndoStack(t)%2Ct.execute()%2CZe()%7C%7Cthis.emitter%3F.emit(%22contentChanged%22%2Ce)%2Cthis._jsonWorkerManager%26%26this._jsonWorkerManager.updateModel(e).then(n%3D%3Ethis._jsonWorkerManager%3F.validate()).then(n%3D%3E%7Bthis.emitter%3F.emit(%22problemsChanged%22%2C%7Bproblems%3An.problems%2Croot%3An.root%7D)%7D)%7DupdateLastChangeBufferPos(e)%7Bif(e.keepPosition)%7Bthis.lastChangeBufferPos%3De.keepPosition%3Breturn%7Dswitch(e.type)%7Bcase%22insert%22%3Athis.lastChangeBufferPos.column%2B%3De.newText.length%3Bbreak%3Bcase%22delete%22%3Aif(this.lastChangeBufferPos.column%3D%3D%3D1)this.lastChangeBufferPos.lineNumber-%3D1%2Cthis.lastChangeBufferPos.column%3Dthis.getLineLength(this.lastChangeBufferPos.lineNumber)%2B1%3Belse%7Blet%20i%3De.range.startColumn%2Cs%3De.rangeLength%3D%3D%3D1%3Fi-1%3Ai%3Bthis.lastChangeBufferPos.column%3Ds%7Dbreak%3Bcase%22replace%22%3Alet%20t%3De.range.startLineNumber%2Cn%3De.range.startColumn%2Be.newText.length%3Bthis.lastChangeBufferPos.lineNumber%3Dt%2Cthis.lastChangeBufferPos.column%3Dn%3Bbreak%7D%7DpushUndoStack(e)%7Bthis._undoStack.push(e)%2Cthis._undoStack.length%3Ethis.MAX_STACK_SIZE%26%26this._undoStack.shift()%7DpushRedoStack(e)%7Bthis._redoStack.push(e)%2Cthis._redoStack.length%3Ethis.MAX_STACK_SIZE%26%26this._redoStack.shift()%7DcanUndo()%7Breturn%20this._undoStack.length%3E0%7DcanRedo()%7Breturn%20this._redoStack.length%3E0%7Dundo()%7Bif(!this.canUndo())return%3Blet%20e%3Dthis._undoStack.pop()%3Be.undo()%2Cthis._redoStack.push(e)%2Cthis.emitter%3F.emit(%22contentChanged%22%2Ce.operation)%7Dredo()%7Bif(!this.canRedo())return%3Blet%20e%3Dthis._redoStack.pop()%3Be.execute()%2Cthis._undoStack.push(e)%2Cthis.emitter%3F.emit(%22contentChanged%22%2Ce.operation)%7DgetValue()%7Breturn%20this._pieceTree.getValueInRange(%7BstartLineNumber%3A1%2CstartColumn%3A1%2CendLineNumber%3Athis._pieceTree.getLineCount()%2CendColumn%3Athis._pieceTree.getLineContent(this._pieceTree.getLineCount()).length%2B1%7D)%7DsetValue(e)%7Blet%20t%3Dnew%20te%3Bt.acceptChunk(e)%2Cthis._pieceTree%3Dt.finish(this._normalizeEOL).create(1)%7DgetEOL()%7Breturn%20this._pieceTree.getEOL()%7D_getEndOfLine(e)%7Bswitch(e)%7Bcase%201%3Areturn%60%0A%60%3Bcase%202%3Areturn%60%5Cr%0A%60%3Bcase%200%3Areturn%20this.getEOL()%3Bdefault%3Athrow%20new%20Error(%22Unknown%20EOL%20preference%22)%7D%7DgetValueInRange(e%2Ct%3D0)%7Breturn%20this._pieceTree.getValueInRange(e%2Cthis._getEndOfLine(t))%7DgetFullModelRange()%7Blet%20e%3Dthis.getLineCount()%3Breturn%20new%20A(1%2C1%2Ce%2Cthis.getLineLength(e)%2B1)%7DfindMatchesLineByLine(e%2Ct%2Cn%2Ci)%7Breturn%20this._pieceTree.findMatchesLineByLine(e%2Ct%2Cn%2Ci)%7DfindMatches(e%2Ct%2Cn%2Ci%2Cs%2Co%2Ca%3D1%2F0)%7Blet%20l%3Dnull%3Bl%3D%3D%3Dnull%26%26(l%3D%5Bthis.getFullModelRange()%5D)%2Cl%3Dl.sort((c%2Cd)%3D%3Ec.startLineNumber-d.startLineNumber%7C%7Cc.startColumn-d.startColumn)%3Blet%20f%3D%5B%5D%3Bf.push(l.reduce((c%2Cd)%3D%3EA.areIntersecting(c%2Cd)%3Fc.plusRange(d)%3A(f.push(c)%2Cd)))%3Blet%20u%3Bif(!n%26%26e.indexOf(%60%0A%60)%3C0)%7Blet%20d%3Dnew%20Y(e%2Cn%2Ci%2Cs).parseSearchRequest()%3Bif(!d)return%5B%5D%3Bu%3Db%3D%3Ethis.findMatchesLineByLine(b%2Cd%2Co%2Ca)%7Delse%20u%3Dc%3D%3Ede.findMatches(this%2Cnew%20Y(e%2Cn%2Ci%2Cs)%2Cc%2Co%2Ca)%3Breturn%20f.map(u).reduce((c%2Cd)%3D%3Ec.concat(d)%2C%5B%5D)%7D%7D%3Bfunction%20Nt(r%2Ce%3D!0)%7Breturn%20new%20Ne(r%2Ce)%7Dvar%20Te%3Dclass%7Bconstructor(e)%7Bthis._model%3Dnull%3Bthis._model%3DNt(e)%7DgetModel()%7Breturn%20this._model%7Dformat(e)%7Bif(!this._model)throw%20new%20Error(%22Model%20not%20initialized%22)%3Breturn%20ot(this._model%2Ce)%7DfoldRange()%7Bif(!this._model)throw%20new%20Error(%22Model%20not%20initialized%22)%3Breturn%20Me(this._model)%7Dvalidate()%7Bif(!this._model)throw%20new%20Error(%22Model%20not%20initialized%22)%3Breturn%20lt(this._model)%7DupdateModel(e)%7Breturn%20this._model%3F.applyOperation(e)%2Ce%7Dparse()%7Bif(!this._model)throw%20new%20Error(%22Model%20not%20initialized%22)%3Breturn%20at(this._model)%7D%7D%3Bvar%20W%3Dnull%3Bself.onmessage%3Dr%3D%3E%7Blet%7Bmethod%3Ae%2Cparams%3At%2CmessageId%3An%7D%3Dr.data%3Bif(e%3D%3D%3D%22init%22)%7BW%3Dnew%20Te(t.value)%2Cself.postMessage(%7BmessageId%3An%2Cresult%3A%22Worker%20initialized%22%7D)%3Breturn%7Dif(!W)%7Bself.postMessage(%7BmessageId%3An%2Cerror%3A%22Worker%20not%20initialized%22%7D)%3Breturn%7Dlet%20i%3Bswitch(e)%7Bcase%22updateModel%22%3AW.updateModel(t.op)%2Ci%3DW.getModel()%3F.getValue()%3Bbreak%3Bcase%22format%22%3Ai%3DW.format(t.options)%3Bbreak%3Bcase%22foldRange%22%3Ai%3DW.foldRange()%3Bbreak%3Bcase%22validate%22%3Ai%3DW.validate()%3Bbreak%3Bdefault%3Ai%3D%7Berror%3A%22Unknown%20method%22%7D%7Dself.postMessage(%7BmessageId%3An%2Cresult%3Ai%7D)%7D%3B%7D)()%3B%0A");
|
|
176
202
|
const blob = new Blob([workerRaw], { type: "application/javascript" });
|
|
177
203
|
const workerURL = URL.createObjectURL(blob);
|
|
178
204
|
this._worker = new Worker(workerURL);
|
|
@@ -213,13 +239,29 @@ var JsonWorkerManager = class {
|
|
|
213
239
|
this._callbacks.delete(messageId);
|
|
214
240
|
}
|
|
215
241
|
}
|
|
242
|
+
dispose() {
|
|
243
|
+
this._worker.terminate();
|
|
244
|
+
this._callbacks.clear();
|
|
245
|
+
}
|
|
216
246
|
};
|
|
217
|
-
var jsonWorkerManager = null;
|
|
218
247
|
function getJsonWorkerManager() {
|
|
219
|
-
|
|
220
|
-
|
|
248
|
+
const currentNameSpaceId2 = getCurrentNameSpaceId();
|
|
249
|
+
if (!currentNameSpaceId2) {
|
|
250
|
+
throw new Error("No active worker ID set");
|
|
251
|
+
}
|
|
252
|
+
let workerManager = workerManagerMap.get(currentNameSpaceId2);
|
|
253
|
+
if (!workerManager) {
|
|
254
|
+
workerManager = new JsonWorkerManager();
|
|
255
|
+
workerManagerMap.set(currentNameSpaceId2, workerManager);
|
|
256
|
+
}
|
|
257
|
+
return workerManager;
|
|
258
|
+
}
|
|
259
|
+
function disposeWorkerManager(id) {
|
|
260
|
+
const workerManager = workerManagerMap.get(id);
|
|
261
|
+
if (workerManager) {
|
|
262
|
+
workerManagerMap.delete(id);
|
|
263
|
+
workerManager.dispose();
|
|
221
264
|
}
|
|
222
|
-
return jsonWorkerManager;
|
|
223
265
|
}
|
|
224
266
|
|
|
225
267
|
// src/model/foldingModel.ts
|
|
@@ -229,9 +271,10 @@ var FoldingModel = class {
|
|
|
229
271
|
this._collapsedRanges = /* @__PURE__ */ new Map();
|
|
230
272
|
// startLine -> endLine
|
|
231
273
|
this._jsonWorkerManager = getJsonWorkerManager();
|
|
274
|
+
this.emitter = getEmitter();
|
|
232
275
|
this._jsonModel = jsonModel;
|
|
233
276
|
this.updateFoldingRanges();
|
|
234
|
-
emitter.on("problemsChanged", (e) => {
|
|
277
|
+
this.emitter.on("problemsChanged", (e) => {
|
|
235
278
|
this.updateFoldingRanges();
|
|
236
279
|
});
|
|
237
280
|
}
|
|
@@ -374,11 +417,11 @@ var SearchWidget = class {
|
|
|
374
417
|
const currentMatch = this.searchResults[this._currentResultIndex];
|
|
375
418
|
const startOffset = this._jsonModel.getOffsetAt(
|
|
376
419
|
currentMatch.range.startLineNumber,
|
|
377
|
-
currentMatch.range.startColumn
|
|
420
|
+
currentMatch.range.startColumn
|
|
378
421
|
);
|
|
379
422
|
const endOffset = this._jsonModel.getOffsetAt(
|
|
380
423
|
currentMatch.range.endLineNumber,
|
|
381
|
-
currentMatch.range.endColumn
|
|
424
|
+
currentMatch.range.endColumn
|
|
382
425
|
);
|
|
383
426
|
const op = {
|
|
384
427
|
range: currentMatch.range,
|
|
@@ -396,8 +439,8 @@ var SearchWidget = class {
|
|
|
396
439
|
const op = [];
|
|
397
440
|
for (let i = this.searchResults.length - 1; i >= 0; i--) {
|
|
398
441
|
const match = this.searchResults[i];
|
|
399
|
-
const startOffset = this._jsonModel.getOffsetAt(match.range.startLineNumber, match.range.startColumn
|
|
400
|
-
const endOffset = this._jsonModel.getOffsetAt(match.range.endLineNumber, match.range.endColumn
|
|
442
|
+
const startOffset = this._jsonModel.getOffsetAt(match.range.startLineNumber, match.range.startColumn);
|
|
443
|
+
const endOffset = this._jsonModel.getOffsetAt(match.range.endLineNumber, match.range.endColumn);
|
|
401
444
|
op.push({
|
|
402
445
|
range: match.range,
|
|
403
446
|
newText: replaceText,
|
|
@@ -459,6 +502,145 @@ var SearchWidget = class {
|
|
|
459
502
|
|
|
460
503
|
// src/view/edit/editWidget.ts
|
|
461
504
|
import { applyEdits } from "jsonc-parser";
|
|
505
|
+
|
|
506
|
+
// src/common/strings.ts
|
|
507
|
+
function escapeRegExpCharacters(value) {
|
|
508
|
+
return value.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g, "\\$&");
|
|
509
|
+
}
|
|
510
|
+
function isHighSurrogate(charCode) {
|
|
511
|
+
return 55296 <= charCode && charCode <= 56319;
|
|
512
|
+
}
|
|
513
|
+
function isLowSurrogate(charCode) {
|
|
514
|
+
return 56320 <= charCode && charCode <= 57343;
|
|
515
|
+
}
|
|
516
|
+
function computeCodePoint(highSurrogate, lowSurrogate) {
|
|
517
|
+
return (highSurrogate - 55296 << 10) + (lowSurrogate - 56320) + 65536;
|
|
518
|
+
}
|
|
519
|
+
function getNextCodePoint(str, len, offset) {
|
|
520
|
+
const charCode = str.charCodeAt(offset);
|
|
521
|
+
if (isHighSurrogate(charCode) && offset + 1 < len) {
|
|
522
|
+
const nextCharCode = str.charCodeAt(offset + 1);
|
|
523
|
+
if (isLowSurrogate(nextCharCode)) {
|
|
524
|
+
return computeCodePoint(charCode, nextCharCode);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return charCode;
|
|
528
|
+
}
|
|
529
|
+
function createRegExp(searchString, isRegex, options = {}) {
|
|
530
|
+
if (!searchString) {
|
|
531
|
+
throw new Error("Cannot create regex from empty string");
|
|
532
|
+
}
|
|
533
|
+
if (!isRegex) {
|
|
534
|
+
searchString = escapeRegExpCharacters(searchString);
|
|
535
|
+
}
|
|
536
|
+
if (options.wholeWord) {
|
|
537
|
+
if (!/\B/.test(searchString.charAt(0))) {
|
|
538
|
+
searchString = "\\b" + searchString;
|
|
539
|
+
}
|
|
540
|
+
if (!/\B/.test(searchString.charAt(searchString.length - 1))) {
|
|
541
|
+
searchString = searchString + "\\b";
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
let modifiers = "";
|
|
545
|
+
if (options.global) {
|
|
546
|
+
modifiers += "g";
|
|
547
|
+
}
|
|
548
|
+
if (!options.matchCase) {
|
|
549
|
+
modifiers += "i";
|
|
550
|
+
}
|
|
551
|
+
if (options.multiline) {
|
|
552
|
+
modifiers += "m";
|
|
553
|
+
}
|
|
554
|
+
if (options.unicode) {
|
|
555
|
+
modifiers += "u";
|
|
556
|
+
}
|
|
557
|
+
return new RegExp(searchString, modifiers);
|
|
558
|
+
}
|
|
559
|
+
function getLeadingWhitespace(str, start = 0, end = str.length) {
|
|
560
|
+
for (let i = start; i < end; i++) {
|
|
561
|
+
const chCode = str.charCodeAt(i);
|
|
562
|
+
if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {
|
|
563
|
+
return str.substring(start, i);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return str.substring(start, end);
|
|
567
|
+
}
|
|
568
|
+
function firstNonWhitespaceIndex(str) {
|
|
569
|
+
for (let i = 0, len = str.length; i < len; i++) {
|
|
570
|
+
const chCode = str.charCodeAt(i);
|
|
571
|
+
if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {
|
|
572
|
+
return i;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
return -1;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// src/view/edit/getEnterAction.ts
|
|
579
|
+
function getIndentationAtPosition(model, lineNumber, column) {
|
|
580
|
+
const lineText = model.getLineContent(lineNumber);
|
|
581
|
+
let indentation = getLeadingWhitespace(lineText);
|
|
582
|
+
if (indentation.length > column - 1) {
|
|
583
|
+
indentation = indentation.substring(0, column - 1);
|
|
584
|
+
}
|
|
585
|
+
return indentation;
|
|
586
|
+
}
|
|
587
|
+
function processJsonEnterAction(model, range) {
|
|
588
|
+
const currentLineText = model.getLineContent(range.startLineNumber);
|
|
589
|
+
const beforeText = currentLineText.substring(0, range.startColumn - 1);
|
|
590
|
+
const afterText = currentLineText.substring(range.startColumn - 1);
|
|
591
|
+
const previousLineText = range.startLineNumber > 1 ? model.getLineContent(range.startLineNumber - 1) : "";
|
|
592
|
+
const enterResult = onEnter(beforeText, afterText, previousLineText);
|
|
593
|
+
if (!enterResult) {
|
|
594
|
+
return null;
|
|
595
|
+
}
|
|
596
|
+
const indentAction = enterResult.indentAction;
|
|
597
|
+
let appendText = enterResult.appendText;
|
|
598
|
+
const removeText = enterResult.removeText || 0;
|
|
599
|
+
if (!appendText) {
|
|
600
|
+
if (indentAction === 1 /* Indent */ || indentAction === 2 /* IndentOutdent */) {
|
|
601
|
+
appendText = " ";
|
|
602
|
+
} else {
|
|
603
|
+
appendText = "";
|
|
604
|
+
}
|
|
605
|
+
} else if (indentAction === 1 /* Indent */) {
|
|
606
|
+
appendText = " " + appendText;
|
|
607
|
+
}
|
|
608
|
+
let indentation = getIndentationAtPosition(model, range.startLineNumber, range.startColumn);
|
|
609
|
+
if (removeText) {
|
|
610
|
+
indentation = indentation.substring(0, indentation.length - removeText);
|
|
611
|
+
}
|
|
612
|
+
return {
|
|
613
|
+
indentAction,
|
|
614
|
+
appendText,
|
|
615
|
+
removeText,
|
|
616
|
+
indentation
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
function onEnter(beforeText, afterText, previousLineText) {
|
|
620
|
+
const brackets = [
|
|
621
|
+
{ open: "{", openRegExp: /\{\s*$/, close: "}", closeRegExp: /^\s*\}/ },
|
|
622
|
+
{ open: "[", openRegExp: /\[\s*$/, close: "]", closeRegExp: /^\s*\]/ }
|
|
623
|
+
];
|
|
624
|
+
if (beforeText.length > 0 && afterText.length > 0) {
|
|
625
|
+
for (let i = 0, len = brackets.length; i < len; i++) {
|
|
626
|
+
const bracket = brackets[i];
|
|
627
|
+
if (bracket.openRegExp.test(beforeText) && bracket.closeRegExp.test(afterText)) {
|
|
628
|
+
return { indentAction: 2 /* IndentOutdent */ };
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
if (beforeText.length > 0) {
|
|
633
|
+
for (let i = 0, len = brackets.length; i < len; i++) {
|
|
634
|
+
const bracket = brackets[i];
|
|
635
|
+
if (bracket.openRegExp.test(beforeText)) {
|
|
636
|
+
return { indentAction: 1 /* Indent */ };
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
return null;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// src/view/edit/editWidget.ts
|
|
462
644
|
var EditWidget = class {
|
|
463
645
|
constructor(view, jsonModel, selectionModel, foldingModel, _jsonWorkerManager = getJsonWorkerManager()) {
|
|
464
646
|
this._jsonWorkerManager = _jsonWorkerManager;
|
|
@@ -468,6 +650,7 @@ var EditWidget = class {
|
|
|
468
650
|
"(": ")",
|
|
469
651
|
'"': '"'
|
|
470
652
|
};
|
|
653
|
+
this.emitter = getEmitter();
|
|
471
654
|
this._view = view;
|
|
472
655
|
this._jsonModel = jsonModel;
|
|
473
656
|
this._selectionModel = selectionModel;
|
|
@@ -476,7 +659,7 @@ var EditWidget = class {
|
|
|
476
659
|
}
|
|
477
660
|
attachEventListeners() {
|
|
478
661
|
this._jsonWorkerManager.validate().then((result) => {
|
|
479
|
-
emitter.emit("problemsChanged", {
|
|
662
|
+
this.emitter.emit("problemsChanged", {
|
|
480
663
|
problems: result.problems,
|
|
481
664
|
root: result.root
|
|
482
665
|
});
|
|
@@ -520,30 +703,77 @@ var EditWidget = class {
|
|
|
520
703
|
op.newText = e.data || "";
|
|
521
704
|
op.oldText = this._jsonModel.getValueInRange({
|
|
522
705
|
startLineNumber: startRow,
|
|
523
|
-
startColumn: startCol
|
|
706
|
+
startColumn: startCol,
|
|
524
707
|
endLineNumber: endRow,
|
|
525
|
-
endColumn: endCol
|
|
708
|
+
endColumn: endCol
|
|
526
709
|
});
|
|
527
710
|
if (this._autoClosingPairs[op.newText]) {
|
|
528
711
|
op.newText += this._autoClosingPairs[op.newText];
|
|
712
|
+
op.keepPosition = {
|
|
713
|
+
lineNumber: startRow,
|
|
714
|
+
column: endCol + 1
|
|
715
|
+
};
|
|
529
716
|
}
|
|
530
717
|
break;
|
|
531
718
|
case "insertParagraph":
|
|
532
719
|
op.newText = "\n";
|
|
533
|
-
op.
|
|
720
|
+
op.keepPosition = {
|
|
721
|
+
lineNumber: startRow + 1,
|
|
722
|
+
column: 1
|
|
723
|
+
};
|
|
724
|
+
const enterAction = processJsonEnterAction(this._jsonModel, {
|
|
725
|
+
startLineNumber: startRow,
|
|
726
|
+
startColumn: startCol,
|
|
727
|
+
endLineNumber: endRow,
|
|
728
|
+
endColumn: endCol
|
|
729
|
+
});
|
|
730
|
+
if (enterAction) {
|
|
731
|
+
if (enterAction.indentAction === 1 /* Indent */) {
|
|
732
|
+
op.newText = "\n" + this.normalizeIndentation(enterAction.appendText + enterAction.indentation) || "";
|
|
733
|
+
op.keepPosition = {
|
|
734
|
+
lineNumber: startRow + 1,
|
|
735
|
+
column: enterAction.appendText.length + enterAction.indentation.length + 1
|
|
736
|
+
};
|
|
737
|
+
} else {
|
|
738
|
+
const normalIndent = this.normalizeIndentation(enterAction.indentation);
|
|
739
|
+
const increasedIndent = this.normalizeIndentation(enterAction.indentation + enterAction.appendText);
|
|
740
|
+
op.newText = "\n" + increasedIndent + "\n" + normalIndent;
|
|
741
|
+
op.keepPosition = {
|
|
742
|
+
lineNumber: startRow + 1,
|
|
743
|
+
column: increasedIndent.length + 1
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
} else {
|
|
747
|
+
const lineText = this._jsonModel.getLineContent(startRow);
|
|
748
|
+
const indentation = getLeadingWhitespace(lineText).substring(0, startCol - 1);
|
|
749
|
+
op.newText = "\n" + this.normalizeIndentation(indentation) || "";
|
|
750
|
+
op.keepPosition = {
|
|
751
|
+
lineNumber: startRow + 1,
|
|
752
|
+
column: indentation.length + 1
|
|
753
|
+
};
|
|
754
|
+
}
|
|
534
755
|
break;
|
|
535
756
|
case "deleteContentBackward":
|
|
757
|
+
let oldText = "";
|
|
536
758
|
if (this._selectionModel.isCollapsed) {
|
|
537
|
-
op.
|
|
759
|
+
op.rangeOffset = startOffset - 1;
|
|
760
|
+
oldText = this._jsonModel.getValueInRange({
|
|
538
761
|
startLineNumber: startRow,
|
|
539
|
-
startColumn: startCol
|
|
762
|
+
startColumn: startCol - 1,
|
|
763
|
+
endLineNumber: endRow,
|
|
764
|
+
endColumn: endCol
|
|
765
|
+
});
|
|
766
|
+
} else {
|
|
767
|
+
oldText = this._jsonModel.getValueInRange({
|
|
768
|
+
startLineNumber: startRow,
|
|
769
|
+
startColumn: startCol,
|
|
540
770
|
endLineNumber: endRow,
|
|
541
771
|
endColumn: endCol
|
|
542
772
|
});
|
|
543
|
-
op.rangeOffset = startOffset - 1;
|
|
544
|
-
op.rangeLength = 1;
|
|
545
773
|
}
|
|
774
|
+
op.oldText = oldText;
|
|
546
775
|
op.type = "delete";
|
|
776
|
+
op.rangeLength = oldText.length;
|
|
547
777
|
break;
|
|
548
778
|
case "insertFromPaste":
|
|
549
779
|
const pasteData = e.dataTransfer?.getData("text/plain");
|
|
@@ -551,42 +781,84 @@ var EditWidget = class {
|
|
|
551
781
|
op.newText = pasteData || "";
|
|
552
782
|
op.oldText = this._jsonModel.getValueInRange({
|
|
553
783
|
startLineNumber: startRow,
|
|
554
|
-
startColumn: startCol
|
|
784
|
+
startColumn: startCol,
|
|
555
785
|
endLineNumber: endRow,
|
|
556
|
-
endColumn: endCol
|
|
786
|
+
endColumn: endCol
|
|
557
787
|
});
|
|
558
788
|
break;
|
|
559
789
|
}
|
|
560
790
|
if (this._selectionModel.isSelectedAll) {
|
|
561
791
|
op.range = {
|
|
562
792
|
startLineNumber: 1,
|
|
563
|
-
startColumn:
|
|
793
|
+
startColumn: 1,
|
|
564
794
|
endLineNumber: this._jsonModel.getLineCount(),
|
|
565
795
|
endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount())
|
|
566
796
|
};
|
|
567
|
-
op.rangeOffset =
|
|
797
|
+
op.rangeOffset = 0;
|
|
568
798
|
op.rangeLength = this._jsonModel.getValue().length;
|
|
569
799
|
op.oldText = this._jsonModel.getValue();
|
|
570
800
|
}
|
|
571
801
|
this._selectionModel.isSelectedAll = false;
|
|
572
802
|
this._jsonModel.applyOperation(op);
|
|
573
|
-
this._jsonModel.pushUndoStack(op);
|
|
574
803
|
}
|
|
575
|
-
|
|
804
|
+
format() {
|
|
576
805
|
this._jsonWorkerManager.formatJson(
|
|
577
806
|
this._view.options?.formatOptions || {
|
|
578
807
|
tabSize: 2,
|
|
579
808
|
insertSpaces: true
|
|
580
809
|
}
|
|
581
810
|
).then((edits) => {
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
811
|
+
const newValue = applyEdits(this._jsonModel.getValue(), edits);
|
|
812
|
+
const op = {
|
|
813
|
+
type: "replace",
|
|
814
|
+
range: {
|
|
815
|
+
startLineNumber: 1,
|
|
816
|
+
startColumn: 1,
|
|
817
|
+
endLineNumber: this._jsonModel.getLineCount(),
|
|
818
|
+
endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount()) + 1
|
|
819
|
+
},
|
|
820
|
+
rangeOffset: 0,
|
|
821
|
+
rangeLength: this._jsonModel.getValue().length,
|
|
822
|
+
oldText: this._jsonModel.getValue(),
|
|
823
|
+
newText: newValue
|
|
824
|
+
};
|
|
825
|
+
this._jsonModel.applyOperation(op);
|
|
588
826
|
});
|
|
589
827
|
}
|
|
828
|
+
normalizeIndentation(str) {
|
|
829
|
+
const indentSize = this._view.options?.formatOptions?.tabSize || 4;
|
|
830
|
+
const insertSpaces = !!this._view.options?.formatOptions?.insertSpaces;
|
|
831
|
+
let firstIndex = firstNonWhitespaceIndex(str);
|
|
832
|
+
if (firstIndex === -1) {
|
|
833
|
+
firstIndex = str.length;
|
|
834
|
+
}
|
|
835
|
+
return this._normalizeIndentationFromWhitespace(str.substring(0, firstIndex), indentSize, insertSpaces) + str.substring(firstIndex);
|
|
836
|
+
}
|
|
837
|
+
_normalizeIndentationFromWhitespace(str, indentSize, insertSpaces) {
|
|
838
|
+
let spacesCnt = 0;
|
|
839
|
+
for (let i = 0; i < str.length; i++) {
|
|
840
|
+
if (str.charAt(i) === " ") {
|
|
841
|
+
spacesCnt = this.nextIndentTabStop(spacesCnt, indentSize);
|
|
842
|
+
} else {
|
|
843
|
+
spacesCnt++;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
let result = "";
|
|
847
|
+
if (!insertSpaces) {
|
|
848
|
+
const tabsCnt = Math.floor(spacesCnt / indentSize);
|
|
849
|
+
spacesCnt = spacesCnt % indentSize;
|
|
850
|
+
for (let i = 0; i < tabsCnt; i++) {
|
|
851
|
+
result += " ";
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
for (let i = 0; i < spacesCnt; i++) {
|
|
855
|
+
result += " ";
|
|
856
|
+
}
|
|
857
|
+
return result;
|
|
858
|
+
}
|
|
859
|
+
nextIndentTabStop(spacesCnt, indentSize) {
|
|
860
|
+
return spacesCnt + indentSize - spacesCnt % indentSize;
|
|
861
|
+
}
|
|
590
862
|
_handleKeyDown(e) {
|
|
591
863
|
this._selectionModel.updateFromSelection();
|
|
592
864
|
const startRow = this._selectionModel.startRow;
|
|
@@ -610,7 +882,7 @@ var EditWidget = class {
|
|
|
610
882
|
insertText += " ";
|
|
611
883
|
}
|
|
612
884
|
} else {
|
|
613
|
-
insertText = "
|
|
885
|
+
insertText = " ";
|
|
614
886
|
}
|
|
615
887
|
const op = {
|
|
616
888
|
type: "insert",
|
|
@@ -630,7 +902,7 @@ var EditWidget = class {
|
|
|
630
902
|
case "f":
|
|
631
903
|
if (e.shiftKey && e.metaKey) {
|
|
632
904
|
e.preventDefault();
|
|
633
|
-
this.
|
|
905
|
+
this.format();
|
|
634
906
|
}
|
|
635
907
|
break;
|
|
636
908
|
case "ArrowRight":
|
|
@@ -679,15 +951,15 @@ var EditWidget = class {
|
|
|
679
951
|
const startCol = this._selectionModel.startCol;
|
|
680
952
|
const endRow = this._selectionModel.endRow;
|
|
681
953
|
const endCol = this._selectionModel.endCol;
|
|
682
|
-
let startOffset
|
|
954
|
+
let startOffset;
|
|
683
955
|
let oldText = "";
|
|
684
956
|
const op = {
|
|
685
957
|
type: "replace",
|
|
686
958
|
range: {
|
|
687
959
|
startLineNumber: startRow,
|
|
688
|
-
startColumn:
|
|
960
|
+
startColumn: startCol,
|
|
689
961
|
endLineNumber: endRow,
|
|
690
|
-
endColumn:
|
|
962
|
+
endColumn: endCol
|
|
691
963
|
},
|
|
692
964
|
rangeOffset: 0,
|
|
693
965
|
rangeLength: 0,
|
|
@@ -695,43 +967,39 @@ var EditWidget = class {
|
|
|
695
967
|
newText: ""
|
|
696
968
|
};
|
|
697
969
|
if (!this._selectionModel.isCollapsed) {
|
|
698
|
-
startOffset = this._jsonModel.getOffsetAt(startRow, startCol);
|
|
699
|
-
endOffset = this._jsonModel.getOffsetAt(endRow, endCol);
|
|
700
970
|
oldText = this._jsonModel.getValueInRange({
|
|
701
|
-
startLineNumber: startRow,
|
|
702
|
-
startColumn: startCol + 1,
|
|
703
|
-
endLineNumber: endRow,
|
|
704
|
-
endColumn: endCol + 1
|
|
705
|
-
});
|
|
706
|
-
op.rangeLength = endOffset - startOffset;
|
|
707
|
-
op.rangeOffset = startOffset;
|
|
708
|
-
op.range = {
|
|
709
971
|
startLineNumber: startRow,
|
|
710
972
|
startColumn: startCol,
|
|
711
973
|
endLineNumber: endRow,
|
|
712
974
|
endColumn: endCol
|
|
713
|
-
};
|
|
975
|
+
});
|
|
976
|
+
startOffset = this._jsonModel.getOffsetAt(startRow, startCol);
|
|
714
977
|
} else {
|
|
715
|
-
startOffset = this._jsonModel.getOffsetAt(startRow - 1, this._jsonModel.getLineEndOffset(startRow - 1));
|
|
716
|
-
endOffset = this._jsonModel.getOffsetAt(endRow, this._jsonModel.getLineEndOffset(endRow));
|
|
717
978
|
oldText = this._jsonModel.getValueInRange({
|
|
718
979
|
startLineNumber: startRow,
|
|
719
980
|
startColumn: 1,
|
|
720
981
|
endLineNumber: endRow,
|
|
721
|
-
endColumn: this._jsonModel.
|
|
982
|
+
endColumn: this._jsonModel.getLineLength(endRow) + 1
|
|
722
983
|
});
|
|
723
|
-
op.
|
|
724
|
-
|
|
984
|
+
op.range = {
|
|
985
|
+
startLineNumber: startRow,
|
|
986
|
+
startColumn: 1,
|
|
987
|
+
endLineNumber: endRow,
|
|
988
|
+
endColumn: this._jsonModel.getLineLength(endRow) + 1
|
|
989
|
+
};
|
|
990
|
+
startOffset = this._jsonModel.getOffsetAt(startRow, 1);
|
|
725
991
|
}
|
|
726
992
|
op.oldText = oldText;
|
|
993
|
+
op.rangeOffset = startOffset;
|
|
994
|
+
op.rangeLength = oldText.length;
|
|
727
995
|
if (this._selectionModel.isSelectedAll) {
|
|
728
996
|
op.range = {
|
|
729
997
|
startLineNumber: 1,
|
|
730
|
-
startColumn:
|
|
998
|
+
startColumn: 1,
|
|
731
999
|
endLineNumber: this._jsonModel.getLineCount(),
|
|
732
1000
|
endColumn: this._jsonModel.getLineLength(this._jsonModel.getLineCount()) + 1
|
|
733
1001
|
};
|
|
734
|
-
op.rangeOffset =
|
|
1002
|
+
op.rangeOffset = 0;
|
|
735
1003
|
op.rangeLength = this._jsonModel.getValue().length;
|
|
736
1004
|
op.oldText = this._jsonModel.getValue();
|
|
737
1005
|
}
|
|
@@ -1294,16 +1562,13 @@ var ParentsStack = class _ParentsStack {
|
|
|
1294
1562
|
return false;
|
|
1295
1563
|
}
|
|
1296
1564
|
while (a && b) {
|
|
1297
|
-
if (a
|
|
1298
|
-
return true;
|
|
1299
|
-
}
|
|
1300
|
-
if (a.type !== b.type) {
|
|
1565
|
+
if (a.type !== b.type || a.depth !== b.depth) {
|
|
1301
1566
|
return false;
|
|
1302
1567
|
}
|
|
1303
1568
|
a = a.parent;
|
|
1304
1569
|
b = b.parent;
|
|
1305
1570
|
}
|
|
1306
|
-
return
|
|
1571
|
+
return a === null && b === null;
|
|
1307
1572
|
}
|
|
1308
1573
|
};
|
|
1309
1574
|
var JSONState = class _JSONState {
|
|
@@ -1443,6 +1708,7 @@ function tokenize(comments, line, state, offsetDelta = 0) {
|
|
|
1443
1708
|
var TokenizationJsonModelPart = class {
|
|
1444
1709
|
constructor(jsonModel) {
|
|
1445
1710
|
this._jsonModel = null;
|
|
1711
|
+
this.emitter = getEmitter();
|
|
1446
1712
|
this._jsonModel = jsonModel;
|
|
1447
1713
|
this.tokens = new GrammarTokens(this._jsonModel);
|
|
1448
1714
|
}
|
|
@@ -1464,12 +1730,19 @@ var GrammarTokens = class {
|
|
|
1464
1730
|
this._tokens = /* @__PURE__ */ new Map();
|
|
1465
1731
|
this._tokenizer = null;
|
|
1466
1732
|
this._backgroundTokenizer = null;
|
|
1733
|
+
this.emitter = getEmitter();
|
|
1467
1734
|
this._jsonModel = jsonModel;
|
|
1468
|
-
emitter.on("contentChanged", (e) => {
|
|
1469
|
-
|
|
1735
|
+
this.emitter.on("contentChanged", (e) => {
|
|
1736
|
+
let from = 0;
|
|
1737
|
+
let to = this._jsonModel.getLineCount();
|
|
1738
|
+
if (Array.isArray(e)) {
|
|
1739
|
+
from = e[e.length - 1].range.startLineNumber;
|
|
1740
|
+
} else {
|
|
1741
|
+
from = e.range.startLineNumber;
|
|
1742
|
+
}
|
|
1470
1743
|
this._backgroundTokenizer?.requestTokens({
|
|
1471
|
-
from
|
|
1472
|
-
to
|
|
1744
|
+
from,
|
|
1745
|
+
to
|
|
1473
1746
|
});
|
|
1474
1747
|
this._backgroundTokenizer?.handleChanges();
|
|
1475
1748
|
});
|
|
@@ -2427,9 +2700,9 @@ var JSONCompletion = class {
|
|
|
2427
2700
|
if (!existing) {
|
|
2428
2701
|
label = label.replace(/[\n]/g, "\u21B5");
|
|
2429
2702
|
if (label.length > 60) {
|
|
2430
|
-
const
|
|
2431
|
-
if (!proposed.has(
|
|
2432
|
-
label =
|
|
2703
|
+
const shortenedLabel = label.substring(0, 57).trim() + "...";
|
|
2704
|
+
if (!proposed.has(shortenedLabel)) {
|
|
2705
|
+
label = shortenedLabel;
|
|
2433
2706
|
}
|
|
2434
2707
|
}
|
|
2435
2708
|
suggestion.textEdit = TextEdit.replace(overwriteRange, suggestion.insertText);
|
|
@@ -2774,6 +3047,7 @@ var CompleteWidget = class {
|
|
|
2774
3047
|
this._selectedIndex = 0;
|
|
2775
3048
|
this._suggestions = [];
|
|
2776
3049
|
this.isVisible = false;
|
|
3050
|
+
this.emitter = getEmitter();
|
|
2777
3051
|
this._handleKeyDown = (e) => {
|
|
2778
3052
|
switch (e.key) {
|
|
2779
3053
|
case "ArrowDown":
|
|
@@ -2795,15 +3069,15 @@ var CompleteWidget = class {
|
|
|
2795
3069
|
return;
|
|
2796
3070
|
}
|
|
2797
3071
|
const { range } = textEdit;
|
|
2798
|
-
const startOffset = this._jsonModel.getOffsetAt(range.startLineNumber, range.startColumn
|
|
2799
|
-
const endOffset = this._jsonModel.getOffsetAt(range.endLineNumber, range.endColumn
|
|
3072
|
+
const startOffset = this._jsonModel.getOffsetAt(range.startLineNumber, range.startColumn);
|
|
3073
|
+
const endOffset = this._jsonModel.getOffsetAt(range.endLineNumber, range.endColumn);
|
|
2800
3074
|
const op = {
|
|
2801
3075
|
type: "replace",
|
|
2802
3076
|
range: {
|
|
2803
3077
|
startLineNumber: range.startLineNumber,
|
|
2804
|
-
startColumn: range.startColumn
|
|
3078
|
+
startColumn: range.startColumn,
|
|
2805
3079
|
endLineNumber: range.endLineNumber,
|
|
2806
|
-
endColumn: range.endColumn
|
|
3080
|
+
endColumn: range.endColumn
|
|
2807
3081
|
},
|
|
2808
3082
|
rangeLength: endOffset - startOffset,
|
|
2809
3083
|
rangeOffset: startOffset,
|
|
@@ -2811,7 +3085,6 @@ var CompleteWidget = class {
|
|
|
2811
3085
|
newText: textEdit?.newText || ""
|
|
2812
3086
|
};
|
|
2813
3087
|
this._jsonModel.applyOperation(op);
|
|
2814
|
-
this._jsonModel.pushUndoStack(op);
|
|
2815
3088
|
this.hide();
|
|
2816
3089
|
break;
|
|
2817
3090
|
}
|
|
@@ -2838,7 +3111,7 @@ var CompleteWidget = class {
|
|
|
2838
3111
|
}
|
|
2839
3112
|
return true;
|
|
2840
3113
|
};
|
|
2841
|
-
emitter.on("contentChanged", (e) => {
|
|
3114
|
+
this.emitter.on("contentChanged", (e) => {
|
|
2842
3115
|
if (Array.isArray(e)) {
|
|
2843
3116
|
return;
|
|
2844
3117
|
}
|
|
@@ -2853,7 +3126,7 @@ var CompleteWidget = class {
|
|
|
2853
3126
|
const root = parseJsonAst(this._jsonModel);
|
|
2854
3127
|
const position = {
|
|
2855
3128
|
lineNumber: this._jsonModel.lastChangeBufferPos.lineNumber,
|
|
2856
|
-
column: this._jsonModel.lastChangeBufferPos.column
|
|
3129
|
+
column: this._jsonModel.lastChangeBufferPos.column
|
|
2857
3130
|
};
|
|
2858
3131
|
new JSONCompletion(this._view.options?.completionOptions || null).doCompletion(this._jsonModel, position, root).then((completions) => {
|
|
2859
3132
|
this._suggestions = completions.items || [];
|
|
@@ -2926,6 +3199,7 @@ var HoverWidget = class {
|
|
|
2926
3199
|
constructor(view) {
|
|
2927
3200
|
this._hoverDom = null;
|
|
2928
3201
|
this._hoverTimer = null;
|
|
3202
|
+
this.emitter = getEmitter();
|
|
2929
3203
|
this._view = view;
|
|
2930
3204
|
this._tooltipDom = this._createTooltipDom();
|
|
2931
3205
|
this._view.jsonViewerDom.appendChild(this._tooltipDom);
|
|
@@ -2942,7 +3216,7 @@ var HoverWidget = class {
|
|
|
2942
3216
|
this._hoverDom = e.target;
|
|
2943
3217
|
this._hoverTimer = window.setTimeout(() => {
|
|
2944
3218
|
if (this._hoverDom) {
|
|
2945
|
-
emitter.emit("hoverNode", {
|
|
3219
|
+
this.emitter.emit("hoverNode", {
|
|
2946
3220
|
value: this._hoverDom.textContent ?? "",
|
|
2947
3221
|
target: this._hoverDom
|
|
2948
3222
|
});
|
|
@@ -2963,7 +3237,7 @@ var HoverWidget = class {
|
|
|
2963
3237
|
this._hideTooltip();
|
|
2964
3238
|
}
|
|
2965
3239
|
});
|
|
2966
|
-
emitter.on("renderHoverNode", (e) => {
|
|
3240
|
+
this.emitter.on("renderHoverNode", (e) => {
|
|
2967
3241
|
this.render(e.el);
|
|
2968
3242
|
});
|
|
2969
3243
|
}
|
|
@@ -3019,6 +3293,7 @@ var View = class {
|
|
|
3019
3293
|
this._verticalOffsetAdjustment = 0;
|
|
3020
3294
|
this._jsonWorkerManager = getJsonWorkerManager();
|
|
3021
3295
|
this._measuredHeights = {};
|
|
3296
|
+
this.emitter = getEmitter();
|
|
3022
3297
|
this._container = container;
|
|
3023
3298
|
this._jsonModel = model;
|
|
3024
3299
|
this._selectionModel = new SelectionModel(1, 0, this, model);
|
|
@@ -3069,27 +3344,28 @@ var View = class {
|
|
|
3069
3344
|
get completeWidget() {
|
|
3070
3345
|
return this._completeWidget;
|
|
3071
3346
|
}
|
|
3347
|
+
get editWidget() {
|
|
3348
|
+
return this._editWidget;
|
|
3349
|
+
}
|
|
3072
3350
|
get scalingCellSizeAndPositionManager() {
|
|
3073
3351
|
return this._scalingCellSizeAndPositionManager;
|
|
3074
3352
|
}
|
|
3075
3353
|
get searchWidget() {
|
|
3076
3354
|
return this._searchWidget;
|
|
3077
3355
|
}
|
|
3356
|
+
dispose() {
|
|
3357
|
+
this._container.removeChild(this._jsonViewerDom);
|
|
3358
|
+
}
|
|
3078
3359
|
_attachEventListeners() {
|
|
3079
|
-
this.
|
|
3080
|
-
|
|
3081
|
-
this.onScroll(scrollTop);
|
|
3360
|
+
this._jsonViewerDom.addEventListener("scroll", (e) => {
|
|
3361
|
+
this.onScroll(this._jsonViewerDom.scrollTop);
|
|
3082
3362
|
});
|
|
3083
3363
|
this._contentDom.addEventListener("click", (e) => {
|
|
3084
3364
|
e.preventDefault();
|
|
3085
3365
|
this._selectionModel.isSelectedAll = false;
|
|
3086
3366
|
this._selectionModel.updateFromSelection();
|
|
3087
3367
|
});
|
|
3088
|
-
this.
|
|
3089
|
-
const scrollTop = this._lineNumberDom.scrollTop;
|
|
3090
|
-
this.onScroll(scrollTop);
|
|
3091
|
-
});
|
|
3092
|
-
emitter.on("contentChanged", () => {
|
|
3368
|
+
this.emitter.on("contentChanged", () => {
|
|
3093
3369
|
this.resetScalingManagerConfigAndCell(0);
|
|
3094
3370
|
this.layout();
|
|
3095
3371
|
});
|
|
@@ -3105,8 +3381,7 @@ var View = class {
|
|
|
3105
3381
|
this.visibleLineCount = end - start + 1;
|
|
3106
3382
|
}
|
|
3107
3383
|
onScroll(scrollTop) {
|
|
3108
|
-
this.
|
|
3109
|
-
this._contentDom.scrollTop = scrollTop;
|
|
3384
|
+
this._jsonViewerDom.scrollTop = scrollTop;
|
|
3110
3385
|
this.layout();
|
|
3111
3386
|
}
|
|
3112
3387
|
scrollToLine(lineNumber) {
|
|
@@ -3121,7 +3396,7 @@ var View = class {
|
|
|
3121
3396
|
position: "relative",
|
|
3122
3397
|
height: "100%",
|
|
3123
3398
|
width: "100%",
|
|
3124
|
-
overflow: "
|
|
3399
|
+
overflow: "auto"
|
|
3125
3400
|
});
|
|
3126
3401
|
return renderContainer;
|
|
3127
3402
|
}
|
|
@@ -3132,9 +3407,7 @@ var View = class {
|
|
|
3132
3407
|
position: "absolute",
|
|
3133
3408
|
left: "0",
|
|
3134
3409
|
top: "0",
|
|
3135
|
-
width: "50px"
|
|
3136
|
-
height: "100%",
|
|
3137
|
-
overflow: "scroll"
|
|
3410
|
+
width: "50px"
|
|
3138
3411
|
});
|
|
3139
3412
|
return lineNumberContainer;
|
|
3140
3413
|
}
|
|
@@ -3151,7 +3424,8 @@ var View = class {
|
|
|
3151
3424
|
return lineScrollContainer;
|
|
3152
3425
|
}
|
|
3153
3426
|
createContentContainer() {
|
|
3154
|
-
const
|
|
3427
|
+
const contentClass = "semi-json-viewer-content-container";
|
|
3428
|
+
const contentContainer = elt("div", contentClass);
|
|
3155
3429
|
setStyles(contentContainer, {
|
|
3156
3430
|
position: "absolute",
|
|
3157
3431
|
left: "50px",
|
|
@@ -3159,7 +3433,6 @@ var View = class {
|
|
|
3159
3433
|
right: "0",
|
|
3160
3434
|
overflowX: "auto",
|
|
3161
3435
|
overflowY: "scroll",
|
|
3162
|
-
height: "100%",
|
|
3163
3436
|
outline: "none"
|
|
3164
3437
|
});
|
|
3165
3438
|
contentContainer.contentEditable = "true";
|
|
@@ -3198,12 +3471,11 @@ var View = class {
|
|
|
3198
3471
|
overflow: "scroll",
|
|
3199
3472
|
top: "0",
|
|
3200
3473
|
left: "0",
|
|
3474
|
+
tabSize: (this._options?.formatOptions?.tabSize || 4).toString(),
|
|
3201
3475
|
height: `${this._lineHeight * this._jsonModel.getLineCount()}px`
|
|
3202
3476
|
});
|
|
3203
3477
|
if (this._options?.autoWrap) {
|
|
3204
3478
|
scrollEl.style.width = "100%";
|
|
3205
|
-
} else {
|
|
3206
|
-
scrollEl.style.width = "1000px";
|
|
3207
3479
|
}
|
|
3208
3480
|
return scrollEl;
|
|
3209
3481
|
}
|
|
@@ -3211,12 +3483,11 @@ var View = class {
|
|
|
3211
3483
|
const rowDatum = this._scalingCellSizeAndPositionManager.getSizeAndPositionOfCell(visibleLineNumber);
|
|
3212
3484
|
const lineElementClass = "semi-json-viewer-view-line";
|
|
3213
3485
|
const lineElement = elt("div", lineElementClass);
|
|
3486
|
+
lineElement.setAttribute("data-line-element", "true");
|
|
3214
3487
|
setStyles(lineElement, {
|
|
3215
3488
|
lineHeight: `${this._lineHeight}px`,
|
|
3216
3489
|
width: "100%",
|
|
3217
3490
|
position: "absolute",
|
|
3218
|
-
wordWrap: "break-word",
|
|
3219
|
-
whiteSpace: "pre-wrap",
|
|
3220
3491
|
top: `${rowDatum.offset + this._verticalOffsetAdjustment}px`
|
|
3221
3492
|
});
|
|
3222
3493
|
if (!this._options?.autoWrap) {
|
|
@@ -3235,6 +3506,10 @@ var View = class {
|
|
|
3235
3506
|
}
|
|
3236
3507
|
_measureAndUpdateItemHeight(item, index) {
|
|
3237
3508
|
const height = item.offsetHeight;
|
|
3509
|
+
const width = item.textContent?.length * 10;
|
|
3510
|
+
if (!this._options?.autoWrap && width > this._scrollDom.offsetWidth) {
|
|
3511
|
+
this._scrollDom.style.width = `${width}px`;
|
|
3512
|
+
}
|
|
3238
3513
|
if (height === 0) {
|
|
3239
3514
|
item.style.height = `${this._lineHeight}px`;
|
|
3240
3515
|
return;
|
|
@@ -3267,11 +3542,11 @@ var View = class {
|
|
|
3267
3542
|
});
|
|
3268
3543
|
const visibleRange = this._scalingCellSizeAndPositionManager.getVisibleCellRange({
|
|
3269
3544
|
containerSize: this._container.clientHeight,
|
|
3270
|
-
offset: this.
|
|
3545
|
+
offset: this._jsonViewerDom.scrollTop
|
|
3271
3546
|
});
|
|
3272
3547
|
const verticalOffsetAdjustment = this._scalingCellSizeAndPositionManager.getOffsetAdjustment({
|
|
3273
3548
|
containerSize: this._container.clientHeight,
|
|
3274
|
-
offset: this.
|
|
3549
|
+
offset: this._jsonViewerDom.scrollTop
|
|
3275
3550
|
});
|
|
3276
3551
|
this._verticalOffsetAdjustment = verticalOffsetAdjustment;
|
|
3277
3552
|
this.renderVisibleLines(visibleRange.start, visibleRange.stop);
|
|
@@ -3283,6 +3558,7 @@ var View = class {
|
|
|
3283
3558
|
this._lineScrollDom.style.height = `${totalSize}px`;
|
|
3284
3559
|
}
|
|
3285
3560
|
renderVisibleLines(startVisibleLine, endVisibleLine) {
|
|
3561
|
+
this._tokenizationJsonModelPart.forceTokenize(endVisibleLine + 1);
|
|
3286
3562
|
let actualLineNumber = this._foldingModel.getActualLineNumber(startVisibleLine + 1);
|
|
3287
3563
|
let visibleLineNumber = startVisibleLine;
|
|
3288
3564
|
while (visibleLineNumber <= endVisibleLine && actualLineNumber <= this._jsonModel.getLineCount()) {
|
|
@@ -3295,7 +3571,6 @@ var View = class {
|
|
|
3295
3571
|
}
|
|
3296
3572
|
renderLine(actualLineNumber, visibleLineNumber) {
|
|
3297
3573
|
const line = this._jsonModel.getLineContent(actualLineNumber);
|
|
3298
|
-
this._tokenizationJsonModelPart.forceTokenize(actualLineNumber);
|
|
3299
3574
|
const tokens = this._tokenizationJsonModelPart.getLineTokens(actualLineNumber);
|
|
3300
3575
|
const lineNumberElement = this.renderLineNumber(actualLineNumber, visibleLineNumber);
|
|
3301
3576
|
const lineElement = this.renderLineContent(actualLineNumber, visibleLineNumber, tokens, line);
|
|
@@ -3360,7 +3635,7 @@ var View = class {
|
|
|
3360
3635
|
return result;
|
|
3361
3636
|
}
|
|
3362
3637
|
escapeHtml(text) {
|
|
3363
|
-
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/ /g, " ").replace(/\t/g, "
|
|
3638
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/ /g, " ").replace(/\t/g, "	");
|
|
3364
3639
|
}
|
|
3365
3640
|
};
|
|
3366
3641
|
|
|
@@ -4227,60 +4502,6 @@ function getMapForWordSeparators(wordSeparators, intlSegmenterLocales) {
|
|
|
4227
4502
|
return result;
|
|
4228
4503
|
}
|
|
4229
4504
|
|
|
4230
|
-
// src/common/strings.ts
|
|
4231
|
-
function escapeRegExpCharacters(value) {
|
|
4232
|
-
return value.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g, "\\$&");
|
|
4233
|
-
}
|
|
4234
|
-
function isHighSurrogate(charCode) {
|
|
4235
|
-
return 55296 <= charCode && charCode <= 56319;
|
|
4236
|
-
}
|
|
4237
|
-
function isLowSurrogate(charCode) {
|
|
4238
|
-
return 56320 <= charCode && charCode <= 57343;
|
|
4239
|
-
}
|
|
4240
|
-
function computeCodePoint(highSurrogate, lowSurrogate) {
|
|
4241
|
-
return (highSurrogate - 55296 << 10) + (lowSurrogate - 56320) + 65536;
|
|
4242
|
-
}
|
|
4243
|
-
function getNextCodePoint(str, len, offset) {
|
|
4244
|
-
const charCode = str.charCodeAt(offset);
|
|
4245
|
-
if (isHighSurrogate(charCode) && offset + 1 < len) {
|
|
4246
|
-
const nextCharCode = str.charCodeAt(offset + 1);
|
|
4247
|
-
if (isLowSurrogate(nextCharCode)) {
|
|
4248
|
-
return computeCodePoint(charCode, nextCharCode);
|
|
4249
|
-
}
|
|
4250
|
-
}
|
|
4251
|
-
return charCode;
|
|
4252
|
-
}
|
|
4253
|
-
function createRegExp(searchString, isRegex, options = {}) {
|
|
4254
|
-
if (!searchString) {
|
|
4255
|
-
throw new Error("Cannot create regex from empty string");
|
|
4256
|
-
}
|
|
4257
|
-
if (!isRegex) {
|
|
4258
|
-
searchString = escapeRegExpCharacters(searchString);
|
|
4259
|
-
}
|
|
4260
|
-
if (options.wholeWord) {
|
|
4261
|
-
if (!/\B/.test(searchString.charAt(0))) {
|
|
4262
|
-
searchString = "\\b" + searchString;
|
|
4263
|
-
}
|
|
4264
|
-
if (!/\B/.test(searchString.charAt(searchString.length - 1))) {
|
|
4265
|
-
searchString = searchString + "\\b";
|
|
4266
|
-
}
|
|
4267
|
-
}
|
|
4268
|
-
let modifiers = "";
|
|
4269
|
-
if (options.global) {
|
|
4270
|
-
modifiers += "g";
|
|
4271
|
-
}
|
|
4272
|
-
if (!options.matchCase) {
|
|
4273
|
-
modifiers += "i";
|
|
4274
|
-
}
|
|
4275
|
-
if (options.multiline) {
|
|
4276
|
-
modifiers += "m";
|
|
4277
|
-
}
|
|
4278
|
-
if (options.unicode) {
|
|
4279
|
-
modifiers += "u";
|
|
4280
|
-
}
|
|
4281
|
-
return new RegExp(searchString, modifiers);
|
|
4282
|
-
}
|
|
4283
|
-
|
|
4284
4505
|
// src/model/textModelSearch.ts
|
|
4285
4506
|
var LineFeedCounter = class {
|
|
4286
4507
|
constructor(text) {
|
|
@@ -6310,6 +6531,94 @@ function isInWorkerThread() {
|
|
|
6310
6531
|
return isWebWorker;
|
|
6311
6532
|
}
|
|
6312
6533
|
|
|
6534
|
+
// src/model/command.ts
|
|
6535
|
+
var BaseCommand = class {
|
|
6536
|
+
constructor(model, operation) {
|
|
6537
|
+
this.model = model;
|
|
6538
|
+
this.operation = operation;
|
|
6539
|
+
this.oldPos = { ...model.lastChangeBufferPos };
|
|
6540
|
+
this.model.updateLastChangeBufferPos(operation);
|
|
6541
|
+
this.newPos = { ...model.lastChangeBufferPos };
|
|
6542
|
+
}
|
|
6543
|
+
updateBufferPos(isUndo) {
|
|
6544
|
+
this.model.lastChangeBufferPos = {
|
|
6545
|
+
...isUndo ? this.oldPos : this.newPos
|
|
6546
|
+
};
|
|
6547
|
+
}
|
|
6548
|
+
};
|
|
6549
|
+
var InsertCommand = class extends BaseCommand {
|
|
6550
|
+
execute() {
|
|
6551
|
+
this.model.pieceTree.insert(this.operation.rangeOffset, this.operation.newText);
|
|
6552
|
+
this.updateBufferPos(false);
|
|
6553
|
+
}
|
|
6554
|
+
undo() {
|
|
6555
|
+
this.model.pieceTree.delete(this.operation.rangeOffset, this.operation.newText.length);
|
|
6556
|
+
this.updateBufferPos(true);
|
|
6557
|
+
}
|
|
6558
|
+
};
|
|
6559
|
+
var DeleteCommand = class extends BaseCommand {
|
|
6560
|
+
execute() {
|
|
6561
|
+
this.model.pieceTree.delete(this.operation.rangeOffset, this.operation.rangeLength);
|
|
6562
|
+
this.updateBufferPos(false);
|
|
6563
|
+
}
|
|
6564
|
+
undo() {
|
|
6565
|
+
this.model.pieceTree.insert(this.operation.rangeOffset, this.operation.oldText);
|
|
6566
|
+
this.updateBufferPos(true);
|
|
6567
|
+
}
|
|
6568
|
+
};
|
|
6569
|
+
var ReplaceCommand = class extends BaseCommand {
|
|
6570
|
+
execute() {
|
|
6571
|
+
this.model.pieceTree.delete(this.operation.rangeOffset, this.operation.oldText.length);
|
|
6572
|
+
this.model.pieceTree.insert(this.operation.rangeOffset, this.operation.newText);
|
|
6573
|
+
this.updateBufferPos(false);
|
|
6574
|
+
}
|
|
6575
|
+
undo() {
|
|
6576
|
+
this.model.pieceTree.delete(this.operation.rangeOffset, this.operation.newText.length);
|
|
6577
|
+
this.model.pieceTree.insert(this.operation.rangeOffset, this.operation.oldText);
|
|
6578
|
+
this.updateBufferPos(true);
|
|
6579
|
+
}
|
|
6580
|
+
};
|
|
6581
|
+
var MultiCommand = class {
|
|
6582
|
+
constructor(model, operation) {
|
|
6583
|
+
this.model = model;
|
|
6584
|
+
this.operation = operation;
|
|
6585
|
+
this.oldPos = { ...model.lastChangeBufferPos };
|
|
6586
|
+
this.newPos = { ...model.lastChangeBufferPos };
|
|
6587
|
+
}
|
|
6588
|
+
execute() {
|
|
6589
|
+
for (let i = 0; i < this.operation.length; i++) {
|
|
6590
|
+
const op = this.operation[i];
|
|
6591
|
+
switch (op.type) {
|
|
6592
|
+
case "insert":
|
|
6593
|
+
this.model.pieceTree.insert(op.rangeOffset, op.newText);
|
|
6594
|
+
break;
|
|
6595
|
+
case "delete":
|
|
6596
|
+
this.model.pieceTree.delete(op.rangeOffset, op.rangeLength);
|
|
6597
|
+
break;
|
|
6598
|
+
case "replace":
|
|
6599
|
+
this.model.pieceTree.delete(op.rangeOffset, op.oldText.length);
|
|
6600
|
+
this.model.pieceTree.insert(op.rangeOffset, op.newText);
|
|
6601
|
+
break;
|
|
6602
|
+
}
|
|
6603
|
+
}
|
|
6604
|
+
this.model.lastChangeBufferPos = { ...this.newPos };
|
|
6605
|
+
}
|
|
6606
|
+
undo() {
|
|
6607
|
+
for (let i = this.operation.length - 1; i >= 0; i--) {
|
|
6608
|
+
const op = this.operation[i];
|
|
6609
|
+
if (op.newText && op.oldText) {
|
|
6610
|
+
this.model.pieceTree.delete(op.rangeOffset, op.newText.length);
|
|
6611
|
+
this.model.pieceTree.insert(op.rangeOffset, op.oldText);
|
|
6612
|
+
} else if (op.newText) {
|
|
6613
|
+
this.model.pieceTree.delete(op.rangeOffset, op.newText.length);
|
|
6614
|
+
} else {
|
|
6615
|
+
this.model.pieceTree.insert(op.rangeOffset, op.oldText);
|
|
6616
|
+
}
|
|
6617
|
+
}
|
|
6618
|
+
this.model.lastChangeBufferPos = { ...this.oldPos };
|
|
6619
|
+
}
|
|
6620
|
+
};
|
|
6621
|
+
|
|
6313
6622
|
// src/model/jsonModel.ts
|
|
6314
6623
|
var JSONModel = class {
|
|
6315
6624
|
constructor(value, normalizeEOL = true) {
|
|
@@ -6318,15 +6627,20 @@ var JSONModel = class {
|
|
|
6318
6627
|
this.MAX_STACK_SIZE = 20;
|
|
6319
6628
|
this.lastChangeBufferPos = {
|
|
6320
6629
|
lineNumber: 1,
|
|
6321
|
-
column:
|
|
6630
|
+
column: 1
|
|
6322
6631
|
};
|
|
6323
6632
|
this._jsonWorkerManager = null;
|
|
6633
|
+
this.emitter = null;
|
|
6324
6634
|
this._normalizeEOL = normalizeEOL;
|
|
6325
6635
|
this._pieceTree = this.createTextBuffer(value);
|
|
6326
6636
|
if (!isInWorkerThread()) {
|
|
6327
6637
|
this._jsonWorkerManager = getJsonWorkerManager();
|
|
6638
|
+
this.emitter = getEmitter();
|
|
6328
6639
|
}
|
|
6329
6640
|
}
|
|
6641
|
+
get pieceTree() {
|
|
6642
|
+
return this._pieceTree;
|
|
6643
|
+
}
|
|
6330
6644
|
createTextBufferFactory(value) {
|
|
6331
6645
|
const builder = new PieceTreeTextBufferBuilder();
|
|
6332
6646
|
builder.acceptChunk(value);
|
|
@@ -6371,68 +6685,53 @@ var JSONModel = class {
|
|
|
6371
6685
|
offset = Math.min(this._pieceTree.getLength(), Math.max(0, offset));
|
|
6372
6686
|
return this._pieceTree.getPositionAt(offset);
|
|
6373
6687
|
}
|
|
6374
|
-
|
|
6375
|
-
* 获取行首偏移
|
|
6376
|
-
* @param lineNumber 行号
|
|
6377
|
-
* @returns 行首偏移
|
|
6378
|
-
*/
|
|
6379
|
-
getLineStartOffset(lineNumber) {
|
|
6380
|
-
return this.getOffsetAt(lineNumber, 1);
|
|
6381
|
-
}
|
|
6382
|
-
/**
|
|
6383
|
-
* 获取行尾偏移
|
|
6384
|
-
* @param lineNumber 行号
|
|
6385
|
-
* @returns 行尾偏移
|
|
6386
|
-
*/
|
|
6387
|
-
getLineEndOffset(lineNumber) {
|
|
6388
|
-
const lineLength = this.getLineLength(lineNumber);
|
|
6389
|
-
return this.getOffsetAt(lineNumber, lineLength + 1);
|
|
6390
|
-
}
|
|
6391
|
-
applyOperation(op) {
|
|
6688
|
+
_createCommand(op) {
|
|
6392
6689
|
if (Array.isArray(op)) {
|
|
6393
|
-
|
|
6394
|
-
return;
|
|
6690
|
+
return new MultiCommand(this, op);
|
|
6395
6691
|
}
|
|
6396
|
-
this._updateLastChangeBufferPos(op);
|
|
6397
6692
|
switch (op.type) {
|
|
6398
6693
|
case "insert":
|
|
6399
|
-
|
|
6400
|
-
break;
|
|
6694
|
+
return new InsertCommand(this, op);
|
|
6401
6695
|
case "delete":
|
|
6402
|
-
|
|
6403
|
-
break;
|
|
6696
|
+
return new DeleteCommand(this, op);
|
|
6404
6697
|
case "replace":
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6698
|
+
return new ReplaceCommand(this, op);
|
|
6699
|
+
default:
|
|
6700
|
+
throw new Error("Unknown operation type");
|
|
6408
6701
|
}
|
|
6702
|
+
}
|
|
6703
|
+
applyOperation(op) {
|
|
6704
|
+
this._redoStack = [];
|
|
6705
|
+
const command = this._createCommand(op);
|
|
6706
|
+
this.pushUndoStack(command);
|
|
6707
|
+
command.execute();
|
|
6409
6708
|
if (!isInWorkerThread()) {
|
|
6410
|
-
emitter
|
|
6709
|
+
this.emitter?.emit("contentChanged", op);
|
|
6411
6710
|
}
|
|
6412
6711
|
if (this._jsonWorkerManager) {
|
|
6413
6712
|
this._jsonWorkerManager.updateModel(op).then((res) => {
|
|
6414
6713
|
return this._jsonWorkerManager?.validate();
|
|
6415
6714
|
}).then((result) => {
|
|
6416
|
-
emitter
|
|
6715
|
+
this.emitter?.emit("problemsChanged", {
|
|
6417
6716
|
problems: result.problems,
|
|
6418
6717
|
root: result.root
|
|
6419
6718
|
});
|
|
6420
6719
|
});
|
|
6421
6720
|
}
|
|
6422
6721
|
}
|
|
6423
|
-
|
|
6722
|
+
updateLastChangeBufferPos(op) {
|
|
6723
|
+
if (op.keepPosition) {
|
|
6724
|
+
this.lastChangeBufferPos = op.keepPosition;
|
|
6725
|
+
return;
|
|
6726
|
+
}
|
|
6424
6727
|
switch (op.type) {
|
|
6425
6728
|
case "insert":
|
|
6426
6729
|
this.lastChangeBufferPos.column += op.newText.length;
|
|
6427
|
-
if (op.newText === "\n") {
|
|
6428
|
-
this.lastChangeBufferPos.lineNumber += 1;
|
|
6429
|
-
this.lastChangeBufferPos.column = 0;
|
|
6430
|
-
}
|
|
6431
6730
|
break;
|
|
6432
6731
|
case "delete":
|
|
6433
|
-
if (this.lastChangeBufferPos.column ===
|
|
6732
|
+
if (this.lastChangeBufferPos.column === 1) {
|
|
6434
6733
|
this.lastChangeBufferPos.lineNumber -= 1;
|
|
6435
|
-
this.lastChangeBufferPos.column = this.getLineLength(this.lastChangeBufferPos.lineNumber);
|
|
6734
|
+
this.lastChangeBufferPos.column = this.getLineLength(this.lastChangeBufferPos.lineNumber) + 1;
|
|
6436
6735
|
} else {
|
|
6437
6736
|
const startColumn = op.range.startColumn;
|
|
6438
6737
|
const newColumn2 = op.rangeLength === 1 ? startColumn - 1 : startColumn;
|
|
@@ -6447,14 +6746,14 @@ var JSONModel = class {
|
|
|
6447
6746
|
break;
|
|
6448
6747
|
}
|
|
6449
6748
|
}
|
|
6450
|
-
pushUndoStack(
|
|
6451
|
-
this._undoStack.push(
|
|
6749
|
+
pushUndoStack(command) {
|
|
6750
|
+
this._undoStack.push(command);
|
|
6452
6751
|
if (this._undoStack.length > this.MAX_STACK_SIZE) {
|
|
6453
6752
|
this._undoStack.shift();
|
|
6454
6753
|
}
|
|
6455
6754
|
}
|
|
6456
|
-
pushRedoStack(
|
|
6457
|
-
this._redoStack.push(
|
|
6755
|
+
pushRedoStack(command) {
|
|
6756
|
+
this._redoStack.push(command);
|
|
6458
6757
|
if (this._redoStack.length > this.MAX_STACK_SIZE) {
|
|
6459
6758
|
this._redoStack.shift();
|
|
6460
6759
|
}
|
|
@@ -6467,40 +6766,17 @@ var JSONModel = class {
|
|
|
6467
6766
|
}
|
|
6468
6767
|
undo() {
|
|
6469
6768
|
if (!this.canUndo()) return;
|
|
6470
|
-
const
|
|
6471
|
-
|
|
6472
|
-
this.
|
|
6473
|
-
this.
|
|
6769
|
+
const command = this._undoStack.pop();
|
|
6770
|
+
command.undo();
|
|
6771
|
+
this._redoStack.push(command);
|
|
6772
|
+
this.emitter?.emit("contentChanged", command.operation);
|
|
6474
6773
|
}
|
|
6475
6774
|
redo() {
|
|
6476
6775
|
if (!this.canRedo()) return;
|
|
6477
|
-
const
|
|
6478
|
-
|
|
6479
|
-
this.
|
|
6480
|
-
|
|
6481
|
-
_createReverseOperation(op) {
|
|
6482
|
-
const reverseOp = {
|
|
6483
|
-
...op,
|
|
6484
|
-
oldText: op.newText,
|
|
6485
|
-
newText: op.oldText
|
|
6486
|
-
};
|
|
6487
|
-
switch (op.type) {
|
|
6488
|
-
case "insert":
|
|
6489
|
-
reverseOp.type = "delete";
|
|
6490
|
-
reverseOp.rangeLength = op.newText.length;
|
|
6491
|
-
break;
|
|
6492
|
-
case "delete":
|
|
6493
|
-
reverseOp.type = "insert";
|
|
6494
|
-
reverseOp.rangeLength = 0;
|
|
6495
|
-
break;
|
|
6496
|
-
case "replace":
|
|
6497
|
-
reverseOp.rangeLength = op.newText.length;
|
|
6498
|
-
const preNewText = op.newText;
|
|
6499
|
-
reverseOp.oldText = preNewText;
|
|
6500
|
-
reverseOp.newText = op.oldText;
|
|
6501
|
-
break;
|
|
6502
|
-
}
|
|
6503
|
-
return reverseOp;
|
|
6776
|
+
const command = this._redoStack.pop();
|
|
6777
|
+
command.execute();
|
|
6778
|
+
this._undoStack.push(command);
|
|
6779
|
+
this.emitter?.emit("contentChanged", command.operation);
|
|
6504
6780
|
}
|
|
6505
6781
|
/**
|
|
6506
6782
|
* 获取值
|
|
@@ -6607,10 +6883,13 @@ function createModel(text, normalizeEOL = true) {
|
|
|
6607
6883
|
// src/json-viewer/jsonViewer.ts
|
|
6608
6884
|
var JsonViewer = class {
|
|
6609
6885
|
constructor(container, value, options) {
|
|
6610
|
-
this._jsonWorkerManager =
|
|
6611
|
-
this.
|
|
6886
|
+
this._jsonWorkerManager = null;
|
|
6887
|
+
this._id = `jsonviewer-${Math.random().toString(36).substr(2, 9)}`;
|
|
6888
|
+
setCurrentNameSpaceId(this._id);
|
|
6889
|
+
this.emitter = getEmitter();
|
|
6612
6890
|
this._container = container;
|
|
6613
6891
|
this._jsonModel = createModel(value);
|
|
6892
|
+
this._jsonWorkerManager = getJsonWorkerManager();
|
|
6614
6893
|
this._jsonWorkerManager.init(value);
|
|
6615
6894
|
this._view = new View(container, this._jsonModel, options);
|
|
6616
6895
|
}
|
|
@@ -6623,6 +6902,14 @@ var JsonViewer = class {
|
|
|
6623
6902
|
getSearchWidget() {
|
|
6624
6903
|
return this._view.searchWidget;
|
|
6625
6904
|
}
|
|
6905
|
+
format() {
|
|
6906
|
+
this._view.editWidget.format();
|
|
6907
|
+
}
|
|
6908
|
+
dispose() {
|
|
6909
|
+
disposeEmitter(this._id);
|
|
6910
|
+
disposeWorkerManager(this._id);
|
|
6911
|
+
this._view.dispose();
|
|
6912
|
+
}
|
|
6626
6913
|
};
|
|
6627
6914
|
export {
|
|
6628
6915
|
JsonViewer
|