libey-ng-component-library 0.0.35 → 0.0.37
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/bundles/libey-ng-component-library.umd.js +2521 -0
- package/bundles/libey-ng-component-library.umd.js.map +1 -0
- package/esm2015/lib/cpm-indicator/libey-ng-cpm-indicator.component.js +193 -0
- package/esm2015/lib/cpm-indicator/libey-ng-cpm-indicator.module.js +26 -0
- package/esm2015/lib/icons/icons.module.js +26 -0
- package/esm2015/lib/icons/libey-ng-icons/libey-ng-icons.component.js +52 -0
- package/esm2015/lib/libey-ng-component-library.component.js +26 -0
- package/esm2015/lib/libey-ng-component-library.module.js +60 -0
- package/esm2015/lib/libey-ng-component-library.service.js +14 -0
- package/esm2015/lib/signature/libey-ng-signature/libey-ng-signature.component.js +197 -0
- package/esm2015/lib/signature/libey-ng-signature.module.js +57 -0
- package/esm2015/lib/table/directives/libey-column.directive.js +59 -0
- package/esm2015/lib/table/libey-ng-table.component.js +249 -0
- package/esm2015/lib/table/libey-ng-table.module.js +21 -0
- package/esm2015/libey-ng-component-library.js +5 -0
- package/esm2015/public-api.js +23 -0
- package/esm2015/utils/CpmIndicator/cpm-indicator-types.js +25 -0
- package/esm2015/utils/SigWeb/SigWeb.js +1442 -0
- package/fesm2015/libey-ng-component-library.js +2416 -0
- package/fesm2015/libey-ng-component-library.js.map +1 -0
- package/lib/cpm-indicator/libey-ng-cpm-indicator.component.d.ts +66 -0
- package/lib/cpm-indicator/libey-ng-cpm-indicator.module.d.ts +8 -0
- package/lib/icons/icons.module.d.ts +8 -0
- package/lib/icons/libey-ng-icons/libey-ng-icons.component.d.ts +19 -0
- package/lib/libey-ng-component-library.component.d.ts +8 -0
- package/lib/libey-ng-component-library.module.d.ts +13 -0
- package/lib/libey-ng-component-library.service.d.ts +6 -0
- package/lib/signature/libey-ng-signature/libey-ng-signature.component.d.ts +40 -0
- package/lib/signature/libey-ng-signature.module.d.ts +13 -0
- package/lib/table/directives/libey-column.directive.d.ts +24 -0
- package/lib/table/libey-ng-table.component.d.ts +64 -0
- package/lib/table/libey-ng-table.module.d.ts +10 -0
- package/libey-ng-component-library.d.ts +5 -0
- package/package.json +24 -17
- package/{src/public-api.ts → public-api.d.ts} +0 -4
- package/utils/CpmIndicator/cpm-indicator-types.d.ts +40 -0
- package/utils/SigWeb/SigWeb.d.ts +219 -0
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -13
- package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.css +0 -216
- package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.html +0 -201
- package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.spec.ts +0 -25
- package/src/lib/cpm-indicator/libey-ng-cpm-indicator.component.ts +0 -203
- package/src/lib/cpm-indicator/libey-ng-cpm-indicator.module.ts +0 -19
- package/src/lib/icons/icons.component.css +0 -9
- package/src/lib/icons/icons.module.ts +0 -16
- package/src/lib/icons/libey-ng-icons/libey-ng-icons.component.html +0 -1831
- package/src/lib/icons/libey-ng-icons/libey-ng-icons.component.ts +0 -36
- package/src/lib/libey-ng-component-library.component.spec.ts +0 -25
- package/src/lib/libey-ng-component-library.component.ts +0 -20
- package/src/lib/libey-ng-component-library.module.ts +0 -32
- package/src/lib/libey-ng-component-library.service.spec.ts +0 -16
- package/src/lib/libey-ng-component-library.service.ts +0 -9
- package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.css +0 -7
- package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.html +0 -41
- package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.spec.ts +0 -25
- package/src/lib/signature/libey-ng-signature/libey-ng-signature.component.ts +0 -214
- package/src/lib/signature/libey-ng-signature.module.ts +0 -30
- package/src/lib/table/directives/libey-column.directive.ts +0 -29
- package/src/lib/table/libey-ng-table.component.css +0 -249
- package/src/lib/table/libey-ng-table.component.html +0 -122
- package/src/lib/table/libey-ng-table.component.ts +0 -234
- package/src/lib/table/libey-ng-table.module.ts +0 -13
- package/src/test.ts +0 -28
- package/src/utils/CpmIndicator/cpm-indicator-types.ts +0 -63
- package/src/utils/SigWeb/SigWeb.ts +0 -1906
- package/tsconfig.lib.json +0 -20
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -0,0 +1,1442 @@
|
|
|
1
|
+
// SigWebTablet.ts
|
|
2
|
+
export class SigWebTablet {
|
|
3
|
+
static revokeBlobURL(url) {
|
|
4
|
+
if (window.URL) {
|
|
5
|
+
URL.revokeObjectURL(url);
|
|
6
|
+
}
|
|
7
|
+
else if (window.webkitURL) {
|
|
8
|
+
webkitURL.revokeObjectURL(url);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
static getBlobURL(blob) {
|
|
12
|
+
if (window.URL) {
|
|
13
|
+
return URL.createObjectURL(blob);
|
|
14
|
+
}
|
|
15
|
+
else if (window.webkitURL) {
|
|
16
|
+
return webkitURL.createObjectURL(blob);
|
|
17
|
+
}
|
|
18
|
+
return ''; // Retornar un string vacío en caso de error
|
|
19
|
+
}
|
|
20
|
+
static makeUri() {
|
|
21
|
+
var prot = location.protocol;
|
|
22
|
+
if (prot == 'file:') {
|
|
23
|
+
prot = 'http:';
|
|
24
|
+
}
|
|
25
|
+
if (this.isIE()) {
|
|
26
|
+
if (prot == 'https:') {
|
|
27
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (this.isChrome()) {
|
|
34
|
+
if (prot == 'https:') {
|
|
35
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
//FIREFOX
|
|
43
|
+
if (prot == 'https:') {
|
|
44
|
+
return prot + '//tablet.sigwebtablet.com:47290/SigWeb/';
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return prot + '//tablet.sigwebtablet.com:47289/SigWeb/';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
static generateUUID() {
|
|
52
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
53
|
+
const r = (Math.random() * 16) | 0;
|
|
54
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
55
|
+
return v.toString(16);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
static isSigWebInstalled() {
|
|
59
|
+
const xhr = new XMLHttpRequest();
|
|
60
|
+
try {
|
|
61
|
+
xhr.open('GET', `${this.baseUri}TabletState?noCache=${this.generateUUID()}`, false);
|
|
62
|
+
xhr.send();
|
|
63
|
+
return xhr.status !== 404 && xhr.status !== 0;
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
console.log('Error checking SigWeb installation', e);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static isIE() {
|
|
71
|
+
return (navigator.appName === 'Microsoft Internet Explorer' ||
|
|
72
|
+
(navigator.appName === 'Netscape' &&
|
|
73
|
+
new RegExp('Trident/.*rv:([0-9]{1,}[.0-9]{0,})').exec(navigator.userAgent) != null));
|
|
74
|
+
}
|
|
75
|
+
static isChrome() {
|
|
76
|
+
return navigator.userAgent.lastIndexOf('Chrome/') > 0;
|
|
77
|
+
}
|
|
78
|
+
static SigWebcreateXHR() {
|
|
79
|
+
const xhr = new XMLHttpRequest();
|
|
80
|
+
if (!xhr) {
|
|
81
|
+
throw new Error('No se pudo crear XMLHttpRequest');
|
|
82
|
+
}
|
|
83
|
+
return xhr;
|
|
84
|
+
}
|
|
85
|
+
static SigWebSetProperty(prop) {
|
|
86
|
+
const xhr = this.SigWebcreateXHR();
|
|
87
|
+
if (xhr) {
|
|
88
|
+
xhr.open('POST', this.baseUri + prop, true);
|
|
89
|
+
xhr.send(null);
|
|
90
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
91
|
+
return xhr.responseText;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return '';
|
|
95
|
+
}
|
|
96
|
+
static SigWebSetPropertySync(prop) {
|
|
97
|
+
const xhr = this.SigWebcreateXHR();
|
|
98
|
+
if (xhr) {
|
|
99
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
100
|
+
xhr.send();
|
|
101
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
102
|
+
return xhr.responseText;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return '';
|
|
106
|
+
}
|
|
107
|
+
static SigWebSetStreamProperty(prop, strm) {
|
|
108
|
+
const xhr = this.SigWebcreateXHR();
|
|
109
|
+
if (xhr) {
|
|
110
|
+
xhr.open('POST', this.baseUri + prop);
|
|
111
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
112
|
+
xhr.send(strm);
|
|
113
|
+
}
|
|
114
|
+
return '';
|
|
115
|
+
}
|
|
116
|
+
static SigWebSyncSetStreamProperty(prop, strm) {
|
|
117
|
+
const xhr = this.SigWebcreateXHR();
|
|
118
|
+
if (xhr) {
|
|
119
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
120
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
121
|
+
xhr.send(strm);
|
|
122
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
123
|
+
return xhr.responseText;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return '';
|
|
127
|
+
}
|
|
128
|
+
static SigWebSetImageStreamProperty(prop, strm) {
|
|
129
|
+
const xhr = this.SigWebcreateXHR();
|
|
130
|
+
if (xhr) {
|
|
131
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
132
|
+
xhr.setRequestHeader('Content-Type', 'image/png');
|
|
133
|
+
xhr.send(strm);
|
|
134
|
+
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
135
|
+
return xhr.responseText;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
static SigWebSetImageBlobProperty(prop, strm) {
|
|
141
|
+
var xhr = this.SigWebcreateXHR();
|
|
142
|
+
if (xhr) {
|
|
143
|
+
xhr.open('POST', this.baseUri + prop, false);
|
|
144
|
+
xhr.setRequestHeader('Content-Type', 'blob');
|
|
145
|
+
xhr.send(strm);
|
|
146
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
147
|
+
return xhr.responseText;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return '';
|
|
151
|
+
}
|
|
152
|
+
static SigWebGetVersion(prop) {
|
|
153
|
+
try {
|
|
154
|
+
var xhr = this.SigWebcreateXHR();
|
|
155
|
+
if (xhr) {
|
|
156
|
+
xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
|
|
157
|
+
xhr.send(null);
|
|
158
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
159
|
+
return xhr.responseText;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('Error en SigWebGetVersion:', error);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
static SigWebGetProperty(prop) {
|
|
170
|
+
var xhr = this.SigWebcreateXHR();
|
|
171
|
+
if (xhr) {
|
|
172
|
+
xhr.open('GET', this.baseUri + prop + '?noCache=' + this.generateUUID(), false);
|
|
173
|
+
xhr.send(null);
|
|
174
|
+
if (xhr.readyState == 4 && xhr.status == 200) {
|
|
175
|
+
return xhr.responseText;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return '';
|
|
179
|
+
}
|
|
180
|
+
static GetSigImageB64(callback) {
|
|
181
|
+
var cvs = document.createElement('canvas');
|
|
182
|
+
var width = this.GetImageXSize();
|
|
183
|
+
var height = this.GetImageYSize();
|
|
184
|
+
cvs.width = width == '' || width == null ? 0 : Number(width);
|
|
185
|
+
cvs.height = height == '' || height == null ? 0 : Number(height);
|
|
186
|
+
var xhr2 = new XMLHttpRequest();
|
|
187
|
+
xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
|
|
188
|
+
xhr2.responseType = 'blob';
|
|
189
|
+
xhr2.send(null);
|
|
190
|
+
xhr2.onload = () => {
|
|
191
|
+
var cntx = cvs.getContext('2d');
|
|
192
|
+
var img = new Image();
|
|
193
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
194
|
+
img.onload = () => {
|
|
195
|
+
cntx.drawImage(img, 0, 0);
|
|
196
|
+
var b64String = cvs.toDataURL('image/png');
|
|
197
|
+
var loc = b64String.search('base64,');
|
|
198
|
+
var retstring = b64String.slice(loc + 7, b64String.length);
|
|
199
|
+
if (callback) {
|
|
200
|
+
callback(retstring);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
static SigWebWaitForPenDown(callback) {
|
|
206
|
+
var xhr = this.SigWebcreateXHR();
|
|
207
|
+
if (xhr) {
|
|
208
|
+
xhr.open('GET', this.baseUri + 'WaitForPenDown' + '?noCache=' + this.generateUUID());
|
|
209
|
+
xhr.timeout = 10000;
|
|
210
|
+
xhr.onreadystatechange = () => {
|
|
211
|
+
if (xhr.readyState != 4)
|
|
212
|
+
return;
|
|
213
|
+
if (xhr.status == 200)
|
|
214
|
+
callback();
|
|
215
|
+
};
|
|
216
|
+
xhr.send(null);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
static GetSigImage(ctx) {
|
|
220
|
+
var xhr2 = new XMLHttpRequest();
|
|
221
|
+
xhr2.open('GET', this.baseUri + 'SigImage/1' + '?noCache=' + this.generateUUID(), true);
|
|
222
|
+
xhr2.responseType = 'blob';
|
|
223
|
+
xhr2.send(null);
|
|
224
|
+
xhr2.onload = () => {
|
|
225
|
+
var img = new Image();
|
|
226
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
227
|
+
img.onload = () => {
|
|
228
|
+
ctx.drawImage(img, 0, 0);
|
|
229
|
+
this.revokeBlobURL(img.src);
|
|
230
|
+
img = null;
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
static SigWebSetDisplayTarget(obj) {
|
|
235
|
+
this.ctx = obj;
|
|
236
|
+
}
|
|
237
|
+
static SigWebRefresh() {
|
|
238
|
+
var NumPoints = Number(this.NumberOfTabletPoints());
|
|
239
|
+
if (NumPoints == this.NumPointsLastTime) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
this.NumPointsLastTime = NumPoints;
|
|
243
|
+
var xhr2 = new XMLHttpRequest();
|
|
244
|
+
xhr2.open('GET', this.baseUri + 'SigImage/0' + '?noCache=' + this.generateUUID(), true);
|
|
245
|
+
xhr2.responseType = 'blob';
|
|
246
|
+
xhr2.onload = () => {
|
|
247
|
+
var img = new Image();
|
|
248
|
+
img.src = this.getBlobURL(xhr2.response);
|
|
249
|
+
// img.src = window.URL.createObjectURL(xhr2.response);
|
|
250
|
+
img.onload = () => {
|
|
251
|
+
this.ctx.drawImage(img, 0, 0);
|
|
252
|
+
this.revokeBlobURL(img.src);
|
|
253
|
+
img = null;
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
xhr2.send(null);
|
|
257
|
+
}
|
|
258
|
+
static SigWebEvent() {
|
|
259
|
+
var OldEvStatus = this.EvStatus;
|
|
260
|
+
var xhr = this.SigWebcreateXHR();
|
|
261
|
+
if (xhr) {
|
|
262
|
+
xhr.open('GET', this.baseUri + 'EventStatus' + '?noCache=' + this.generateUUID(), true);
|
|
263
|
+
xhr.onload = () => {
|
|
264
|
+
this.EvStatus = xhr.responseText;
|
|
265
|
+
if (OldEvStatus & 0x01 && this.EvStatus & 0x02) {
|
|
266
|
+
if (this.onSigPenDown) {
|
|
267
|
+
this.onSigPenDown();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (OldEvStatus & 0x02 && this.EvStatus & 0x01) {
|
|
271
|
+
if (this.onSigPenUp) {
|
|
272
|
+
this.onSigPenUp();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
xhr.send(null);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
static setSigWebFontThreshold(v) {
|
|
280
|
+
this.SigWebFontThreshold = v;
|
|
281
|
+
}
|
|
282
|
+
static createLcdBitmapFromCanvas(ourCanvas, xp, yp, width, height) {
|
|
283
|
+
var canvasCtx = ourCanvas.getContext('2d');
|
|
284
|
+
var imgData = canvasCtx.getImageData(0, 0, width, height);
|
|
285
|
+
var j = 0;
|
|
286
|
+
var sVal = 0;
|
|
287
|
+
var outData = '';
|
|
288
|
+
var outIdx = 0;
|
|
289
|
+
var data = imgData.data;
|
|
290
|
+
for (var y = 0; y < height; y++)
|
|
291
|
+
for (var x = 0; x < width; x++) {
|
|
292
|
+
var tmp1 = data[j];
|
|
293
|
+
var tmp2 = data[j + 1];
|
|
294
|
+
var tmp3 = data[j + 2];
|
|
295
|
+
var tmp4 = data[j + 3];
|
|
296
|
+
// sVal = tmp1 + (tmp2 << 8 ) + ( tmp3 << 16 ) + (tmp4 << 24 );
|
|
297
|
+
j = j + 4;
|
|
298
|
+
if (tmp1 < this.SigWebFontThreshold) {
|
|
299
|
+
outData += 'B';
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
outData += 'W';
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return outData;
|
|
306
|
+
}
|
|
307
|
+
static toHex(NibVal) {
|
|
308
|
+
switch (NibVal) {
|
|
309
|
+
case 0:
|
|
310
|
+
return '0';
|
|
311
|
+
case 1:
|
|
312
|
+
return '1';
|
|
313
|
+
case 2:
|
|
314
|
+
return '2';
|
|
315
|
+
case 3:
|
|
316
|
+
return '3';
|
|
317
|
+
case 4:
|
|
318
|
+
return '4';
|
|
319
|
+
case 5:
|
|
320
|
+
return '5';
|
|
321
|
+
case 6:
|
|
322
|
+
return '6';
|
|
323
|
+
case 7:
|
|
324
|
+
return '7';
|
|
325
|
+
case 8:
|
|
326
|
+
return '8';
|
|
327
|
+
case 9:
|
|
328
|
+
return '9';
|
|
329
|
+
case 10:
|
|
330
|
+
return 'A';
|
|
331
|
+
case 11:
|
|
332
|
+
return 'B';
|
|
333
|
+
case 12:
|
|
334
|
+
return 'C';
|
|
335
|
+
case 13:
|
|
336
|
+
return 'D';
|
|
337
|
+
case 14:
|
|
338
|
+
return 'E';
|
|
339
|
+
case 15:
|
|
340
|
+
return 'F';
|
|
341
|
+
default:
|
|
342
|
+
return '';
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
static ToHexString(ByteVal) {
|
|
346
|
+
var Str = '';
|
|
347
|
+
Str += this.toHex((ByteVal >> 4) & 0x0f);
|
|
348
|
+
Str += this.toHex(ByteVal & 0x0f);
|
|
349
|
+
return Str;
|
|
350
|
+
}
|
|
351
|
+
static textToTablet(x, y, height, str, fnt) {
|
|
352
|
+
var c = document.createElement('canvas');
|
|
353
|
+
var cntx = c.getContext('2d');
|
|
354
|
+
cntx.font = fnt;
|
|
355
|
+
var txt = str;
|
|
356
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
357
|
+
var ys = height;
|
|
358
|
+
c.width = xs;
|
|
359
|
+
c.height = ys;
|
|
360
|
+
cntx.font = fnt;
|
|
361
|
+
cntx.fillStyle = '#FFFFFF';
|
|
362
|
+
cntx.rect(0, 0, xs, ys);
|
|
363
|
+
cntx.fill();
|
|
364
|
+
cntx.fillStyle = '#000000';
|
|
365
|
+
cntx.textBaseline = 'top';
|
|
366
|
+
cntx.fillText(txt, 0, 0);
|
|
367
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
368
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, 0, 0, xs, ys);
|
|
369
|
+
this.LcdWriteImageStream(0, 2, x, y, xs, ys, Gstr);
|
|
370
|
+
}
|
|
371
|
+
static LcdWriteImage(Dst, Mode, Xp, Yp, Url) {
|
|
372
|
+
var Prop = 'LcdWriteImage/';
|
|
373
|
+
var NewUrl = Url.replace(/\//g, '_');
|
|
374
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + NewUrl;
|
|
375
|
+
this.SigWebSetPropertySync(Prop);
|
|
376
|
+
}
|
|
377
|
+
static LcdWriteLocalImage(Dst, Mode, Xp, Yp, Url) {
|
|
378
|
+
var Prop = 'LcdWriteImage/';
|
|
379
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Url;
|
|
380
|
+
this.SigWebSetProperty(Prop);
|
|
381
|
+
}
|
|
382
|
+
static LcdWriteImageStream(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
|
|
383
|
+
var Prop1 = 'LcdWriteImageStreamParams/' +
|
|
384
|
+
Dst +
|
|
385
|
+
',' +
|
|
386
|
+
Mode +
|
|
387
|
+
',' +
|
|
388
|
+
Xp +
|
|
389
|
+
',' +
|
|
390
|
+
Yp +
|
|
391
|
+
',' +
|
|
392
|
+
Xs +
|
|
393
|
+
',' +
|
|
394
|
+
Ys;
|
|
395
|
+
var Prop2 = 'LcdWriteImageStream/';
|
|
396
|
+
this.SigWebSetPropertySync(Prop1);
|
|
397
|
+
this.SigWebSetImageStreamProperty(Prop2, Url);
|
|
398
|
+
}
|
|
399
|
+
static LcdWriteImageBlob(Dst, Mode, Xp, Yp, Xs, Ys, Url) {
|
|
400
|
+
var Prop = 'LcdWriteImageStream/';
|
|
401
|
+
Prop = Prop + Dst + ',' + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
|
|
402
|
+
this.SigWebSetImageBlobProperty(Prop, Url);
|
|
403
|
+
}
|
|
404
|
+
static measureText(pText, pFontSize, pStyle) {
|
|
405
|
+
var lDiv = document.createElement('lDiv');
|
|
406
|
+
document.body.appendChild(lDiv);
|
|
407
|
+
if (pStyle != null) {
|
|
408
|
+
lDiv.setAttribute('style', pStyle);
|
|
409
|
+
}
|
|
410
|
+
lDiv.style.fontSize = '' + pFontSize + 'px';
|
|
411
|
+
lDiv.style.position = 'absolute';
|
|
412
|
+
lDiv.style.left = '-1000';
|
|
413
|
+
lDiv.style.top = '-1000';
|
|
414
|
+
lDiv.innerHTML = pText;
|
|
415
|
+
var lResult = {
|
|
416
|
+
width: lDiv.clientWidth,
|
|
417
|
+
height: lDiv.clientHeight,
|
|
418
|
+
};
|
|
419
|
+
document.body.removeChild(lDiv);
|
|
420
|
+
lDiv = null;
|
|
421
|
+
return lResult;
|
|
422
|
+
}
|
|
423
|
+
static GetVersionString() {
|
|
424
|
+
var Prop = 'Version';
|
|
425
|
+
Prop = Prop;
|
|
426
|
+
var Str = this.SigWebGetVersion(Prop);
|
|
427
|
+
if (Str == null)
|
|
428
|
+
return Str;
|
|
429
|
+
var trimStr = Str.slice(1, Str.length - 2);
|
|
430
|
+
return trimStr;
|
|
431
|
+
}
|
|
432
|
+
static IsPenDown() {
|
|
433
|
+
return this.EvStatus & 0x01;
|
|
434
|
+
}
|
|
435
|
+
//
|
|
436
|
+
// SigPlusNETSig.cs
|
|
437
|
+
//
|
|
438
|
+
static ClearTablet() {
|
|
439
|
+
var Prop = 'ClearSignature';
|
|
440
|
+
Prop = Prop;
|
|
441
|
+
return this.SigWebGetProperty(Prop);
|
|
442
|
+
}
|
|
443
|
+
static NumberOfTabletPoints() {
|
|
444
|
+
var Prop = 'TotalPoints';
|
|
445
|
+
Prop = Prop;
|
|
446
|
+
return this.SigWebGetProperty(Prop);
|
|
447
|
+
}
|
|
448
|
+
static SetSigString(sigStr, ctx) {
|
|
449
|
+
var Prop = 'SigString';
|
|
450
|
+
Prop = Prop;
|
|
451
|
+
var xhr = this.SigWebcreateXHR();
|
|
452
|
+
if (xhr) {
|
|
453
|
+
xhr.open('POST', this.baseUri + Prop);
|
|
454
|
+
xhr.setRequestHeader('Content-Type', 'text/plain');
|
|
455
|
+
xhr.send(sigStr);
|
|
456
|
+
xhr.onload = () => {
|
|
457
|
+
if (ctx) {
|
|
458
|
+
var can = ctx.canvas;
|
|
459
|
+
this.SetImageXSize(can.width);
|
|
460
|
+
this.SetImageYSize(can.height);
|
|
461
|
+
this.GetSigImage(ctx);
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
return '';
|
|
466
|
+
}
|
|
467
|
+
static GetSigString() {
|
|
468
|
+
var Prop = 'SigString';
|
|
469
|
+
Prop = Prop;
|
|
470
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
471
|
+
return Str.slice(1, Str.length - 1);
|
|
472
|
+
}
|
|
473
|
+
static SetSigCompressionMode(v) {
|
|
474
|
+
var Prop = 'CompressionMode/';
|
|
475
|
+
Prop = Prop + v;
|
|
476
|
+
this.SigWebSetPropertySync(Prop);
|
|
477
|
+
}
|
|
478
|
+
static GetSigCompressionMode() {
|
|
479
|
+
var Prop = 'CompressionMode';
|
|
480
|
+
Prop = Prop;
|
|
481
|
+
return this.SigWebGetProperty(Prop);
|
|
482
|
+
}
|
|
483
|
+
static SetEncryptionMode(v) {
|
|
484
|
+
var Prop = 'EncryptionMode/';
|
|
485
|
+
Prop = Prop + v;
|
|
486
|
+
this.SigWebSetPropertySync(Prop);
|
|
487
|
+
}
|
|
488
|
+
static GetEncryptionMode() {
|
|
489
|
+
var Prop = 'EncryptionMode';
|
|
490
|
+
Prop = Prop;
|
|
491
|
+
return this.SigWebGetProperty(Prop);
|
|
492
|
+
}
|
|
493
|
+
static SetKeyString(keyString) {
|
|
494
|
+
var Prop = 'KeyString';
|
|
495
|
+
Prop = Prop;
|
|
496
|
+
this.SigWebSetStreamProperty(Prop, keyString);
|
|
497
|
+
}
|
|
498
|
+
static GetKeyString() {
|
|
499
|
+
var Prop = 'KeyString';
|
|
500
|
+
Prop = Prop;
|
|
501
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
502
|
+
return Str.slice(1, Str.length - 1);
|
|
503
|
+
}
|
|
504
|
+
static AutoKeyStart() {
|
|
505
|
+
var Prop = 'AutoKeyStart';
|
|
506
|
+
Prop = Prop;
|
|
507
|
+
this.SigWebSetPropertySync(Prop);
|
|
508
|
+
}
|
|
509
|
+
static AutoKeyFinish() {
|
|
510
|
+
var Prop = 'AutoKeyFinish';
|
|
511
|
+
Prop = Prop;
|
|
512
|
+
this.SigWebSetPropertySync(Prop);
|
|
513
|
+
}
|
|
514
|
+
static SetAutoKeyData(keyData) {
|
|
515
|
+
var Prop = 'SetAutoKeyData';
|
|
516
|
+
Prop = Prop;
|
|
517
|
+
this.SigWebSetStreamProperty(Prop, keyData);
|
|
518
|
+
}
|
|
519
|
+
static AutoKeyAddData(keyData) {
|
|
520
|
+
var Prop = 'AutoKeyAddData';
|
|
521
|
+
Prop = Prop;
|
|
522
|
+
this.SigWebSetStreamProperty(Prop, keyData);
|
|
523
|
+
return this.GetKeyString();
|
|
524
|
+
}
|
|
525
|
+
// function GetKeyReceipt( ) {}
|
|
526
|
+
static GetKeyReceiptAscii() {
|
|
527
|
+
var Prop = 'KeyReceiptAscii';
|
|
528
|
+
Prop = Prop;
|
|
529
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
530
|
+
return Str.slice(1, Str.length - 1);
|
|
531
|
+
}
|
|
532
|
+
// function GetSigReceipt( ) {}
|
|
533
|
+
static GetSigReceiptAscii() {
|
|
534
|
+
var Prop = 'SigReceiptAscii';
|
|
535
|
+
Prop = Prop;
|
|
536
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
537
|
+
return Str.slice(1, Str.length - 1);
|
|
538
|
+
}
|
|
539
|
+
static SetTimeStamp(timeStamp) {
|
|
540
|
+
var Prop = 'TimeStamp';
|
|
541
|
+
Prop = Prop;
|
|
542
|
+
this.SigWebSetStreamProperty(Prop, timeStamp);
|
|
543
|
+
}
|
|
544
|
+
static GetTimeStamp() {
|
|
545
|
+
var Prop = 'TimeStamp';
|
|
546
|
+
Prop = Prop;
|
|
547
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
548
|
+
return Str.slice(1, Str.length - 1);
|
|
549
|
+
}
|
|
550
|
+
static SetAnnotate(annotate) {
|
|
551
|
+
var Prop = 'Annotate';
|
|
552
|
+
Prop = Prop;
|
|
553
|
+
this.SigWebSetStreamProperty(Prop, annotate);
|
|
554
|
+
}
|
|
555
|
+
static GetAnnotate() {
|
|
556
|
+
var Prop = 'Annotate';
|
|
557
|
+
Prop = Prop;
|
|
558
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
559
|
+
return Str.slice(1, Str.length - 1);
|
|
560
|
+
}
|
|
561
|
+
static SetSaveSigInfo(v) {
|
|
562
|
+
var Prop = 'SaveSigInfo/';
|
|
563
|
+
Prop = Prop + v;
|
|
564
|
+
this.SigWebSetPropertySync(Prop);
|
|
565
|
+
}
|
|
566
|
+
static GetSaveSigInfo() {
|
|
567
|
+
var Prop = 'SaveSigInfo';
|
|
568
|
+
Prop = Prop;
|
|
569
|
+
return this.SigWebGetProperty(Prop);
|
|
570
|
+
}
|
|
571
|
+
static SetSavePressureData(v) {
|
|
572
|
+
var Prop = 'SavePressureData/';
|
|
573
|
+
Prop = Prop + v;
|
|
574
|
+
this.SigWebSetPropertySync(Prop);
|
|
575
|
+
}
|
|
576
|
+
static GetSavePressureData() {
|
|
577
|
+
var Prop = 'SavePressureData';
|
|
578
|
+
Prop = Prop;
|
|
579
|
+
return this.SigWebGetProperty(Prop);
|
|
580
|
+
}
|
|
581
|
+
static SetSaveTimeData(v) {
|
|
582
|
+
var Prop = 'SaveTimeData/';
|
|
583
|
+
Prop = Prop + v;
|
|
584
|
+
this.SigWebSetPropertySync(Prop);
|
|
585
|
+
}
|
|
586
|
+
static GetSaveTimeData() {
|
|
587
|
+
var Prop = 'SaveTimeData';
|
|
588
|
+
Prop = Prop;
|
|
589
|
+
return this.SigWebGetProperty(Prop);
|
|
590
|
+
}
|
|
591
|
+
static SetAntiAliasSpotSize(v) {
|
|
592
|
+
var Prop = 'AntiAliasSpotSize/';
|
|
593
|
+
Prop = Prop + v;
|
|
594
|
+
this.SigWebSetPropertySync(Prop);
|
|
595
|
+
}
|
|
596
|
+
static GetAntiAliasSpotSize() {
|
|
597
|
+
var Prop = 'AntiAliasSpotSize';
|
|
598
|
+
Prop = Prop;
|
|
599
|
+
return this.SigWebGetProperty(Prop);
|
|
600
|
+
}
|
|
601
|
+
static SetAntiAliasLineScale(v) {
|
|
602
|
+
var Prop = 'AntiAliasLineScale/';
|
|
603
|
+
Prop = Prop + v;
|
|
604
|
+
this.SigWebSetPropertySync(Prop);
|
|
605
|
+
}
|
|
606
|
+
static GetAntiAliasLineScale() {
|
|
607
|
+
var Prop = 'AntiAliasLineScale';
|
|
608
|
+
Prop = Prop;
|
|
609
|
+
return this.SigWebGetProperty(Prop);
|
|
610
|
+
}
|
|
611
|
+
static GetNumberOfStrokes() {
|
|
612
|
+
var Prop = 'NumberOfStrokes';
|
|
613
|
+
Prop = Prop;
|
|
614
|
+
return this.SigWebGetProperty(Prop);
|
|
615
|
+
}
|
|
616
|
+
static GetNumPointsForStroke(v) {
|
|
617
|
+
var Prop = 'NumberOfPointsInStroke/';
|
|
618
|
+
Prop = Prop + v;
|
|
619
|
+
return this.SigWebGetProperty(Prop);
|
|
620
|
+
}
|
|
621
|
+
static GetPointXValue(v1, v2) {
|
|
622
|
+
var Prop = 'PointXValue/';
|
|
623
|
+
Prop = Prop + v1 + '/' + v2;
|
|
624
|
+
return this.SigWebGetProperty(Prop);
|
|
625
|
+
}
|
|
626
|
+
static GetPointYValue(v1, v2) {
|
|
627
|
+
var Prop = 'PointYValue/';
|
|
628
|
+
Prop = Prop + v1 + '/' + v2;
|
|
629
|
+
return this.SigWebGetProperty(Prop);
|
|
630
|
+
}
|
|
631
|
+
static SetAntiAliasEnable(v) {
|
|
632
|
+
var Prop = 'AntiAliasEnable/';
|
|
633
|
+
Prop = Prop + v;
|
|
634
|
+
this.SigWebSetPropertySync(Prop);
|
|
635
|
+
}
|
|
636
|
+
static GetAntiAliasEnable() {
|
|
637
|
+
var Prop = 'AntiAliasEnable';
|
|
638
|
+
Prop = Prop;
|
|
639
|
+
return this.SigWebGetProperty(Prop);
|
|
640
|
+
}
|
|
641
|
+
static SetUseAmbientColors(v) {
|
|
642
|
+
var Prop = 'UseAmbientColors/';
|
|
643
|
+
Prop = Prop + v;
|
|
644
|
+
this.SigWebSetPropertySync(Prop);
|
|
645
|
+
}
|
|
646
|
+
//
|
|
647
|
+
// SigPlusNETDisplay.cs
|
|
648
|
+
//
|
|
649
|
+
static SetDisplayXSize(v) {
|
|
650
|
+
var Prop = 'DisplayXSize/';
|
|
651
|
+
Prop = Prop + v;
|
|
652
|
+
this.SigWebSetPropertySync(Prop);
|
|
653
|
+
}
|
|
654
|
+
static GetDisplayXSize() {
|
|
655
|
+
var Prop = 'DisplayXSize';
|
|
656
|
+
Prop = Prop;
|
|
657
|
+
return this.SigWebGetProperty(Prop);
|
|
658
|
+
}
|
|
659
|
+
static SetDisplayYSize(v) {
|
|
660
|
+
var Prop = 'DisplayYSize/';
|
|
661
|
+
Prop = Prop + v;
|
|
662
|
+
this.SigWebSetPropertySync(Prop);
|
|
663
|
+
}
|
|
664
|
+
static GetDisplayYSize() {
|
|
665
|
+
var Prop = 'DisplayYSize';
|
|
666
|
+
Prop = Prop;
|
|
667
|
+
return this.SigWebGetProperty(Prop);
|
|
668
|
+
}
|
|
669
|
+
static SetDisplayPenWidth(v) {
|
|
670
|
+
var Prop = 'DisplayPenWidth/';
|
|
671
|
+
Prop = Prop + v;
|
|
672
|
+
this.SigWebSetPropertySync(Prop);
|
|
673
|
+
}
|
|
674
|
+
static GetDisplayPenWidth() {
|
|
675
|
+
var Prop = 'DisplayPenWidth';
|
|
676
|
+
Prop = Prop;
|
|
677
|
+
return this.SigWebGetProperty(Prop);
|
|
678
|
+
}
|
|
679
|
+
static SetDisplayTimeStamp(v) {
|
|
680
|
+
var Prop = 'DisplayTimeStamp/';
|
|
681
|
+
Prop = Prop + v;
|
|
682
|
+
this.SigWebSetPropertySync(Prop);
|
|
683
|
+
}
|
|
684
|
+
static GetDisplayTimeStamp() {
|
|
685
|
+
var Prop = 'DisplayTimeStamp';
|
|
686
|
+
Prop = Prop;
|
|
687
|
+
return this.SigWebGetProperty(Prop);
|
|
688
|
+
}
|
|
689
|
+
static SetDisplayTimeStampPosX(v) {
|
|
690
|
+
var Prop = 'DisplayTimeStampPosX/';
|
|
691
|
+
Prop = Prop + v;
|
|
692
|
+
this.SigWebSetPropertySync(Prop);
|
|
693
|
+
}
|
|
694
|
+
static GetDisplayTimeStampPosX() {
|
|
695
|
+
var Prop = 'DisplayTimeStampPosX';
|
|
696
|
+
Prop = Prop;
|
|
697
|
+
return this.SigWebGetProperty(Prop);
|
|
698
|
+
}
|
|
699
|
+
static SetDisplayTimeStampPosY(v) {
|
|
700
|
+
var Prop = 'DisplayTimeStampPosY/';
|
|
701
|
+
Prop = Prop + v;
|
|
702
|
+
this.SigWebSetPropertySync(Prop);
|
|
703
|
+
}
|
|
704
|
+
static GetDisplayTimeStampPosY() {
|
|
705
|
+
var Prop = 'DisplayTimeStampPosY';
|
|
706
|
+
Prop = Prop;
|
|
707
|
+
return this.SigWebGetProperty(Prop);
|
|
708
|
+
}
|
|
709
|
+
static SetDisplayTimeStampSize(v) {
|
|
710
|
+
var Prop = 'DisplayTimeStampSize/';
|
|
711
|
+
Prop = Prop + v;
|
|
712
|
+
this.SigWebSetPropertySync(Prop);
|
|
713
|
+
}
|
|
714
|
+
static GetDisplayTimeStampSize() {
|
|
715
|
+
var Prop = 'DisplayTimeStampSize';
|
|
716
|
+
Prop = Prop;
|
|
717
|
+
return this.SigWebGetProperty(Prop);
|
|
718
|
+
}
|
|
719
|
+
static SetDisplayAnnotate(v) {
|
|
720
|
+
var Prop = 'DisplayAnnotate/';
|
|
721
|
+
Prop = Prop + v;
|
|
722
|
+
this.SigWebSetPropertySync(Prop);
|
|
723
|
+
}
|
|
724
|
+
static GetDisplayAnnotate() {
|
|
725
|
+
var Prop = 'DisplayAnnotate';
|
|
726
|
+
Prop = Prop;
|
|
727
|
+
return this.SigWebGetProperty(Prop);
|
|
728
|
+
}
|
|
729
|
+
static SetDisplayAnnotatePosX(v) {
|
|
730
|
+
var Prop = 'DisplayAnnotatePosX/';
|
|
731
|
+
Prop = Prop + v;
|
|
732
|
+
this.SigWebSetPropertySync(Prop);
|
|
733
|
+
}
|
|
734
|
+
static GetDisplayAnnotatePosX() {
|
|
735
|
+
var Prop = 'DisplayAnnotatePosX';
|
|
736
|
+
Prop = Prop;
|
|
737
|
+
return this.SigWebGetProperty(Prop);
|
|
738
|
+
}
|
|
739
|
+
static SetDisplayAnnotatePosY(v) {
|
|
740
|
+
var Prop = 'DisplayAnnotatePosY/';
|
|
741
|
+
Prop = Prop + v;
|
|
742
|
+
this.SigWebSetPropertySync(Prop);
|
|
743
|
+
}
|
|
744
|
+
static GetDisplayAnnotatePosY() {
|
|
745
|
+
var Prop = 'DisplayAnnotatePosY';
|
|
746
|
+
Prop = Prop;
|
|
747
|
+
return this.SigWebGetProperty(Prop);
|
|
748
|
+
}
|
|
749
|
+
static SetDisplayAnnotateSize(v) {
|
|
750
|
+
var Prop = 'DisplayAnnotateSize/';
|
|
751
|
+
Prop = Prop + v;
|
|
752
|
+
this.SigWebSetPropertySync(Prop);
|
|
753
|
+
}
|
|
754
|
+
static GetDisplayAnnotateSize() {
|
|
755
|
+
var Prop = 'DisplayAnnotateSize';
|
|
756
|
+
Prop = Prop;
|
|
757
|
+
return this.SigWebGetProperty(Prop);
|
|
758
|
+
}
|
|
759
|
+
//
|
|
760
|
+
// SigPlusNETImage.cs
|
|
761
|
+
//
|
|
762
|
+
// function GetSigImageB64( )
|
|
763
|
+
// {
|
|
764
|
+
// var xhr2 = new XMLHttpRequest();
|
|
765
|
+
// xhr2.open("GET", baseUri + "SigImage/1", false );
|
|
766
|
+
// xhr2.responseType = "blob"
|
|
767
|
+
// xhr2.send(null);
|
|
768
|
+
// if (xhr2.readyState == 4 && xhr.status == 200)
|
|
769
|
+
// {
|
|
770
|
+
// return window.URL.createObjectURL(xhr2.response);
|
|
771
|
+
// }
|
|
772
|
+
// return null;
|
|
773
|
+
// }
|
|
774
|
+
static SetImageXSize(v) {
|
|
775
|
+
var Prop = 'ImageXSize/';
|
|
776
|
+
Prop = Prop + v;
|
|
777
|
+
this.SigWebSetPropertySync(Prop);
|
|
778
|
+
}
|
|
779
|
+
static GetImageXSize() {
|
|
780
|
+
var Prop = 'ImageXSize';
|
|
781
|
+
Prop = Prop;
|
|
782
|
+
return this.SigWebGetProperty(Prop);
|
|
783
|
+
}
|
|
784
|
+
static SetImageYSize(v) {
|
|
785
|
+
var Prop = 'ImageYSize/';
|
|
786
|
+
Prop = Prop + v;
|
|
787
|
+
this.SigWebSetPropertySync(Prop);
|
|
788
|
+
}
|
|
789
|
+
static GetImageYSize() {
|
|
790
|
+
var Prop = 'ImageYSize';
|
|
791
|
+
Prop = Prop;
|
|
792
|
+
return this.SigWebGetProperty(Prop);
|
|
793
|
+
}
|
|
794
|
+
static SetImagePenWidth(v) {
|
|
795
|
+
var Prop = 'ImagePenWidth/';
|
|
796
|
+
Prop = Prop + v;
|
|
797
|
+
this.SigWebSetPropertySync(Prop);
|
|
798
|
+
}
|
|
799
|
+
static GetImagePenWidth() {
|
|
800
|
+
var Prop = 'ImagePenWidth';
|
|
801
|
+
Prop = Prop;
|
|
802
|
+
return this.SigWebGetProperty(Prop);
|
|
803
|
+
}
|
|
804
|
+
static SetImageTimeStamp(v) {
|
|
805
|
+
var Prop = 'ImageTimeStamp/';
|
|
806
|
+
Prop = Prop + v;
|
|
807
|
+
this.SigWebSetPropertySync(Prop);
|
|
808
|
+
}
|
|
809
|
+
static GetImageTimeStamp() {
|
|
810
|
+
var Prop = 'ImageTimeStamp';
|
|
811
|
+
Prop = Prop;
|
|
812
|
+
return this.SigWebGetProperty(Prop);
|
|
813
|
+
}
|
|
814
|
+
static SetImageTimeStampPosX(v) {
|
|
815
|
+
var Prop = 'ImageTimeStampPosX/';
|
|
816
|
+
Prop = Prop + v;
|
|
817
|
+
this.SigWebSetPropertySync(Prop);
|
|
818
|
+
}
|
|
819
|
+
static GetImageTimeStampPosX() {
|
|
820
|
+
var Prop = 'ImageTimeStampPosX';
|
|
821
|
+
Prop = Prop;
|
|
822
|
+
return this.SigWebGetProperty(Prop);
|
|
823
|
+
}
|
|
824
|
+
static SetImageTimeStampPosY(v) {
|
|
825
|
+
var Prop = 'ImageTimeStampPosY/';
|
|
826
|
+
Prop = Prop + v;
|
|
827
|
+
this.SigWebSetPropertySync(Prop);
|
|
828
|
+
}
|
|
829
|
+
static GetImageTimeStampPosY() {
|
|
830
|
+
var Prop = 'ImageTimeStampPosY';
|
|
831
|
+
Prop = Prop;
|
|
832
|
+
return this.SigWebGetProperty(Prop);
|
|
833
|
+
}
|
|
834
|
+
static SetImageTimeStampSize(v) {
|
|
835
|
+
var Prop = 'ImageTimeStampSize/';
|
|
836
|
+
Prop = Prop + v;
|
|
837
|
+
this.SigWebSetPropertySync(Prop);
|
|
838
|
+
}
|
|
839
|
+
static GetImageTimeStampSize() {
|
|
840
|
+
var Prop = 'ImageTimeStampSize';
|
|
841
|
+
Prop = Prop;
|
|
842
|
+
return this.SigWebGetProperty(Prop);
|
|
843
|
+
}
|
|
844
|
+
static SetImageAnnotate(v) {
|
|
845
|
+
var Prop = 'ImageAnnotate/';
|
|
846
|
+
Prop = Prop + v;
|
|
847
|
+
this.SigWebSetPropertySync(Prop);
|
|
848
|
+
}
|
|
849
|
+
static GetImageAnnotate() {
|
|
850
|
+
var Prop = 'ImageAnnotate';
|
|
851
|
+
Prop = Prop;
|
|
852
|
+
return this.SigWebGetProperty(Prop);
|
|
853
|
+
}
|
|
854
|
+
static SetImageAnnotatePosX(v) {
|
|
855
|
+
var Prop = 'ImageAnnotatePosX/';
|
|
856
|
+
Prop = Prop + v;
|
|
857
|
+
this.SigWebSetPropertySync(Prop);
|
|
858
|
+
}
|
|
859
|
+
static GetImageAnnotatePosX() {
|
|
860
|
+
var Prop = 'ImageAnnotatePosX';
|
|
861
|
+
Prop = Prop;
|
|
862
|
+
return this.SigWebGetProperty(Prop);
|
|
863
|
+
}
|
|
864
|
+
static SetImageAnnotatePosY(v) {
|
|
865
|
+
var Prop = 'ImageAnnotatePosY/';
|
|
866
|
+
Prop = Prop + v;
|
|
867
|
+
this.SigWebSetPropertySync(Prop);
|
|
868
|
+
}
|
|
869
|
+
static GetImageAnnotatePosY() {
|
|
870
|
+
var Prop = 'ImageAnnotatePosY';
|
|
871
|
+
Prop = Prop;
|
|
872
|
+
return this.SigWebGetProperty(Prop);
|
|
873
|
+
}
|
|
874
|
+
static SetImageAnnotateSize(v) {
|
|
875
|
+
var Prop = 'ImageAnnotateSize/';
|
|
876
|
+
Prop = Prop + v;
|
|
877
|
+
this.SigWebSetPropertySync(Prop);
|
|
878
|
+
}
|
|
879
|
+
static GetImageAnnotateSize() {
|
|
880
|
+
var Prop = 'ImageAnnotateSize';
|
|
881
|
+
Prop = Prop;
|
|
882
|
+
return this.SigWebGetProperty(Prop);
|
|
883
|
+
}
|
|
884
|
+
static SetJustifyX(v) {
|
|
885
|
+
var Prop = 'JustifyX/';
|
|
886
|
+
Prop = Prop + v;
|
|
887
|
+
this.SigWebSetPropertySync(Prop);
|
|
888
|
+
}
|
|
889
|
+
static GetJustifyX() {
|
|
890
|
+
var Prop = 'JustifyX';
|
|
891
|
+
Prop = Prop;
|
|
892
|
+
return this.SigWebGetProperty(Prop);
|
|
893
|
+
}
|
|
894
|
+
static SetJustifyY(v) {
|
|
895
|
+
var Prop = 'JustifyY/';
|
|
896
|
+
Prop = Prop + v;
|
|
897
|
+
this.SigWebSetPropertySync(Prop);
|
|
898
|
+
}
|
|
899
|
+
static GetJustifyY() {
|
|
900
|
+
var Prop = 'JustifyY';
|
|
901
|
+
Prop = Prop;
|
|
902
|
+
return this.SigWebGetProperty(Prop);
|
|
903
|
+
}
|
|
904
|
+
static SetJustifyMode(v) {
|
|
905
|
+
var Prop = 'JustifyMode/';
|
|
906
|
+
Prop = Prop + v;
|
|
907
|
+
this.SigWebSetPropertySync(Prop);
|
|
908
|
+
}
|
|
909
|
+
static GetJustifyMode() {
|
|
910
|
+
var Prop = 'JustifyMode';
|
|
911
|
+
Prop = Prop;
|
|
912
|
+
return this.SigWebGetProperty(Prop);
|
|
913
|
+
}
|
|
914
|
+
//
|
|
915
|
+
// SigPlusNETKeyPad.cs
|
|
916
|
+
//
|
|
917
|
+
static KeyPadAddHotSpot(key, coord, xp, yp, xs, ys) {
|
|
918
|
+
var Prop = 'KeyPadAddHotSpot/';
|
|
919
|
+
Prop = Prop + key + ',' + coord + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
|
|
920
|
+
this.SigWebSetPropertySync(Prop);
|
|
921
|
+
}
|
|
922
|
+
static KeyPadMarkHotSpot(key, coord, xp, yp, xs, ys) {
|
|
923
|
+
this.LCDWriteString(0, 2, xp, yp, '16pt sans-serif', 32, '+');
|
|
924
|
+
this.LCDWriteString(0, 2, xp + xs, yp, '16pt sans-serif', 32, '+');
|
|
925
|
+
this.LCDWriteString(0, 2, xp, yp + ys, '16pt sans-serif', 32, '+');
|
|
926
|
+
this.LCDWriteString(0, 2, xp + xs, yp + ys, '16pt sans-serif', 32, '+');
|
|
927
|
+
}
|
|
928
|
+
static KeyPadQueryHotSpot(key) {
|
|
929
|
+
var Prop = 'KeyPadQueryHotSpot/';
|
|
930
|
+
Prop = Prop + key;
|
|
931
|
+
return this.SigWebGetProperty(Prop);
|
|
932
|
+
}
|
|
933
|
+
static KeyPadClearHotSpotList() {
|
|
934
|
+
var Prop = 'KeyPadClearHotSpotList';
|
|
935
|
+
this.SigWebSetPropertySync(Prop);
|
|
936
|
+
}
|
|
937
|
+
static SetSigWindow(coords, xp, yp, xs, ys) {
|
|
938
|
+
var Prop = 'SigWindow/';
|
|
939
|
+
Prop = Prop + coords + ',' + xp + ',' + yp + ',' + xs + ',' + ys;
|
|
940
|
+
this.SigWebSetPropertySync(Prop);
|
|
941
|
+
}
|
|
942
|
+
static ClearSigWindow(inside) {
|
|
943
|
+
var Prop = 'ClearSigWindow/';
|
|
944
|
+
Prop = Prop + inside;
|
|
945
|
+
this.SigWebSetPropertySync(Prop);
|
|
946
|
+
}
|
|
947
|
+
//
|
|
948
|
+
// SigPlusNETLCD.cs
|
|
949
|
+
//
|
|
950
|
+
static SetLCDCaptureMode(v) {
|
|
951
|
+
var Prop = 'CaptureMode/';
|
|
952
|
+
Prop = Prop + v;
|
|
953
|
+
this.SigWebSetPropertySync(Prop);
|
|
954
|
+
}
|
|
955
|
+
static GetLCDCaptureMode() {
|
|
956
|
+
var Prop = 'CaptureMode';
|
|
957
|
+
Prop = Prop;
|
|
958
|
+
return this.SigWebGetProperty(Prop);
|
|
959
|
+
}
|
|
960
|
+
static LCDSetWindow(xP, yP, xS, yS) {
|
|
961
|
+
var Prop = 'LCDSetWindow/';
|
|
962
|
+
Prop = Prop + xP + ',' + yP + ',' + xS + ',' + yS;
|
|
963
|
+
this.SigWebSetPropertySync(Prop);
|
|
964
|
+
}
|
|
965
|
+
static LCDWriteString(dest, mode, x, y, fnt, size, str) {
|
|
966
|
+
var c = document.createElement('canvas');
|
|
967
|
+
var cntx = c.getContext('2d');
|
|
968
|
+
cntx.font = fnt;
|
|
969
|
+
var txt = str;
|
|
970
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
971
|
+
var ys = size;
|
|
972
|
+
c.width = xs;
|
|
973
|
+
c.height = ys;
|
|
974
|
+
if (xs == 0) {
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
cntx.font = fnt;
|
|
978
|
+
cntx.fillStyle = '#FFFFFF';
|
|
979
|
+
cntx.rect(0, 0, xs, ys);
|
|
980
|
+
cntx.fill();
|
|
981
|
+
cntx.fillStyle = '#000000';
|
|
982
|
+
cntx.textBaseline = 'top';
|
|
983
|
+
cntx.fillText(txt, 0, 0);
|
|
984
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
985
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
986
|
+
this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
|
|
987
|
+
}
|
|
988
|
+
static LCDDrawRectangle(dest, mode, x, y, xs, ys, fill) {
|
|
989
|
+
var c = document.createElement('canvas');
|
|
990
|
+
var cntx = c.getContext('2d');
|
|
991
|
+
c.width = xs;
|
|
992
|
+
c.height = ys;
|
|
993
|
+
cntx.fillStyle = fill;
|
|
994
|
+
cntx.rect(0, 0, xs, ys);
|
|
995
|
+
cntx.fill();
|
|
996
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
997
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
998
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
999
|
+
}
|
|
1000
|
+
static LCDDrawButton(dest, mode, x, y, xs, ys, strys, fill, fnt, str) {
|
|
1001
|
+
var c = document.createElement('canvas');
|
|
1002
|
+
var cntx = c.getContext('2d');
|
|
1003
|
+
cntx.font = fnt;
|
|
1004
|
+
var txt = str;
|
|
1005
|
+
var sxs = Math.round(cntx.measureText(txt).width);
|
|
1006
|
+
var sys = strys;
|
|
1007
|
+
c.width = xs;
|
|
1008
|
+
c.height = ys;
|
|
1009
|
+
cntx.font = fnt;
|
|
1010
|
+
cntx.fillStyle = fill;
|
|
1011
|
+
cntx.rect(0, 0, xs, ys);
|
|
1012
|
+
cntx.fill();
|
|
1013
|
+
cntx.fillStyle = '#FFFFFF';
|
|
1014
|
+
cntx.textBaseline = 'top';
|
|
1015
|
+
cntx.fillText(txt, (xs - sxs) / 2, (ys - sys) / 2);
|
|
1016
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
1017
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
1018
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
1019
|
+
}
|
|
1020
|
+
static LCDWriteStringWindow(dest, mode, x, y, fnt, xsize, ysize, str) {
|
|
1021
|
+
var c = document.createElement('canvas');
|
|
1022
|
+
var cntx = c.getContext('2d');
|
|
1023
|
+
cntx.font = fnt;
|
|
1024
|
+
var txt = str;
|
|
1025
|
+
var xs = xsize;
|
|
1026
|
+
var ys = ysize;
|
|
1027
|
+
c.width = xs;
|
|
1028
|
+
c.height = ys;
|
|
1029
|
+
cntx.font = fnt;
|
|
1030
|
+
cntx.fillStyle = '#FFFFFF';
|
|
1031
|
+
cntx.rect(0, 0, xs, ys);
|
|
1032
|
+
cntx.fill();
|
|
1033
|
+
cntx.fillStyle = '#000000';
|
|
1034
|
+
cntx.textBaseline = 'top';
|
|
1035
|
+
cntx.fillText(txt, 0, 0);
|
|
1036
|
+
cntx.drawImage(cntx.canvas, 0, 0, xs, ys);
|
|
1037
|
+
var Gstr = this.createLcdBitmapFromCanvas(c, x, y, xs, ys);
|
|
1038
|
+
this.LcdWriteImageBlob(dest, mode, x, y, xs, ys, Gstr);
|
|
1039
|
+
}
|
|
1040
|
+
static LCDStringWidth(fnt, str) {
|
|
1041
|
+
var c = document.createElement('canvas');
|
|
1042
|
+
var cntx = c.getContext('2d');
|
|
1043
|
+
cntx.font = fnt;
|
|
1044
|
+
var txt = str;
|
|
1045
|
+
var xs = Math.round(cntx.measureText(txt).width);
|
|
1046
|
+
return xs;
|
|
1047
|
+
}
|
|
1048
|
+
static LCDStringHeight(fnt, str) {
|
|
1049
|
+
return 16;
|
|
1050
|
+
}
|
|
1051
|
+
static LcdRefresh(Mode, Xp, Yp, Xs, Ys) {
|
|
1052
|
+
var Prop = 'LcdRefresh/';
|
|
1053
|
+
Prop = Prop + Mode + ',' + Xp + ',' + Yp + ',' + Xs + ',' + Ys;
|
|
1054
|
+
this.SigWebSetPropertySync(Prop);
|
|
1055
|
+
}
|
|
1056
|
+
static LCDSendCmdString(CmdStr, ReturnCount, Result, TimeOut) {
|
|
1057
|
+
var Prop = 'LcdSendCmdString/';
|
|
1058
|
+
Prop = Prop + ReturnCount + ',' + TimeOut;
|
|
1059
|
+
Result = this.SigWebSetStreamProperty(Prop, CmdStr);
|
|
1060
|
+
}
|
|
1061
|
+
static LCDSendCmdData(CmdStr, ReturnCount, Result, TimeOut) {
|
|
1062
|
+
var Prop = 'LcdSendCmdData/';
|
|
1063
|
+
Prop = Prop + ReturnCount + ',' + TimeOut;
|
|
1064
|
+
Result = this.SigWebSetStreamProperty(Prop, CmdStr);
|
|
1065
|
+
}
|
|
1066
|
+
// function LCDSendWindowedGraphicCanvas( dest, mode, x, y, canvas )
|
|
1067
|
+
// {
|
|
1068
|
+
// }
|
|
1069
|
+
// function LCDSendWindowedGraphicCanvas( dest, mode, x, y, xs, ys, canvas )
|
|
1070
|
+
// {
|
|
1071
|
+
// var Gstr = this.createLcdBitmapFromCanvas( canvas, 0, 0, xs, ys)
|
|
1072
|
+
// LcdWriteImageStream( dest, mode, x, y, xs, ys, Gstr );
|
|
1073
|
+
// }
|
|
1074
|
+
static LCDSendWindowedGraphicCanvas(dest, mode, x, y, xs, ys, c, xps, yps) {
|
|
1075
|
+
var canvas = document.createElement('canvas');
|
|
1076
|
+
var Gstr = this.createLcdBitmapFromCanvas(canvas, xps, yps, xs, ys);
|
|
1077
|
+
this.LcdWriteImageStream(dest, mode, x, y, xs, ys, Gstr);
|
|
1078
|
+
}
|
|
1079
|
+
static LCDSendGraphicUrl(dest, mode, x, y, url) {
|
|
1080
|
+
this.LcdWriteImage(dest, mode, x, y, url);
|
|
1081
|
+
}
|
|
1082
|
+
// function LCDSendGraphic( Dest, Mode, XPos, YPos, ImageFileName ) {}
|
|
1083
|
+
// function LCDSendGraphicURL( Dest, Mode, XPos, YPos, URL ) {}
|
|
1084
|
+
static LCDClear() {
|
|
1085
|
+
var Prop = 'LcdClear';
|
|
1086
|
+
Prop = Prop;
|
|
1087
|
+
return this.SigWebGetProperty(Prop);
|
|
1088
|
+
}
|
|
1089
|
+
static LCDSetTabletMap(LCDType, LCDXSize, LCDYSize, LCDXStart, LCDYStart, LCDXStop, LCDYStop) { }
|
|
1090
|
+
static LCDSetPixelDepth(v) {
|
|
1091
|
+
var Prop = 'LcdSetPixelDepth/';
|
|
1092
|
+
Prop = Prop + v;
|
|
1093
|
+
this.SigWebSetPropertySync(Prop);
|
|
1094
|
+
}
|
|
1095
|
+
static LCDGetLCDSize() {
|
|
1096
|
+
var Prop = 'LcdGetLcdSize';
|
|
1097
|
+
Prop = Prop;
|
|
1098
|
+
return this.SigWebGetProperty(Prop);
|
|
1099
|
+
}
|
|
1100
|
+
static LCDGetCompressionMode() {
|
|
1101
|
+
var Prop = 'LcdCompressionMode';
|
|
1102
|
+
Prop = Prop;
|
|
1103
|
+
return this.SigWebGetProperty(Prop);
|
|
1104
|
+
}
|
|
1105
|
+
static LCDGetZCompressionMode() {
|
|
1106
|
+
var Prop = 'LcdZCompressionMode';
|
|
1107
|
+
Prop = Prop;
|
|
1108
|
+
return this.SigWebGetProperty(Prop);
|
|
1109
|
+
}
|
|
1110
|
+
//
|
|
1111
|
+
// SigPlusNETLCD.cs
|
|
1112
|
+
//
|
|
1113
|
+
static SetRealTabletState(v) {
|
|
1114
|
+
var Prop = 'TabletState/';
|
|
1115
|
+
Prop = Prop + v;
|
|
1116
|
+
this.SigWebSetPropertySync(Prop);
|
|
1117
|
+
}
|
|
1118
|
+
static GetTabletState() {
|
|
1119
|
+
var Prop = 'TabletState';
|
|
1120
|
+
Prop = Prop;
|
|
1121
|
+
return this.SigWebGetProperty(Prop);
|
|
1122
|
+
}
|
|
1123
|
+
static SetTabletLogicalXSize(v) {
|
|
1124
|
+
var Prop = 'TabletLogicalXSize/';
|
|
1125
|
+
Prop = Prop + v;
|
|
1126
|
+
this.SigWebSetPropertySync(Prop);
|
|
1127
|
+
}
|
|
1128
|
+
static GetTabletLogicalXSize() {
|
|
1129
|
+
var Prop = 'TabletLogicalXSize';
|
|
1130
|
+
Prop = Prop;
|
|
1131
|
+
return this.SigWebGetProperty(Prop);
|
|
1132
|
+
}
|
|
1133
|
+
static GetTabletLogicalYSize() {
|
|
1134
|
+
var Prop = 'TabletLogicalYSize';
|
|
1135
|
+
Prop = Prop;
|
|
1136
|
+
return this.SigWebGetProperty(Prop);
|
|
1137
|
+
}
|
|
1138
|
+
static SetTabletLogicalYSize(v) {
|
|
1139
|
+
var Prop = 'TabletLogicalYSize/';
|
|
1140
|
+
Prop = Prop + v;
|
|
1141
|
+
this.SigWebSetPropertySync(Prop);
|
|
1142
|
+
}
|
|
1143
|
+
static SetTabletXStart(v) {
|
|
1144
|
+
var Prop = 'TabletXStart/';
|
|
1145
|
+
Prop = Prop + v;
|
|
1146
|
+
this.SigWebSetPropertySync(Prop);
|
|
1147
|
+
}
|
|
1148
|
+
static GetTabletXStart() {
|
|
1149
|
+
var Prop = 'TabletXStart';
|
|
1150
|
+
Prop = Prop;
|
|
1151
|
+
return this.SigWebGetProperty(Prop);
|
|
1152
|
+
}
|
|
1153
|
+
static SetTabletYStart(v) {
|
|
1154
|
+
var Prop = 'TabletYStart/';
|
|
1155
|
+
Prop = Prop + v;
|
|
1156
|
+
this.SigWebSetPropertySync(Prop);
|
|
1157
|
+
}
|
|
1158
|
+
static GetTabletYStart() {
|
|
1159
|
+
var Prop = 'TabletYStart';
|
|
1160
|
+
Prop = Prop;
|
|
1161
|
+
return this.SigWebGetProperty(Prop);
|
|
1162
|
+
}
|
|
1163
|
+
static SetTabletXStop(v) {
|
|
1164
|
+
var Prop = 'TabletXStop/';
|
|
1165
|
+
Prop = Prop + v;
|
|
1166
|
+
this.SigWebSetPropertySync(Prop);
|
|
1167
|
+
}
|
|
1168
|
+
static GetTabletXStop() {
|
|
1169
|
+
var Prop = 'TabletXStop';
|
|
1170
|
+
Prop = Prop;
|
|
1171
|
+
return this.SigWebGetProperty(Prop);
|
|
1172
|
+
}
|
|
1173
|
+
static SetTabletYStop(v) {
|
|
1174
|
+
var Prop = 'TabletYStop/';
|
|
1175
|
+
Prop = Prop + v;
|
|
1176
|
+
this.SigWebSetPropertySync(Prop);
|
|
1177
|
+
}
|
|
1178
|
+
static GetTabletYStop() {
|
|
1179
|
+
var Prop = 'TabletYStop';
|
|
1180
|
+
Prop = Prop;
|
|
1181
|
+
return this.SigWebGetProperty(Prop);
|
|
1182
|
+
}
|
|
1183
|
+
static SetTabletFilterPoints(v) {
|
|
1184
|
+
var Prop = 'TabletFilterPoints/';
|
|
1185
|
+
Prop = Prop + v;
|
|
1186
|
+
this.SigWebSetPropertySync(Prop);
|
|
1187
|
+
}
|
|
1188
|
+
static GetTabletFilterPoints() {
|
|
1189
|
+
var Prop = 'TabletFilterPoints';
|
|
1190
|
+
Prop = Prop;
|
|
1191
|
+
return this.SigWebGetProperty(Prop);
|
|
1192
|
+
}
|
|
1193
|
+
static SetTabletTimingAdvance(v) {
|
|
1194
|
+
var Prop = 'TabletTimingAdvance/';
|
|
1195
|
+
Prop = Prop + v;
|
|
1196
|
+
this.SigWebSetPropertySync(Prop);
|
|
1197
|
+
}
|
|
1198
|
+
static GetTabletTimingAdvance() {
|
|
1199
|
+
var Prop = 'TabletTimingAdvance';
|
|
1200
|
+
Prop = Prop;
|
|
1201
|
+
return this.SigWebGetProperty(Prop);
|
|
1202
|
+
}
|
|
1203
|
+
static SetTabletComPort(v) {
|
|
1204
|
+
var Prop = 'TabletComPort/';
|
|
1205
|
+
Prop = Prop + v;
|
|
1206
|
+
this.SigWebSetPropertySync(Prop);
|
|
1207
|
+
}
|
|
1208
|
+
static GetTabletComPort() {
|
|
1209
|
+
var Prop = 'TabletComPort';
|
|
1210
|
+
Prop = Prop;
|
|
1211
|
+
return this.SigWebGetProperty(Prop);
|
|
1212
|
+
}
|
|
1213
|
+
static SetTabletBaudRate(v) {
|
|
1214
|
+
var Prop = 'TabletBaudRate/';
|
|
1215
|
+
Prop = Prop + v;
|
|
1216
|
+
this.SigWebSetPropertySync(Prop);
|
|
1217
|
+
}
|
|
1218
|
+
static GetTabletBaudRate() {
|
|
1219
|
+
var Prop = 'TabletBaudRate';
|
|
1220
|
+
Prop = Prop;
|
|
1221
|
+
return this.SigWebGetProperty(Prop);
|
|
1222
|
+
}
|
|
1223
|
+
static SetTabletRotation(v) {
|
|
1224
|
+
var Prop = 'TabletRotation/';
|
|
1225
|
+
Prop = Prop + v;
|
|
1226
|
+
this.SigWebSetPropertySync(Prop);
|
|
1227
|
+
}
|
|
1228
|
+
static GetTabletRotation() {
|
|
1229
|
+
var Prop = 'TabletRotation';
|
|
1230
|
+
Prop = Prop;
|
|
1231
|
+
return this.SigWebGetProperty(Prop);
|
|
1232
|
+
}
|
|
1233
|
+
static SetTabletType(v) {
|
|
1234
|
+
var Prop = 'TabletType/';
|
|
1235
|
+
Prop = Prop + v;
|
|
1236
|
+
this.SigWebSetPropertySync(Prop);
|
|
1237
|
+
}
|
|
1238
|
+
static GetTabletType() {
|
|
1239
|
+
var Prop = 'TabletType';
|
|
1240
|
+
Prop = Prop;
|
|
1241
|
+
return this.SigWebGetProperty(Prop);
|
|
1242
|
+
}
|
|
1243
|
+
static SetServerTabletType(v) {
|
|
1244
|
+
var Prop = 'ServerTabletType/';
|
|
1245
|
+
Prop = Prop + v;
|
|
1246
|
+
this.SigWebSetPropertySync(Prop);
|
|
1247
|
+
}
|
|
1248
|
+
static GetServerTabletType() {
|
|
1249
|
+
var Prop = 'ServerTabletType';
|
|
1250
|
+
Prop = Prop;
|
|
1251
|
+
return this.SigWebGetProperty(Prop);
|
|
1252
|
+
}
|
|
1253
|
+
static SetTabletComTest(v) {
|
|
1254
|
+
var Prop = 'TabletComTest/';
|
|
1255
|
+
Prop = Prop + v;
|
|
1256
|
+
this.SigWebSetPropertySync(Prop);
|
|
1257
|
+
}
|
|
1258
|
+
static GetTabletComTest() {
|
|
1259
|
+
var Prop = 'TabletComTest';
|
|
1260
|
+
Prop = Prop;
|
|
1261
|
+
return this.SigWebGetProperty(Prop);
|
|
1262
|
+
}
|
|
1263
|
+
static SetTabletResolution(v) {
|
|
1264
|
+
var Prop = 'TabletResolution/';
|
|
1265
|
+
Prop = Prop + v;
|
|
1266
|
+
this.SigWebSetPropertySync(Prop);
|
|
1267
|
+
}
|
|
1268
|
+
static GetTabletResolution() {
|
|
1269
|
+
var Prop = 'TabletResolution';
|
|
1270
|
+
Prop = Prop;
|
|
1271
|
+
return this.SigWebGetProperty(Prop);
|
|
1272
|
+
}
|
|
1273
|
+
static TabletConnectQuery() {
|
|
1274
|
+
var Prop = 'TabletConnectQuery';
|
|
1275
|
+
Prop = Prop;
|
|
1276
|
+
return this.SigWebGetProperty(Prop);
|
|
1277
|
+
}
|
|
1278
|
+
static TabletModelNumber() {
|
|
1279
|
+
var Prop = 'TabletModelNumber';
|
|
1280
|
+
Prop = Prop;
|
|
1281
|
+
return this.SigWebGetProperty(Prop);
|
|
1282
|
+
}
|
|
1283
|
+
static TabletSerialNumber() {
|
|
1284
|
+
var Prop = 'TabletSerialNumber';
|
|
1285
|
+
Prop = Prop;
|
|
1286
|
+
return this.SigWebGetProperty(Prop);
|
|
1287
|
+
}
|
|
1288
|
+
static SetTabletPortPath(v) {
|
|
1289
|
+
var Prop = 'TabletPortPath/';
|
|
1290
|
+
Prop = Prop + v;
|
|
1291
|
+
this.SigWebSetPropertySync(Prop);
|
|
1292
|
+
}
|
|
1293
|
+
static SetTabletLocalIniFilePath(v) {
|
|
1294
|
+
var Prop = 'TabletLocalIniFilePath/';
|
|
1295
|
+
Prop = Prop + v;
|
|
1296
|
+
this.SigWebSetPropertySync(Prop);
|
|
1297
|
+
}
|
|
1298
|
+
static SetTabletModel(v) {
|
|
1299
|
+
var Prop = 'TabletModel/';
|
|
1300
|
+
Prop = Prop + v;
|
|
1301
|
+
this.SigWebSetPropertySync(Prop);
|
|
1302
|
+
}
|
|
1303
|
+
static SetSerialPortCloseDelay(v) {
|
|
1304
|
+
var Prop = 'SerialPortCloseDelay/';
|
|
1305
|
+
Prop = Prop + v;
|
|
1306
|
+
this.SigWebSetPropertySync(Prop);
|
|
1307
|
+
}
|
|
1308
|
+
static GetSerialPortCloseDelay() {
|
|
1309
|
+
var Prop = 'SerialPortCloseDelay';
|
|
1310
|
+
Prop = Prop;
|
|
1311
|
+
return this.SigWebGetProperty(Prop);
|
|
1312
|
+
}
|
|
1313
|
+
static EnableTabletEncryption() {
|
|
1314
|
+
var Prop = 'EnableTabletEncryption';
|
|
1315
|
+
Prop = Prop;
|
|
1316
|
+
this.SigWebSetPropertySync(Prop);
|
|
1317
|
+
}
|
|
1318
|
+
static SetTabletEncryptionMode(hmode, tmode) {
|
|
1319
|
+
var Prop = 'TabletEncryptionMode/';
|
|
1320
|
+
Prop = Prop + hmode + ',' + tmode;
|
|
1321
|
+
this.SigWebSetPropertySync(Prop);
|
|
1322
|
+
}
|
|
1323
|
+
static SetMaxLogFileSize(v) {
|
|
1324
|
+
var Prop = 'MaxLogFileSize/';
|
|
1325
|
+
Prop = Prop + v;
|
|
1326
|
+
this.SigWebSetPropertySync(Prop);
|
|
1327
|
+
}
|
|
1328
|
+
static GetSigSockServerPath() {
|
|
1329
|
+
var Prop = 'SigSockServerPath';
|
|
1330
|
+
Prop = Prop;
|
|
1331
|
+
return this.SigWebGetProperty(Prop);
|
|
1332
|
+
}
|
|
1333
|
+
static GetSigSockClientName() {
|
|
1334
|
+
var Prop = 'SigSockClientName';
|
|
1335
|
+
Prop = Prop;
|
|
1336
|
+
return this.SigWebGetProperty(Prop);
|
|
1337
|
+
}
|
|
1338
|
+
static GetSigSockPortNumber() {
|
|
1339
|
+
var Prop = 'SigSockPortNumber';
|
|
1340
|
+
Prop = Prop;
|
|
1341
|
+
return this.SigWebGetProperty(Prop);
|
|
1342
|
+
}
|
|
1343
|
+
static SetSigSockServerPath(v) {
|
|
1344
|
+
var Prop = 'SigSockServerPath/';
|
|
1345
|
+
Prop = Prop + v;
|
|
1346
|
+
this.SigWebSetPropertySync(Prop);
|
|
1347
|
+
}
|
|
1348
|
+
static SetSigSockClientName(v) {
|
|
1349
|
+
var Prop = 'SigSockClientName/';
|
|
1350
|
+
Prop = Prop + v;
|
|
1351
|
+
this.SigWebSetPropertySync(Prop);
|
|
1352
|
+
}
|
|
1353
|
+
static SetPortNumber(v) {
|
|
1354
|
+
var Prop = 'PortNumber/';
|
|
1355
|
+
Prop = Prop + v;
|
|
1356
|
+
this.SigWebSetPropertySync(Prop);
|
|
1357
|
+
}
|
|
1358
|
+
static SetSigSockPortNumber(v) {
|
|
1359
|
+
var Prop = 'SigSockPortNumber/';
|
|
1360
|
+
Prop = Prop + v;
|
|
1361
|
+
this.SigWebSetPropertySync(Prop);
|
|
1362
|
+
}
|
|
1363
|
+
static GetFirmwareRevision() {
|
|
1364
|
+
var Prop = 'FirmwareRevision';
|
|
1365
|
+
Prop = Prop;
|
|
1366
|
+
return this.SigWebGetProperty(Prop);
|
|
1367
|
+
}
|
|
1368
|
+
static SetTabletData(sigStr) {
|
|
1369
|
+
var Prop = 'TabletData';
|
|
1370
|
+
Prop = Prop;
|
|
1371
|
+
this.SigWebSetStreamProperty(Prop, sigStr);
|
|
1372
|
+
}
|
|
1373
|
+
static GetTabletData() {
|
|
1374
|
+
var Prop = 'TabletData';
|
|
1375
|
+
Prop = Prop;
|
|
1376
|
+
var Str = this.SigWebGetProperty(Prop);
|
|
1377
|
+
return Str.slice(1, Str.length - 1);
|
|
1378
|
+
}
|
|
1379
|
+
static OpenTablet(v) {
|
|
1380
|
+
var Prop = 'OpenTablet/';
|
|
1381
|
+
Prop = Prop + v;
|
|
1382
|
+
this.SigWebSetPropertySync(Prop);
|
|
1383
|
+
}
|
|
1384
|
+
static CloseTablet() {
|
|
1385
|
+
var Prop = 'CloseTablet';
|
|
1386
|
+
Prop = Prop;
|
|
1387
|
+
this.SigWebSetProperty(Prop);
|
|
1388
|
+
}
|
|
1389
|
+
static ResetParameters() {
|
|
1390
|
+
var Prop = 'ResetParameters';
|
|
1391
|
+
Prop = Prop;
|
|
1392
|
+
this.SigWebSetPropertySync(Prop);
|
|
1393
|
+
}
|
|
1394
|
+
static testRawData() {
|
|
1395
|
+
this.OpenTablet(1);
|
|
1396
|
+
var Str1 = this.GetTabletData();
|
|
1397
|
+
this.CloseTablet();
|
|
1398
|
+
}
|
|
1399
|
+
static SetTabletState(v, ctx, tv) {
|
|
1400
|
+
var delay;
|
|
1401
|
+
if (tv) {
|
|
1402
|
+
delay = tv;
|
|
1403
|
+
}
|
|
1404
|
+
else {
|
|
1405
|
+
delay = 100;
|
|
1406
|
+
}
|
|
1407
|
+
if (this.GetTabletState() != v) {
|
|
1408
|
+
if (v == 1) {
|
|
1409
|
+
if (ctx) {
|
|
1410
|
+
var can = ctx.canvas;
|
|
1411
|
+
this.SetDisplayXSize(can.width);
|
|
1412
|
+
this.SetDisplayYSize(can.height);
|
|
1413
|
+
this.SigWebSetDisplayTarget(ctx);
|
|
1414
|
+
}
|
|
1415
|
+
this.SetRealTabletState(v);
|
|
1416
|
+
var data = this.GetTabletState();
|
|
1417
|
+
var dataResult = data == '' || data == null ? 0 : Number(data);
|
|
1418
|
+
var tmr = null;
|
|
1419
|
+
if (ctx && dataResult != 0) {
|
|
1420
|
+
tmr = setInterval(() => this.SigWebRefresh(), delay);
|
|
1421
|
+
}
|
|
1422
|
+
else {
|
|
1423
|
+
tmr = null;
|
|
1424
|
+
}
|
|
1425
|
+
return tmr;
|
|
1426
|
+
}
|
|
1427
|
+
else {
|
|
1428
|
+
if (ctx) {
|
|
1429
|
+
clearInterval(ctx);
|
|
1430
|
+
}
|
|
1431
|
+
this.SigWebSetDisplayTarget(null);
|
|
1432
|
+
this.SetRealTabletState(v);
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
return null;
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
SigWebTablet.baseUri = SigWebTablet.makeUri();
|
|
1439
|
+
SigWebTablet.Count = false;
|
|
1440
|
+
SigWebTablet.SigWebFontThreshold = 155;
|
|
1441
|
+
SigWebTablet.NumPointsLastTime = 0;
|
|
1442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnV2ViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGliZXktbmctY29tcG9uZW50LWxpYnJhcnkvc3JjL3V0aWxzL1NpZ1dlYi9TaWdXZWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxZQUFZO0lBQ2YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDM0IsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFDTyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQVU7UUFDbEMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsNENBQTRDO0lBQ3pELENBQUM7SUFZTyxNQUFNLENBQUMsT0FBTztRQUNwQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTtZQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDZixJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ3BCLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxHQUFHLHlDQUF5QyxDQUFDO2FBQ3pE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UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEdBQUcsdUJBQXVCLENBQUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLElBQUksSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBRWxDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FB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QUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3REO3FCQUFNO29CQUNMLEdBQUcsR0FBRyxJQUFJLENBQUM7aUJBQ1o7Z0JBRUQsT0FBTyxHQUFHLENBQUM7YUFDWjtpQkFBTTtnQkFDTCxJQUFJLEdBQUcsRUFBRTtvQkFDUCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BCO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBOTFEYyxvQkFBTyxHQUFXLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUV6QyxrQkFBSyxHQUFZLEtBQUssQ0FBQztBQUl2QixnQ0FBbUIsR0FBRyxHQUFHLENBQUM7QUFDMUIsOEJBQWlCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU2lnV2ViVGFibGV0LnRzXHJcbmV4cG9ydCBjbGFzcyBTaWdXZWJUYWJsZXQge1xyXG4gIHByaXZhdGUgc3RhdGljIHJldm9rZUJsb2JVUkwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh3aW5kb3cuVVJMKSB7XHJcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xyXG4gICAgICB3ZWJraXRVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIGdldEJsb2JVUkwoYmxvYjogQmxvYik6IHN0cmluZyB7XHJcbiAgICBpZiAod2luZG93LlVSTCkge1xyXG4gICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xyXG4gICAgICByZXR1cm4gd2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJzsgLy8gUmV0b3JuYXIgdW4gc3RyaW5nIHZhY8OtbyBlbiBjYXNvIGRlIGVycm9yXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBiYXNlVXJpOiBzdHJpbmcgPSBTaWdXZWJUYWJsZXQubWFrZVVyaSgpO1xyXG4gIHByaXZhdGUgc3RhdGljIGN0eDtcclxuICBwcml2YXRlIHN0YXRpYyBDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RhdGljIEV2U3RhdHVzO1xyXG4gIHByaXZhdGUgc3RhdGljIG9uU2lnUGVuRG93bjtcclxuICBwcml2YXRlIHN0YXRpYyBvblNpZ1BlblVwO1xyXG4gIHByaXZhdGUgc3RhdGljIFNpZ1dlYkZvbnRUaHJlc2hvbGQgPSAxNTU7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgTnVtUG9pbnRzTGFzdFRpbWUgPSAwO1xyXG4gIHByaXZhdGUgc3RhdGljIFNpZ0ltYWdlQjY0O1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtYWtlVXJpKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgcHJvdCA9IGxvY2F0aW9uLnByb3RvY29sO1xyXG4gICAgaWYgKHByb3QgPT0gJ2ZpbGU6Jykge1xyXG4gICAgICBwcm90ID0gJ2h0dHA6JztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0lFKCkpIHtcclxuICAgICAgaWYgKHByb3QgPT0gJ2h0dHBzOicpIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3MjkwL1NpZ1dlYi8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyODkvU2lnV2ViLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0Nocm9tZSgpKSB7XHJcbiAgICAgIGlmIChwcm90ID09ICdodHRwczonKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb3QgKyAnLy90YWJsZXQuc2lnd2VidGFibGV0LmNvbTo0NzI5MC9TaWdXZWIvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3Mjg5L1NpZ1dlYi8nO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL0ZJUkVGT1hcclxuICAgICAgaWYgKHByb3QgPT0gJ2h0dHBzOicpIHtcclxuICAgICAgICByZXR1cm4gcHJvdCArICcvL3RhYmxldC5zaWd3ZWJ0YWJsZXQuY29tOjQ3MjkwL1NpZ1dlYi8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBwcm90ICsgJy8vdGFibGV0LnNpZ3dlYnRhYmxldC5jb206NDcyODkvU2lnV2ViLyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlVVVJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoXHJcbiAgICAgIC9beHldL2csXHJcbiAgICAgIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMDtcclxuICAgICAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNTaWdXZWJJbnN0YWxsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHhoci5vcGVuKFxyXG4gICAgICAgICdHRVQnLFxyXG4gICAgICAgIGAke3RoaXMuYmFzZVVyaX1UYWJsZXRTdGF0ZT9ub0NhY2hlPSR7dGhpcy5nZW5lcmF0ZVVVSUQoKX1gLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKCk7XHJcbiAgICAgIHJldHVybiB4aHIuc3RhdHVzICE9PSA0MDQgJiYgeGhyLnN0YXR1cyAhPT0gMDtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGNoZWNraW5nIFNpZ1dlYiBpbnN0YWxsYXRpb24nLCBlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSUUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicgfHxcclxuICAgICAgKG5hdmlnYXRvci5hcHBOYW1lID09PSAnTmV0c2NhcGUnICYmXHJcbiAgICAgICAgbmV3IFJlZ0V4cCgnVHJpZGVudC8uKnJ2OihbMC05XXsxLH1bLjAtOV17MCx9KScpLmV4ZWMoXHJcbiAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50XHJcbiAgICAgICAgKSAhPSBudWxsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0Nocm9tZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lmxhc3RJbmRleE9mKCdDaHJvbWUvJykgPiAwO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYmNyZWF0ZVhIUigpOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwge1xyXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICBpZiAoIXhocikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIHB1ZG8gY3JlYXIgWE1MSHR0cFJlcXVlc3QnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geGhyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldFByb3BlcnR5KHByb3A6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIHRydWUpO1xyXG4gICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0UHJvcGVydHlTeW5jKHByb3A6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNlbmQoKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0U3RyZWFtUHJvcGVydHkocHJvcDogc3RyaW5nLCBzdHJtOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCB8IG51bGwgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLmJhc2VVcmkgKyBwcm9wKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlN5bmNTZXRTdHJlYW1Qcm9wZXJ0eShwcm9wOiBzdHJpbmcsIHN0cm06IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB4aHI6IFhNTEh0dHBSZXF1ZXN0IHwgbnVsbCA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbignUE9TVCcsIHRoaXMuYmFzZVVyaSArIHByb3AsIGZhbHNlKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XHJcbiAgICAgIHhoci5zZW5kKHN0cm0pO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQgJiYgeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KHByb3A6IHN0cmluZywgc3RybTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHhocjogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2ltYWdlL3BuZycpO1xyXG4gICAgICB4aHIuc2VuZChzdHJtKTtcclxuICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0ICYmIHhoci5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViU2V0SW1hZ2VCbG9iUHJvcGVydHkocHJvcCwgc3RybSkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgcHJvcCwgZmFsc2UpO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2Jsb2InKTtcclxuICAgICAgeGhyLnNlbmQoc3RybSk7XHJcbiAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJHZXRWZXJzaW9uKHByb3ApIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG4gICAgICBpZiAoeGhyKSB7XHJcbiAgICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgICAnR0VUJyxcclxuICAgICAgICAgIHRoaXMuYmFzZVVyaSArIHByb3AgKyAnP25vQ2FjaGU9JyArIHRoaXMuZ2VuZXJhdGVVVUlEKCksXHJcbiAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQgJiYgeGhyLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gU2lnV2ViR2V0VmVyc2lvbjonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViR2V0UHJvcGVydHkocHJvcCkge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyBwcm9wICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCAmJiB4aHIuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnSW1hZ2VCNjQoY2FsbGJhY2spIHtcclxuICAgIHZhciBjdnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IHRoaXMuR2V0SW1hZ2VYU2l6ZSgpO1xyXG4gICAgdmFyIGhlaWdodCA9IHRoaXMuR2V0SW1hZ2VZU2l6ZSgpO1xyXG4gICAgY3ZzLndpZHRoID0gd2lkdGggPT0gJycgfHwgd2lkdGggPT0gbnVsbCA/IDAgOiBOdW1iZXIod2lkdGgpO1xyXG4gICAgY3ZzLmhlaWdodCA9IGhlaWdodCA9PSAnJyB8fCBoZWlnaHQgPT0gbnVsbCA/IDAgOiBOdW1iZXIoaGVpZ2h0KTtcclxuXHJcbiAgICB2YXIgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyMi5vcGVuKFxyXG4gICAgICAnR0VUJyxcclxuICAgICAgdGhpcy5iYXNlVXJpICsgJ1NpZ0ltYWdlLzEnICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgeGhyMi5yZXNwb25zZVR5cGUgPSAnYmxvYic7XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgICB4aHIyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdmFyIGNudHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gdGhpcy5nZXRCbG9iVVJMKHhocjIucmVzcG9uc2UpO1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGNudHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdmFyIGI2NFN0cmluZyA9IGN2cy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG4gICAgICAgIHZhciBsb2MgPSBiNjRTdHJpbmcuc2VhcmNoKCdiYXNlNjQsJyk7XHJcbiAgICAgICAgdmFyIHJldHN0cmluZyA9IGI2NFN0cmluZy5zbGljZShsb2MgKyA3LCBiNjRTdHJpbmcubGVuZ3RoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKHJldHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJXYWl0Rm9yUGVuRG93bihjYWxsYmFjaykge1xyXG4gICAgdmFyIHhociA9IHRoaXMuU2lnV2ViY3JlYXRlWEhSKCk7XHJcblxyXG4gICAgaWYgKHhocikge1xyXG4gICAgICB4aHIub3BlbihcclxuICAgICAgICAnR0VUJyxcclxuICAgICAgICB0aGlzLmJhc2VVcmkgKyAnV2FpdEZvclBlbkRvd24nICsgJz9ub0NhY2hlPScgKyB0aGlzLmdlbmVyYXRlVVVJRCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci50aW1lb3V0ID0gMTAwMDA7XHJcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9IDQpIHJldHVybjtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApIGNhbGxiYWNrKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ0ltYWdlKGN0eCkge1xyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8xJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5zZW5kKG51bGwpO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5yZXZva2VCbG9iVVJMKGltZy5zcmMpO1xyXG4gICAgICAgIGltZyA9IG51bGw7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNpZ1dlYlNldERpc3BsYXlUYXJnZXQob2JqKSB7XHJcbiAgICB0aGlzLmN0eCA9IG9iajtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTaWdXZWJSZWZyZXNoKCkge1xyXG4gICAgdmFyIE51bVBvaW50cyA9IE51bWJlcih0aGlzLk51bWJlck9mVGFibGV0UG9pbnRzKCkpO1xyXG4gICAgaWYgKE51bVBvaW50cyA9PSB0aGlzLk51bVBvaW50c0xhc3RUaW1lKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuTnVtUG9pbnRzTGFzdFRpbWUgPSBOdW1Qb2ludHM7XHJcblxyXG4gICAgdmFyIHhocjIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhocjIub3BlbihcclxuICAgICAgJ0dFVCcsXHJcbiAgICAgIHRoaXMuYmFzZVVyaSArICdTaWdJbWFnZS8wJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIHhocjIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xyXG4gICAgeGhyMi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuZ2V0QmxvYlVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgLy9cdFx0XHRcdGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICB0aGlzLnJldm9rZUJsb2JVUkwoaW1nLnNyYyk7XHJcbiAgICAgICAgaW1nID0gbnVsbDtcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICB4aHIyLnNlbmQobnVsbCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2lnV2ViRXZlbnQoKSB7XHJcbiAgICB2YXIgT2xkRXZTdGF0dXMgPSB0aGlzLkV2U3RhdHVzO1xyXG5cclxuICAgIHZhciB4aHIgPSB0aGlzLlNpZ1dlYmNyZWF0ZVhIUigpO1xyXG5cclxuICAgIGlmICh4aHIpIHtcclxuICAgICAgeGhyLm9wZW4oXHJcbiAgICAgICAgJ0dFVCcsXHJcbiAgICAgICAgdGhpcy5iYXNlVXJpICsgJ0V2ZW50U3RhdHVzJyArICc/bm9DYWNoZT0nICsgdGhpcy5nZW5lcmF0ZVVVSUQoKSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5FdlN0YXR1cyA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgaWYgKE9sZEV2U3RhdHVzICYgMHgwMSAmJiB0aGlzLkV2U3RhdHVzICYgMHgwMikge1xyXG4gICAgICAgICAgaWYgKHRoaXMub25TaWdQZW5Eb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5Eb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoT2xkRXZTdGF0dXMgJiAweDAyICYmIHRoaXMuRXZTdGF0dXMgJiAweDAxKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vblNpZ1BlblVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TaWdQZW5VcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0U2lnV2ViRm9udFRocmVzaG9sZCh2KSB7XHJcbiAgICB0aGlzLlNpZ1dlYkZvbnRUaHJlc2hvbGQgPSB2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMob3VyQ2FudmFzLCB4cCwgeXAsIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHZhciBjYW52YXNDdHggPSBvdXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHZhciBpbWdEYXRhID0gY2FudmFzQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBqID0gMDtcclxuICAgIHZhciBzVmFsID0gMDtcclxuICAgIHZhciBvdXREYXRhID0gJyc7XHJcbiAgICB2YXIgb3V0SWR4ID0gMDtcclxuICAgIHZhciBkYXRhID0gaW1nRGF0YS5kYXRhO1xyXG5cclxuICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspXHJcbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgIHZhciB0bXAxID0gZGF0YVtqXTtcclxuICAgICAgICB2YXIgdG1wMiA9IGRhdGFbaiArIDFdO1xyXG4gICAgICAgIHZhciB0bXAzID0gZGF0YVtqICsgMl07XHJcbiAgICAgICAgdmFyIHRtcDQgPSBkYXRhW2ogKyAzXTtcclxuXHJcbiAgICAgICAgLy9cdFx0XHRcdFx0c1ZhbCA9IHRtcDEgKyAodG1wMiA8PCA4ICkgKyAoIHRtcDMgPDwgMTYgKSArICh0bXA0IDw8IDI0ICk7XHJcbiAgICAgICAgaiA9IGogKyA0O1xyXG4gICAgICAgIGlmICh0bXAxIDwgdGhpcy5TaWdXZWJGb250VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICBvdXREYXRhICs9ICdCJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0RGF0YSArPSAnVyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dERhdGE7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdG9IZXgoTmliVmFsKSB7XHJcbiAgICBzd2l0Y2ggKE5pYlZhbCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAnMSc7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICByZXR1cm4gJzInO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgcmV0dXJuICczJztcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAnNCc7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICByZXR1cm4gJzUnO1xyXG4gICAgICBjYXNlIDY6XHJcbiAgICAgICAgcmV0dXJuICc2JztcclxuICAgICAgY2FzZSA3OlxyXG4gICAgICAgIHJldHVybiAnNyc7XHJcbiAgICAgIGNhc2UgODpcclxuICAgICAgICByZXR1cm4gJzgnO1xyXG4gICAgICBjYXNlIDk6XHJcbiAgICAgICAgcmV0dXJuICc5JztcclxuICAgICAgY2FzZSAxMDpcclxuICAgICAgICByZXR1cm4gJ0EnO1xyXG4gICAgICBjYXNlIDExOlxyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIGNhc2UgMTI6XHJcbiAgICAgICAgcmV0dXJuICdDJztcclxuICAgICAgY2FzZSAxMzpcclxuICAgICAgICByZXR1cm4gJ0QnO1xyXG4gICAgICBjYXNlIDE0OlxyXG4gICAgICAgIHJldHVybiAnRSc7XHJcbiAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgcmV0dXJuICdGJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHN0YXRpYyBUb0hleFN0cmluZyhCeXRlVmFsKSB7XHJcbiAgICB2YXIgU3RyID0gJyc7XHJcbiAgICBTdHIgKz0gdGhpcy50b0hleCgoQnl0ZVZhbCA+PiA0KSAmIDB4MGYpO1xyXG4gICAgU3RyICs9IHRoaXMudG9IZXgoQnl0ZVZhbCAmIDB4MGYpO1xyXG4gICAgcmV0dXJuIFN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0ZXh0VG9UYWJsZXQoeCwgeSwgaGVpZ2h0LCBzdHIsIGZudCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IE1hdGgucm91bmQoY250eC5tZWFzdXJlVGV4dCh0eHQpLndpZHRoKTtcclxuICAgIHZhciB5cyA9IGhlaWdodDtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnJlY3QoMCwgMCwgeHMsIHlzKTtcclxuICAgIGNudHguZmlsbCgpO1xyXG5cclxuICAgIGNudHguZmlsbFN0eWxlID0gJyMwMDAwMDAnO1xyXG4gICAgY250eC50ZXh0QmFzZWxpbmUgPSAndG9wJztcclxuICAgIGNudHguZmlsbFRleHQodHh0LCAwLCAwKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuXHJcbiAgICB2YXIgR3N0ciA9IHRoaXMuY3JlYXRlTGNkQml0bWFwRnJvbUNhbnZhcyhjLCAwLCAwLCB4cywgeXMpO1xyXG5cclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZVN0cmVhbSgwLCAyLCB4LCB5LCB4cywgeXMsIEdzdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2UoRHN0LCBNb2RlLCBYcCwgWXAsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZS8nO1xyXG4gICAgdmFyIE5ld1VybCA9IFVybC5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgTmV3VXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTGNkV3JpdGVMb2NhbEltYWdlKERzdCwgTW9kZSwgWHAsIFlwLCBVcmwpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFdyaXRlSW1hZ2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIERzdCArICcsJyArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgVXJsO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMY2RXcml0ZUltYWdlU3RyZWFtKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AxID1cclxuICAgICAgJ0xjZFdyaXRlSW1hZ2VTdHJlYW1QYXJhbXMvJyArXHJcbiAgICAgIERzdCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIE1vZGUgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBYcCArXHJcbiAgICAgICcsJyArXHJcbiAgICAgIFlwICtcclxuICAgICAgJywnICtcclxuICAgICAgWHMgK1xyXG4gICAgICAnLCcgK1xyXG4gICAgICBZcztcclxuICAgIHZhciBQcm9wMiA9ICdMY2RXcml0ZUltYWdlU3RyZWFtLyc7XHJcblxyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcDEpO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZVN0cmVhbVByb3BlcnR5KFByb3AyLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFdyaXRlSW1hZ2VCbG9iKERzdCwgTW9kZSwgWHAsIFlwLCBYcywgWXMsIFVybCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkV3JpdGVJbWFnZVN0cmVhbS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgRHN0ICsgJywnICsgTW9kZSArICcsJyArIFhwICsgJywnICsgWXAgKyAnLCcgKyBYcyArICcsJyArIFlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRJbWFnZUJsb2JQcm9wZXJ0eShQcm9wLCBVcmwpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lYXN1cmVUZXh0KHBUZXh0LCBwRm9udFNpemUsIHBTdHlsZSkge1xyXG4gICAgdmFyIGxEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsRGl2Jyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsRGl2KTtcclxuXHJcbiAgICBpZiAocFN0eWxlICE9IG51bGwpIHtcclxuICAgICAgbERpdi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgcFN0eWxlKTtcclxuICAgIH1cclxuICAgIGxEaXYuc3R5bGUuZm9udFNpemUgPSAnJyArIHBGb250U2l6ZSArICdweCc7XHJcbiAgICBsRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIGxEaXYuc3R5bGUubGVmdCA9ICctMTAwMCc7XHJcbiAgICBsRGl2LnN0eWxlLnRvcCA9ICctMTAwMCc7XHJcblxyXG4gICAgbERpdi5pbm5lckhUTUwgPSBwVGV4dDtcclxuXHJcbiAgICB2YXIgbFJlc3VsdCA9IHtcclxuICAgICAgd2lkdGg6IGxEaXYuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogbERpdi5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobERpdik7XHJcbiAgICBsRGl2ID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gbFJlc3VsdDtcclxuICB9XHJcbiAgc3RhdGljIEdldFZlcnNpb25TdHJpbmcoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdWZXJzaW9uJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFZlcnNpb24oUHJvcCk7XHJcbiAgICBpZihTdHIgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIFN0cjtcclxuXHJcbiAgICB2YXIgdHJpbVN0ciA9IFN0ci5zbGljZSgxLCBTdHIubGVuZ3RoIC0gMik7XHJcbiAgICByZXR1cm4gdHJpbVN0cjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBJc1BlbkRvd24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5FdlN0YXR1cyAmIDB4MDE7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFx0U2lnUGx1c05FVFNpZy5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIENsZWFyVGFibGV0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xlYXJTaWduYXR1cmUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTnVtYmVyT2ZUYWJsZXRQb2ludHMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUb3RhbFBvaW50cyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTdHJpbmcoc2lnU3RyLCBjdHgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1N0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgeGhyID0gdGhpcy5TaWdXZWJjcmVhdGVYSFIoKTtcclxuXHJcbiAgICBpZiAoeGhyKSB7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5iYXNlVXJpICsgUHJvcCk7XHJcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xyXG4gICAgICB4aHIuc2VuZChzaWdTdHIpO1xyXG4gICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIHZhciBjYW4gPSBjdHguY2FudmFzO1xyXG4gICAgICAgICAgdGhpcy5TZXRJbWFnZVhTaXplKGNhbi53aWR0aCk7XHJcbiAgICAgICAgICB0aGlzLlNldEltYWdlWVNpemUoY2FuLmhlaWdodCk7XHJcbiAgICAgICAgICB0aGlzLkdldFNpZ0ltYWdlKGN0eCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1N0cmluZygpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1N0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdDb21wcmVzc2lvbk1vZGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnQ29tcHJlc3Npb25Nb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnQ29tcHJlc3Npb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ29tcHJlc3Npb25Nb2RlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEVuY3J5cHRpb25Nb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0VuY3J5cHRpb25Nb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RW5jcnlwdGlvbk1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdFbmNyeXB0aW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRLZXlTdHJpbmcoa2V5U3RyaW5nKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlTdHJpbmcnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlTdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEtleVN0cmluZygpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVN0cmluZyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBBdXRvS2V5U3RhcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5U3RhcnQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQXV0b0tleUZpbmlzaCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0F1dG9LZXlGaW5pc2gnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QXV0b0tleURhdGEoa2V5RGF0YSkge1xyXG4gICAgdmFyIFByb3AgPSAnU2V0QXV0b0tleURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBrZXlEYXRhKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBBdXRvS2V5QWRkRGF0YShrZXlEYXRhKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBdXRvS2V5QWRkRGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KFByb3AsIGtleURhdGEpO1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0S2V5U3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvL1x0XHRmdW5jdGlvbiAgR2V0S2V5UmVjZWlwdCggKSB7fVxyXG5cclxuICBzdGF0aWMgR2V0S2V5UmVjZWlwdEFzY2lpKCkge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UmVjZWlwdEFzY2lpJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG5cclxuICAgIHJldHVybiBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIEdldFNpZ1JlY2VpcHQoICkge31cclxuXHJcbiAgc3RhdGljIEdldFNpZ1JlY2VpcHRBc2NpaSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1JlY2VpcHRBc2NpaSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUaW1lU3RhbXAodGltZVN0YW1wKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCB0aW1lU3RhbXApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RpbWVTdGFtcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbm5vdGF0ZShhbm5vdGF0ZSkge1xyXG4gICAgdmFyIFByb3AgPSAnQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBhbm5vdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0QW5ub3RhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbm5vdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICB2YXIgU3RyID0gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuXHJcbiAgICByZXR1cm4gU3RyLnNsaWNlKDEsIFN0ci5sZW5ndGggLSAxKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTYXZlU2lnSW5mbyh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlU2lnSW5mby8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVTaWdJbmZvKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2F2ZVNpZ0luZm8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVByZXNzdXJlRGF0YSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTYXZlUHJlc3N1cmVEYXRhLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2F2ZVByZXNzdXJlRGF0YSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVQcmVzc3VyZURhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2F2ZVRpbWVEYXRhKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVUaW1lRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNhdmVUaW1lRGF0YSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NhdmVUaW1lRGF0YSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRBbnRpQWxpYXNTcG90U2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNTcG90U2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFudGlBbGlhc1Nwb3RTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnQW50aUFsaWFzU3BvdFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0QW50aUFsaWFzTGluZVNjYWxlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc0xpbmVTY2FsZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEFudGlBbGlhc0xpbmVTY2FsZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0FudGlBbGlhc0xpbmVTY2FsZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXROdW1iZXJPZlN0cm9rZXMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdOdW1iZXJPZlN0cm9rZXMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TnVtUG9pbnRzRm9yU3Ryb2tlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ051bWJlck9mUG9pbnRzSW5TdHJva2UvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRQb2ludFhWYWx1ZSh2MSwgdjIpIHtcclxuICAgIHZhciBQcm9wID0gJ1BvaW50WFZhbHVlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2MSArICcvJyArIHYyO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0UG9pbnRZVmFsdWUodjEsIHYyKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdQb2ludFlWYWx1ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjEgKyAnLycgKyB2MjtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEFudGlBbGlhc0VuYWJsZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNFbmFibGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRBbnRpQWxpYXNFbmFibGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdBbnRpQWxpYXNFbmFibGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VXNlQW1iaWVudENvbG9ycyh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdVc2VBbWJpZW50Q29sb3JzLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVREaXNwbGF5LmNzXHJcbiAgLy9cclxuICBzdGF0aWMgU2V0RGlzcGxheVhTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlYU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlYU2l6ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlYU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5WVNpemUodikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVlTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVlTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlQZW5XaWR0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5UGVuV2lkdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5UGVuV2lkdGgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5UGVuV2lkdGgnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheVRpbWVTdGFtcFBvc1godikge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5VGltZVN0YW1wUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldERpc3BsYXlUaW1lU3RhbXBQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlUaW1lU3RhbXBQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RGlzcGxheVRpbWVTdGFtcFBvc1koKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5VGltZVN0YW1wU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdEaXNwbGF5VGltZVN0YW1wU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlUaW1lU3RhbXBTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheVRpbWVTdGFtcFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0RGlzcGxheUFubm90YXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldERpc3BsYXlBbm5vdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVQb3NYKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVBvc1kvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXREaXNwbGF5QW5ub3RhdGVTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0Rpc3BsYXlBbm5vdGF0ZVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXREaXNwbGF5QW5ub3RhdGVTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnRGlzcGxheUFubm90YXRlU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVEltYWdlLmNzXHJcbiAgLy9cclxuICAvL1x0XHRmdW5jdGlvbiAgR2V0U2lnSW1hZ2VCNjQoIClcclxuICAvL1x0XHRcdHtcclxuICAvL1x0XHRcdHZhciB4aHIyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgLy9cdFx0XHR4aHIyLm9wZW4oXCJHRVRcIiwgYmFzZVVyaSArIFwiU2lnSW1hZ2UvMVwiLCBmYWxzZSApO1xyXG4gIC8vXHRcdFx0eGhyMi5yZXNwb25zZVR5cGUgPSBcImJsb2JcIlxyXG4gIC8vXHRcdFx0eGhyMi5zZW5kKG51bGwpO1xyXG4gIC8vXHRcdFx0aWYgKHhocjIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKVxyXG4gIC8vXHRcdFx0XHR7XHJcbiAgLy9cdFx0XHRcdHJldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh4aHIyLnJlc3BvbnNlKTtcclxuICAvL1x0XHRcdFx0fVxyXG4gIC8vXHRcdFx0cmV0dXJuIG51bGw7XHJcbiAgLy9cdFx0XHR9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVhTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVhTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VYU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVlTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlWVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VZU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVBlbldpZHRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlUGVuV2lkdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVBlbldpZHRoKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VQZW5XaWR0aCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXAnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VUaW1lU3RhbXBQb3NYKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlVGltZVN0YW1wUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlVGltZVN0YW1wUG9zWCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZVRpbWVTdGFtcFBvc1kodikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VUaW1lU3RhbXBQb3NZKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VUaW1lU3RhbXBQb3NZJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlVGltZVN0YW1wU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZVRpbWVTdGFtcFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZVRpbWVTdGFtcFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SW1hZ2VBbm5vdGF0ZVBvc1godikge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVBvc1gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRJbWFnZUFubm90YXRlUG9zWCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEltYWdlQW5ub3RhdGVQb3NZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0ltYWdlQW5ub3RhdGVQb3NZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SW1hZ2VBbm5vdGF0ZVBvc1koKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlUG9zWSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRJbWFnZUFubm90YXRlU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdJbWFnZUFubm90YXRlU2l6ZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEltYWdlQW5ub3RhdGVTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSW1hZ2VBbm5vdGF0ZVNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0SnVzdGlmeVgodikge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeVgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRKdXN0aWZ5WCgpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlYJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldEp1c3RpZnlZKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0p1c3RpZnlZLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0SnVzdGlmeVkoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5WSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRKdXN0aWZ5TW9kZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdKdXN0aWZ5TW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldEp1c3RpZnlNb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnSnVzdGlmeU1vZGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vXHRcdFNpZ1BsdXNORVRLZXlQYWQuY3NcclxuICAvL1xyXG4gIHN0YXRpYyBLZXlQYWRBZGRIb3RTcG90KGtleSwgY29vcmQsIHhwLCB5cCwgeHMsIHlzKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdLZXlQYWRBZGRIb3RTcG90Lyc7XHJcbiAgICBQcm9wID0gUHJvcCArIGtleSArICcsJyArIGNvb3JkICsgJywnICsgeHAgKyAnLCcgKyB5cCArICcsJyArIHhzICsgJywnICsgeXM7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRNYXJrSG90U3BvdChrZXksIGNvb3JkLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdGhpcy5MQ0RXcml0ZVN0cmluZygwLCAyLCB4cCwgeXAsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAgKyB4cywgeXAsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAsIHlwICsgeXMsICcxNnB0IHNhbnMtc2VyaWYnLCAzMiwgJysnKTtcclxuICAgIHRoaXMuTENEV3JpdGVTdHJpbmcoMCwgMiwgeHAgKyB4cywgeXAgKyB5cywgJzE2cHQgc2Fucy1zZXJpZicsIDMyLCAnKycpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEtleVBhZFF1ZXJ5SG90U3BvdChrZXkpIHtcclxuICAgIHZhciBQcm9wID0gJ0tleVBhZFF1ZXJ5SG90U3BvdC8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBrZXk7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBLZXlQYWRDbGVhckhvdFNwb3RMaXN0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnS2V5UGFkQ2xlYXJIb3RTcG90TGlzdCc7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdXaW5kb3coY29vcmRzLCB4cCwgeXAsIHhzLCB5cykge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnV2luZG93Lyc7XHJcbiAgICBQcm9wID0gUHJvcCArIGNvb3JkcyArICcsJyArIHhwICsgJywnICsgeXAgKyAnLCcgKyB4cyArICcsJyArIHlzO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgQ2xlYXJTaWdXaW5kb3coaW5zaWRlKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDbGVhclNpZ1dpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyBpbnNpZGU7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVExDRC5jc1xyXG4gIC8vXHJcbiAgc3RhdGljIFNldExDRENhcHR1cmVNb2RlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0NhcHR1cmVNb2RlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0TENEQ2FwdHVyZU1vZGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdDYXB0dXJlTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRXaW5kb3coeFAsIHlQLCB4UywgeVMpIHtcclxuICAgIHZhciBQcm9wID0gJ0xDRFNldFdpbmRvdy8nO1xyXG4gICAgUHJvcCA9IFByb3AgKyB4UCArICcsJyArIHlQICsgJywnICsgeFMgKyAnLCcgKyB5UztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFdyaXRlU3RyaW5nKGRlc3QsIG1vZGUsIHgsIHksIGZudCwgc2l6ZSwgc3RyKSB7XHJcbiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNudHggPSBjLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjbnR4LmZvbnQgPSBmbnQ7XHJcbiAgICB2YXIgdHh0ID0gc3RyO1xyXG4gICAgdmFyIHhzID0gTWF0aC5yb3VuZChjbnR4Lm1lYXN1cmVUZXh0KHR4dCkud2lkdGgpO1xyXG4gICAgdmFyIHlzID0gc2l6ZTtcclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgaWYgKHhzID09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgIGNudHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcbiAgICBjbnR4LmZpbGxUZXh0KHR4dCwgMCwgMCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VTdHJlYW0oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0REcmF3UmVjdGFuZ2xlKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgZmlsbCkge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIGMud2lkdGggPSB4cztcclxuICAgIGMuaGVpZ2h0ID0geXM7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSBmaWxsO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmRyYXdJbWFnZShjbnR4LmNhbnZhcywgMCwgMCwgeHMsIHlzKTtcclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGMsIHgsIHksIHhzLCB5cyk7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENERHJhd0J1dHRvbihkZXN0LCBtb2RlLCB4LCB5LCB4cywgeXMsIHN0cnlzLCBmaWxsLCBmbnQsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciBzeHMgPSBNYXRoLnJvdW5kKGNudHgubWVhc3VyZVRleHQodHh0KS53aWR0aCk7XHJcbiAgICB2YXIgc3lzID0gc3RyeXM7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gZmlsbDtcclxuICAgIGNudHgucmVjdCgwLCAwLCB4cywgeXMpO1xyXG4gICAgY250eC5maWxsKCk7XHJcblxyXG4gICAgY250eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XHJcbiAgICBjbnR4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xyXG4gICAgY250eC5maWxsVGV4dCh0eHQsICh4cyAtIHN4cykgLyAyLCAoeXMgLSBzeXMpIC8gMik7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEV3JpdGVTdHJpbmdXaW5kb3coZGVzdCwgbW9kZSwgeCwgeSwgZm50LCB4c2l6ZSwgeXNpemUsIHN0cikge1xyXG4gICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjbnR4ID0gYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY250eC5mb250ID0gZm50O1xyXG4gICAgdmFyIHR4dCA9IHN0cjtcclxuICAgIHZhciB4cyA9IHhzaXplO1xyXG4gICAgdmFyIHlzID0geXNpemU7XHJcbiAgICBjLndpZHRoID0geHM7XHJcbiAgICBjLmhlaWdodCA9IHlzO1xyXG5cclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIGNudHguZmlsbFN0eWxlID0gJyNGRkZGRkYnO1xyXG4gICAgY250eC5yZWN0KDAsIDAsIHhzLCB5cyk7XHJcbiAgICBjbnR4LmZpbGwoKTtcclxuXHJcbiAgICBjbnR4LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgIGNudHgudGV4dEJhc2VsaW5lID0gJ3RvcCc7XHJcbiAgICBjbnR4LmZpbGxUZXh0KHR4dCwgMCwgMCk7XHJcblxyXG4gICAgY250eC5kcmF3SW1hZ2UoY250eC5jYW52YXMsIDAsIDAsIHhzLCB5cyk7XHJcblxyXG4gICAgdmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoYywgeCwgeSwgeHMsIHlzKTtcclxuXHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VCbG9iKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgR3N0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU3RyaW5nV2lkdGgoZm50LCBzdHIpIHtcclxuICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY250eCA9IGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNudHguZm9udCA9IGZudDtcclxuICAgIHZhciB0eHQgPSBzdHI7XHJcbiAgICB2YXIgeHMgPSBNYXRoLnJvdW5kKGNudHgubWVhc3VyZVRleHQodHh0KS53aWR0aCk7XHJcblxyXG4gICAgcmV0dXJuIHhzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFN0cmluZ0hlaWdodChmbnQsIHN0cikge1xyXG4gICAgcmV0dXJuIDE2O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExjZFJlZnJlc2goTW9kZSwgWHAsIFlwLCBYcywgWXMpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFJlZnJlc2gvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIE1vZGUgKyAnLCcgKyBYcCArICcsJyArIFlwICsgJywnICsgWHMgKyAnLCcgKyBZcztcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIExDRFNlbmRDbWRTdHJpbmcoQ21kU3RyLCBSZXR1cm5Db3VudCwgUmVzdWx0LCBUaW1lT3V0KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZW5kQ21kU3RyaW5nLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyBSZXR1cm5Db3VudCArICcsJyArIFRpbWVPdXQ7XHJcbiAgICBSZXN1bHQgPSB0aGlzLlNpZ1dlYlNldFN0cmVhbVByb3BlcnR5KFByb3AsIENtZFN0cik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTENEU2VuZENtZERhdGEoQ21kU3RyLCBSZXR1cm5Db3VudCwgUmVzdWx0LCBUaW1lT3V0KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RTZW5kQ21kRGF0YS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgUmV0dXJuQ291bnQgKyAnLCcgKyBUaW1lT3V0O1xyXG4gICAgUmVzdWx0ID0gdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBDbWRTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRXaW5kb3dlZEdyYXBoaWNDYW52YXMoICBkZXN0LCBtb2RlLCAgeCwgIHksIGNhbnZhcyApXHJcbiAgLy9cdFx0XHQge1xyXG4gIC8vXHRcdFx0IH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRXaW5kb3dlZEdyYXBoaWNDYW52YXMoICBkZXN0LCBtb2RlLCAgeCwgIHksICB4cywgIHlzLCBjYW52YXMgKVxyXG4gIC8vXHRcdFx0e1xyXG4gIC8vXHRcdFx0dmFyIEdzdHIgPSB0aGlzLmNyZWF0ZUxjZEJpdG1hcEZyb21DYW52YXMoIGNhbnZhcywgMCwgMCwgeHMsIHlzKVxyXG4gIC8vXHRcdFx0TGNkV3JpdGVJbWFnZVN0cmVhbSggZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyICk7XHJcbiAgLy9cdFx0XHR9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kV2luZG93ZWRHcmFwaGljQ2FudmFzKGRlc3QsIG1vZGUsIHgsIHksIHhzLCB5cywgYywgeHBzLCB5cHMpIHtcclxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBHc3RyID0gdGhpcy5jcmVhdGVMY2RCaXRtYXBGcm9tQ2FudmFzKGNhbnZhcywgeHBzLCB5cHMsIHhzLCB5cyk7XHJcbiAgICB0aGlzLkxjZFdyaXRlSW1hZ2VTdHJlYW0oZGVzdCwgbW9kZSwgeCwgeSwgeHMsIHlzLCBHc3RyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZW5kR3JhcGhpY1VybChkZXN0LCBtb2RlLCB4LCB5LCB1cmwpIHtcclxuICAgIHRoaXMuTGNkV3JpdGVJbWFnZShkZXN0LCBtb2RlLCB4LCB5LCB1cmwpO1xyXG4gIH1cclxuXHJcbiAgLy9cdFx0ZnVuY3Rpb24gIExDRFNlbmRHcmFwaGljKCAgRGVzdCwgIE1vZGUsICBYUG9zLCAgWVBvcywgIEltYWdlRmlsZU5hbWUgKSB7fVxyXG4gIC8vXHRcdGZ1bmN0aW9uICBMQ0RTZW5kR3JhcGhpY1VSTCggIERlc3QsICBNb2RlLCAgWFBvcywgIFlQb3MsICBVUkwgKSB7fVxyXG5cclxuICBzdGF0aWMgTENEQ2xlYXIoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdMY2RDbGVhcic7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRUYWJsZXRNYXAoXHJcbiAgICBMQ0RUeXBlLFxyXG4gICAgTENEWFNpemUsXHJcbiAgICBMQ0RZU2l6ZSxcclxuICAgIExDRFhTdGFydCxcclxuICAgIExDRFlTdGFydCxcclxuICAgIExDRFhTdG9wLFxyXG4gICAgTENEWVN0b3BcclxuICApIHt9XHJcblxyXG4gIHN0YXRpYyBMQ0RTZXRQaXhlbERlcHRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZFNldFBpeGVsRGVwdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RHZXRMQ0RTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkR2V0TGNkU2l6ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcbiAgc3RhdGljIExDREdldENvbXByZXNzaW9uTW9kZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ0xjZENvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBMQ0RHZXRaQ29tcHJlc3Npb25Nb2RlKCkge1xyXG4gICAgdmFyIFByb3AgPSAnTGNkWkNvbXByZXNzaW9uTW9kZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy9cdFx0U2lnUGx1c05FVExDRC5jc1xyXG4gIC8vXHJcblxyXG4gIHN0YXRpYyBTZXRSZWFsVGFibGV0U3RhdGUodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0U3RhdGUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRTdGF0ZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFN0YXRlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvZ2ljYWxYU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWFNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRMb2dpY2FsWFNpemUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWFNpemUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0TG9naWNhbFlTaXplKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TG9naWNhbFlTaXplJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldExvZ2ljYWxZU2l6ZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2dpY2FsWVNpemUvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRYU3RhcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0YXJ0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WFN0YXJ0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0YXJ0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFlTdGFydCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RhcnQvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRZU3RhcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RhcnQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0WFN0b3Aodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0WFN0b3AvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRUYWJsZXRYU3RvcCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFhTdG9wJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFlTdG9wKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFlTdG9wLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0WVN0b3AoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRZU3RvcCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRGaWx0ZXJQb2ludHModikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RmlsdGVyUG9pbnRzLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0RmlsdGVyUG9pbnRzKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0RmlsdGVyUG9pbnRzJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFRpbWluZ0FkdmFuY2Uodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0VGltaW5nQWR2YW5jZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFRpbWluZ0FkdmFuY2UoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUaW1pbmdBZHZhbmNlJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldENvbVBvcnQodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29tUG9ydC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldENvbVBvcnQoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21Qb3J0JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldEJhdWRSYXRlKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldEJhdWRSYXRlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0QmF1ZFJhdGUoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRCYXVkUmF0ZSc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRUYWJsZXRSb3RhdGlvbih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSb3RhdGlvbi8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldFJvdGF0aW9uKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Um90YXRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0VHlwZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRUeXBlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0VHlwZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFR5cGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2VydmVyVGFibGV0VHlwZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJ2ZXJUYWJsZXRUeXBlLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2VydmVyVGFibGV0VHlwZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NlcnZlclRhYmxldFR5cGUnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0Q29tVGVzdCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRDb21UZXN0Lyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0Q29tVGVzdCgpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldENvbVRlc3QnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0UmVzb2x1dGlvbih2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRSZXNvbHV0aW9uLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0VGFibGV0UmVzb2x1dGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFJlc29sdXRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgVGFibGV0Q29ubmVjdFF1ZXJ5KCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0Q29ubmVjdFF1ZXJ5JztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFRhYmxldE1vZGVsTnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TW9kZWxOdW1iZXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgVGFibGV0U2VyaWFsTnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0U2VyaWFsTnVtYmVyJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFBvcnRQYXRoKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldFBvcnRQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0TG9jYWxJbmlGaWxlUGF0aCh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRMb2NhbEluaUZpbGVQYXRoLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0TW9kZWwodikge1xyXG4gICAgdmFyIFByb3AgPSAnVGFibGV0TW9kZWwvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTZXJpYWxQb3J0Q2xvc2VEZWxheSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTZXJpYWxQb3J0Q2xvc2VEZWxheS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNlcmlhbFBvcnRDbG9zZURlbGF5KCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2VyaWFsUG9ydENsb3NlRGVsYXknO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgRW5hYmxlVGFibGV0RW5jcnlwdGlvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ0VuYWJsZVRhYmxldEVuY3J5cHRpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RW5jcnlwdGlvbk1vZGUoaG1vZGUsIHRtb2RlKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXRFbmNyeXB0aW9uTW9kZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgaG1vZGUgKyAnLCcgKyB0bW9kZTtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldE1heExvZ0ZpbGVTaXplKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ01heExvZ0ZpbGVTaXplLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0U2lnU29ja1NlcnZlclBhdGgoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrU2VydmVyUGF0aCc7XHJcblxyXG4gICAgUHJvcCA9IFByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5TaWdXZWJHZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBHZXRTaWdTb2NrQ2xpZW50TmFtZSgpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tDbGllbnROYW1lJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHJldHVybiB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFNpZ1NvY2tQb3J0TnVtYmVyKCkge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1BvcnROdW1iZXInO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0U2lnU29ja1NlcnZlclBhdGgodikge1xyXG4gICAgdmFyIFByb3AgPSAnU2lnU29ja1NlcnZlclBhdGgvJztcclxuXHJcbiAgICBQcm9wID0gUHJvcCArIHY7XHJcbiAgICB0aGlzLlNpZ1dlYlNldFByb3BlcnR5U3luYyhQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBTZXRTaWdTb2NrQ2xpZW50TmFtZSh2KSB7XHJcbiAgICB2YXIgUHJvcCA9ICdTaWdTb2NrQ2xpZW50TmFtZS8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFBvcnROdW1iZXIodikge1xyXG4gICAgdmFyIFByb3AgPSAnUG9ydE51bWJlci8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFNpZ1NvY2tQb3J0TnVtYmVyKHYpIHtcclxuICAgIHZhciBQcm9wID0gJ1NpZ1NvY2tQb3J0TnVtYmVyLyc7XHJcblxyXG4gICAgUHJvcCA9IFByb3AgKyB2O1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0RmlybXdhcmVSZXZpc2lvbigpIHtcclxuICAgIHZhciBQcm9wID0gJ0Zpcm13YXJlUmV2aXNpb24nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuU2lnV2ViR2V0UHJvcGVydHkoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgU2V0VGFibGV0RGF0YShzaWdTdHIpIHtcclxuICAgIHZhciBQcm9wID0gJ1RhYmxldERhdGEnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRTdHJlYW1Qcm9wZXJ0eShQcm9wLCBzaWdTdHIpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIEdldFRhYmxldERhdGEoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdUYWJsZXREYXRhJztcclxuXHJcbiAgICBQcm9wID0gUHJvcDtcclxuICAgIHZhciBTdHIgPSB0aGlzLlNpZ1dlYkdldFByb3BlcnR5KFByb3ApO1xyXG5cclxuICAgIHJldHVybiBTdHIuc2xpY2UoMSwgU3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIE9wZW5UYWJsZXQodikge1xyXG4gICAgdmFyIFByb3AgPSAnT3BlblRhYmxldC8nO1xyXG5cclxuICAgIFByb3AgPSBQcm9wICsgdjtcclxuICAgIHRoaXMuU2lnV2ViU2V0UHJvcGVydHlTeW5jKFByb3ApO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIENsb3NlVGFibGV0KCkge1xyXG4gICAgdmFyIFByb3AgPSAnQ2xvc2VUYWJsZXQnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eShQcm9wKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBSZXNldFBhcmFtZXRlcnMoKSB7XHJcbiAgICB2YXIgUHJvcCA9ICdSZXNldFBhcmFtZXRlcnMnO1xyXG5cclxuICAgIFByb3AgPSBQcm9wO1xyXG4gICAgdGhpcy5TaWdXZWJTZXRQcm9wZXJ0eVN5bmMoUHJvcCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGVzdFJhd0RhdGEoKSB7XHJcbiAgICB0aGlzLk9wZW5UYWJsZXQoMSk7XHJcbiAgICB2YXIgU3RyMSA9IHRoaXMuR2V0VGFibGV0RGF0YSgpO1xyXG4gICAgdGhpcy5DbG9zZVRhYmxldCgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIFNldFRhYmxldFN0YXRlKHYsIGN0eCwgdHYpIHtcclxuICAgIHZhciBkZWxheTtcclxuXHJcbiAgICBpZiAodHYpIHtcclxuICAgICAgZGVsYXkgPSB0djtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGF5ID0gMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLkdldFRhYmxldFN0YXRlKCkgIT0gdikge1xyXG4gICAgICBpZiAodiA9PSAxKSB7XHJcbiAgICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgICAgdmFyIGNhbiA9IGN0eC5jYW52YXM7XHJcbiAgICAgICAgICB0aGlzLlNldERpc3BsYXlYU2l6ZShjYW4ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5TZXREaXNwbGF5WVNpemUoY2FuLmhlaWdodCk7XHJcbiAgICAgICAgICB0aGlzLlNpZ1dlYlNldERpc3BsYXlUYXJnZXQoY3R4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TZXRSZWFsVGFibGV0U3RhdGUodik7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLkdldFRhYmxldFN0YXRlKCk7XHJcbiAgICAgICAgdmFyIGRhdGFSZXN1bHQgPSBkYXRhID09ICcnIHx8IGRhdGEgPT0gbnVsbCA/IDAgOiBOdW1iZXIoZGF0YSk7XHJcbiAgICAgICAgdmFyIHRtciA9IG51bGw7XHJcbiAgICAgICAgaWYgKGN0eCAmJiBkYXRhUmVzdWx0ICE9IDApIHtcclxuICAgICAgICAgIHRtciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuU2lnV2ViUmVmcmVzaCgpLCBkZWxheSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRtciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG1yO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY3R4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TaWdXZWJTZXREaXNwbGF5VGFyZ2V0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuU2V0UmVhbFRhYmxldFN0YXRlKHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
|