@libs-ui/services-grid-layout 0.2.357-23 → 0.2.357-25
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/canvas/grid-layout-canvas.component.d.ts +23 -0
- package/defines/collision.define.d.ts +1 -1
- package/drag-controller.d.ts +1 -1
- package/esm2022/canvas/grid-layout-canvas.component.mjs +49 -8
- package/esm2022/defines/collision.define.mjs +5 -3
- package/esm2022/drag-controller.mjs +5 -3
- package/esm2022/grid-layout.service.mjs +63 -6
- package/esm2022/interfaces/grid-layout.interface.mjs +1 -1
- package/esm2022/tree.service.mjs +15 -2
- package/fesm2022/libs-ui-services-grid-layout.mjs +132 -17
- package/fesm2022/libs-ui-services-grid-layout.mjs.map +1 -1
- package/grid-layout.service.d.ts +38 -2
- package/interfaces/grid-layout.interface.d.ts +35 -0
- package/package.json +3 -3
package/esm2022/tree.service.mjs
CHANGED
|
@@ -49,7 +49,20 @@ export class LibsUiGridLayoutTreeService {
|
|
|
49
49
|
// 🔴 Thư viện tự sinh `id`. Đây là mã máy dùng để tra cứu, không phải thứ người dùng nghĩ ra —
|
|
50
50
|
// bắt họ tự đặt là mời họ tạo trùng, mà trùng id thì `findById` trả nhầm khối và cả cây hỏng
|
|
51
51
|
// im lặng (người dùng chốt 28/08/2026).
|
|
52
|
-
|
|
52
|
+
// 🔴 Mặc định VẪN tự xếp xuống hàng trống kế tiếp — giữ nguyên hành vi cũ.
|
|
53
|
+
//
|
|
54
|
+
// Chỉ khi nơi dùng bật `keepPosition` mới giữ `x`/`y` truyền vào. CẤM suy ra ý định từ chính giá
|
|
55
|
+
// trị toạ độ (kiểu `item.y ?? ...`): `y: 0` là giá trị hợp lệ và cũng là thứ mọi hàm dựng node
|
|
56
|
+
// điền sẵn, nên không tài nào phân biệt "người ta muốn đặt ở hàng 0" với "người ta không quan
|
|
57
|
+
// tâm" — đoán sai là khối mới ĐÈ lên khối đang có.
|
|
58
|
+
const node = {
|
|
59
|
+
...item,
|
|
60
|
+
id: item.id ?? uuid(),
|
|
61
|
+
x: item.keepPosition ? (item.x ?? 0) : 0,
|
|
62
|
+
y: item.keepPosition ? (item.y ?? 0) : this.nextFreeRow(parent.children),
|
|
63
|
+
};
|
|
64
|
+
// Cờ điều khiển, không phải dữ liệu của khối — không để nó nằm lại trong cây.
|
|
65
|
+
delete node.keepPosition;
|
|
53
66
|
parent.children.push(node);
|
|
54
67
|
// Trả về khối vừa tạo để nơi dùng biết `id` thư viện vừa sinh.
|
|
55
68
|
return node;
|
|
@@ -196,4 +209,4 @@ export class LibsUiGridLayoutTreeService {
|
|
|
196
209
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiGridLayoutTreeService, decorators: [{
|
|
197
210
|
type: Injectable
|
|
198
211
|
}] });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUV4RTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxRQUFRLENBQUMsSUFBdUIsRUFBRSxFQUFVO1FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QixFQUFFLEVBQVU7UUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsSUFBdUIsRUFBRSxRQUFnQixFQUFFLElBQTBCO1FBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3hDLCtGQUErRjtRQUMvRiw2RkFBNkY7UUFDN0Ysd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxHQUFzQixFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFFL0csTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsK0RBQStEO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQ2pCLElBQXVCLEVBQ3ZCLFFBQTRCLEVBQzVCLElBQTBCLEVBQzFCLFNBQVMsR0FBRyxDQUFDLEVBQ2IsU0FBUyxHQUFHLENBQUM7UUFFYixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFckUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxZQUFZLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3BELE1BQU0sSUFBSSxHQUFzQjtZQUM5QixHQUFHLElBQUk7WUFDUCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDckIsQ0FBQyxFQUFFLFNBQVM7WUFDWixDQUFDLEVBQUUsU0FBUztTQUNiLENBQUM7UUFFRiwwQkFBMEIsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxVQUFVLENBQUMsSUFBdUIsRUFBRSxFQUFVO1FBQzVDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLElBQXVCLEVBQUUsRUFBVSxFQUFFLFFBQWdCO1FBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLElBQXVCLEVBQUUsRUFBVTtRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFekMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsMEJBQTBCLENBQUMsSUFBdUIsRUFBRSxRQUFnQjtRQUNsRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFDLElBQXVCLEVBQUUsUUFBZ0I7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUF1QixFQUFFLFFBQWdCO1FBQzNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFckIsS0FBSyxNQUFNLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFNUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUM7Z0JBQ2hELFVBQVUsSUFBSSxZQUFZLENBQUM7Z0JBQzNCLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsUUFBUSxJQUFJLEtBQUssQ0FBQztZQUNsQixZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQXVCLEVBQUUsY0FBc0IsRUFBRSxRQUFnQjtRQUNuRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUE2QixFQUFFLENBQUM7UUFFNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV0RCxJQUFJLFdBQVcsSUFBSSxjQUFjLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzlDLFVBQVUsSUFBSSxDQUFDLENBQUM7Z0JBRWhCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztnQkFFRCxTQUFTO1lBQ1gsQ0FBQztZQUVELFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUV2QixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQWtDO1FBQ3BELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7d0dBN09VLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRfZ3JpZExheW91dF9uZXdOb2RlLCBUX2dyaWRMYXlvdXRfbm9kZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9ncmlkLWxheW91dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQgfSBmcm9tICcuL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZSc7XG5cbi8qKlxuICogVGhhbyB0w6FjIHRyw6puIGPDonkga2jhu5FpOiB0w6xtLCB0aMOqbSwgeG/DoSwgZOG7k24ga2jDrXQsIGNo4bq3biBs4buTbmcgY+G6pXAgcXXDoSBzw6J1LlxuICpcbiAqIPCflLQgTuG7mEkgQuG7mCB0aMawIHZp4buHbiDigJQga2jDtG5nIHh14bqldCByYSBuZ2/DoGkuIE7GoWkgZMO5bmcgxJFpIHF1YSBgTGlic1VpR3JpZExheW91dFNlcnZpY2VgLCDhu58gxJHDsyBt4buXaVxuICogdGhhbyB0w6FjIHPhu61hIGLhu5EgY+G7pWMgduG7q2EgduG6vSBs4bqhaSB24burYSBi4bqvbiBgb3V0Q2hhbmdlYCDEkcO6bmcgTeG7mFQgbOG6p24uIEPDoWMgaMOgbSDhu58gxJHDonkgY+G7kSB0w6xuaCBLSMOUTkcgdOG7sVxuICogduG6vSBs4bqhaTogxJHhu4MgY2jDum5nIHThu7EgZ+G7jWkgdGjDrCBt4buXaSB0aGFvIHTDoWMgduG6vSBoYWkgbMaw4bujdCB2w6AgYuG6r24gaGFpIHPhu7Ega2nhu4duIChuZ8aw4budaSBkw7luZyBjaOG7kXRcbiAqIDI4LzA4LzIwMjY6IFwixJHhurd0IMSRw7puZyBjw6FjIMSRaeG7g20gbcOgIGzDoG0gY2hvIGxheW91dCBjw7MgdGjhu4MgdGhheSDEkeG7lWkgdGjDtGlcIikuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMaWJzVWlHcmlkTGF5b3V0VHJlZVNlcnZpY2Uge1xuICBmaW5kQnlJZChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgaWQ6IHN0cmluZyk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRCeUlkKGNoaWxkLCBpZCk7XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZpbmRQYXJlbnQobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICBpZiAoY2hpbGQuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFBhcmVudChjaGlsZCwgaWQpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGjDqm0ga2jhu5FpIHbDoG8gY3Xhu5FpIG3hu5l0IGNvbnRhaW5lci4gVGjGsCB2aeG7h24gdOG7sSBzaW5oIGBpZGAgdsOgIHThu7EgxJHhurd0IGB4YCDCtyBgeWAgeHXhu5FuZyBow6BuZyB0cuG7kW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyBraOG7kWkgduG7q2EgdOG6oW8gKGvDqG0gYGlkYCB24burYSBzaW5oKSwgaG/hurdjIGB1bmRlZmluZWRgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkgY29udGFpbmVyLlxuICAgKi9cbiAgYWRkQ2hpbGQocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIHBhcmVudElkOiBzdHJpbmcsIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZEJ5SWQocm9vdCwgcGFyZW50SWQpO1xuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcGFyZW50LmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuID8/IFtdO1xuICAgIC8vIPCflLQgVGjGsCB2aeG7h24gdOG7sSBzaW5oIGBpZGAuIMSQw6J5IGzDoCBtw6MgbcOheSBkw7luZyDEkeG7gyB0cmEgY+G7qXUsIGtow7RuZyBwaOG6o2kgdGjhu6kgbmfGsOG7nWkgZMO5bmcgbmdoxKkgcmEg4oCUXG4gICAgLy8gYuG6r3QgaOG7jSB04buxIMSR4bq3dCBsw6AgbeG7nWkgaOG7jSB04bqhbyB0csO5bmcsIG3DoCB0csO5bmcgaWQgdGjDrCBgZmluZEJ5SWRgIHRy4bqjIG5o4bqnbSBraOG7kWkgdsOgIGPhuqMgY8OieSBo4buPbmdcbiAgICAvLyBpbSBs4bq3bmcgKG5nxrDhu51pIGTDuW5nIGNo4buRdCAyOC8wOC8yMDI2KS5cbiAgICBjb25zdCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSA9IHsgLi4uaXRlbSwgaWQ6IGl0ZW0uaWQgPz8gdXVpZCgpLCB4OiAwLCB5OiB0aGlzLm5leHRGcmVlUm93KHBhcmVudC5jaGlsZHJlbikgfTtcblxuICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuXG4gICAgLy8gVHLhuqMgduG7gSBraOG7kWkgduG7q2EgdOG6oW8gxJHhu4MgbsahaSBkw7luZyBiaeG6v3QgYGlkYCB0aMawIHZp4buHbiB24burYSBzaW5oLlxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIGto4buRaSB2w6BvIHbhu4sgdHLDrSAoeCwgeSkgY+G7pSB0aOG7gyB2w6AgdOG7sSDEkeG7mW5nIMSR4bqpeSBjw6FjIGto4buRaSB2YSBjaOG6oW0geHXhu5FuZyBkxrDhu5tpLlxuICAgKi9cbiAgaW5zZXJ0V2l0aENvbGxpc2lvbihcbiAgICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgICBwYXJlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IFRfZ3JpZExheW91dF9uZXdOb2RlLFxuICAgIHRhcmdldENvbCA9IDAsXG4gICAgdGFyZ2V0Um93ID0gMCxcbiAgKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHBhcmVudElkID8gdGhpcy5maW5kQnlJZChyb290LCBwYXJlbnRJZCkgOiByb290O1xuXG4gICAgaWYgKCF0YXJnZXRQYXJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGFyZ2V0UGFyZW50LmNoaWxkcmVuID0gdGFyZ2V0UGFyZW50LmNoaWxkcmVuID8/IFtdO1xuICAgIGNvbnN0IG5vZGU6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlkOiBpdGVtLmlkID8/IHV1aWQoKSxcbiAgICAgIHg6IHRhcmdldENvbCxcbiAgICAgIHk6IHRhcmdldFJvdyxcbiAgICB9O1xuXG4gICAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQodGFyZ2V0UGFyZW50LmNoaWxkcmVuLCBub2RlKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqIFhvw6EgbeG7mXQga2jhu5FpIGto4buPaSBjw6J5LiBLaMO0bmcgY2hvIHhvw6EgZ+G7kWMuICovXG4gIHJlbW92ZUJ5SWQocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAocm9vdC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQocm9vdCwgaWQpO1xuXG4gICAgaWYgKCFwYXJlbnQ/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcGFyZW50LmNoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gaWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2h1eeG7g24gbeG7mXQga2jhu5FpIMSRxqFuIHRow6BuaCBDT05UQUlORVI6IG7hu5lpIGR1bmcgY8WpIHRy4bufIHRow6BuaCBraOG7kWkgY29uIMSR4bqndSB0acOqbi5cbiAgICpcbiAgICogS2jDtG5nIG3huqV0IGThu68gbGnhu4d1IOKAlCBgZGF0YWAgY+G7p2Ega2jhu5FpIMSRxrDhu6NjIG1hbmcgdGhlbyB4deG7kW5nIGto4buRaSBjb24uXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBraOG7kWksIGhv4bq3YyBraOG7kWkgxJHDoyBsw6AgY29udGFpbmVyIHLhu5NpLlxuICAgKi9cbiAgdG9Db250YWluZXIocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcsIGNvbENvdW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kQnlJZChyb290LCBpZCk7XG5cbiAgICBpZiAoIW5vZGUgfHwgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuID0gW3sgLi4ubm9kZSwgaWQ6IHV1aWQoKSwgeDogMCwgeTogMCwgY29sczogY29sQ291bnQsIHJvd3M6IDQsIGNoaWxkcmVuOiBbXSB9XTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENodXnhu4NuIG3hu5l0IENPTlRBSU5FUiB24buBIGto4buRaSDEkcahbjogY8OhYyBraOG7kWkgY29uIMSRxrDhu6NjIE7Dgk5HIGzDqm4gY+G6pXAgdHLDqm4sIGtow7RuZyBi4buLIHhvw6EuXG4gICAqXG4gICAqIEByZXR1cm5zIGBmYWxzZWAga2hpIGtow7RuZyB0w6xtIHRo4bqleSBraOG7kWksIGhv4bq3YyBraOG7kWkgduG7kW4ga2jDtG5nIHBo4bqjaSBjb250YWluZXIuXG4gICAqL1xuICB0b1NpbmdsZShyb290OiBUX2dyaWRMYXlvdXRfbm9kZSwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRCeUlkKHJvb3QsIGlkKTtcblxuICAgIGlmICghbm9kZSB8fCAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KHJvb3QsIGlkKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgcGFyZW50Py5jaGlsZHJlbj8ucHVzaCh7IC4uLmNoaWxkLCBjb2xzOiBub2RlLmNvbHMsIHJvd3M6IDIgfSk7XG4gICAgfVxuXG4gICAgbm9kZS5jaGlsZHJlbiA9IFtdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTMOgbSBwaOG6s25nIG3hu41pIGNvbnRhaW5lciBs4buTbmcgdsaw4bujdCB0cuG6p24uXG4gICAqXG4gICAqIPCflLQgQ+G6p24gdGhp4bq/dCB2w6wgYuG7kSBj4bulYyDEkMODIEzGr1Uga2jDtG5nIMSRaSBxdWEgbHXhuq10IGNo4bq3biBuw6BvIGPhu6dhIGdpYW8gZGnhu4duLiBN4buZdCBi4bqjbiBsxrB1IGPFqSDigJQgc2luaFxuICAgKiB0csaw4bubYyBraGkgY8OzIHRy4bqnbiwgaG/hurdjIGRvIHRoYW8gdMOhYyBs4buXaSDigJQgduG6q24gbuG6oXAgdGjhurNuZyB2w6BvIHbDoCBoaeG7h24gY29udGFpbmVyIGzhu5NuZyBjb250YWluZXIuXG4gICAqIENvbnRhaW5lciB2xrDhu6N0IHRy4bqnbiBi4buLIGjhuqEgdGjDoG5oIGto4buRaSB0aMaw4budbmcsIGNvbiBj4bunYSBuw7MgbsOibmcgbMOqbiBj4bqlcCB0csOqbjogS0jDlE5HIG3huqV0IGThu68gbGnhu4d1LlxuICAgKlxuICAgKiBAcmV0dXJucyBz4buRIGNvbnRhaW5lciDEkcOjIGzDoG0gcGjhurNuZ1xuICAgKi9cbiAgZmxhdHRlbk92ZXJEZXB0aENvbnRhaW5lcnMobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIG1heERlcHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndhbGtGbGF0dGVuKG5vZGUsIDAsIG1heERlcHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBE4buTbiBraOG7kWkga2jDrXQgbMOqbiB0csOqbiB0aGVvIHRo4bupIHThu7EgxJHhu41jLCBs4bqlcCBo4bq/dCBjaOG7lyB0cuG7kW5nLlxuICAgKlxuICAgKiDwn5S0IEtIw5RORyBz4butYSBgbm9kZS5yb3dzYCBj4bunYSBjb250YWluZXIuIENoaeG7gXUgY2FvIGNvbnRhaW5lciB0w61uaCB0aGVvIMSRxqFuIHbhu4sgaMOgbmcgY+G7p2EgbMaw4bubaSBDSEEsXG4gICAqIGPDsm4gYGN1cnJlbnRSb3dgIMSR4bq/bSB0aGVvIMSRxqFuIHbhu4sgaMOgbmcgY+G7p2EgbMaw4bubaSBDT04g4oCUIHRy4buZbiBoYWkgdGhhbmcgxJFvIGzDoCBjb250YWluZXIgcGjDrG5oIGzDqm5cbiAgICogZ+G6pXAgbeG6pXkgbOG6p24uXG4gICAqL1xuICBjb21wYWN0KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy53YWxrQ29tcGFjdChub2RlLCBjb2xDb3VudCk7XG4gIH1cblxuICBwcml2YXRlIHdhbGtDb21wYWN0KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuXG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5SZWFkaW5nT3JkZXIgPSBbLi4uY2hpbGRyZW5dLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSB8fCBhLnggLSBiLngpO1xuICAgIGxldCBjdXJyZW50Um93ID0gMDtcbiAgICBsZXQgdXNlZENvbHMgPSAwO1xuICAgIGxldCB0YWxsZXN0SW5Sb3cgPSAwO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGluUmVhZGluZ09yZGVyKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKGl0ZW0uY29scywgY29sQ291bnQpO1xuXG4gICAgICBpZiAodXNlZENvbHMgPiAwICYmIHVzZWRDb2xzICsgd2lkdGggPiBjb2xDb3VudCkge1xuICAgICAgICBjdXJyZW50Um93ICs9IHRhbGxlc3RJblJvdztcbiAgICAgICAgdXNlZENvbHMgPSAwO1xuICAgICAgICB0YWxsZXN0SW5Sb3cgPSAwO1xuICAgICAgfVxuXG4gICAgICBpdGVtLnggPSB1c2VkQ29scztcbiAgICAgIGl0ZW0ueSA9IGN1cnJlbnRSb3c7XG4gICAgICBpdGVtLmNvbHMgPSB3aWR0aDtcbiAgICAgIHVzZWRDb2xzICs9IHdpZHRoO1xuICAgICAgdGFsbGVzdEluUm93ID0gTWF0aC5tYXgodGFsbGVzdEluUm93LCBpdGVtLnJvd3MpO1xuXG4gICAgICBpZiAoKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgdGhpcy53YWxrQ29tcGFjdChpdGVtLCBjb2xDb3VudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3YWxrRmxhdHRlbihub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29udGFpbmVyRGVwdGg6IG51bWJlciwgbWF4RGVwdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuXG4gICAgaWYgKCFjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgZml4ZWRDb3VudCA9IDA7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUX2dyaWRMYXlvdXRfbm9kZT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGlzQ29udGFpbmVyID0gKGNoaWxkLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwO1xuXG4gICAgICBpZiAoaXNDb250YWluZXIgJiYgY29udGFpbmVyRGVwdGggPj0gbWF4RGVwdGgpIHtcbiAgICAgICAgZml4ZWRDb3VudCArPSAxO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGlsZC5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgICAgIGZpeGVkQ291bnQgKz0gdGhpcy53YWxrRmxhdHRlbihpdGVtLCBjb250YWluZXJEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZpeGVkQ291bnQgKz0gdGhpcy53YWxrRmxhdHRlbihjaGlsZCwgaXNDb250YWluZXIgPyBjb250YWluZXJEZXB0aCArIDEgOiBjb250YWluZXJEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4gPSByZXN1bHQ7XG5cbiAgICByZXR1cm4gZml4ZWRDb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dEZyZWVSb3coY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPik6IG51bWJlciB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLnJlZHVjZSgobWF4LCBjaGlsZCkgPT4gTWF0aC5tYXgobWF4LCBjaGlsZC55ICsgY2hpbGQucm93cyksIDApO1xuICB9XG59XG4iXX0=
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9ncmlkLWxheW91dC9zcmMvdHJlZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUV4RTs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxRQUFRLENBQUMsSUFBdUIsRUFBRSxFQUFVO1FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QixFQUFFLEVBQVU7UUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFB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LElBQUksY0FBYyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM5QyxVQUFVLElBQUksQ0FBQyxDQUFDO2dCQUVoQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3hDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQsU0FBUztZQUNYLENBQUM7WUFFRCxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFFdkIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxRQUFrQztRQUNwRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO3dHQTNQVSwyQkFBMkI7NEdBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUX2dyaWRMYXlvdXRfbmV3Tm9kZSwgVF9ncmlkTGF5b3V0X25vZGUgfSBmcm9tICcuL2ludGVyZmFjZXMvZ3JpZC1sYXlvdXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IHJlc29sdmVDb2xsaXNpb25zQW5kSW5zZXJ0IH0gZnJvbSAnLi9kZWZpbmVzL2NvbGxpc2lvbi5kZWZpbmUnO1xuXG4vKipcbiAqIFRoYW8gdMOhYyB0csOqbiBjw6J5IGto4buRaTogdMOsbSwgdGjDqm0sIHhvw6EsIGThu5NuIGtow610LCBjaOG6t24gbOG7k25nIGPhuqVwIHF1w6Egc8OidS5cbiAqXG4gKiDwn5S0IE7hu5hJIELhu5ggdGjGsCB2aeG7h24g4oCUIGtow7RuZyB4deG6pXQgcmEgbmdvw6BpLiBOxqFpIGTDuW5nIMSRaSBxdWEgYExpYnNVaUdyaWRMYXlvdXRTZXJ2aWNlYCwg4bufIMSRw7MgbeG7l2lcbiAqIHRoYW8gdMOhYyBz4butYSBi4buRIGPhu6VjIHbhu6thIHbhur0gbOG6oWkgduG7q2EgYuG6r24gYG91dENoYW5nZWAgxJHDum5nIE3hu5hUIGzhuqduLiBDw6FjIGjDoG0g4bufIMSRw6J5IGPhu5EgdMOsbmggS0jDlE5HIHThu7FcbiAqIHbhur0gbOG6oWk6IMSR4buDIGNow7puZyB04buxIGfhu41pIHRow6wgbeG7l2kgdGhhbyB0w6FjIHbhur0gaGFpIGzGsOG7o3QgdsOgIGLhuq9uIGhhaSBz4buxIGtp4buHbiAobmfGsOG7nWkgZMO5bmcgY2jhu5F0XG4gKiAyOC8wOC8yMDI2OiBcIsSR4bq3dCDEkcO6bmcgY8OhYyDEkWnhu4NtIG3DoCBsw6BtIGNobyBsYXlvdXQgY8OzIHRo4buDIHRoYXkgxJHhu5VpIHRow7RpXCIpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTGlic1VpR3JpZExheW91dFRyZWVTZXJ2aWNlIHtcbiAgZmluZEJ5SWQobm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG5vZGUuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kQnlJZChjaGlsZCwgaWQpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmaW5kUGFyZW50KG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nKTogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgaWYgKGNoaWxkLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRQYXJlbnQoY2hpbGQsIGlkKTtcblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRow6ptIGto4buRaSB2w6BvIGN14buRaSBt4buZdCBjb250YWluZXIuIFRoxrAgdmnhu4duIHThu7Egc2luaCBgaWRgIHbDoCB04buxIMSR4bq3dCBgeGAgwrcgYHlgIHh14buRbmcgaMOgbmcgdHLhu5FuZy5cbiAgICpcbiAgICogQHJldHVybnMga2jhu5FpIHbhu6thIHThuqFvIChrw6htIGBpZGAgduG7q2Egc2luaCksIGhv4bq3YyBgdW5kZWZpbmVkYCBraGkga2jDtG5nIHTDrG0gdGjhuqV5IGNvbnRhaW5lci5cbiAgICovXG4gIGFkZENoaWxkKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBwYXJlbnRJZDogc3RyaW5nLCBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRCeUlkKHJvb3QsIHBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHBhcmVudC5jaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbiA/PyBbXTtcbiAgICAvLyDwn5S0IFRoxrAgdmnhu4duIHThu7Egc2luaCBgaWRgLiDEkMOieSBsw6AgbcOjIG3DoXkgZMO5bmcgxJHhu4MgdHJhIGPhu6l1LCBraMO0bmcgcGjhuqNpIHRo4bupIG5nxrDhu51pIGTDuW5nIG5naMSpIHJhIOKAlFxuICAgIC8vIGLhuq90IGjhu40gdOG7sSDEkeG6t3QgbMOgIG3hu51pIGjhu40gdOG6oW8gdHLDuW5nLCBtw6AgdHLDuW5nIGlkIHRow6wgYGZpbmRCeUlkYCB0cuG6oyBuaOG6p20ga2jhu5FpIHbDoCBj4bqjIGPDonkgaOG7j25nXG4gICAgLy8gaW0gbOG6t25nIChuZ8aw4budaSBkw7luZyBjaOG7kXQgMjgvMDgvMjAyNikuXG4gICAgLy8g8J+UtCBN4bq3YyDEkeG7i25oIFbhuqpOIHThu7EgeOG6v3AgeHXhu5FuZyBow6BuZyB0cuG7kW5nIGvhur8gdGnhur9wIOKAlCBnaeG7ryBuZ3V5w6puIGjDoG5oIHZpIGPFqS5cbiAgICAvL1xuICAgIC8vIENo4buJIGtoaSBuxqFpIGTDuW5nIGLhuq10IGBrZWVwUG9zaXRpb25gIG3hu5tpIGdp4buvIGB4YC9geWAgdHJ1eeG7gW4gdsOgby4gQ+G6pE0gc3V5IHJhIMO9IMSR4buLbmggdOG7qyBjaMOtbmggZ2nDoVxuICAgIC8vIHRy4buLIHRv4bqhIMSR4buZIChraeG7g3UgYGl0ZW0ueSA/PyAuLi5gKTogYHk6IDBgIGzDoCBnacOhIHRy4buLIGjhu6NwIGzhu4cgdsOgIGPFqW5nIGzDoCB0aOG7qSBt4buNaSBow6BtIGThu7FuZyBub2RlXG4gICAgLy8gxJFp4buBbiBz4bq1biwgbsOqbiBraMO0bmcgdMOgaSBuw6BvIHBow6JuIGJp4buHdCBcIm5nxrDhu51pIHRhIG114buRbiDEkeG6t3Qg4bufIGjDoG5nIDBcIiB24bubaSBcIm5nxrDhu51pIHRhIGtow7RuZyBxdWFuXG4gICAgLy8gdMOibVwiIOKAlCDEkW/DoW4gc2FpIGzDoCBraOG7kWkgbeG7m2kgxJDDiCBsw6puIGto4buRaSDEkWFuZyBjw7MuXG4gICAgY29uc3Qgbm9kZTogVF9ncmlkTGF5b3V0X25vZGUgPSB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgaWQ6IGl0ZW0uaWQgPz8gdXVpZCgpLFxuICAgICAgeDogaXRlbS5rZWVwUG9zaXRpb24gPyAoaXRlbS54ID8/IDApIDogMCxcbiAgICAgIHk6IGl0ZW0ua2VlcFBvc2l0aW9uID8gKGl0ZW0ueSA/PyAwKSA6IHRoaXMubmV4dEZyZWVSb3cocGFyZW50LmNoaWxkcmVuKSxcbiAgICB9O1xuXG4gICAgLy8gQ+G7nSDEkWnhu4F1IGtoaeG7g24sIGtow7RuZyBwaOG6o2kgZOG7ryBsaeG7h3UgY+G7p2Ega2jhu5FpIOKAlCBraMO0bmcgxJHhu4MgbsOzIG7hurFtIGzhuqFpIHRyb25nIGPDonkuXG4gICAgZGVsZXRlIChub2RlIGFzIFBhcnRpYWw8VF9ncmlkTGF5b3V0X25ld05vZGU+KS5rZWVwUG9zaXRpb247XG5cbiAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcblxuICAgIC8vIFRy4bqjIHbhu4Ega2jhu5FpIHbhu6thIHThuqFvIMSR4buDIG7GoWkgZMO5bmcgYmnhur90IGBpZGAgdGjGsCB2aeG7h24gduG7q2Egc2luaC5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaMOqbSBraOG7kWkgdsOgbyB24buLIHRyw60gKHgsIHkpIGPhu6UgdGjhu4MgdsOgIHThu7EgxJHhu5luZyDEkeG6qXkgY8OhYyBraOG7kWkgdmEgY2jhuqFtIHh14buRbmcgZMaw4bubaS5cbiAgICovXG4gIGluc2VydFdpdGhDb2xsaXNpb24oXG4gICAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGUsXG4gICAgcGFyZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgICB0YXJnZXRDb2wgPSAwLFxuICAgIHRhcmdldFJvdyA9IDAsXG4gICk6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSBwYXJlbnRJZCA/IHRoaXMuZmluZEJ5SWQocm9vdCwgcGFyZW50SWQpIDogcm9vdDtcblxuICAgIGlmICghdGFyZ2V0UGFyZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRhcmdldFBhcmVudC5jaGlsZHJlbiA9IHRhcmdldFBhcmVudC5jaGlsZHJlbiA/PyBbXTtcbiAgICBjb25zdCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSA9IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpZDogaXRlbS5pZCA/PyB1dWlkKCksXG4gICAgICB4OiB0YXJnZXRDb2wsXG4gICAgICB5OiB0YXJnZXRSb3csXG4gICAgfTtcblxuICAgIHJlc29sdmVDb2xsaXNpb25zQW5kSW5zZXJ0KHRhcmdldFBhcmVudC5jaGlsZHJlbiwgbm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKiBYb8OhIG3hu5l0IGto4buRaSBraOG7j2kgY8OieS4gS2jDtG5nIGNobyB4b8OhIGfhu5FjLiAqL1xuICByZW1vdmVCeUlkKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHJvb3QuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KHJvb3QsIGlkKTtcblxuICAgIGlmICghcGFyZW50Py5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHBhcmVudC5jaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENodXnhu4NuIG3hu5l0IGto4buRaSDEkcahbiB0aMOgbmggQ09OVEFJTkVSOiBu4buZaSBkdW5nIGPFqSB0cuG7nyB0aMOgbmgga2jhu5FpIGNvbiDEkeG6p3UgdGnDqm4uXG4gICAqXG4gICAqIEtow7RuZyBt4bqldCBk4buvIGxp4buHdSDigJQgYGRhdGFgIGPhu6dhIGto4buRaSDEkcaw4bujYyBtYW5nIHRoZW8geHXhu5FuZyBraOG7kWkgY29uLlxuICAgKlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkga2jhu5FpLCBob+G6t2Mga2jhu5FpIMSRw6MgbMOgIGNvbnRhaW5lciBy4buTaS5cbiAgICovXG4gIHRvQ29udGFpbmVyKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLCBpZDogc3RyaW5nLCBjb2xDb3VudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEJ5SWQocm9vdCwgaWQpO1xuXG4gICAgaWYgKCFub2RlIHx8IChub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbm9kZS5jaGlsZHJlbiA9IFt7IC4uLm5vZGUsIGlkOiB1dWlkKCksIHg6IDAsIHk6IDAsIGNvbHM6IGNvbENvdW50LCByb3dzOiA0LCBjaGlsZHJlbjogW10gfV07XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaHV54buDbiBt4buZdCBDT05UQUlORVIgduG7gSBraOG7kWkgxJHGoW46IGPDoWMga2jhu5FpIGNvbiDEkcaw4bujYyBOw4JORyBsw6puIGPhuqVwIHRyw6puLCBraMO0bmcgYuG7iyB4b8OhLlxuICAgKlxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGtoaSBraMO0bmcgdMOsbSB0aOG6pXkga2jhu5FpLCBob+G6t2Mga2jhu5FpIHbhu5FuIGtow7RuZyBwaOG6o2kgY29udGFpbmVyLlxuICAgKi9cbiAgdG9TaW5nbGUocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kQnlJZChyb290LCBpZCk7XG5cbiAgICBpZiAoIW5vZGUgfHwgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChyb290LCBpZCk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgIHBhcmVudD8uY2hpbGRyZW4/LnB1c2goeyAuLi5jaGlsZCwgY29sczogbm9kZS5jb2xzLCByb3dzOiAyIH0pO1xuICAgIH1cblxuICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEzDoG0gcGjhurNuZyBt4buNaSBjb250YWluZXIgbOG7k25nIHbGsOG7o3QgdHLhuqduLlxuICAgKlxuICAgKiDwn5S0IEPhuqduIHRoaeG6v3QgdsOsIGLhu5EgY+G7pWMgxJDDgyBMxq9VIGtow7RuZyDEkWkgcXVhIGx14bqtdCBjaOG6t24gbsOgbyBj4bunYSBnaWFvIGRp4buHbi4gTeG7mXQgYuG6o24gbMawdSBjxakg4oCUIHNpbmhcbiAgICogdHLGsOG7m2Mga2hpIGPDsyB0cuG6p24sIGhv4bq3YyBkbyB0aGFvIHTDoWMgbOG7l2kg4oCUIHbhuqtuIG7huqFwIHRo4bqzbmcgdsOgbyB2w6AgaGnhu4duIGNvbnRhaW5lciBs4buTbmcgY29udGFpbmVyLlxuICAgKiBDb250YWluZXIgdsaw4bujdCB0cuG6p24gYuG7iyBo4bqhIHRow6BuaCBraOG7kWkgdGjGsOG7nW5nLCBjb24gY+G7p2EgbsOzIG7Dom5nIGzDqm4gY+G6pXAgdHLDqm46IEtIw5RORyBt4bqldCBk4buvIGxp4buHdS5cbiAgICpcbiAgICogQHJldHVybnMgc+G7kSBjb250YWluZXIgxJHDoyBsw6BtIHBo4bqzbmdcbiAgICovXG4gIGZsYXR0ZW5PdmVyRGVwdGhDb250YWluZXJzKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlLCBtYXhEZXB0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53YWxrRmxhdHRlbihub2RlLCAwLCBtYXhEZXB0aCk7XG4gIH1cblxuICAvKipcbiAgICogROG7k24ga2jhu5FpIGtow610IGzDqm4gdHLDqm4gdGhlbyB0aOG7qSB04buxIMSR4buNYywgbOG6pXAgaOG6v3QgY2jhu5cgdHLhu5FuZy5cbiAgICpcbiAgICog8J+UtCBLSMOUTkcgc+G7rWEgYG5vZGUucm93c2AgY+G7p2EgY29udGFpbmVyLiBDaGnhu4F1IGNhbyBjb250YWluZXIgdMOtbmggdGhlbyDEkcahbiB24buLIGjDoG5nIGPhu6dhIGzGsOG7m2kgQ0hBLFxuICAgKiBjw7JuIGBjdXJyZW50Um93YCDEkeG6v20gdGhlbyDEkcahbiB24buLIGjDoG5nIGPhu6dhIGzGsOG7m2kgQ09OIOKAlCB0cuG7mW4gaGFpIHRoYW5nIMSRbyBsw6AgY29udGFpbmVyIHBow6xuaCBsw6puXG4gICAqIGfhuqVwIG3huqV5IGzhuqduLlxuICAgKi9cbiAgY29tcGFjdChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMud2Fsa0NvbXBhY3Qobm9kZSwgY29sQ291bnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWxrQ29tcGFjdChub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcblxuICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluUmVhZGluZ09yZGVyID0gWy4uLmNoaWxkcmVuXS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkgfHwgYS54IC0gYi54KTtcbiAgICBsZXQgY3VycmVudFJvdyA9IDA7XG4gICAgbGV0IHVzZWRDb2xzID0gMDtcbiAgICBsZXQgdGFsbGVzdEluUm93ID0gMDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpblJlYWRpbmdPcmRlcikge1xuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihpdGVtLmNvbHMsIGNvbENvdW50KTtcblxuICAgICAgaWYgKHVzZWRDb2xzID4gMCAmJiB1c2VkQ29scyArIHdpZHRoID4gY29sQ291bnQpIHtcbiAgICAgICAgY3VycmVudFJvdyArPSB0YWxsZXN0SW5Sb3c7XG4gICAgICAgIHVzZWRDb2xzID0gMDtcbiAgICAgICAgdGFsbGVzdEluUm93ID0gMDtcbiAgICAgIH1cblxuICAgICAgaXRlbS54ID0gdXNlZENvbHM7XG4gICAgICBpdGVtLnkgPSBjdXJyZW50Um93O1xuICAgICAgaXRlbS5jb2xzID0gd2lkdGg7XG4gICAgICB1c2VkQ29scyArPSB3aWR0aDtcbiAgICAgIHRhbGxlc3RJblJvdyA9IE1hdGgubWF4KHRhbGxlc3RJblJvdywgaXRlbS5yb3dzKTtcblxuICAgICAgaWYgKChpdGVtLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkgPiAwKSB7XG4gICAgICAgIHRoaXMud2Fsa0NvbXBhY3QoaXRlbSwgY29sQ291bnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2Fsa0ZsYXR0ZW4obm9kZTogVF9ncmlkTGF5b3V0X25vZGUsIGNvbnRhaW5lckRlcHRoOiBudW1iZXIsIG1heERlcHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcblxuICAgIGlmICghY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkQ291bnQgPSAwO1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBpc0NvbnRhaW5lciA9IChjaGlsZC5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuICAgICAgaWYgKGlzQ29udGFpbmVyICYmIGNvbnRhaW5lckRlcHRoID49IG1heERlcHRoKSB7XG4gICAgICAgIGZpeGVkQ291bnQgKz0gMTtcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2hpbGQuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgICBmaXhlZENvdW50ICs9IHRoaXMud2Fsa0ZsYXR0ZW4oaXRlbSwgY29udGFpbmVyRGVwdGgsIG1heERlcHRoKTtcbiAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmaXhlZENvdW50ICs9IHRoaXMud2Fsa0ZsYXR0ZW4oY2hpbGQsIGlzQ29udGFpbmVyID8gY29udGFpbmVyRGVwdGggKyAxIDogY29udGFpbmVyRGVwdGgsIG1heERlcHRoKTtcbiAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICB9XG5cbiAgICBub2RlLmNoaWxkcmVuID0gcmVzdWx0O1xuXG4gICAgcmV0dXJuIGZpeGVkQ291bnQ7XG4gIH1cblxuICBwcml2YXRlIG5leHRGcmVlUm93KGNoaWxkcmVuOiBBcnJheTxUX2dyaWRMYXlvdXRfbm9kZT4pOiBudW1iZXIge1xuICAgIHJldHVybiBjaGlsZHJlbi5yZWR1Y2UoKG1heCwgY2hpbGQpID0+IE1hdGgubWF4KG1heCwgY2hpbGQueSArIGNoaWxkLnJvd3MpLCAwKTtcbiAgfVxufVxuIl19
|