@myrmidon/cadmus-part-codicology-sheet-labels 2.0.7 → 2.0.8
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/esm2020/lib/cod-sheet-table.mjs +25 -7
- package/fesm2015/myrmidon-cadmus-part-codicology-sheet-labels.mjs +20 -6
- package/fesm2015/myrmidon-cadmus-part-codicology-sheet-labels.mjs.map +1 -1
- package/fesm2020/myrmidon-cadmus-part-codicology-sheet-labels.mjs +24 -6
- package/fesm2020/myrmidon-cadmus-part-codicology-sheet-labels.mjs.map +1 -1
- package/lib/cod-sheet-table.d.ts +2 -2
- package/package.json +1 -1
|
@@ -27,8 +27,8 @@ export var CodRowType;
|
|
|
27
27
|
* or "(/)" (back). Each row has an array of columns, which is kept
|
|
28
28
|
* in synch across all the rows.
|
|
29
29
|
* Front/back covers are modeled as a special case of endleaves, where
|
|
30
|
-
* the only meaningful location values are system and suffix. There
|
|
31
|
-
* no number, as by definition covers are single. Front cover always
|
|
30
|
+
* the only meaningful location values are system, r/v and suffix. There
|
|
31
|
+
* is no number, as by definition covers are single. Front cover always
|
|
32
32
|
* comes first; back cover always comes last.
|
|
33
33
|
* Columns are sorted first by type: qncsr; and then by their suffix,
|
|
34
34
|
* which optionally follows the type letter plus a dot. So, "q" is the
|
|
@@ -196,9 +196,9 @@ export class CodSheetTable {
|
|
|
196
196
|
const rv = v ? 'v' : 'r';
|
|
197
197
|
switch (type) {
|
|
198
198
|
case CodRowType.CoverFront:
|
|
199
|
-
return '[';
|
|
199
|
+
return '[' + rv;
|
|
200
200
|
case CodRowType.CoverBack:
|
|
201
|
-
return '[/';
|
|
201
|
+
return '[/' + rv;
|
|
202
202
|
case CodRowType.EndleafFront:
|
|
203
203
|
return `(${n}${rv})`;
|
|
204
204
|
case CodRowType.EndleafBack:
|
|
@@ -229,7 +229,22 @@ export class CodSheetTable {
|
|
|
229
229
|
if (rows.some((r) => r.type === type)) {
|
|
230
230
|
return;
|
|
231
231
|
}
|
|
232
|
-
|
|
232
|
+
let index = type === CodRowType.CoverFront ? 0 : rows.length;
|
|
233
|
+
const page = {
|
|
234
|
+
type: type,
|
|
235
|
+
n: 0,
|
|
236
|
+
v: false,
|
|
237
|
+
};
|
|
238
|
+
for (let i = 0; i < 2; i++) {
|
|
239
|
+
rows.splice(index++, 0, {
|
|
240
|
+
id: this.buildRowId(type, page.n, page.v),
|
|
241
|
+
columns: this.getNewColumns(),
|
|
242
|
+
...page,
|
|
243
|
+
});
|
|
244
|
+
this.incRowPage(page);
|
|
245
|
+
}
|
|
246
|
+
this._rows$.next(deepCopy(rows));
|
|
247
|
+
return;
|
|
233
248
|
}
|
|
234
249
|
// locate last row of same type
|
|
235
250
|
let lastRowIndex = rows.length - 1;
|
|
@@ -333,9 +348,12 @@ export class CodSheetTable {
|
|
|
333
348
|
return this._cols$.value.findIndex((id) => id === cell.id);
|
|
334
349
|
}
|
|
335
350
|
incRowPage(page) {
|
|
336
|
-
//
|
|
351
|
+
// only r/v for covers
|
|
337
352
|
if (page.type === CodRowType.CoverFront ||
|
|
338
353
|
page.type === CodRowType.CoverBack) {
|
|
354
|
+
if (!page.v) {
|
|
355
|
+
page.v = true;
|
|
356
|
+
}
|
|
339
357
|
return;
|
|
340
358
|
}
|
|
341
359
|
if (page.v) {
|
|
@@ -554,4 +572,4 @@ export class CodSheetTable {
|
|
|
554
572
|
this._rows$.next(rows);
|
|
555
573
|
}
|
|
556
574
|
}
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNoZWV0LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXBhcnQtY29kaWNvbG9neS1zaGVldC1sYWJlbHMvc3JjL2xpYi9jb2Qtc2hlZXQtdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFLbkQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxVQU1YO0FBTkQsV0FBWSxVQUFVO0lBQ3BCLHVEQUFjLENBQUE7SUFDZCwyREFBWSxDQUFBO0lBQ1osMkNBQUksQ0FBQTtJQUNKLHlEQUFXLENBQUE7SUFDWCxxREFBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLFVBQVUsS0FBVixVQUFVLFFBTXJCO0FBdUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBOEJ4QjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBdkJEOzs7O09BSUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBUUQ7OztPQUdHO0lBQ0ks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QU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQzthQUNyRDtTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVlcENvcHkgfSBmcm9tICdAbXlybWlkb24vbmctdG9vbHMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENvZENvbHVtbiwgQ29kUm93IH0gZnJvbSAnLi9jb2Qtc2hlZXQtbGFiZWxzLXBhcnQnO1xyXG5pbXBvcnQgeyBDb2RMYWJlbENlbGwgfSBmcm9tICcuL2xhYmVsLWdlbmVyYXRvcic7XHJcblxyXG4vKipcclxuICogVHlwZSBvZiB0YWJsZSByb3cuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBDb2RSb3dUeXBlIHtcclxuICBDb3ZlckZyb250ID0gMCxcclxuICBFbmRsZWFmRnJvbnQsXHJcbiAgQm9keSxcclxuICBFbmRsZWFmQmFjayxcclxuICBDb3ZlckJhY2ssXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEYXRhIGFib3V0IGEgcGFnZSAoPXJvdykgaW4gYSB0YWJsZS4gQSBwYWdlIGhhcyBhIHR5cGVcclxuICogKGVuZGxlYWYvYm9keSksIGEgc2hlZXQgbnVtYmVyLCBhbmQgYSByZWN0by92ZXJzbyBmbGFnLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb2RSb3dQYWdlIHtcclxuICB0eXBlOiBDb2RSb3dUeXBlO1xyXG4gIG46IG51bWJlcjtcclxuICB2OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogVGhlIHZpZXdtb2RlbCBvZiBhIHRhYmxlJ3Mgcm93LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb2RSb3dWaWV3TW9kZWwgZXh0ZW5kcyBDb2RSb3csIENvZFJvd1BhZ2Uge31cclxuXHJcbi8qKlxyXG4gKiBUaGUgdHlwZXMgb2YgdGFibGUgY29sdW1uczogcXVpcmVzLCBudW1iZXJpbmdzLCBjYXRjaHdvcmRzLFxyXG4gKiBzaWduYXR1cmVzLCByZWdpc3RlciBzaWduYXR1cmVzLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29kQ29sdW1uVHlwZSA9ICdxJyB8ICduJyB8ICdjJyB8ICdzJyB8ICdyJztcclxuXHJcbi8qKlxyXG4gKiBTaGVldCBsYWJlbHMgdGFibGUgZGF0YS4gVGhpcyByZXByZXNlbnRzIHRoZSB2aWV3bW9kZWwgZm9yIHRoZSBzaGVldFxyXG4gKiBsYWJlbHMgdGFibGUuIFRoaXMgdGFibGUgaGFzIDMgcm93cyBzZXRzIGZvciBmcm9udCBlbmRsZWF2ZXMsIGJvZHksXHJcbiAqIGFuZCBiYWNrIGVuZGxlYXZlcywgYW5kIGFueSBudW1iZXIgb2YgY29sdW1ucyBzZXRzIGZvciBlYWNoIG9mIHRoZVxyXG4gKiBhdmFpbGFibGUgdHlwZXMgKHFuY3NyKS4gVGhlcmUgY2FuIGJlIG9ubHkgMSBjb2x1bW4gb2YgdHlwZSBxLCBhbHdheXNcclxuICogbmFtZWQgXCJxXCI7IHdoZXJlYXMgYWxsIHRoZSBvdGhlciB0eXBlcyBhbGxvdyBhbnkgbnVtYmVyIG9mIGNvbHVtbnMuXHJcbiAqIFRoZSB0YWJsZSBpcyBlZGl0ZWQgc28gdGhhdCB3ZSBlbnN1cmUgdGhhdCBhbGwgdGhlIHJvd3MgYWx3YXlzIGhhdmVcclxuICogdGhlIHNhbWUgY29sdW1ucywgYW5kIHRoZWlyIG9yZGVyIGZvbGxvd3MgdGhlIHJ1bGVzIGZvciBib3RoIHJvd3MgYW5kXHJcbiAqIGNvbHVtbnMuXHJcbiAqIFJvd3MgYXJlIHNvcnRlZCBmaXJzdCBieSB0eXBlOiBmcm9udCBjb252ZXIsIGZyb250IGVuZGxlYWYsIGJvZHksXHJcbiAqIGJhY2sgZW5kbGVhZiwgYmFjayBjb3ZlcjsgYW5kIHRoZW4gYnkgdGhlaXIgc2hlZXQgbnVtYmVyIGFuZFxyXG4gKiByZWN0by92ZXJzbyBmbGFnICgxciwgMXYsIDJyLCAydi4uLikuXHJcbiAqIEVuZGxlYXZlcyBJRHMgZm9sbG93IHRoZSBzYW1lIHBhdHRlcm4sIGJ1dCBhcmUgd3JhcHBlZCBpbiBcIigpXCIgKGZyb250KVxyXG4gKiBvciBcIigvKVwiIChiYWNrKS4gRWFjaCByb3cgaGFzIGFuIGFycmF5IG9mIGNvbHVtbnMsIHdoaWNoIGlzIGtlcHRcclxuICogaW4gc3luY2ggYWNyb3NzIGFsbCB0aGUgcm93cy5cclxuICogRnJvbnQvYmFjayBjb3ZlcnMgYXJlIG1vZGVsZWQgYXMgYSBzcGVjaWFsIGNhc2Ugb2YgZW5kbGVhdmVzLCB3aGVyZVxyXG4gKiB0aGUgb25seSBtZWFuaW5nZnVsIGxvY2F0aW9uIHZhbHVlcyBhcmUgc3lzdGVtIGFuZCBzdWZmaXguIFRoZXJlIGlzXHJcbiAqIG5vIG51bWJlciwgYXMgYnkgZGVmaW5pdGlvbiBjb3ZlcnMgYXJlIHNpbmdsZS4gRnJvbnQgY292ZXIgYWx3YXlzXHJcbiAqIGNvbWVzIGZpcnN0OyBiYWNrIGNvdmVyIGFsd2F5cyBjb21lcyBsYXN0LlxyXG4gKiBDb2x1bW5zIGFyZSBzb3J0ZWQgZmlyc3QgYnkgdHlwZTogcW5jc3I7IGFuZCB0aGVuIGJ5IHRoZWlyIHN1ZmZpeCxcclxuICogd2hpY2ggb3B0aW9uYWxseSBmb2xsb3dzIHRoZSB0eXBlIGxldHRlciBwbHVzIGEgZG90LiBTbywgXCJxXCIgaXMgdGhlXHJcbiAqIGRlZmF1bHQgKGFuZCB1bmlxdWUpIHF1aXJlIGNvbHVtbjsgXCJuXCIgaXMgdGhlIGRlZmF1bHQgbnVtYmVyaW5nO1xyXG4gKiBcIm4ucm9tYW5cIiBpcyBhbm90aGVyIG51bWJlcmluZzsgZXRjLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvZFNoZWV0VGFibGUge1xyXG4gIHByaXZhdGUgX2NvbHMkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+O1xyXG4gIHByaXZhdGUgX3Jvd3MkOiBCZWhhdmlvclN1YmplY3Q8Q29kUm93Vmlld01vZGVsW10+O1xyXG4gIHByaXZhdGUgX2NvbFByZWZpeGVzOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB0byBkcm9wIG92ZXJmbG93IHJvd3Mgd2hlbiBhZGRpbmcgY29sdW1uczsgZmFsc2UgdG9cclxuICAgKiBhZGQgbmV3IHJvd3MgdG8gZml0IHRoZW0uXHJcbiAgICovXHJcbiAgcHVibGljIG92ZXJmbG93RHJvcHBpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGFsbCB0aGUgY29sdW1uIElEcyBpbiB0aGUgdGFibGUsIGluIHRoZWlyIG9yZGVyLlxyXG4gICAqIFRhYmxlIGNvbHVtbnMgYXJlIGFycmFuZ2VkIGluIGEgZml4ZWQgb3JkZXI6IGZpcnN0IGJ5IHR5cGUsXHJcbiAgICogdGhlbiBieSB0aGVpciBJRC4gVHlwZSBvcmRlciBpcyBxLCBuLCBjLCBzLCByLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgY29sdW1uSWRzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29scyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgcm93cyBpbiB0aGUgdGFibGUuIFJvd3MgYXJlIHNvcnRlZCBmaXJzdCBieSB0aGVpciB0eXBlLFxyXG4gICAqIHRoZW4gYnkgdGhlaXIgbnVtYmVyLiBUeXBlIG9yZGVyIGlzIGZyb250LWNvdmVyLCBmcm9udC1lbmRsZWFmLFxyXG4gICAqIGJvZHksIGJhY2stZW5kbGVhZiwgYmFjay1jb3Zlci4gRWFjaCByb3cgaGFzIGFuIElEIGJ1aWx0IG9mIGFcclxuICAgKiBudW1iZXIgKD0wIGZvciBjb3ZlcnMpIGFuZCBhIHIvdiBmbGFnIChmYWxzZSBmb3IgY292ZXJzKS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHJvd3MkKCk6IE9ic2VydmFibGU8Q29kUm93Vmlld01vZGVsW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fY29scyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XHJcbiAgICB0aGlzLl9yb3dzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29kUm93Vmlld01vZGVsW10+KFtdKTtcclxuICAgIHRoaXMuX2NvbFByZWZpeGVzID0gWydxJywgJ24nLCAnYycsICdzJywgJ3InXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBjb2x1bW4gSURzLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGNvbHVtbiBJRHMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbklkcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uIElELlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgY29sdW1uIElELlxyXG4gICAqIEByZXR1cm5zIFRoZSBjb2x1bW4gaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb2x1bW5JbmRleChpZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xzJC52YWx1ZS5maW5kSW5kZXgoKHMpID0+IHMgPT09IGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiByb3dzLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJvd3MuXHJcbiAgICovXHJcbiAgcHVibGljIGdldFJvd3MoKTogQ29kUm93Vmlld01vZGVsW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLl9yb3dzJC52YWx1ZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHJvd3MgYW5kIHRoZWlyIGNvbHVtbnMgaW4gdGhpcyB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dzIFRoZSByb3dzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRSb3dzKHJvd3M6IENvZFJvd1tdKTogdm9pZCB7XHJcbiAgICAvLyBzZXQgY29scyBjb2xsZWN0aW5nIHRoZW0gZnJvbSBhbGwgdGhlIHJvd3NcclxuICAgIGNvbnN0IGNvbHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dzW2ldLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvd3NbaV0uY29sdW1uc1tqXS5pZDtcclxuICAgICAgICBpZiAoIWNvbHMuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZENvbHVtbklkKGlkLCBjb2xzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2NvbHMkLm5leHQoY29scyk7XHJcblxyXG4gICAgLy8gc2V0IHJvd3NcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoXHJcbiAgICAgIHJvd3MubWFwKChyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucGFyc2VSb3dJZChyLmlkKTtcclxuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5nZXROZXdDb2x1bW5zKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByLmNvbHVtbnM/Lmxlbmd0aCB8fCAwOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGNpID0gY29scy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IHIuY29sdW1uc1tpXS5pZCk7XHJcbiAgICAgICAgICBjb2xzW2NpXS52YWx1ZSA9IHIuY29sdW1uc1tpXS52YWx1ZTtcclxuICAgICAgICAgIGNvbHNbY2ldLm5vdGUgPSByLmNvbHVtbnNbaV0ubm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnBhZ2UsXHJcbiAgICAgICAgICBpZDogci5pZCxcclxuICAgICAgICAgIGNvbHVtbnM6IGNvbHMsXHJcbiAgICAgICAgfSBhcyBDb2RSb3dWaWV3TW9kZWw7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdGhlIGNvbHVtbiBJRCBmcm9tIGl0cyB0eXBlIGFuZCBvcHRpb25hbCBzdWZmaXguXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZSBUaGUgY29sdW1uIHR5cGUuXHJcbiAgICogQHBhcmFtIHN1ZmZpeCBUaGUgb3B0aW9uYWwgc3VmZml4LlxyXG4gICAqIEByZXR1cm5zIFRoZSBjb2x1bW4gSUQuXHJcbiAgICovXHJcbiAgcHVibGljIGJ1aWxkQ29sdW1uSWQodHlwZTogQ29kQ29sdW1uVHlwZSwgc3VmZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdWZmaXggPyBgJHt0eXBlfS4ke3N1ZmZpeH1gIDogdHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHRhYmxlIGhhcyB0aGUgc3BlY2lmaWVkIGNvbHVtbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgY29sdW1uIElELlxyXG4gICAqIEBwYXJhbSB0eXBlT25seSBUcnVlIHRvIGNoZWNrIGZvciB0eXBlIG9ubHkuXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNDb2x1bW4oaWQ6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGlkLmNoYXJBdCgwKTtcclxuICAgIHJldHVybiB0aGlzLl9jb2xzJC52YWx1ZS5maW5kKChjKSA9PlxyXG4gICAgICB0eXBlT25seSA/IGMuY2hhckF0KDApID09PSB0eXBlIDogYyA9PT0gaWRcclxuICAgIClcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbHVtbklkKGlkOiBzdHJpbmcsIGNvbHM6IHN0cmluZ1tdKTogbnVtYmVyIHtcclxuICAgIC8vIGluc2VydCB0aGUgbmV3IGNvbCBhdCB0aGUgcmlnaHQgcGxhY2VcclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX2NvbFByZWZpeGVzLmluZGV4T2YoaWQuY2hhckF0KDApKTtcclxuICAgIGxldCBjb2xJbmRleCA9IGNvbHMubGVuZ3RoIC0gMTtcclxuICAgIHdoaWxlIChjb2xJbmRleCA+IC0xKSB7XHJcbiAgICAgIGlmIChwcmVmaXggPj0gdGhpcy5fY29sUHJlZml4ZXMuaW5kZXhPZihjb2xzW2NvbEluZGV4XS5jaGFyQXQoMCkpKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY29sSW5kZXgtLTtcclxuICAgIH1cclxuICAgIGNvbHMuc3BsaWNlKGNvbEluZGV4ICsgMSwgMCwgaWQpO1xyXG4gICAgcmV0dXJuIGNvbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzcGVjaWZpZWQgY29sdW1uIHRvIHRoZSB0YWJsZS4gVGhlIGNvbHVtbiBJRCBpcyBjYWxjdWxhdGVkXHJcbiAgICogZnJvbSBpdHMgdHlwZSBhbmQgc3VmZml4LCBhbmQgaXRzIHBvc2l0aW9uIGlzIGRldGVybWluZWQgYnkgdGhhdCBJRC5cclxuICAgKiBJZiBhIGNvbHVtbiB3aXRoIHRoZSBzYW1lIElEIGFscmVhZHkgZXhpc3RzLCBub3RoaW5nIGlzIGRvbmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBjb2x1bW4gdG8gYWRkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRDb2x1bW4oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NvbHMkLnZhbHVlLmluY2x1ZGVzKGlkKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBpbnNlcnQgdGhlIG5ldyBjb2wgYXQgdGhlIHJpZ2h0IHBsYWNlXHJcbiAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5hZGRDb2x1bW5JZChpZCwgY29scyk7XHJcblxyXG4gICAgLy8gaW5zZXJ0IHRoZSBuZXcgY29sIGluIGVhY2ggcm93XHJcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICByb3dzW2ldLmNvbHVtbnMuc3BsaWNlKGNvbEluZGV4ICsgMSwgMCwge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY29scyQubmV4dChjb2xzKTtcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIHRoZSBjb2x1bW4gd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBjb2x1bW4gSUQuXHJcbiAgICovXHJcbiAgcHVibGljIGRlbGV0ZUNvbHVtbihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuX2NvbHMkLnZhbHVlLmluZGV4T2YoaWQpO1xyXG4gICAgaWYgKGNvbEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICAgIGNvbHMuc3BsaWNlKGNvbEluZGV4LCAxKTtcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJvd3NbaV0uY29sdW1ucy5zcGxpY2UoY29sSW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbHMkLm5leHQoY29scyk7XHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KGRlZXBDb3B5KHJvd3MpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRSb3dJZCh0eXBlOiBDb2RSb3dUeXBlLCBuOiBudW1iZXIsIHY6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHJ2ID0gdiA/ICd2JyA6ICdyJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIENvZFJvd1R5cGUuQ292ZXJGcm9udDpcclxuICAgICAgICByZXR1cm4gJ1snO1xyXG4gICAgICBjYXNlIENvZFJvd1R5cGUuQ292ZXJCYWNrOlxyXG4gICAgICAgIHJldHVybiAnWy8nO1xyXG4gICAgICBjYXNlIENvZFJvd1R5cGUuRW5kbGVhZkZyb250OlxyXG4gICAgICAgIHJldHVybiBgKCR7bn0ke3J2fSlgO1xyXG4gICAgICBjYXNlIENvZFJvd1R5cGUuRW5kbGVhZkJhY2s6XHJcbiAgICAgICAgcmV0dXJuIGAoLyR7bn0ke3J2fSlgO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBgJHtufSR7cnZ9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TmV3Q29sdW1ucygpOiBDb2RDb2x1bW5bXSB7XHJcbiAgICBjb25zdCBjb2xzOiBDb2RDb2x1bW5bXSA9IG5ldyBBcnJheSh0aGlzLl9jb2xzJC52YWx1ZS5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbHNbaV0gPSB7XHJcbiAgICAgICAgaWQ6IHRoaXMuX2NvbHMkLnZhbHVlW2ldLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBlbmQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygcm93cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSByb3dzIHRvIGFwcGVuZC5cclxuICAgKiBAcGFyYW0gY291bnQgVGhlIGNvdW50IG9mIHJvd3MgdG8gYmUgYXBwZW5kZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGFwcGVuZFJvd3ModHlwZTogQ29kUm93VHlwZSwgY291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93cyA9IFsuLi50aGlzLl9yb3dzJC52YWx1ZV07XHJcblxyXG4gICAgLy8gY29ybmVyIGNhc2U6IGNvdmVycyBhcmUgc2luZ2xlXHJcbiAgICBpZiAodHlwZSA9PT0gQ29kUm93VHlwZS5Db3ZlckZyb250IHx8IHR5cGUgPT09IENvZFJvd1R5cGUuQ292ZXJCYWNrKSB7XHJcbiAgICAgIGlmIChyb3dzLnNvbWUoKHIpID0+IHIudHlwZSA9PT0gdHlwZSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY291bnQgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxvY2F0ZSBsYXN0IHJvdyBvZiBzYW1lIHR5cGVcclxuICAgIGxldCBsYXN0Um93SW5kZXggPSByb3dzLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobGFzdFJvd0luZGV4ID4gLTEgJiYgcm93c1tsYXN0Um93SW5kZXhdLnR5cGUgIT09IHR5cGUpIHtcclxuICAgICAgbGFzdFJvd0luZGV4LS07XHJcbiAgICB9XHJcbiAgICBsZXQgcGFnZTogQ29kUm93UGFnZTtcclxuICAgIGlmIChsYXN0Um93SW5kZXggPiAtMSkge1xyXG4gICAgICBwYWdlID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgbjogcm93c1tsYXN0Um93SW5kZXhdLm4sXHJcbiAgICAgICAgdjogcm93c1tsYXN0Um93SW5kZXhdLnYsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYWdlID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgbjogMCxcclxuICAgICAgICB2OiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAocm93cy5sZW5ndGgpIHtcclxuICAgICAgICB3aGlsZSAoXHJcbiAgICAgICAgICBsYXN0Um93SW5kZXggPCByb3dzLmxlbmd0aCAtIDEgJiZcclxuICAgICAgICAgIHR5cGUgPiByb3dzW2xhc3RSb3dJbmRleCArIDFdLnR5cGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxhc3RSb3dJbmRleCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAvLyBuZXh0IHBhZ2UgKGVhY2ggcm93IGlzIGEgcGFnZSlcclxuICAgICAgdGhpcy5pbmNSb3dQYWdlKHBhZ2UpO1xyXG4gICAgICByb3dzLnNwbGljZSgrK2xhc3RSb3dJbmRleCwgMCwge1xyXG4gICAgICAgIGlkOiB0aGlzLmJ1aWxkUm93SWQodHlwZSwgcGFnZS5uLCBwYWdlLnYpLFxyXG4gICAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TmV3Q29sdW1ucygpLFxyXG4gICAgICAgIC4uLnBhZ2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBzcGVjaWZpZWQgY2VsbCBpbiB0aGUgdGFibGUuIElmIHRoZSBjZWxsIGlzIG5vdCBmb3VuZCxcclxuICAgKiBub3RoaW5nIGlzIGRvbmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY2VsbCBUaGUgY2VsbCB0byB1cGRhdGUuXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZUNlbGwoY2VsbDogQ29kTGFiZWxDZWxsKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXTtcclxuICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHIpID0+IHIuaWQgPT09IGNlbGwucm93SWQpO1xyXG4gICAgaWYgKHJvd0luZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlW3Jvd0luZGV4XS5jb2x1bW5zXTtcclxuICAgIGNvbnN0IGNvbEluZGV4ID0gY29scy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IGNlbGwuaWQpO1xyXG4gICAgaWYgKGNvbEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb2xzLnNwbGljZShjb2xJbmRleCwgMSwge1xyXG4gICAgICBpZDogY2VsbC5pZCxcclxuICAgICAgdmFsdWU6IGNlbGwudmFsdWUsXHJcbiAgICAgIG5vdGU6IGNlbGwubm90ZSxcclxuICAgIH0pO1xyXG4gICAgcm93c1tyb3dJbmRleF0uY29sdW1ucyA9IGNvbHM7XHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KGRlZXBDb3B5KHJvd3MpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VSb3dJZChyb3dJZDogc3RyaW5nKTogQ29kUm93UGFnZSB8IG51bGwge1xyXG4gICAgY29uc3QgbSA9IC8oW1tcXChdKT8oXFwvKT8oWzAtOV0rKShbcnZdKS8uZXhlYyhyb3dJZCk7XHJcbiAgICBpZiAoIW0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyB0eXBlOlxyXG4gICAgbGV0IHR5cGU6IENvZFJvd1R5cGU7XHJcbiAgICAvLyBpcyB0aGVyZSAoIG9yIFs/XHJcbiAgICBpZiAobVsxXSkge1xyXG4gICAgICBpZiAobVsxXSA9PT0gJygnKSB7XHJcbiAgICAgICAgLy8gKC8gb3IgKFxyXG4gICAgICAgIHR5cGUgPSBtWzJdID8gQ29kUm93VHlwZS5FbmRsZWFmQmFjayA6IENvZFJvd1R5cGUuRW5kbGVhZkZyb250O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFsvIG9yIFtcclxuICAgICAgICB0eXBlID0gbVsyXSA/IENvZFJvd1R5cGUuQ292ZXJCYWNrIDogQ29kUm93VHlwZS5Db3ZlckZyb250O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0eXBlID0gQ29kUm93VHlwZS5Cb2R5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgbjogK21bM10sXHJcbiAgICAgIHY6IG1bNF0gPT09ICd2JyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50Um93c0JldHdlZW4oYTogQ29kUm93UGFnZSwgYjogQ29kUm93UGFnZSk6IG51bWJlciB7XHJcbiAgICAvLyB3ZSBhc3N1bWUgdGhhdCBhL2IgYmVsb25nIHRvIHRoZSBzYW1lIHR5cGVcclxuICAgIGNvbnN0IG4gPSBiLm4gLSBhLm47XHJcbiAgICByZXR1cm4gbiA8PSAwID8gMCA6IG4gLSAxICsgKGIudiA/IDEgOiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRqdXN0Rm9yVGFyZ2V0Q29sdW1uKGNlbGw6IENvZExhYmVsQ2VsbCk6IG51bWJlciB7XHJcbiAgICAvLyBhZGQgdGhlIHRhcmdldCBjb2x1bW4gaWYgaXQncyBtaXNzaW5nXHJcbiAgICBpZiAoIXRoaXMuX2NvbHMkLnZhbHVlLmluY2x1ZGVzKGNlbGwuaWQpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29sdW1uKGNlbGwuaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHMkLnZhbHVlLmZpbmRJbmRleCgoaWQpID0+IGlkID09PSBjZWxsLmlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5jUm93UGFnZShwYWdlOiBDb2RSb3dQYWdlKTogdm9pZCB7XHJcbiAgICAvLyBub3BlIGZvciBjb3ZlcnNcclxuICAgIGlmIChcclxuICAgICAgcGFnZS50eXBlID09PSBDb2RSb3dUeXBlLkNvdmVyRnJvbnQgfHxcclxuICAgICAgcGFnZS50eXBlID09PSBDb2RSb3dUeXBlLkNvdmVyQmFja1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFnZS52KSB7XHJcbiAgICAgIHBhZ2UubisrO1xyXG4gICAgICBwYWdlLnYgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhZ2UudiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkanVzdEZvclRhcmdldFJvdyhjZWxsOiBDb2RMYWJlbENlbGwpOiB7XHJcbiAgICByb3dJbmRleDogbnVtYmVyO1xyXG4gICAgcm93czogQ29kUm93Vmlld01vZGVsW107XHJcbiAgfSB8IG51bGwge1xyXG4gICAgLy8gaWYgdGhlIHRhcmdldCByb3cgaXMgYWxyZWFkeSBwcmVzZW50LCBqdXN0IHJldCBpdHMgaW5kZXhcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG4gICAgbGV0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHIpID0+IHIuaWQgPT09IGNlbGwucm93SWQpO1xyXG4gICAgaWYgKHJvd0luZGV4ID4gLTEpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICByb3dJbmRleCxcclxuICAgICAgICByb3dzLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGVsc2UsIGZpcnN0IGxvY2F0ZSB0aGUgbGFzdCByb3cgaGF2aW5nIHRoZSBzYW1lIHR5cGUsXHJcbiAgICAvLyBvciB0aGUgbGFzdCBoYXZpbmcgdGhlIHR5cGUgY29taW5nIGJlZm9yZSB0aGUgdGFyZ2V0IHR5cGVcclxuICAgIGNvbnN0IGIgPSB0aGlzLnBhcnNlUm93SWQoY2VsbC5yb3dJZCk7XHJcbiAgICBpZiAoIWIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByb3dJbmRleCA9IHJvd3MubGVuZ3RoIC0gMTtcclxuICAgIHdoaWxlIChyb3dJbmRleCA+IC0xICYmIHJvd3Nbcm93SW5kZXhdLnR5cGUgPiBiLnR5cGUpIHtcclxuICAgICAgcm93SW5kZXgtLTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSByZWFjaGVkIHRoZSBsYXN0IHJvdyBvZiB0aGUgc2FtZSB0eXBlLCB0aGlzIGlzIHRoZSBBLXRlcm1cclxuICAgIC8vIGZvciBjYWxjdWxhdGluZyBpbnRlcnBvbGF0aW9uIGRlbHRhXHJcbiAgICBsZXQgYTogQ29kUm93UGFnZSB8IG51bGwgPSBudWxsO1xyXG4gICAgaWYgKHJvd0luZGV4ID4gLTEgJiYgcm93c1tyb3dJbmRleF0udHlwZSAhPT0gYi50eXBlKSB7XHJcbiAgICAgIGEgPSB0aGlzLnBhcnNlUm93SWQocm93c1tyb3dJbmRleF0uaWQpO1xyXG4gICAgICBpZiAoIWEpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJvd3Nbcm93SW5kZXhdLnR5cGUgPT09IGIudHlwZSkge1xyXG4gICAgICAgIC8vIHdlIHJlYWNoZWQgdGhlIGxhc3Qgcm93IG9mIHRoZSBzYW1lIHR5cGVcclxuICAgICAgICBpZiAoIWEpIHtcclxuICAgICAgICAgIGEgPSB0aGlzLnBhcnNlUm93SWQocm93c1tyb3dJbmRleF0uaWQpO1xyXG4gICAgICAgICAgaWYgKCFhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBsYXN0IHJvdyBvZiB0aGUgcHJlY2VkaW5nIHR5cGUsIG9yIHRoZSB0b3BcclxuICAgICAgICAvLyB0aGUgQS10ZXJtIGlzIDBcclxuICAgICAgICBhID0ge1xyXG4gICAgICAgICAgbjogMCxcclxuICAgICAgICAgIHY6IHRydWUsXHJcbiAgICAgICAgICB0eXBlOiBiLnR5cGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGludGVycG9sYXRlIHJvd3MgYmV0d2VlbiBhIGFuZCBiIGlmIGFueVxyXG4gICAgY29uc3QgZGVsdGEgPSB0aGlzLmNvdW50Um93c0JldHdlZW4oYSwgYik7XHJcbiAgICBsZXQgaW50ZXJwOiBDb2RSb3dQYWdlID0geyAuLi5hIH07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcclxuICAgICAgLy8gbmV4dCBwYWdlIChlYWNoIHJvdyBpcyBhIHBhZ2UpXHJcbiAgICAgIHJvd0luZGV4Kys7XHJcbiAgICAgIHRoaXMuaW5jUm93UGFnZShpbnRlcnApO1xyXG4gICAgICByb3dzLnNwbGljZShyb3dJbmRleCsrLCAwLCB7XHJcbiAgICAgICAgaWQ6IHRoaXMuYnVpbGRSb3dJZChpbnRlcnAudHlwZSwgaW50ZXJwLm4sIGludGVycC52KSxcclxuICAgICAgICBjb2x1bW5zOiB0aGlzLmdldE5ld0NvbHVtbnMoKSxcclxuICAgICAgICAuLi5pbnRlcnAsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHBvaW50IHRvIHRoZSB0YXJnZXQgcm93XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByb3dJbmRleCxcclxuICAgICAgcm93cyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIHNwZWNpZmllZCBjZWxscyB0byB0aGUgdGFibGUuIEFsbCB0aGUgY2VsbHMgYmVsb25nIHRvIHRoZSBzYW1lXHJcbiAgICogY29sdW1uLCBzcGVjaWZpZWQgYnkgY29sdW1uSWQuIElmIHRoaXMgaXMgbm90IGZvdW5kLCBpdCB3aWxsIGJlIGFkZGVkLlxyXG4gICAqIEFsc28sIGNlbGxzIGFyZSBhIHJhbmdlIG9mIGNvbnNlY3V0aXZlIHNoZWV0cywgZS5nLiAzci01di4gQWxsIHRoZSByb3dzXHJcbiAgICogcHJlY2VkaW5nIHRoZSBmaXJzdCByb3cgb2YgdGhlIHJhbmdlIGJlaW5nIGFkZGVkIGFyZSBpbnNlcnRlZCBpZiB0aGV5XHJcbiAgICogYXJlIG1pc3NpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY2VsbHMgVGhlIGNlbGxzIHRvIGFkZC5cclxuICAgKi9cclxuICBwdWJsaWMgYWRkQ2VsbHMoY2VsbHM6IENvZExhYmVsQ2VsbFtdKTogdm9pZCB7XHJcbiAgICBpZiAoIWNlbGxzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBhZGp1c3QgYW5kIGxvY2F0ZSB0YXJnZXQgY29sdW1uXHJcbiAgICBjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuYWRqdXN0Rm9yVGFyZ2V0Q29sdW1uKGNlbGxzWzBdKTtcclxuXHJcbiAgICAvLyBhZGp1c3QgYW5kIGxvY2F0ZSB0YXJnZXQgcm93XHJcbiAgICBjb25zdCBpciA9IHRoaXMuYWRqdXN0Rm9yVGFyZ2V0Um93KGNlbGxzWzBdKTtcclxuICAgIGlmICghaXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHsgcm93SW5kZXgsIHJvd3MgfSA9IGlyO1xyXG5cclxuICAgIC8vIHNldCBjZWxscyBzdGFydGluZyBmcm9tIDFzdFxyXG4gICAgY29uc3QgcCA9IHRoaXMucGFyc2VSb3dJZChjZWxsc1swXS5yb3dJZCkhO1xyXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSBsaW1pdCBmb3IgdGhlIHRhcmdldCByb3dzIGFyZWFcclxuICAgIGxldCBsaW1pdCA9IHJvd0luZGV4O1xyXG4gICAgd2hpbGUgKGxpbWl0IDwgcm93cy5sZW5ndGggJiYgcm93c1tsaW1pdF0udHlwZSA9PT0gcC50eXBlKSB7XHJcbiAgICAgIGxpbWl0Kys7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyBpZiB0aGUgcm93IGRvZXMgbm90IGV4aXN0LCBhcHBlbmQgaXRcclxuICAgICAgaWYgKHJvd0luZGV4ID49IGxpbWl0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3ZlcmZsb3dEcm9wcGluZykge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvdyA9IHtcclxuICAgICAgICAgIGlkOiBjZWxsc1tpXS5yb3dJZCxcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZ2V0TmV3Q29sdW1ucygpLFxyXG4gICAgICAgICAgLi4ucCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IHJvdy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGNlbGxzWzBdLmlkKTtcclxuICAgICAgICBjb2whLnZhbHVlID0gY2VsbHNbaV0udmFsdWU7XHJcbiAgICAgICAgY29sIS5ub3RlID0gY2VsbHNbaV0ubm90ZTtcclxuICAgICAgICByb3dzLnNwbGljZShyb3dJbmRleCwgMCwgcm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByb3dzW3Jvd0luZGV4XS5jb2x1bW5zW2NvbHVtbkluZGV4XS52YWx1ZSA9IGNlbGxzW2ldLnZhbHVlO1xyXG4gICAgICAgIHJvd3Nbcm93SW5kZXhdLmNvbHVtbnNbY29sdW1uSW5kZXhdLm5vdGUgPSBjZWxsc1tpXS5ub3RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBuZXh0IHBhZ2UgKGVhY2ggcm93IGlzIGEgcGFnZSlcclxuICAgICAgdGhpcy5pbmNSb3dQYWdlKHApO1xyXG4gICAgICByb3dJbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmVcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1Jvd0VtcHR5KHJvdzogQ29kUm93Vmlld01vZGVsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gcm93LmNvbHVtbnMubGVuZ3RoXHJcbiAgICAgID8gcm93LmNvbHVtbnMuZXZlcnkoKGMpID0+ICFjLnZhbHVlICYmICFjLm5vdGUpXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzQ29sdW1uRW1wdHkoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX3Jvd3MkLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChyb3dzW2ldLmNvbHVtbnNbaW5kZXhdLnZhbHVlIHx8IHJvd3NbaV0uY29sdW1uc1tpbmRleF0ubm90ZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmltIHRoZSB0YWJsZSBieSByZW1vdmluZyBhbGwgdGhlIGVtcHR5IHJvd3MgYXQgaXRzIHN0YXJ0L2VuZCxcclxuICAgKiBhbmQgb3B0aW9uYWxseSBhbGwgdGhlIGVtcHR5IGNvbHVtbnMuXHJcbiAgICovXHJcbiAgcHVibGljIHRyaW0oY29sdW1ucyA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAvLyB0cmltIHJvd3NcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG4gICAgLy8gdGFpbFxyXG4gICAgbGV0IGkgPSByb3dzLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAoaSA+IC0xICYmIHRoaXMuaXNSb3dFbXB0eShyb3dzW2ldKSkge1xyXG4gICAgICBpLS07XHJcbiAgICB9XHJcbiAgICBpZiAoaSA9PT0gLTEpIHtcclxuICAgICAgcm93cy5sZW5ndGggPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaGVhZFxyXG4gICAgICBjb25zdCBib3R0b20gPSBpO1xyXG4gICAgICBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCBib3R0b20gJiYgdGhpcy5pc1Jvd0VtcHR5KHJvd3NbaV0pKSB7XHJcbiAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJvd3Muc3BsaWNlKGJvdHRvbSArIDEsIHJvd3MubGVuZ3RoIC0gKGJvdHRvbSArIDEpKTtcclxuICAgICAgcm93cy5zcGxpY2UoMCwgaSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xlYXIgaWYgbm8gbW9yZSByb3dzXHJcbiAgICBpZiAoIXJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX3Jvd3MkLm5leHQoW10pO1xyXG4gICAgICBpZiAoY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuX2NvbHMkLm5leHQoW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0cmltIGNvbHVtbnMgaWYgcmVxdWVzdGVkXHJcbiAgICBpZiAoY29sdW1ucykge1xyXG4gICAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICAgICAgaSA9IHJvd3NbMF0uY29sdW1ucy5sZW5ndGggLSAxO1xyXG4gICAgICB3aGlsZSAoaSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5FbXB0eShpKSkge1xyXG4gICAgICAgICAgY29scy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvd3MubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgcm93c1tqXS5jb2x1bW5zLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaS0tO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2NvbHMkLm5leHQoY29scyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBkYXRlIHJvd3NcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiBhbGwgdGhlIG1hdGNoaW5nIHBhZ2VzIGluIHRoZSBzcGVjaWZpZWQgY29sdW1uLlxyXG4gICAqIElmIGEgdGFyZ2V0IHBhZ2UgZG9lcyBub3QgZXhpc3QsIHRoZSByZXF1ZXN0ZWQgdmFsdWUgc2V0IHdpbGwgbm90IGhhcHBlbi5cclxuICAgKiBAcGFyYW0gY29sdW1uSW5kZXggVGhlIHRhcmdldCBjb2x1bW4gaW5kZXguXHJcbiAgICogQHBhcmFtIHBhZ2VzIFRoZSB0YXJnZXQgcGFnZXMuXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXHJcbiAgICovXHJcbiAgcHVibGljIHNldFBhZ2VWYWx1ZShcclxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXHJcbiAgICBwYWdlczogQ29kUm93UGFnZVtdLFxyXG4gICAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd3MgPSBkZWVwQ29weShbLi4udGhpcy5fcm93cyQudmFsdWVdKSBhcyBDb2RSb3dWaWV3TW9kZWxbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xyXG4gICAgICBjb25zdCBpZCA9IHRoaXMucGFyc2VSb3dJZChyb3cuaWQpO1xyXG4gICAgICBjb25zdCBwYWdlID0gcGFnZXMuZmluZChcclxuICAgICAgICAocCkgPT4gcC50eXBlID09PSBpZD8udHlwZSAmJiBwLm4gPT09IGlkLm4gJiYgcC52ID09PSBpZC52XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChwYWdlKSB7XHJcbiAgICAgICAgcm93LmNvbHVtbnNbY29sdW1uSW5kZXhdLnZhbHVlID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KHJvd3MpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
575
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNoZWV0LXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXBhcnQtY29kaWNvbG9neS1zaGVldC1sYWJlbHMvc3JjL2xpYi9jb2Qtc2hlZXQtdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFLbkQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxVQU1YO0FBTkQsV0FBWSxVQUFVO0lBQ3BCLHVEQUFjLENBQUE7SUFDZCwyREFBWSxDQUFBO0lBQ1osMkNBQUksQ0FBQTtJQUNKLHlEQUFXLENBQUE7SUFDWCxxREFBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLFVBQVUsS0FBVixVQUFVLFFBTXJCO0FBdUJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBOEJ4QjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBdkJEOzs7O09BSUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBUUQ7OztPQUdHO0lBQ0ks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LENBQUMsQ0FBQztTQUN4QjtRQUVELGNBQWM7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWSxDQUNqQixXQUFtQixFQUNuQixLQUFtQixFQUNuQixLQUFnQztRQUVoQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQXNCLENBQUM7UUFDbkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQ3JCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztZQUNGLElBQUksSUFBSSxFQUFFO2dCQUNSLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxTQUFTLENBQUM7YUFDckQ7U0FDRjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZXBDb3B5IH0gZnJvbSAnQG15cm1pZG9uL25nLXRvb2xzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDb2RDb2x1bW4sIENvZFJvdyB9IGZyb20gJy4vY29kLXNoZWV0LWxhYmVscy1wYXJ0JztcclxuaW1wb3J0IHsgQ29kTGFiZWxDZWxsIH0gZnJvbSAnLi9sYWJlbC1nZW5lcmF0b3InO1xyXG5cclxuLyoqXHJcbiAqIFR5cGUgb2YgdGFibGUgcm93LlxyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29kUm93VHlwZSB7XHJcbiAgQ292ZXJGcm9udCA9IDAsXHJcbiAgRW5kbGVhZkZyb250LFxyXG4gIEJvZHksXHJcbiAgRW5kbGVhZkJhY2ssXHJcbiAgQ292ZXJCYWNrLFxyXG59XHJcblxyXG4vKipcclxuICogRGF0YSBhYm91dCBhIHBhZ2UgKD1yb3cpIGluIGEgdGFibGUuIEEgcGFnZSBoYXMgYSB0eXBlXHJcbiAqIChlbmRsZWFmL2JvZHkpLCBhIHNoZWV0IG51bWJlciwgYW5kIGEgcmVjdG8vdmVyc28gZmxhZy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29kUm93UGFnZSB7XHJcbiAgdHlwZTogQ29kUm93VHlwZTtcclxuICBuOiBudW1iZXI7XHJcbiAgdjogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB2aWV3bW9kZWwgb2YgYSB0YWJsZSdzIHJvdy5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29kUm93Vmlld01vZGVsIGV4dGVuZHMgQ29kUm93LCBDb2RSb3dQYWdlIHt9XHJcblxyXG4vKipcclxuICogVGhlIHR5cGVzIG9mIHRhYmxlIGNvbHVtbnM6IHF1aXJlcywgbnVtYmVyaW5ncywgY2F0Y2h3b3JkcyxcclxuICogc2lnbmF0dXJlcywgcmVnaXN0ZXIgc2lnbmF0dXJlcy5cclxuICovXHJcbmV4cG9ydCB0eXBlIENvZENvbHVtblR5cGUgPSAncScgfCAnbicgfCAnYycgfCAncycgfCAncic7XHJcblxyXG4vKipcclxuICogU2hlZXQgbGFiZWxzIHRhYmxlIGRhdGEuIFRoaXMgcmVwcmVzZW50cyB0aGUgdmlld21vZGVsIGZvciB0aGUgc2hlZXRcclxuICogbGFiZWxzIHRhYmxlLiBUaGlzIHRhYmxlIGhhcyAzIHJvd3Mgc2V0cyBmb3IgZnJvbnQgZW5kbGVhdmVzLCBib2R5LFxyXG4gKiBhbmQgYmFjayBlbmRsZWF2ZXMsIGFuZCBhbnkgbnVtYmVyIG9mIGNvbHVtbnMgc2V0cyBmb3IgZWFjaCBvZiB0aGVcclxuICogYXZhaWxhYmxlIHR5cGVzIChxbmNzcikuIFRoZXJlIGNhbiBiZSBvbmx5IDEgY29sdW1uIG9mIHR5cGUgcSwgYWx3YXlzXHJcbiAqIG5hbWVkIFwicVwiOyB3aGVyZWFzIGFsbCB0aGUgb3RoZXIgdHlwZXMgYWxsb3cgYW55IG51bWJlciBvZiBjb2x1bW5zLlxyXG4gKiBUaGUgdGFibGUgaXMgZWRpdGVkIHNvIHRoYXQgd2UgZW5zdXJlIHRoYXQgYWxsIHRoZSByb3dzIGFsd2F5cyBoYXZlXHJcbiAqIHRoZSBzYW1lIGNvbHVtbnMsIGFuZCB0aGVpciBvcmRlciBmb2xsb3dzIHRoZSBydWxlcyBmb3IgYm90aCByb3dzIGFuZFxyXG4gKiBjb2x1bW5zLlxyXG4gKiBSb3dzIGFyZSBzb3J0ZWQgZmlyc3QgYnkgdHlwZTogZnJvbnQgY29udmVyLCBmcm9udCBlbmRsZWFmLCBib2R5LFxyXG4gKiBiYWNrIGVuZGxlYWYsIGJhY2sgY292ZXI7IGFuZCB0aGVuIGJ5IHRoZWlyIHNoZWV0IG51bWJlciBhbmRcclxuICogcmVjdG8vdmVyc28gZmxhZyAoMXIsIDF2LCAyciwgMnYuLi4pLlxyXG4gKiBFbmRsZWF2ZXMgSURzIGZvbGxvdyB0aGUgc2FtZSBwYXR0ZXJuLCBidXQgYXJlIHdyYXBwZWQgaW4gXCIoKVwiIChmcm9udClcclxuICogb3IgXCIoLylcIiAoYmFjaykuIEVhY2ggcm93IGhhcyBhbiBhcnJheSBvZiBjb2x1bW5zLCB3aGljaCBpcyBrZXB0XHJcbiAqIGluIHN5bmNoIGFjcm9zcyBhbGwgdGhlIHJvd3MuXHJcbiAqIEZyb250L2JhY2sgY292ZXJzIGFyZSBtb2RlbGVkIGFzIGEgc3BlY2lhbCBjYXNlIG9mIGVuZGxlYXZlcywgd2hlcmVcclxuICogdGhlIG9ubHkgbWVhbmluZ2Z1bCBsb2NhdGlvbiB2YWx1ZXMgYXJlIHN5c3RlbSwgci92IGFuZCBzdWZmaXguIFRoZXJlXHJcbiAqIGlzIG5vIG51bWJlciwgYXMgYnkgZGVmaW5pdGlvbiBjb3ZlcnMgYXJlIHNpbmdsZS4gRnJvbnQgY292ZXIgYWx3YXlzXHJcbiAqIGNvbWVzIGZpcnN0OyBiYWNrIGNvdmVyIGFsd2F5cyBjb21lcyBsYXN0LlxyXG4gKiBDb2x1bW5zIGFyZSBzb3J0ZWQgZmlyc3QgYnkgdHlwZTogcW5jc3I7IGFuZCB0aGVuIGJ5IHRoZWlyIHN1ZmZpeCxcclxuICogd2hpY2ggb3B0aW9uYWxseSBmb2xsb3dzIHRoZSB0eXBlIGxldHRlciBwbHVzIGEgZG90LiBTbywgXCJxXCIgaXMgdGhlXHJcbiAqIGRlZmF1bHQgKGFuZCB1bmlxdWUpIHF1aXJlIGNvbHVtbjsgXCJuXCIgaXMgdGhlIGRlZmF1bHQgbnVtYmVyaW5nO1xyXG4gKiBcIm4ucm9tYW5cIiBpcyBhbm90aGVyIG51bWJlcmluZzsgZXRjLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvZFNoZWV0VGFibGUge1xyXG4gIHByaXZhdGUgX2NvbHMkOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+O1xyXG4gIHByaXZhdGUgX3Jvd3MkOiBCZWhhdmlvclN1YmplY3Q8Q29kUm93Vmlld01vZGVsW10+O1xyXG4gIHByaXZhdGUgX2NvbFByZWZpeGVzOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB0byBkcm9wIG92ZXJmbG93IHJvd3Mgd2hlbiBhZGRpbmcgY29sdW1uczsgZmFsc2UgdG9cclxuICAgKiBhZGQgbmV3IHJvd3MgdG8gZml0IHRoZW0uXHJcbiAgICovXHJcbiAgcHVibGljIG92ZXJmbG93RHJvcHBpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGFsbCB0aGUgY29sdW1uIElEcyBpbiB0aGUgdGFibGUsIGluIHRoZWlyIG9yZGVyLlxyXG4gICAqIFRhYmxlIGNvbHVtbnMgYXJlIGFycmFuZ2VkIGluIGEgZml4ZWQgb3JkZXI6IGZpcnN0IGJ5IHR5cGUsXHJcbiAgICogdGhlbiBieSB0aGVpciBJRC4gVHlwZSBvcmRlciBpcyBxLCBuLCBjLCBzLCByLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgY29sdW1uSWRzJCgpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29scyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgcm93cyBpbiB0aGUgdGFibGUuIFJvd3MgYXJlIHNvcnRlZCBmaXJzdCBieSB0aGVpciB0eXBlLFxyXG4gICAqIHRoZW4gYnkgdGhlaXIgbnVtYmVyLiBUeXBlIG9yZGVyIGlzIGZyb250LWNvdmVyLCBmcm9udC1lbmRsZWFmLFxyXG4gICAqIGJvZHksIGJhY2stZW5kbGVhZiwgYmFjay1jb3Zlci4gRWFjaCByb3cgaGFzIGFuIElEIGJ1aWx0IG9mIGFcclxuICAgKiBudW1iZXIgKD0wIGZvciBjb3ZlcnMpIGFuZCBhIHIvdiBmbGFnIChmYWxzZSBmb3IgY292ZXJzKS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHJvd3MkKCk6IE9ic2VydmFibGU8Q29kUm93Vmlld01vZGVsW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3dzJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fY29scyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XHJcbiAgICB0aGlzLl9yb3dzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29kUm93Vmlld01vZGVsW10+KFtdKTtcclxuICAgIHRoaXMuX2NvbFByZWZpeGVzID0gWydxJywgJ24nLCAnYycsICdzJywgJ3InXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiBjb2x1bW4gSURzLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIGNvbHVtbiBJRHMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbklkcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uIElELlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgY29sdW1uIElELlxyXG4gICAqIEByZXR1cm5zIFRoZSBjb2x1bW4gaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb2x1bW5JbmRleChpZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xzJC52YWx1ZS5maW5kSW5kZXgoKHMpID0+IHMgPT09IGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgbGlzdCBvZiByb3dzLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJvd3MuXHJcbiAgICovXHJcbiAgcHVibGljIGdldFJvd3MoKTogQ29kUm93Vmlld01vZGVsW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLl9yb3dzJC52YWx1ZV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHJvd3MgYW5kIHRoZWlyIGNvbHVtbnMgaW4gdGhpcyB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dzIFRoZSByb3dzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRSb3dzKHJvd3M6IENvZFJvd1tdKTogdm9pZCB7XHJcbiAgICAvLyBzZXQgY29scyBjb2xsZWN0aW5nIHRoZW0gZnJvbSBhbGwgdGhlIHJvd3NcclxuICAgIGNvbnN0IGNvbHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dzW2ldLmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvd3NbaV0uY29sdW1uc1tqXS5pZDtcclxuICAgICAgICBpZiAoIWNvbHMuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZENvbHVtbklkKGlkLCBjb2xzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2NvbHMkLm5leHQoY29scyk7XHJcblxyXG4gICAgLy8gc2V0IHJvd3NcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoXHJcbiAgICAgIHJvd3MubWFwKChyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucGFyc2VSb3dJZChyLmlkKTtcclxuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5nZXROZXdDb2x1bW5zKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByLmNvbHVtbnM/Lmxlbmd0aCB8fCAwOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGNpID0gY29scy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IHIuY29sdW1uc1tpXS5pZCk7XHJcbiAgICAgICAgICBjb2xzW2NpXS52YWx1ZSA9IHIuY29sdW1uc1tpXS52YWx1ZTtcclxuICAgICAgICAgIGNvbHNbY2ldLm5vdGUgPSByLmNvbHVtbnNbaV0ubm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnBhZ2UsXHJcbiAgICAgICAgICBpZDogci5pZCxcclxuICAgICAgICAgIGNvbHVtbnM6IGNvbHMsXHJcbiAgICAgICAgfSBhcyBDb2RSb3dWaWV3TW9kZWw7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdGhlIGNvbHVtbiBJRCBmcm9tIGl0cyB0eXBlIGFuZCBvcHRpb25hbCBzdWZmaXguXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZSBUaGUgY29sdW1uIHR5cGUuXHJcbiAgICogQHBhcmFtIHN1ZmZpeCBUaGUgb3B0aW9uYWwgc3VmZml4LlxyXG4gICAqIEByZXR1cm5zIFRoZSBjb2x1bW4gSUQuXHJcbiAgICovXHJcbiAgcHVibGljIGJ1aWxkQ29sdW1uSWQodHlwZTogQ29kQ29sdW1uVHlwZSwgc3VmZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdWZmaXggPyBgJHt0eXBlfS4ke3N1ZmZpeH1gIDogdHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHRhYmxlIGhhcyB0aGUgc3BlY2lmaWVkIGNvbHVtbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgY29sdW1uIElELlxyXG4gICAqIEBwYXJhbSB0eXBlT25seSBUcnVlIHRvIGNoZWNrIGZvciB0eXBlIG9ubHkuXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNDb2x1bW4oaWQ6IHN0cmluZywgdHlwZU9ubHkgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IGlkLmNoYXJBdCgwKTtcclxuICAgIHJldHVybiB0aGlzLl9jb2xzJC52YWx1ZS5maW5kKChjKSA9PlxyXG4gICAgICB0eXBlT25seSA/IGMuY2hhckF0KDApID09PSB0eXBlIDogYyA9PT0gaWRcclxuICAgIClcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbHVtbklkKGlkOiBzdHJpbmcsIGNvbHM6IHN0cmluZ1tdKTogbnVtYmVyIHtcclxuICAgIC8vIGluc2VydCB0aGUgbmV3IGNvbCBhdCB0aGUgcmlnaHQgcGxhY2VcclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX2NvbFByZWZpeGVzLmluZGV4T2YoaWQuY2hhckF0KDApKTtcclxuICAgIGxldCBjb2xJbmRleCA9IGNvbHMubGVuZ3RoIC0gMTtcclxuICAgIHdoaWxlIChjb2xJbmRleCA+IC0xKSB7XHJcbiAgICAgIGlmIChwcmVmaXggPj0gdGhpcy5fY29sUHJlZml4ZXMuaW5kZXhPZihjb2xzW2NvbEluZGV4XS5jaGFyQXQoMCkpKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY29sSW5kZXgtLTtcclxuICAgIH1cclxuICAgIGNvbHMuc3BsaWNlKGNvbEluZGV4ICsgMSwgMCwgaWQpO1xyXG4gICAgcmV0dXJuIGNvbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzcGVjaWZpZWQgY29sdW1uIHRvIHRoZSB0YWJsZS4gVGhlIGNvbHVtbiBJRCBpcyBjYWxjdWxhdGVkXHJcbiAgICogZnJvbSBpdHMgdHlwZSBhbmQgc3VmZml4LCBhbmQgaXRzIHBvc2l0aW9uIGlzIGRldGVybWluZWQgYnkgdGhhdCBJRC5cclxuICAgKiBJZiBhIGNvbHVtbiB3aXRoIHRoZSBzYW1lIElEIGFscmVhZHkgZXhpc3RzLCBub3RoaW5nIGlzIGRvbmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBjb2x1bW4gdG8gYWRkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRDb2x1bW4oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NvbHMkLnZhbHVlLmluY2x1ZGVzKGlkKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBpbnNlcnQgdGhlIG5ldyBjb2wgYXQgdGhlIHJpZ2h0IHBsYWNlXHJcbiAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5hZGRDb2x1bW5JZChpZCwgY29scyk7XHJcblxyXG4gICAgLy8gaW5zZXJ0IHRoZSBuZXcgY29sIGluIGVhY2ggcm93XHJcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICByb3dzW2ldLmNvbHVtbnMuc3BsaWNlKGNvbEluZGV4ICsgMSwgMCwge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY29scyQubmV4dChjb2xzKTtcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIHRoZSBjb2x1bW4gd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBjb2x1bW4gSUQuXHJcbiAgICovXHJcbiAgcHVibGljIGRlbGV0ZUNvbHVtbihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuX2NvbHMkLnZhbHVlLmluZGV4T2YoaWQpO1xyXG4gICAgaWYgKGNvbEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMuX2NvbHMkLnZhbHVlXTtcclxuICAgIGNvbHMuc3BsaWNlKGNvbEluZGV4LCAxKTtcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJvd3NbaV0uY29sdW1ucy5zcGxpY2UoY29sSW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbHMkLm5leHQoY29scyk7XHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KGRlZXBDb3B5KHJvd3MpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRSb3dJZCh0eXBlOiBDb2RSb3dUeXBlLCBuOiBudW1iZXIsIHY6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHJ2ID0gdiA/ICd2JyA6ICdyJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIENvZFJvd1R5cGUuQ292ZXJGcm9udDpcclxuICAgICAgICByZXR1cm4gJ1snICsgcnY7XHJcbiAgICAgIGNhc2UgQ29kUm93VHlwZS5Db3ZlckJhY2s6XHJcbiAgICAgICAgcmV0dXJuICdbLycgKyBydjtcclxuICAgICAgY2FzZSBDb2RSb3dUeXBlLkVuZGxlYWZGcm9udDpcclxuICAgICAgICByZXR1cm4gYCgke259JHtydn0pYDtcclxuICAgICAgY2FzZSBDb2RSb3dUeXBlLkVuZGxlYWZCYWNrOlxyXG4gICAgICAgIHJldHVybiBgKC8ke259JHtydn0pYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gYCR7bn0ke3J2fWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5ld0NvbHVtbnMoKTogQ29kQ29sdW1uW10ge1xyXG4gICAgY29uc3QgY29sczogQ29kQ29sdW1uW10gPSBuZXcgQXJyYXkodGhpcy5fY29scyQudmFsdWUubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb2xzW2ldID0ge1xyXG4gICAgICAgIGlkOiB0aGlzLl9jb2xzJC52YWx1ZVtpXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHJvd3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgcm93cyB0byBhcHBlbmQuXHJcbiAgICogQHBhcmFtIGNvdW50IFRoZSBjb3VudCBvZiByb3dzIHRvIGJlIGFwcGVuZGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhcHBlbmRSb3dzKHR5cGU6IENvZFJvd1R5cGUsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG5cclxuICAgIC8vIGNvcm5lciBjYXNlOiBjb3ZlcnMgYXJlIHNpbmdsZVxyXG4gICAgaWYgKHR5cGUgPT09IENvZFJvd1R5cGUuQ292ZXJGcm9udCB8fCB0eXBlID09PSBDb2RSb3dUeXBlLkNvdmVyQmFjaykge1xyXG4gICAgICBpZiAocm93cy5zb21lKChyKSA9PiByLnR5cGUgPT09IHR5cGUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbmRleCA9IHR5cGUgPT09IENvZFJvd1R5cGUuQ292ZXJGcm9udCA/IDAgOiByb3dzLmxlbmd0aDtcclxuICAgICAgY29uc3QgcGFnZTogQ29kUm93UGFnZSA9IHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIG46IDAsXHJcbiAgICAgICAgdjogZmFsc2UsXHJcbiAgICAgIH07XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XHJcbiAgICAgICAgcm93cy5zcGxpY2UoaW5kZXgrKywgMCwge1xyXG4gICAgICAgICAgaWQ6IHRoaXMuYnVpbGRSb3dJZCh0eXBlLCBwYWdlLm4sIHBhZ2UudiksXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmdldE5ld0NvbHVtbnMoKSxcclxuICAgICAgICAgIC4uLnBhZ2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbmNSb3dQYWdlKHBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbG9jYXRlIGxhc3Qgcm93IG9mIHNhbWUgdHlwZVxyXG4gICAgbGV0IGxhc3RSb3dJbmRleCA9IHJvd3MubGVuZ3RoIC0gMTtcclxuICAgIHdoaWxlIChsYXN0Um93SW5kZXggPiAtMSAmJiByb3dzW2xhc3RSb3dJbmRleF0udHlwZSAhPT0gdHlwZSkge1xyXG4gICAgICBsYXN0Um93SW5kZXgtLTtcclxuICAgIH1cclxuICAgIGxldCBwYWdlOiBDb2RSb3dQYWdlO1xyXG4gICAgaWYgKGxhc3RSb3dJbmRleCA+IC0xKSB7XHJcbiAgICAgIHBhZ2UgPSB7XHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICBuOiByb3dzW2xhc3RSb3dJbmRleF0ubixcclxuICAgICAgICB2OiByb3dzW2xhc3RSb3dJbmRleF0udixcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhZ2UgPSB7XHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICBuOiAwLFxyXG4gICAgICAgIHY6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyb3dzLmxlbmd0aCkge1xyXG4gICAgICAgIHdoaWxlIChcclxuICAgICAgICAgIGxhc3RSb3dJbmRleCA8IHJvd3MubGVuZ3RoIC0gMSAmJlxyXG4gICAgICAgICAgdHlwZSA+IHJvd3NbbGFzdFJvd0luZGV4ICsgMV0udHlwZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGFzdFJvd0luZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgIC8vIG5leHQgcGFnZSAoZWFjaCByb3cgaXMgYSBwYWdlKVxyXG4gICAgICB0aGlzLmluY1Jvd1BhZ2UocGFnZSk7XHJcbiAgICAgIHJvd3Muc3BsaWNlKCsrbGFzdFJvd0luZGV4LCAwLCB7XHJcbiAgICAgICAgaWQ6IHRoaXMuYnVpbGRSb3dJZCh0eXBlLCBwYWdlLm4sIHBhZ2UudiksXHJcbiAgICAgICAgY29sdW1uczogdGhpcy5nZXROZXdDb2x1bW5zKCksXHJcbiAgICAgICAgLi4ucGFnZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcm93cyQubmV4dChkZWVwQ29weShyb3dzKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHNwZWNpZmllZCBjZWxsIGluIHRoZSB0YWJsZS4gSWYgdGhlIGNlbGwgaXMgbm90IGZvdW5kLFxyXG4gICAqIG5vdGhpbmcgaXMgZG9uZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjZWxsIFRoZSBjZWxsIHRvIHVwZGF0ZS5cclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlQ2VsbChjZWxsOiBDb2RMYWJlbENlbGwpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fcm93cyQudmFsdWVdO1xyXG4gICAgY29uc3Qgcm93SW5kZXggPSByb3dzLmZpbmRJbmRleCgocikgPT4gci5pZCA9PT0gY2VsbC5yb3dJZCk7XHJcbiAgICBpZiAocm93SW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy5fcm93cyQudmFsdWVbcm93SW5kZXhdLmNvbHVtbnNdO1xyXG4gICAgY29uc3QgY29sSW5kZXggPSBjb2xzLmZpbmRJbmRleCgoYykgPT4gYy5pZCA9PT0gY2VsbC5pZCk7XHJcbiAgICBpZiAoY29sSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbHMuc3BsaWNlKGNvbEluZGV4LCAxLCB7XHJcbiAgICAgIGlkOiBjZWxsLmlkLFxyXG4gICAgICB2YWx1ZTogY2VsbC52YWx1ZSxcclxuICAgICAgbm90ZTogY2VsbC5ub3RlLFxyXG4gICAgfSk7XHJcbiAgICByb3dzW3Jvd0luZGV4XS5jb2x1bW5zID0gY29scztcclxuICAgIHRoaXMuX3Jvd3MkLm5leHQoZGVlcENvcHkocm93cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZVJvd0lkKHJvd0lkOiBzdHJpbmcpOiBDb2RSb3dQYWdlIHwgbnVsbCB7XHJcbiAgICBjb25zdCBtID0gLyhbW1xcKF0pPyhcXC8pPyhbMC05XSspKFtydl0pLy5leGVjKHJvd0lkKTtcclxuICAgIGlmICghbSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIHR5cGU6XHJcbiAgICBsZXQgdHlwZTogQ29kUm93VHlwZTtcclxuICAgIC8vIGlzIHRoZXJlICggb3IgWz9cclxuICAgIGlmIChtWzFdKSB7XHJcbiAgICAgIGlmIChtWzFdID09PSAnKCcpIHtcclxuICAgICAgICAvLyAoLyBvciAoXHJcbiAgICAgICAgdHlwZSA9IG1bMl0gPyBDb2RSb3dUeXBlLkVuZGxlYWZCYWNrIDogQ29kUm93VHlwZS5FbmRsZWFmRnJvbnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gWy8gb3IgW1xyXG4gICAgICAgIHR5cGUgPSBtWzJdID8gQ29kUm93VHlwZS5Db3ZlckJhY2sgOiBDb2RSb3dUeXBlLkNvdmVyRnJvbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHR5cGUgPSBDb2RSb3dUeXBlLkJvZHk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICBuOiArbVszXSxcclxuICAgICAgdjogbVs0XSA9PT0gJ3YnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY291bnRSb3dzQmV0d2VlbihhOiBDb2RSb3dQYWdlLCBiOiBDb2RSb3dQYWdlKTogbnVtYmVyIHtcclxuICAgIC8vIHdlIGFzc3VtZSB0aGF0IGEvYiBiZWxvbmcgdG8gdGhlIHNhbWUgdHlwZVxyXG4gICAgY29uc3QgbiA9IGIubiAtIGEubjtcclxuICAgIHJldHVybiBuIDw9IDAgPyAwIDogbiAtIDEgKyAoYi52ID8gMSA6IDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RGb3JUYXJnZXRDb2x1bW4oY2VsbDogQ29kTGFiZWxDZWxsKTogbnVtYmVyIHtcclxuICAgIC8vIGFkZCB0aGUgdGFyZ2V0IGNvbHVtbiBpZiBpdCdzIG1pc3NpbmdcclxuICAgIGlmICghdGhpcy5fY29scyQudmFsdWUuaW5jbHVkZXMoY2VsbC5pZCkpIHtcclxuICAgICAgdGhpcy5hZGRDb2x1bW4oY2VsbC5pZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fY29scyQudmFsdWUuZmluZEluZGV4KChpZCkgPT4gaWQgPT09IGNlbGwuaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmNSb3dQYWdlKHBhZ2U6IENvZFJvd1BhZ2UpOiB2b2lkIHtcclxuICAgIC8vIG9ubHkgci92IGZvciBjb3ZlcnNcclxuICAgIGlmIChcclxuICAgICAgcGFnZS50eXBlID09PSBDb2RSb3dUeXBlLkNvdmVyRnJvbnQgfHxcclxuICAgICAgcGFnZS50eXBlID09PSBDb2RSb3dUeXBlLkNvdmVyQmFja1xyXG4gICAgKSB7XHJcbiAgICAgIGlmICghcGFnZS52KSB7XHJcbiAgICAgICAgcGFnZS52ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhZ2Uudikge1xyXG4gICAgICBwYWdlLm4rKztcclxuICAgICAgcGFnZS52ID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYWdlLnYgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGp1c3RGb3JUYXJnZXRSb3coY2VsbDogQ29kTGFiZWxDZWxsKToge1xyXG4gICAgcm93SW5kZXg6IG51bWJlcjtcclxuICAgIHJvd3M6IENvZFJvd1ZpZXdNb2RlbFtdO1xyXG4gIH0gfCBudWxsIHtcclxuICAgIC8vIGlmIHRoZSB0YXJnZXQgcm93IGlzIGFscmVhZHkgcHJlc2VudCwganVzdCByZXQgaXRzIGluZGV4XHJcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXTtcclxuICAgIGxldCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyKSA9PiByLmlkID09PSBjZWxsLnJvd0lkKTtcclxuICAgIGlmIChyb3dJbmRleCA+IC0xKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcm93SW5kZXgsXHJcbiAgICAgICAgcm93cyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlbHNlLCBmaXJzdCBsb2NhdGUgdGhlIGxhc3Qgcm93IGhhdmluZyB0aGUgc2FtZSB0eXBlLFxyXG4gICAgLy8gb3IgdGhlIGxhc3QgaGF2aW5nIHRoZSB0eXBlIGNvbWluZyBiZWZvcmUgdGhlIHRhcmdldCB0eXBlXHJcbiAgICBjb25zdCBiID0gdGhpcy5wYXJzZVJvd0lkKGNlbGwucm93SWQpO1xyXG4gICAgaWYgKCFiKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcm93SW5kZXggPSByb3dzLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAocm93SW5kZXggPiAtMSAmJiByb3dzW3Jvd0luZGV4XS50eXBlID4gYi50eXBlKSB7XHJcbiAgICAgIHJvd0luZGV4LS07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgd2UgcmVhY2hlZCB0aGUgbGFzdCByb3cgb2YgdGhlIHNhbWUgdHlwZSwgdGhpcyBpcyB0aGUgQS10ZXJtXHJcbiAgICAvLyBmb3IgY2FsY3VsYXRpbmcgaW50ZXJwb2xhdGlvbiBkZWx0YVxyXG4gICAgbGV0IGE6IENvZFJvd1BhZ2UgfCBudWxsID0gbnVsbDtcclxuICAgIGlmIChyb3dJbmRleCA+IC0xICYmIHJvd3Nbcm93SW5kZXhdLnR5cGUgIT09IGIudHlwZSkge1xyXG4gICAgICBhID0gdGhpcy5wYXJzZVJvd0lkKHJvd3Nbcm93SW5kZXhdLmlkKTtcclxuICAgICAgaWYgKCFhKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChyb3dzW3Jvd0luZGV4XS50eXBlID09PSBiLnR5cGUpIHtcclxuICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBsYXN0IHJvdyBvZiB0aGUgc2FtZSB0eXBlXHJcbiAgICAgICAgaWYgKCFhKSB7XHJcbiAgICAgICAgICBhID0gdGhpcy5wYXJzZVJvd0lkKHJvd3Nbcm93SW5kZXhdLmlkKTtcclxuICAgICAgICAgIGlmICghYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gd2UgcmVhY2hlZCB0aGUgbGFzdCByb3cgb2YgdGhlIHByZWNlZGluZyB0eXBlLCBvciB0aGUgdG9wXHJcbiAgICAgICAgLy8gdGhlIEEtdGVybSBpcyAwXHJcbiAgICAgICAgYSA9IHtcclxuICAgICAgICAgIG46IDAsXHJcbiAgICAgICAgICB2OiB0cnVlLFxyXG4gICAgICAgICAgdHlwZTogYi50eXBlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnRlcnBvbGF0ZSByb3dzIGJldHdlZW4gYSBhbmQgYiBpZiBhbnlcclxuICAgIGNvbnN0IGRlbHRhID0gdGhpcy5jb3VudFJvd3NCZXR3ZWVuKGEsIGIpO1xyXG4gICAgbGV0IGludGVycDogQ29kUm93UGFnZSA9IHsgLi4uYSB9O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7XHJcbiAgICAgIC8vIG5leHQgcGFnZSAoZWFjaCByb3cgaXMgYSBwYWdlKVxyXG4gICAgICByb3dJbmRleCsrO1xyXG4gICAgICB0aGlzLmluY1Jvd1BhZ2UoaW50ZXJwKTtcclxuICAgICAgcm93cy5zcGxpY2Uocm93SW5kZXgrKywgMCwge1xyXG4gICAgICAgIGlkOiB0aGlzLmJ1aWxkUm93SWQoaW50ZXJwLnR5cGUsIGludGVycC5uLCBpbnRlcnAudiksXHJcbiAgICAgICAgY29sdW1uczogdGhpcy5nZXROZXdDb2x1bW5zKCksXHJcbiAgICAgICAgLi4uaW50ZXJwLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwb2ludCB0byB0aGUgdGFyZ2V0IHJvd1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcm93SW5kZXgsXHJcbiAgICAgIHJvd3MsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzcGVjaWZpZWQgY2VsbHMgdG8gdGhlIHRhYmxlLiBBbGwgdGhlIGNlbGxzIGJlbG9uZyB0byB0aGUgc2FtZVxyXG4gICAqIGNvbHVtbiwgc3BlY2lmaWVkIGJ5IGNvbHVtbklkLiBJZiB0aGlzIGlzIG5vdCBmb3VuZCwgaXQgd2lsbCBiZSBhZGRlZC5cclxuICAgKiBBbHNvLCBjZWxscyBhcmUgYSByYW5nZSBvZiBjb25zZWN1dGl2ZSBzaGVldHMsIGUuZy4gM3ItNXYuIEFsbCB0aGUgcm93c1xyXG4gICAqIHByZWNlZGluZyB0aGUgZmlyc3Qgcm93IG9mIHRoZSByYW5nZSBiZWluZyBhZGRlZCBhcmUgaW5zZXJ0ZWQgaWYgdGhleVxyXG4gICAqIGFyZSBtaXNzaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNlbGxzIFRoZSBjZWxscyB0byBhZGQuXHJcbiAgICovXHJcbiAgcHVibGljIGFkZENlbGxzKGNlbGxzOiBDb2RMYWJlbENlbGxbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFjZWxscy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gYWRqdXN0IGFuZCBsb2NhdGUgdGFyZ2V0IGNvbHVtblxyXG4gICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmFkanVzdEZvclRhcmdldENvbHVtbihjZWxsc1swXSk7XHJcblxyXG4gICAgLy8gYWRqdXN0IGFuZCBsb2NhdGUgdGFyZ2V0IHJvd1xyXG4gICAgY29uc3QgaXIgPSB0aGlzLmFkanVzdEZvclRhcmdldFJvdyhjZWxsc1swXSk7XHJcbiAgICBpZiAoIWlyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB7IHJvd0luZGV4LCByb3dzIH0gPSBpcjtcclxuXHJcbiAgICAvLyBzZXQgY2VsbHMgc3RhcnRpbmcgZnJvbSAxc3RcclxuICAgIGNvbnN0IHAgPSB0aGlzLnBhcnNlUm93SWQoY2VsbHNbMF0ucm93SWQpITtcclxuICAgIC8vIGRldGVybWluZSB0aGUgbGltaXQgZm9yIHRoZSB0YXJnZXQgcm93cyBhcmVhXHJcbiAgICBsZXQgbGltaXQgPSByb3dJbmRleDtcclxuICAgIHdoaWxlIChsaW1pdCA8IHJvd3MubGVuZ3RoICYmIHJvd3NbbGltaXRdLnR5cGUgPT09IHAudHlwZSkge1xyXG4gICAgICBsaW1pdCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gaWYgdGhlIHJvdyBkb2VzIG5vdCBleGlzdCwgYXBwZW5kIGl0XHJcbiAgICAgIGlmIChyb3dJbmRleCA+PSBsaW1pdCkge1xyXG4gICAgICAgIGlmICh0aGlzLm92ZXJmbG93RHJvcHBpbmcpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByb3cgPSB7XHJcbiAgICAgICAgICBpZDogY2VsbHNbaV0ucm93SWQsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmdldE5ld0NvbHVtbnMoKSxcclxuICAgICAgICAgIC4uLnAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb2wgPSByb3cuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjZWxsc1swXS5pZCk7XHJcbiAgICAgICAgY29sIS52YWx1ZSA9IGNlbGxzW2ldLnZhbHVlO1xyXG4gICAgICAgIGNvbCEubm90ZSA9IGNlbGxzW2ldLm5vdGU7XHJcbiAgICAgICAgcm93cy5zcGxpY2Uocm93SW5kZXgsIDAsIHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcm93c1tyb3dJbmRleF0uY29sdW1uc1tjb2x1bW5JbmRleF0udmFsdWUgPSBjZWxsc1tpXS52YWx1ZTtcclxuICAgICAgICByb3dzW3Jvd0luZGV4XS5jb2x1bW5zW2NvbHVtbkluZGV4XS5ub3RlID0gY2VsbHNbaV0ubm90ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbmV4dCBwYWdlIChlYWNoIHJvdyBpcyBhIHBhZ2UpXHJcbiAgICAgIHRoaXMuaW5jUm93UGFnZShwKTtcclxuICAgICAgcm93SW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICAvLyBzYXZlXHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KGRlZXBDb3B5KHJvd3MpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNSb3dFbXB0eShyb3c6IENvZFJvd1ZpZXdNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHJvdy5jb2x1bW5zLmxlbmd0aFxyXG4gICAgICA/IHJvdy5jb2x1bW5zLmV2ZXJ5KChjKSA9PiAhYy52YWx1ZSAmJiAhYy5ub3RlKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkVtcHR5KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLl9yb3dzJC52YWx1ZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAocm93c1tpXS5jb2x1bW5zW2luZGV4XS52YWx1ZSB8fCByb3dzW2ldLmNvbHVtbnNbaW5kZXhdLm5vdGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpbSB0aGUgdGFibGUgYnkgcmVtb3ZpbmcgYWxsIHRoZSBlbXB0eSByb3dzIGF0IGl0cyBzdGFydC9lbmQsXHJcbiAgICogYW5kIG9wdGlvbmFsbHkgYWxsIHRoZSBlbXB0eSBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmltKGNvbHVtbnMgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgLy8gdHJpbSByb3dzXHJcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXTtcclxuICAgIC8vIHRhaWxcclxuICAgIGxldCBpID0gcm93cy5sZW5ndGggLSAxO1xyXG4gICAgd2hpbGUgKGkgPiAtMSAmJiB0aGlzLmlzUm93RW1wdHkocm93c1tpXSkpIHtcclxuICAgICAgaS0tO1xyXG4gICAgfVxyXG4gICAgaWYgKGkgPT09IC0xKSB7XHJcbiAgICAgIHJvd3MubGVuZ3RoID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGhlYWRcclxuICAgICAgY29uc3QgYm90dG9tID0gaTtcclxuICAgICAgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgYm90dG9tICYmIHRoaXMuaXNSb3dFbXB0eShyb3dzW2ldKSkge1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgICByb3dzLnNwbGljZShib3R0b20gKyAxLCByb3dzLmxlbmd0aCAtIChib3R0b20gKyAxKSk7XHJcbiAgICAgIHJvd3Muc3BsaWNlKDAsIGkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGlmIG5vIG1vcmUgcm93c1xyXG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLl9yb3dzJC5uZXh0KFtdKTtcclxuICAgICAgaWYgKGNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLl9jb2xzJC5uZXh0KFtdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHJpbSBjb2x1bW5zIGlmIHJlcXVlc3RlZFxyXG4gICAgaWYgKGNvbHVtbnMpIHtcclxuICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLl9jb2xzJC52YWx1ZV07XHJcbiAgICAgIGkgPSByb3dzWzBdLmNvbHVtbnMubGVuZ3RoIC0gMTtcclxuICAgICAgd2hpbGUgKGkgPiAtMSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sdW1uRW1wdHkoaSkpIHtcclxuICAgICAgICAgIGNvbHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHJvd3Nbal0uY29sdW1ucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGktLTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9jb2xzJC5uZXh0KGNvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSByb3dzXHJcbiAgICB0aGlzLl9yb3dzJC5uZXh0KGRlZXBDb3B5KHJvd3MpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgdmFsdWUgb2YgYWxsIHRoZSBtYXRjaGluZyBwYWdlcyBpbiB0aGUgc3BlY2lmaWVkIGNvbHVtbi5cclxuICAgKiBJZiBhIHRhcmdldCBwYWdlIGRvZXMgbm90IGV4aXN0LCB0aGUgcmVxdWVzdGVkIHZhbHVlIHNldCB3aWxsIG5vdCBoYXBwZW4uXHJcbiAgICogQHBhcmFtIGNvbHVtbkluZGV4IFRoZSB0YXJnZXQgY29sdW1uIGluZGV4LlxyXG4gICAqIEBwYXJhbSBwYWdlcyBUaGUgdGFyZ2V0IHBhZ2VzLlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRQYWdlVmFsdWUoXHJcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxyXG4gICAgcGFnZXM6IENvZFJvd1BhZ2VbXSxcclxuICAgIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dzID0gZGVlcENvcHkoWy4uLnRoaXMuX3Jvd3MkLnZhbHVlXSkgYXMgQ29kUm93Vmlld01vZGVsW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcclxuICAgICAgY29uc3QgaWQgPSB0aGlzLnBhcnNlUm93SWQocm93LmlkKTtcclxuICAgICAgY29uc3QgcGFnZSA9IHBhZ2VzLmZpbmQoXHJcbiAgICAgICAgKHApID0+IHAudHlwZSA9PT0gaWQ/LnR5cGUgJiYgcC5uID09PSBpZC5uICYmIHAudiA9PT0gaWQudlxyXG4gICAgICApO1xyXG4gICAgICBpZiAocGFnZSkge1xyXG4gICAgICAgIHJvdy5jb2x1bW5zW2NvbHVtbkluZGV4XS52YWx1ZSA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcm93cyQubmV4dChyb3dzKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -605,8 +605,8 @@ var CodRowType;
|
|
|
605
605
|
* or "(/)" (back). Each row has an array of columns, which is kept
|
|
606
606
|
* in synch across all the rows.
|
|
607
607
|
* Front/back covers are modeled as a special case of endleaves, where
|
|
608
|
-
* the only meaningful location values are system and suffix. There
|
|
609
|
-
* no number, as by definition covers are single. Front cover always
|
|
608
|
+
* the only meaningful location values are system, r/v and suffix. There
|
|
609
|
+
* is no number, as by definition covers are single. Front cover always
|
|
610
610
|
* comes first; back cover always comes last.
|
|
611
611
|
* Columns are sorted first by type: qncsr; and then by their suffix,
|
|
612
612
|
* which optionally follows the type letter plus a dot. So, "q" is the
|
|
@@ -771,9 +771,9 @@ class CodSheetTable {
|
|
|
771
771
|
const rv = v ? 'v' : 'r';
|
|
772
772
|
switch (type) {
|
|
773
773
|
case CodRowType.CoverFront:
|
|
774
|
-
return '[';
|
|
774
|
+
return '[' + rv;
|
|
775
775
|
case CodRowType.CoverBack:
|
|
776
|
-
return '[/';
|
|
776
|
+
return '[/' + rv;
|
|
777
777
|
case CodRowType.EndleafFront:
|
|
778
778
|
return `(${n}${rv})`;
|
|
779
779
|
case CodRowType.EndleafBack:
|
|
@@ -804,7 +804,18 @@ class CodSheetTable {
|
|
|
804
804
|
if (rows.some((r) => r.type === type)) {
|
|
805
805
|
return;
|
|
806
806
|
}
|
|
807
|
-
|
|
807
|
+
let index = type === CodRowType.CoverFront ? 0 : rows.length;
|
|
808
|
+
const page = {
|
|
809
|
+
type: type,
|
|
810
|
+
n: 0,
|
|
811
|
+
v: false,
|
|
812
|
+
};
|
|
813
|
+
for (let i = 0; i < 2; i++) {
|
|
814
|
+
rows.splice(index++, 0, Object.assign({ id: this.buildRowId(type, page.n, page.v), columns: this.getNewColumns() }, page));
|
|
815
|
+
this.incRowPage(page);
|
|
816
|
+
}
|
|
817
|
+
this._rows$.next(deepCopy(rows));
|
|
818
|
+
return;
|
|
808
819
|
}
|
|
809
820
|
// locate last row of same type
|
|
810
821
|
let lastRowIndex = rows.length - 1;
|
|
@@ -904,9 +915,12 @@ class CodSheetTable {
|
|
|
904
915
|
return this._cols$.value.findIndex((id) => id === cell.id);
|
|
905
916
|
}
|
|
906
917
|
incRowPage(page) {
|
|
907
|
-
//
|
|
918
|
+
// only r/v for covers
|
|
908
919
|
if (page.type === CodRowType.CoverFront ||
|
|
909
920
|
page.type === CodRowType.CoverBack) {
|
|
921
|
+
if (!page.v) {
|
|
922
|
+
page.v = true;
|
|
923
|
+
}
|
|
910
924
|
return;
|
|
911
925
|
}
|
|
912
926
|
if (page.v) {
|