@esotericsoftware/spine-canvas 4.2.115 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CanvasTexture.d.ts +1 -1
- package/dist/CanvasTexture.js +1 -1
- package/dist/SkeletonRenderer.d.ts +1 -1
- package/dist/SkeletonRenderer.js +72 -63
- package/dist/esm/spine-canvas.min.mjs +2 -2
- package/dist/esm/spine-canvas.mjs +7861 -6291
- package/dist/esm/spine-canvas.mjs.map +4 -4
- package/dist/iife/spine-canvas.js +7861 -6291
- package/dist/iife/spine-canvas.js.map +4 -4
- package/dist/iife/spine-canvas.min.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
package/dist/CanvasTexture.d.ts
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { Texture, TextureFilter, TextureWrap } from "@esotericsoftware/spine-core";
|
|
29
|
+
import { Texture, type TextureFilter, type TextureWrap } from "@esotericsoftware/spine-core";
|
|
30
30
|
export declare class CanvasTexture extends Texture {
|
|
31
31
|
constructor(image: HTMLImageElement | ImageBitmap);
|
|
32
32
|
setFilters(minFilter: TextureFilter, magFilter: TextureFilter): void;
|
package/dist/CanvasTexture.js
CHANGED
|
@@ -35,4 +35,4 @@ export class CanvasTexture extends Texture {
|
|
|
35
35
|
setWraps(uWrap, vWrap) { }
|
|
36
36
|
dispose() { }
|
|
37
37
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzVGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DYW52YXNUZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsT0FBTyxFQUF3QyxNQUFNLDhCQUE4QixDQUFDO0FBRTdGLE1BQU0sT0FBTyxhQUFjLFNBQVEsT0FBTztJQUN6QyxZQUFhLEtBQXFDO1FBQ2pELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUUsU0FBd0IsRUFBRSxTQUF3QixJQUFJLENBQUM7SUFDbkUsUUFBUSxDQUFFLEtBQWtCLEVBQUUsS0FBa0IsSUFBSSxDQUFDO0lBQ3JELE9BQU8sS0FBTSxDQUFDO0NBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IFRleHR1cmUsIHR5cGUgVGV4dHVyZUZpbHRlciwgdHlwZSBUZXh0dXJlV3JhcCB9IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNUZXh0dXJlIGV4dGVuZHMgVGV4dHVyZSB7XG5cdGNvbnN0cnVjdG9yIChpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwKSB7XG5cdFx0c3VwZXIoaW1hZ2UpO1xuXHR9XG5cblx0c2V0RmlsdGVycyAobWluRmlsdGVyOiBUZXh0dXJlRmlsdGVyLCBtYWdGaWx0ZXI6IFRleHR1cmVGaWx0ZXIpIHsgfVxuXHRzZXRXcmFwcyAodVdyYXA6IFRleHR1cmVXcmFwLCB2V3JhcDogVGV4dHVyZVdyYXApIHsgfVxuXHRkaXNwb3NlICgpIHsgfVxufVxuIl19
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import { Skeleton } from "@esotericsoftware/spine-core";
|
|
29
|
+
import { type Skeleton } from "@esotericsoftware/spine-core";
|
|
30
30
|
export declare class SkeletonRenderer {
|
|
31
31
|
static QUAD_TRIANGLES: number[];
|
|
32
32
|
static VERTEX_SIZE: number;
|
package/dist/SkeletonRenderer.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
27
27
|
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
*****************************************************************************/
|
|
29
|
-
import {
|
|
29
|
+
import { Color, MeshAttachment, RegionAttachment, Utils } from "@esotericsoftware/spine-core";
|
|
30
30
|
const worldVertices = Utils.newFloatArray(8);
|
|
31
31
|
export class SkeletonRenderer {
|
|
32
32
|
static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
|
|
@@ -46,36 +46,41 @@ export class SkeletonRenderer {
|
|
|
46
46
|
this.drawImages(skeleton);
|
|
47
47
|
}
|
|
48
48
|
drawImages(skeleton) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
const ctx = this.ctx;
|
|
50
|
+
const color = this.tempColor;
|
|
51
|
+
const skeletonColor = skeleton.color;
|
|
52
|
+
const drawOrder = skeleton.drawOrder.appliedPose;
|
|
53
53
|
if (this.debugRendering)
|
|
54
54
|
ctx.strokeStyle = "green";
|
|
55
55
|
for (let i = 0, n = drawOrder.length; i < n; i++) {
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
const slot = drawOrder[i];
|
|
57
|
+
const bone = slot.bone;
|
|
58
58
|
if (!bone.active)
|
|
59
59
|
continue;
|
|
60
|
-
|
|
60
|
+
const pose = slot.appliedPose;
|
|
61
|
+
const attachment = pose.attachment;
|
|
61
62
|
if (!(attachment instanceof RegionAttachment))
|
|
62
63
|
continue;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
const sequence = attachment.sequence;
|
|
65
|
+
const sequenceIndex = sequence.resolveIndex(pose);
|
|
66
|
+
attachment.computeWorldVertices(slot, attachment.getOffsets(pose), worldVertices, 0, 2);
|
|
67
|
+
const region = sequence.regions[sequenceIndex];
|
|
68
|
+
const image = region.texture.getImage();
|
|
69
|
+
const slotColor = pose.color;
|
|
70
|
+
const regionColor = attachment.color;
|
|
68
71
|
color.set(skeletonColor.r * slotColor.r * regionColor.r, skeletonColor.g * slotColor.g * regionColor.g, skeletonColor.b * slotColor.b * regionColor.b, skeletonColor.a * slotColor.a * regionColor.a);
|
|
69
72
|
ctx.save();
|
|
70
|
-
|
|
71
|
-
ctx.
|
|
73
|
+
const boneApplied = bone.appliedPose;
|
|
74
|
+
ctx.transform(boneApplied.a, boneApplied.c, boneApplied.b, boneApplied.d, boneApplied.worldX, boneApplied.worldY);
|
|
75
|
+
const offsets = attachment.getOffsets(pose);
|
|
76
|
+
ctx.translate(offsets[0], offsets[1]);
|
|
72
77
|
ctx.rotate(attachment.rotation * Math.PI / 180);
|
|
73
|
-
|
|
78
|
+
const atlasScale = attachment.width / region.originalWidth;
|
|
74
79
|
ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
|
|
75
80
|
let w = region.width, h = region.height;
|
|
76
81
|
ctx.translate(w / 2, h / 2);
|
|
77
|
-
if (
|
|
78
|
-
|
|
82
|
+
if (region.degrees === 90) {
|
|
83
|
+
const t = w;
|
|
79
84
|
w = h;
|
|
80
85
|
h = t;
|
|
81
86
|
ctx.rotate(-Math.PI / 2);
|
|
@@ -90,44 +95,49 @@ export class SkeletonRenderer {
|
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
drawTriangles(skeleton) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
const ctx = this.ctx;
|
|
99
|
+
const color = this.tempColor;
|
|
100
|
+
const skeletonColor = skeleton.color;
|
|
101
|
+
const drawOrder = skeleton.drawOrder.appliedPose;
|
|
97
102
|
let blendMode = null;
|
|
98
103
|
let vertices = this.vertices;
|
|
99
104
|
let triangles = null;
|
|
100
105
|
for (let i = 0, n = drawOrder.length; i < n; i++) {
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
const slot = drawOrder[i];
|
|
107
|
+
const pose = slot.appliedPose;
|
|
108
|
+
const attachment = pose.attachment;
|
|
103
109
|
let texture;
|
|
104
|
-
let region;
|
|
105
110
|
if (attachment instanceof RegionAttachment) {
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
const sequence = attachment.sequence;
|
|
112
|
+
const sequenceIndex = sequence.resolveIndex(pose);
|
|
113
|
+
const uvs = sequence.getUVs(sequenceIndex);
|
|
114
|
+
const offsets = attachment.getOffsets(pose);
|
|
115
|
+
vertices = this.computeRegionVertices(slot, attachment, offsets, uvs, false);
|
|
108
116
|
triangles = SkeletonRenderer.QUAD_TRIANGLES;
|
|
109
|
-
texture =
|
|
117
|
+
texture = (sequence.regions[sequenceIndex]?.texture).getImage();
|
|
110
118
|
}
|
|
111
119
|
else if (attachment instanceof MeshAttachment) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
const sequence = attachment.sequence;
|
|
121
|
+
const sequenceIndex = sequence.resolveIndex(pose);
|
|
122
|
+
const uvs = sequence.getUVs(sequenceIndex);
|
|
123
|
+
vertices = this.computeMeshVertices(slot, attachment, uvs, false);
|
|
124
|
+
triangles = attachment.triangles;
|
|
125
|
+
texture = (sequence.regions[sequenceIndex]?.texture).getImage();
|
|
116
126
|
}
|
|
117
127
|
else
|
|
118
128
|
continue;
|
|
119
129
|
if (texture) {
|
|
120
|
-
if (slot.data.blendMode
|
|
130
|
+
if (slot.data.blendMode !== blendMode)
|
|
121
131
|
blendMode = slot.data.blendMode;
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
const slotColor = pose.color;
|
|
133
|
+
const attachmentColor = attachment.color;
|
|
124
134
|
color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, skeletonColor.a * slotColor.a * attachmentColor.a);
|
|
125
135
|
ctx.globalAlpha = color.a;
|
|
126
|
-
for (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
136
|
+
for (let j = 0; j < triangles.length; j += 3) {
|
|
137
|
+
const t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;
|
|
138
|
+
const x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];
|
|
139
|
+
const x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];
|
|
140
|
+
const x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];
|
|
131
141
|
this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);
|
|
132
142
|
if (this.debugRendering) {
|
|
133
143
|
ctx.strokeStyle = "green";
|
|
@@ -146,7 +156,7 @@ export class SkeletonRenderer {
|
|
|
146
156
|
// Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120
|
|
147
157
|
// Apache 2 licensed
|
|
148
158
|
drawTriangle(img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {
|
|
149
|
-
|
|
159
|
+
const ctx = this.ctx;
|
|
150
160
|
const width = img.width - 1;
|
|
151
161
|
const height = img.height - 1;
|
|
152
162
|
u0 *= width;
|
|
@@ -169,7 +179,7 @@ export class SkeletonRenderer {
|
|
|
169
179
|
u2 -= u0;
|
|
170
180
|
v2 -= v0;
|
|
171
181
|
let det = u1 * v2 - u2 * v1;
|
|
172
|
-
if (det
|
|
182
|
+
if (det === 0)
|
|
173
183
|
return;
|
|
174
184
|
det = 1 / det;
|
|
175
185
|
// linear transformation
|
|
@@ -186,17 +196,16 @@ export class SkeletonRenderer {
|
|
|
186
196
|
ctx.drawImage(img, 0, 0);
|
|
187
197
|
ctx.restore();
|
|
188
198
|
}
|
|
189
|
-
computeRegionVertices(slot, region, pma) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
199
|
+
computeRegionVertices(slot, region, offsets, uvs, pma) {
|
|
200
|
+
const skeletonColor = slot.skeleton.color;
|
|
201
|
+
const slotColor = slot.appliedPose.color;
|
|
202
|
+
const regionColor = region.color;
|
|
203
|
+
const alpha = skeletonColor.a * slotColor.a * regionColor.a;
|
|
204
|
+
const multiplier = pma ? alpha : 1;
|
|
205
|
+
const color = this.tempColor;
|
|
196
206
|
color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
|
|
197
|
-
region.computeWorldVertices(slot, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);
|
|
198
|
-
|
|
199
|
-
let uvs = region.uvs;
|
|
207
|
+
region.computeWorldVertices(slot, offsets, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);
|
|
208
|
+
const vertices = this.vertices;
|
|
200
209
|
vertices[RegionAttachment.C1R] = color.r;
|
|
201
210
|
vertices[RegionAttachment.C1G] = color.g;
|
|
202
211
|
vertices[RegionAttachment.C1B] = color.b;
|
|
@@ -223,20 +232,20 @@ export class SkeletonRenderer {
|
|
|
223
232
|
vertices[RegionAttachment.V4] = uvs[7];
|
|
224
233
|
return vertices;
|
|
225
234
|
}
|
|
226
|
-
computeMeshVertices(slot, mesh, pma) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
computeMeshVertices(slot, mesh, uvs, pma) {
|
|
236
|
+
const skeleton = slot.skeleton;
|
|
237
|
+
const skeletonColor = skeleton.color;
|
|
238
|
+
const slotColor = slot.appliedPose.color;
|
|
239
|
+
const regionColor = mesh.color;
|
|
240
|
+
const alpha = skeletonColor.a * slotColor.a * regionColor.a;
|
|
241
|
+
const multiplier = pma ? alpha : 1;
|
|
242
|
+
const color = this.tempColor;
|
|
233
243
|
color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
|
|
234
|
-
|
|
244
|
+
const vertexCount = mesh.worldVerticesLength / 2;
|
|
235
245
|
let vertices = this.vertices;
|
|
236
246
|
if (vertices.length < mesh.worldVerticesLength)
|
|
237
247
|
this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);
|
|
238
|
-
mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);
|
|
239
|
-
let uvs = mesh.uvs;
|
|
248
|
+
mesh.computeWorldVertices(skeleton, slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);
|
|
240
249
|
for (let i = 0, u = 0, v = 2; i < vertexCount; i++) {
|
|
241
250
|
vertices[v++] = color.r;
|
|
242
251
|
vertices[v++] = color.g;
|
|
@@ -249,4 +258,4 @@ export class SkeletonRenderer {
|
|
|
249
258
|
return vertices;
|
|
250
259
|
}
|
|
251
260
|
}
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25SZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvblJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBWSxnQkFBZ0IsRUFBYSxjQUFjLEVBQTJDLE1BQU0sOEJBQThCLENBQUM7QUFHNUosTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU3QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzVCLE1BQU0sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkIsR0FBRyxDQUEyQjtJQUUvQixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN0QixRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDekMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFaEMsWUFBYSxPQUFpQztRQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxDQUFFLFFBQWtCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLFVBQVUsQ0FBRSxRQUFrQjtRQUNyQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxD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LEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdB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LEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDUixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgVXRpbHMsIENvbG9yLCBTa2VsZXRvbiwgUmVnaW9uQXR0YWNobWVudCwgQmxlbmRNb2RlLCBNZXNoQXR0YWNobWVudCwgU2xvdCwgVGV4dHVyZVJlZ2lvbiwgVGV4dHVyZUF0bGFzUmVnaW9uIH0gZnJvbSBcIkBlc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmVcIjtcbmltcG9ydCB7IENhbnZhc1RleHR1cmUgfSBmcm9tIFwiLi9DYW52YXNUZXh0dXJlLmpzXCI7XG5cbmNvbnN0IHdvcmxkVmVydGljZXMgPSBVdGlscy5uZXdGbG9hdEFycmF5KDgpO1xuXG5leHBvcnQgY2xhc3MgU2tlbGV0b25SZW5kZXJlciB7XG5cdHN0YXRpYyBRVUFEX1RSSUFOR0xFUyA9IFswLCAxLCAyLCAyLCAzLCAwXTtcblx0c3RhdGljIFZFUlRFWF9TSVpFID0gMiArIDIgKyA0O1xuXG5cdHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cblx0cHVibGljIHRyaWFuZ2xlUmVuZGVyaW5nID0gZmFsc2U7XG5cdHB1YmxpYyBkZWJ1Z1JlbmRlcmluZyA9IGZhbHNlO1xuXHRwcml2YXRlIHZlcnRpY2VzID0gVXRpbHMubmV3RmxvYXRBcnJheSg4ICogMTAyNCk7XG5cdHByaXZhdGUgdGVtcENvbG9yID0gbmV3IENvbG9yKCk7XG5cblx0Y29uc3RydWN0b3IgKGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCkge1xuXHRcdHRoaXMuY3R4ID0gY29udGV4dDtcblx0fVxuXG5cdGRyYXcgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGlmICh0aGlzLnRyaWFuZ2xlUmVuZGVyaW5nKSB0aGlzLmRyYXdUcmlhbmdsZXMoc2tlbGV0b24pO1xuXHRcdGVsc2UgdGhpcy5kcmF3SW1hZ2VzKHNrZWxldG9uKTtcblx0fVxuXG5cdHByaXZhdGUgZHJhd0ltYWdlcyAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0bGV0IGN0eCA9IHRoaXMuY3R4O1xuXHRcdGxldCBjb2xvciA9IHRoaXMudGVtcENvbG9yO1xuXHRcdGxldCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0bGV0IGRyYXdPcmRlciA9IHNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGlmICh0aGlzLmRlYnVnUmVuZGVyaW5nKSBjdHguc3Ryb2tlU3R5bGUgPSBcImdyZWVuXCI7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0bGV0IGJvbmUgPSBzbG90LmJvbmU7XG5cdFx0XHRpZiAoIWJvbmUuYWN0aXZlKSBjb250aW51ZTtcblxuXHRcdFx0bGV0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGlmICghKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50KSkgY29udGludWU7XG5cdFx0XHRhdHRhY2htZW50LmNvbXB1dGVXb3JsZFZlcnRpY2VzKHNsb3QsIHdvcmxkVmVydGljZXMsIDAsIDIpO1xuXHRcdFx0bGV0IHJlZ2lvbjogVGV4dHVyZVJlZ2lvbiA9IDxUZXh0dXJlUmVnaW9uPmF0dGFjaG1lbnQucmVnaW9uO1xuXG5cdFx0XHRsZXQgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgPSAoPENhbnZhc1RleHR1cmU+cmVnaW9uLnRleHR1cmUpLmdldEltYWdlKCkgYXMgSFRNTEltYWdlRWxlbWVudDtcblxuXHRcdFx0bGV0IHNsb3RDb2xvciA9IHNsb3QuY29sb3I7XG5cdFx0XHRsZXQgcmVnaW9uQ29sb3IgPSBhdHRhY2htZW50LmNvbG9yO1xuXHRcdFx0Y29sb3Iuc2V0KHNrZWxldG9uQ29sb3IuciAqIHNsb3RDb2xvci5yICogcmVnaW9uQ29sb3Iucixcblx0XHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiByZWdpb25Db2xvci5nLFxuXHRcdFx0XHRza2VsZXRvbkNvbG9yLmIgKiBzbG90Q29sb3IuYiAqIHJlZ2lvbkNvbG9yLmIsXG5cdFx0XHRcdHNrZWxldG9uQ29sb3IuYSAqIHNsb3RDb2xvci5hICogcmVnaW9uQ29sb3IuYSk7XG5cblx0XHRcdGN0eC5zYXZlKCk7XG5cdFx0XHRjdHgudHJhbnNmb3JtKGJvbmUuYSwgYm9uZS5jLCBib25lLmIsIGJvbmUuZCwgYm9uZS53b3JsZFgsIGJvbmUud29ybGRZKTtcblx0XHRcdGN0eC50cmFuc2xhdGUoYXR0YWNobWVudC5vZmZzZXRbMF0sIGF0dGFjaG1lbnQub2Zmc2V0WzFdKTtcblx0XHRcdGN0eC5yb3RhdGUoYXR0YWNobWVudC5yb3RhdGlvbiAqIE1hdGguUEkgLyAxODApO1xuXG5cdFx0XHRsZXQgYXRsYXNTY2FsZSA9IGF0dGFjaG1lbnQud2lkdGggLyByZWdpb24ub3JpZ2luYWxXaWR0aDtcblx0XHRcdGN0eC5zY2FsZShhdGxhc1NjYWxlICogYXR0YWNobWVudC5zY2FsZVgsIGF0bGFzU2NhbGUgKiBhdHRhY2htZW50LnNjYWxlWSk7XG5cblx0XHRcdGxldCB3ID0gcmVnaW9uLndpZHRoLCBoID0gcmVnaW9uLmhlaWdodDtcblx0XHRcdGN0eC50cmFuc2xhdGUodyAvIDIsIGggLyAyKTtcblx0XHRcdGlmIChhdHRhY2htZW50LnJlZ2lvbiEuZGVncmVlcyA9PSA5MCkge1xuXHRcdFx0XHRsZXQgdCA9IHc7XG5cdFx0XHRcdHcgPSBoO1xuXHRcdFx0XHRoID0gdDtcblx0XHRcdFx0Y3R4LnJvdGF0ZSgtTWF0aC5QSSAvIDIpO1xuXHRcdFx0fVxuXHRcdFx0Y3R4LnNjYWxlKDEsIC0xKTtcblx0XHRcdGN0eC50cmFuc2xhdGUoLXcgLyAyLCAtaCAvIDIpO1xuXG5cdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBjb2xvci5hO1xuXHRcdFx0Y3R4LmRyYXdJbWFnZShpbWFnZSwgaW1hZ2Uud2lkdGggKiByZWdpb24udSwgaW1hZ2UuaGVpZ2h0ICogcmVnaW9uLnYsIHcsIGgsIDAsIDAsIHcsIGgpO1xuXHRcdFx0aWYgKHRoaXMuZGVidWdSZW5kZXJpbmcpIGN0eC5zdHJva2VSZWN0KDAsIDAsIHcsIGgpO1xuXHRcdFx0Y3R4LnJlc3RvcmUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGRyYXdUcmlhbmdsZXMgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGxldCBjdHggPSB0aGlzLmN0eDtcblx0XHRsZXQgY29sb3IgPSB0aGlzLnRlbXBDb2xvcjtcblx0XHRsZXQgc2tlbGV0b25Db2xvciA9IHNrZWxldG9uLmNvbG9yO1xuXHRcdGxldCBkcmF3T3JkZXIgPSBza2VsZXRvbi5kcmF3T3JkZXI7XG5cblx0XHRsZXQgYmxlbmRNb2RlOiBCbGVuZE1vZGUgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgdmVydGljZXM6IEFycmF5TGlrZTxudW1iZXI+ID0gdGhpcy52ZXJ0aWNlcztcblx0XHRsZXQgdHJpYW5nbGVzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGw7XG5cblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGRyYXdPcmRlci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcblx0XHRcdGxldCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0bGV0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblxuXHRcdFx0bGV0IHRleHR1cmU6IEhUTUxJbWFnZUVsZW1lbnQ7XG5cdFx0XHRsZXQgcmVnaW9uOiBUZXh0dXJlQXRsYXNSZWdpb247XG5cdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQpIHtcblx0XHRcdFx0bGV0IHJlZ2lvbkF0dGFjaG1lbnQgPSA8UmVnaW9uQXR0YWNobWVudD5hdHRhY2htZW50O1xuXHRcdFx0XHR2ZXJ0aWNlcyA9IHRoaXMuY29tcHV0ZVJlZ2lvblZlcnRpY2VzKHNsb3QsIHJlZ2lvbkF0dGFjaG1lbnQsIGZhbHNlKTtcblx0XHRcdFx0dHJpYW5nbGVzID0gU2tlbGV0b25SZW5kZXJlci5RVUFEX1RSSUFOR0xFUztcblx0XHRcdFx0dGV4dHVyZSA9ICg8Q2FudmFzVGV4dHVyZT5yZWdpb25BdHRhY2htZW50LnJlZ2lvbiEudGV4dHVyZSkuZ2V0SW1hZ2UoKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuXHRcdFx0fSBlbHNlIGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgTWVzaEF0dGFjaG1lbnQpIHtcblx0XHRcdFx0bGV0IG1lc2ggPSA8TWVzaEF0dGFjaG1lbnQ+YXR0YWNobWVudDtcblx0XHRcdFx0dmVydGljZXMgPSB0aGlzLmNvbXB1dGVNZXNoVmVydGljZXMoc2xvdCwgbWVzaCwgZmFsc2UpO1xuXHRcdFx0XHR0cmlhbmdsZXMgPSBtZXNoLnRyaWFuZ2xlcztcblx0XHRcdFx0dGV4dHVyZSA9ICg8Q2FudmFzVGV4dHVyZT5tZXNoLnJlZ2lvbiEudGV4dHVyZSkuZ2V0SW1hZ2UoKSBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRpZiAodGV4dHVyZSkge1xuXHRcdFx0XHRpZiAoc2xvdC5kYXRhLmJsZW5kTW9kZSAhPSBibGVuZE1vZGUpIGJsZW5kTW9kZSA9IHNsb3QuZGF0YS5ibGVuZE1vZGU7XG5cblx0XHRcdFx0bGV0IHNsb3RDb2xvciA9IHNsb3QuY29sb3I7XG5cdFx0XHRcdGxldCBhdHRhY2htZW50Q29sb3IgPSBhdHRhY2htZW50LmNvbG9yO1xuXHRcdFx0XHRjb2xvci5zZXQoc2tlbGV0b25Db2xvci5yICogc2xvdENvbG9yLnIgKiBhdHRhY2htZW50Q29sb3Iucixcblx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLmcgKiBzbG90Q29sb3IuZyAqIGF0dGFjaG1lbnRDb2xvci5nLFxuXHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogYXR0YWNobWVudENvbG9yLmIsXG5cdFx0XHRcdFx0c2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiBhdHRhY2htZW50Q29sb3IuYSk7XG5cblx0XHRcdFx0Y3R4Lmdsb2JhbEFscGhhID0gY29sb3IuYTtcblxuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRyaWFuZ2xlcy5sZW5ndGg7IGogKz0gMykge1xuXHRcdFx0XHRcdGxldCB0MSA9IHRyaWFuZ2xlc1tqXSAqIDgsIHQyID0gdHJpYW5nbGVzW2ogKyAxXSAqIDgsIHQzID0gdHJpYW5nbGVzW2ogKyAyXSAqIDg7XG5cblx0XHRcdFx0XHRsZXQgeDAgPSB2ZXJ0aWNlc1t0MV0sIHkwID0gdmVydGljZXNbdDEgKyAxXSwgdTAgPSB2ZXJ0aWNlc1t0MSArIDZdLCB2MCA9IHZlcnRpY2VzW3QxICsgN107XG5cdFx0XHRcdFx0bGV0IHgxID0gdmVydGljZXNbdDJdLCB5MSA9IHZlcnRpY2VzW3QyICsgMV0sIHUxID0gdmVydGljZXNbdDIgKyA2XSwgdjEgPSB2ZXJ0aWNlc1t0MiArIDddO1xuXHRcdFx0XHRcdGxldCB4MiA9IHZlcnRpY2VzW3QzXSwgeTIgPSB2ZXJ0aWNlc1t0MyArIDFdLCB1MiA9IHZlcnRpY2VzW3QzICsgNl0sIHYyID0gdmVydGljZXNbdDMgKyA3XTtcblxuXHRcdFx0XHRcdHRoaXMuZHJhd1RyaWFuZ2xlKHRleHR1cmUsIHgwLCB5MCwgdTAsIHYwLCB4MSwgeTEsIHUxLCB2MSwgeDIsIHkyLCB1MiwgdjIpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVidWdSZW5kZXJpbmcpIHtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiZ3JlZW5cIjtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeDAsIHkwKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDEsIHkxKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDIsIHkyKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDAsIHkwKTtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cdH1cblxuXHQvLyBBZGFwdGVkIGZyb20gaHR0cDovL2V4dHJlbWVseXNhdGlzZmFjdG9yeXRvdGFsaXRhcmlhbmlzbS5jb20vYmxvZy8/cD0yMTIwXG5cdC8vIEFwYWNoZSAyIGxpY2Vuc2VkXG5cdHByaXZhdGUgZHJhd1RyaWFuZ2xlIChpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHgwOiBudW1iZXIsIHkwOiBudW1iZXIsIHUwOiBudW1iZXIsIHYwOiBudW1iZXIsXG5cdFx0eDE6IG51bWJlciwgeTE6IG51bWJlciwgdTE6IG51bWJlciwgdjE6IG51bWJlcixcblx0XHR4MjogbnVtYmVyLCB5MjogbnVtYmVyLCB1MjogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG5cdFx0bGV0IGN0eCA9IHRoaXMuY3R4O1xuXG5cdFx0Y29uc3Qgd2lkdGggPSBpbWcud2lkdGggLSAxO1xuXHRcdGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQgLSAxO1xuXHRcdHUwICo9IHdpZHRoO1xuXHRcdHYwICo9IGhlaWdodDtcblx0XHR1MSAqPSB3aWR0aDtcblx0XHR2MSAqPSBoZWlnaHQ7XG5cdFx0dTIgKj0gd2lkdGg7XG5cdFx0djIgKj0gaGVpZ2h0O1xuXG5cdFx0Y3R4LmJlZ2luUGF0aCgpO1xuXHRcdGN0eC5tb3ZlVG8oeDAsIHkwKTtcblx0XHRjdHgubGluZVRvKHgxLCB5MSk7XG5cdFx0Y3R4LmxpbmVUbyh4MiwgeTIpO1xuXHRcdGN0eC5jbG9zZVBhdGgoKTtcblxuXHRcdHgxIC09IHgwO1xuXHRcdHkxIC09IHkwO1xuXHRcdHgyIC09IHgwO1xuXHRcdHkyIC09IHkwO1xuXG5cdFx0dTEgLT0gdTA7XG5cdFx0djEgLT0gdjA7XG5cdFx0dTIgLT0gdTA7XG5cdFx0djIgLT0gdjA7XG5cblx0XHRsZXQgZGV0ID0gdTEgKiB2MiAtIHUyICogdjE7XG5cdFx0aWYgKGRldCA9PSAwKSByZXR1cm47XG5cdFx0ZGV0ID0gMSAvIGRldDtcblxuXHRcdC8vIGxpbmVhciB0cmFuc2Zvcm1hdGlvblxuXHRcdGNvbnN0IGEgPSAodjIgKiB4MSAtIHYxICogeDIpICogZGV0O1xuXHRcdGNvbnN0IGIgPSAodjIgKiB5MSAtIHYxICogeTIpICogZGV0O1xuXHRcdGNvbnN0IGMgPSAodTEgKiB4MiAtIHUyICogeDEpICogZGV0O1xuXHRcdGNvbnN0IGQgPSAodTEgKiB5MiAtIHUyICogeTEpICogZGV0O1xuXG5cdFx0Ly8gdHJhbnNsYXRpb25cblx0XHRjb25zdCBlID0geDAgLSBhICogdTAgLSBjICogdjA7XG5cdFx0Y29uc3QgZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwO1xuXG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXHRcdGN0eC5jbGlwKCk7XG5cdFx0Y3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbXB1dGVSZWdpb25WZXJ0aWNlcyAoc2xvdDogU2xvdCwgcmVnaW9uOiBSZWdpb25BdHRhY2htZW50LCBwbWE6IGJvb2xlYW4pIHtcblx0XHRsZXQgc2tlbGV0b25Db2xvciA9IHNsb3QuYm9uZS5za2VsZXRvbi5jb2xvcjtcblx0XHRsZXQgc2xvdENvbG9yID0gc2xvdC5jb2xvcjtcblx0XHRsZXQgcmVnaW9uQ29sb3IgPSByZWdpb24uY29sb3I7XG5cdFx0bGV0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiByZWdpb25Db2xvci5hO1xuXHRcdGxldCBtdWx0aXBsaWVyID0gcG1hID8gYWxwaGEgOiAxO1xuXHRcdGxldCBjb2xvciA9IHRoaXMudGVtcENvbG9yO1xuXHRcdGNvbG9yLnNldChza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIHJlZ2lvbkNvbG9yLnIgKiBtdWx0aXBsaWVyLFxuXHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiByZWdpb25Db2xvci5nICogbXVsdGlwbGllcixcblx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogcmVnaW9uQ29sb3IuYiAqIG11bHRpcGxpZXIsXG5cdFx0XHRhbHBoYSk7XG5cblx0XHRyZWdpb24uY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgdGhpcy52ZXJ0aWNlcywgMCwgU2tlbGV0b25SZW5kZXJlci5WRVJURVhfU0laRSk7XG5cblx0XHRsZXQgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuXHRcdGxldCB1dnMgPSByZWdpb24udXZzO1xuXG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMVJdID0gY29sb3Iucjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMxR10gPSBjb2xvci5nO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzFCXSA9IGNvbG9yLmI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMUFdID0gY29sb3IuYTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlUxXSA9IHV2c1swXTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlYxXSA9IHV2c1sxXTtcblxuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzJSXSA9IGNvbG9yLnI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMkddID0gY29sb3IuZztcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMyQl0gPSBjb2xvci5iO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzJBXSA9IGNvbG9yLmE7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5VMl0gPSB1dnNbMl07XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5WMl0gPSB1dnNbM107XG5cblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMzUl0gPSBjb2xvci5yO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzNHXSA9IGNvbG9yLmc7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DM0JdID0gY29sb3IuYjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMzQV0gPSBjb2xvci5hO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuVTNdID0gdXZzWzRdO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuVjNdID0gdXZzWzVdO1xuXG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DNFJdID0gY29sb3Iucjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkM0R10gPSBjb2xvci5nO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzRCXSA9IGNvbG9yLmI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DNEFdID0gY29sb3IuYTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlU0XSA9IHV2c1s2XTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlY0XSA9IHV2c1s3XTtcblxuXHRcdHJldHVybiB2ZXJ0aWNlcztcblx0fVxuXG5cdHByaXZhdGUgY29tcHV0ZU1lc2hWZXJ0aWNlcyAoc2xvdDogU2xvdCwgbWVzaDogTWVzaEF0dGFjaG1lbnQsIHBtYTogYm9vbGVhbikge1xuXHRcdGxldCBza2VsZXRvbkNvbG9yID0gc2xvdC5ib25lLnNrZWxldG9uLmNvbG9yO1xuXHRcdGxldCBzbG90Q29sb3IgPSBzbG90LmNvbG9yO1xuXHRcdGxldCByZWdpb25Db2xvciA9IG1lc2guY29sb3I7XG5cdFx0bGV0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiByZWdpb25Db2xvci5hO1xuXHRcdGxldCBtdWx0aXBsaWVyID0gcG1hID8gYWxwaGEgOiAxO1xuXHRcdGxldCBjb2xvciA9IHRoaXMudGVtcENvbG9yO1xuXHRcdGNvbG9yLnNldChza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIHJlZ2lvbkNvbG9yLnIgKiBtdWx0aXBsaWVyLFxuXHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiByZWdpb25Db2xvci5nICogbXVsdGlwbGllcixcblx0XHRcdHNrZWxldG9uQ29sb3IuYiAqIHNsb3RDb2xvci5iICogcmVnaW9uQ29sb3IuYiAqIG11bHRpcGxpZXIsXG5cdFx0XHRhbHBoYSk7XG5cblx0XHRsZXQgdmVydGV4Q291bnQgPSBtZXNoLndvcmxkVmVydGljZXNMZW5ndGggLyAyO1xuXHRcdGxldCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cdFx0aWYgKHZlcnRpY2VzLmxlbmd0aCA8IG1lc2gud29ybGRWZXJ0aWNlc0xlbmd0aCkgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzID0gVXRpbHMubmV3RmxvYXRBcnJheShtZXNoLndvcmxkVmVydGljZXNMZW5ndGgpO1xuXHRcdG1lc2guY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgMCwgbWVzaC53b3JsZFZlcnRpY2VzTGVuZ3RoLCB2ZXJ0aWNlcywgMCwgU2tlbGV0b25SZW5kZXJlci5WRVJURVhfU0laRSk7XG5cblx0XHRsZXQgdXZzID0gbWVzaC51dnM7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIHUgPSAwLCB2ID0gMjsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcblx0XHRcdHZlcnRpY2VzW3YrK10gPSBjb2xvci5yO1xuXHRcdFx0dmVydGljZXNbdisrXSA9IGNvbG9yLmc7XG5cdFx0XHR2ZXJ0aWNlc1t2KytdID0gY29sb3IuYjtcblx0XHRcdHZlcnRpY2VzW3YrK10gPSBjb2xvci5hO1xuXHRcdFx0dmVydGljZXNbdisrXSA9IHV2c1t1KytdO1xuXHRcdFx0dmVydGljZXNbdisrXSA9IHV2c1t1KytdO1xuXHRcdFx0diArPSAyO1xuXHRcdH1cblxuXHRcdHJldHVybiB2ZXJ0aWNlcztcblx0fVxufVxuIl19
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25SZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvblJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQWtCLEtBQUssRUFBRSxjQUFjLEVBQXdCLGdCQUFnQixFQUFnRCxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdsTCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDNUIsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixHQUFHLENBQTJCO0lBRS9CLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUMxQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6QyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUVoQyxZQUFhLE9BQWlDO1FBQzdDLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLENBQUUsUUFBa0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sVUFBVSxDQUFFLFFBQWtCO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFH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Q0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0lBRU8sbUJBQW1CLENBQUUsSUFBVSxFQUFFLElBQW9CLEVBQUUsR0FBb0IsRUFBRSxHQUFZO1FBQ2hHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QixLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFDbkUsYUFBYSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUMxRCxhQUFhLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQzFELEtBQUssQ0FBQyxDQUFDO1FBRVIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6SCxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFHbEgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDeEIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDUixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgdHlwZSBCbGVuZE1vZGUsIENvbG9yLCBNZXNoQXR0YWNobWVudCwgdHlwZSBOdW1iZXJBcnJheUxpa2UsIFJlZ2lvbkF0dGFjaG1lbnQsIHR5cGUgU2tlbGV0b24sIHR5cGUgU2xvdCwgdHlwZSBUZXh0dXJlUmVnaW9uLCBVdGlscyB9IGZyb20gXCJAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1RleHR1cmUgfSBmcm9tIFwiLi9DYW52YXNUZXh0dXJlLmpzXCI7XG5cbmNvbnN0IHdvcmxkVmVydGljZXMgPSBVdGlscy5uZXdGbG9hdEFycmF5KDgpO1xuXG5leHBvcnQgY2xhc3MgU2tlbGV0b25SZW5kZXJlciB7XG5cdHN0YXRpYyBRVUFEX1RSSUFOR0xFUyA9IFswLCAxLCAyLCAyLCAzLCAwXTtcblx0c3RhdGljIFZFUlRFWF9TSVpFID0gMiArIDIgKyA0O1xuXG5cdHByaXZhdGUgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cblx0cHVibGljIHRyaWFuZ2xlUmVuZGVyaW5nID0gZmFsc2U7XG5cdHB1YmxpYyBkZWJ1Z1JlbmRlcmluZyA9IGZhbHNlO1xuXHRwcml2YXRlIHZlcnRpY2VzID0gVXRpbHMubmV3RmxvYXRBcnJheSg4ICogMTAyNCk7XG5cdHByaXZhdGUgdGVtcENvbG9yID0gbmV3IENvbG9yKCk7XG5cblx0Y29uc3RydWN0b3IgKGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCkge1xuXHRcdHRoaXMuY3R4ID0gY29udGV4dDtcblx0fVxuXG5cdGRyYXcgKHNrZWxldG9uOiBTa2VsZXRvbikge1xuXHRcdGlmICh0aGlzLnRyaWFuZ2xlUmVuZGVyaW5nKSB0aGlzLmRyYXdUcmlhbmdsZXMoc2tlbGV0b24pO1xuXHRcdGVsc2UgdGhpcy5kcmF3SW1hZ2VzKHNrZWxldG9uKTtcblx0fVxuXG5cdHByaXZhdGUgZHJhd0ltYWdlcyAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0Y29uc3QgY3R4ID0gdGhpcy5jdHg7XG5cdFx0Y29uc3QgY29sb3IgPSB0aGlzLnRlbXBDb2xvcjtcblx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc2tlbGV0b24uZHJhd09yZGVyLmFwcGxpZWRQb3NlO1xuXG5cdFx0aWYgKHRoaXMuZGVidWdSZW5kZXJpbmcpIGN0eC5zdHJva2VTdHlsZSA9IFwiZ3JlZW5cIjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblx0XHRcdGNvbnN0IGJvbmUgPSBzbG90LmJvbmU7XG5cdFx0XHRpZiAoIWJvbmUuYWN0aXZlKSBjb250aW51ZTtcblxuXHRcdFx0Y29uc3QgcG9zZSA9IHNsb3QuYXBwbGllZFBvc2U7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gcG9zZS5hdHRhY2htZW50O1xuXHRcdFx0aWYgKCEoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQpKSBjb250aW51ZTtcblxuXHRcdFx0Y29uc3Qgc2VxdWVuY2UgPSBhdHRhY2htZW50LnNlcXVlbmNlO1xuXHRcdFx0Y29uc3Qgc2VxdWVuY2VJbmRleCA9IHNlcXVlbmNlLnJlc29sdmVJbmRleChwb3NlKTtcblx0XHRcdGF0dGFjaG1lbnQuY29tcHV0ZVdvcmxkVmVydGljZXMoc2xvdCwgYXR0YWNobWVudC5nZXRPZmZzZXRzKHBvc2UpLCB3b3JsZFZlcnRpY2VzLCAwLCAyKTtcblxuXHRcdFx0Y29uc3QgcmVnaW9uID0gc2VxdWVuY2UucmVnaW9uc1tzZXF1ZW5jZUluZGV4XSBhcyBUZXh0dXJlUmVnaW9uO1xuXG5cdFx0XHRjb25zdCBpbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IHJlZ2lvbi50ZXh0dXJlLmdldEltYWdlKCkgYXMgSFRNTEltYWdlRWxlbWVudDtcblxuXHRcdFx0Y29uc3Qgc2xvdENvbG9yID0gcG9zZS5jb2xvcjtcblx0XHRcdGNvbnN0IHJlZ2lvbkNvbG9yID0gYXR0YWNobWVudC5jb2xvcjtcblx0XHRcdGNvbG9yLnNldChza2VsZXRvbkNvbG9yLnIgKiBzbG90Q29sb3IuciAqIHJlZ2lvbkNvbG9yLnIsXG5cdFx0XHRcdHNrZWxldG9uQ29sb3IuZyAqIHNsb3RDb2xvci5nICogcmVnaW9uQ29sb3IuZyxcblx0XHRcdFx0c2tlbGV0b25Db2xvci5iICogc2xvdENvbG9yLmIgKiByZWdpb25Db2xvci5iLFxuXHRcdFx0XHRza2VsZXRvbkNvbG9yLmEgKiBzbG90Q29sb3IuYSAqIHJlZ2lvbkNvbG9yLmEpO1xuXG5cdFx0XHRjdHguc2F2ZSgpO1xuXHRcdFx0Y29uc3QgYm9uZUFwcGxpZWQgPSBib25lLmFwcGxpZWRQb3NlO1xuXHRcdFx0Y3R4LnRyYW5zZm9ybShib25lQXBwbGllZC5hLCBib25lQXBwbGllZC5jLCBib25lQXBwbGllZC5iLCBib25lQXBwbGllZC5kLCBib25lQXBwbGllZC53b3JsZFgsIGJvbmVBcHBsaWVkLndvcmxkWSk7XG5cdFx0XHRjb25zdCBvZmZzZXRzID0gYXR0YWNobWVudC5nZXRPZmZzZXRzKHBvc2UpO1xuXHRcdFx0Y3R4LnRyYW5zbGF0ZShvZmZzZXRzWzBdLCBvZmZzZXRzWzFdKTtcblx0XHRcdGN0eC5yb3RhdGUoYXR0YWNobWVudC5yb3RhdGlvbiAqIE1hdGguUEkgLyAxODApO1xuXG5cdFx0XHRjb25zdCBhdGxhc1NjYWxlID0gYXR0YWNobWVudC53aWR0aCAvIHJlZ2lvbi5vcmlnaW5hbFdpZHRoO1xuXHRcdFx0Y3R4LnNjYWxlKGF0bGFzU2NhbGUgKiBhdHRhY2htZW50LnNjYWxlWCwgYXRsYXNTY2FsZSAqIGF0dGFjaG1lbnQuc2NhbGVZKTtcblxuXHRcdFx0bGV0IHcgPSByZWdpb24ud2lkdGgsIGggPSByZWdpb24uaGVpZ2h0O1xuXHRcdFx0Y3R4LnRyYW5zbGF0ZSh3IC8gMiwgaCAvIDIpO1xuXHRcdFx0aWYgKHJlZ2lvbi5kZWdyZWVzID09PSA5MCkge1xuXHRcdFx0XHRjb25zdCB0ID0gdztcblx0XHRcdFx0dyA9IGg7XG5cdFx0XHRcdGggPSB0O1xuXHRcdFx0XHRjdHgucm90YXRlKC1NYXRoLlBJIC8gMik7XG5cdFx0XHR9XG5cdFx0XHRjdHguc2NhbGUoMSwgLTEpO1xuXHRcdFx0Y3R4LnRyYW5zbGF0ZSgtdyAvIDIsIC1oIC8gMik7XG5cblx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGNvbG9yLmE7XG5cdFx0XHRjdHguZHJhd0ltYWdlKGltYWdlLCBpbWFnZS53aWR0aCAqIHJlZ2lvbi51LCBpbWFnZS5oZWlnaHQgKiByZWdpb24udiwgdywgaCwgMCwgMCwgdywgaCk7XG5cdFx0XHRpZiAodGhpcy5kZWJ1Z1JlbmRlcmluZykgY3R4LnN0cm9rZVJlY3QoMCwgMCwgdywgaCk7XG5cdFx0XHRjdHgucmVzdG9yZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZHJhd1RyaWFuZ2xlcyAoc2tlbGV0b246IFNrZWxldG9uKSB7XG5cdFx0Y29uc3QgY3R4ID0gdGhpcy5jdHg7XG5cdFx0Y29uc3QgY29sb3IgPSB0aGlzLnRlbXBDb2xvcjtcblx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2tlbGV0b24uY29sb3I7XG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc2tlbGV0b24uZHJhd09yZGVyLmFwcGxpZWRQb3NlO1xuXG5cdFx0bGV0IGJsZW5kTW9kZTogQmxlbmRNb2RlIHwgbnVsbCA9IG51bGw7XG5cdFx0bGV0IHZlcnRpY2VzOiBBcnJheUxpa2U8bnVtYmVyPiA9IHRoaXMudmVydGljZXM7XG5cdFx0bGV0IHRyaWFuZ2xlczogQXJyYXk8bnVtYmVyPiB8IG51bGwgPSBudWxsO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgcG9zZSA9IHNsb3QuYXBwbGllZFBvc2U7XG5cdFx0XHRjb25zdCBhdHRhY2htZW50ID0gcG9zZS5hdHRhY2htZW50O1xuXG5cdFx0XHRsZXQgdGV4dHVyZTogSFRNTEltYWdlRWxlbWVudDtcblx0XHRcdGlmIChhdHRhY2htZW50IGluc3RhbmNlb2YgUmVnaW9uQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBzZXF1ZW5jZSA9IGF0dGFjaG1lbnQuc2VxdWVuY2U7XG5cdFx0XHRcdGNvbnN0IHNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZS5yZXNvbHZlSW5kZXgocG9zZSk7XG5cblx0XHRcdFx0Y29uc3QgdXZzID0gc2VxdWVuY2UuZ2V0VVZzKHNlcXVlbmNlSW5kZXgpO1xuXHRcdFx0XHRjb25zdCBvZmZzZXRzID0gYXR0YWNobWVudC5nZXRPZmZzZXRzKHBvc2UpO1xuXG5cdFx0XHRcdHZlcnRpY2VzID0gdGhpcy5jb21wdXRlUmVnaW9uVmVydGljZXMoc2xvdCwgYXR0YWNobWVudCwgb2Zmc2V0cywgdXZzLCBmYWxzZSk7XG5cdFx0XHRcdHRyaWFuZ2xlcyA9IFNrZWxldG9uUmVuZGVyZXIuUVVBRF9UUklBTkdMRVM7XG5cblx0XHRcdFx0dGV4dHVyZSA9IChzZXF1ZW5jZS5yZWdpb25zW3NlcXVlbmNlSW5kZXhdPy50ZXh0dXJlIGFzIENhbnZhc1RleHR1cmUpLmdldEltYWdlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBzZXF1ZW5jZSA9IGF0dGFjaG1lbnQuc2VxdWVuY2U7XG5cdFx0XHRcdGNvbnN0IHNlcXVlbmNlSW5kZXggPSBzZXF1ZW5jZS5yZXNvbHZlSW5kZXgocG9zZSk7XG5cblx0XHRcdFx0Y29uc3QgdXZzID0gc2VxdWVuY2UuZ2V0VVZzKHNlcXVlbmNlSW5kZXgpO1xuXHRcdFx0XHR2ZXJ0aWNlcyA9IHRoaXMuY29tcHV0ZU1lc2hWZXJ0aWNlcyhzbG90LCBhdHRhY2htZW50LCB1dnMsIGZhbHNlKTtcblx0XHRcdFx0dHJpYW5nbGVzID0gYXR0YWNobWVudC50cmlhbmdsZXM7XG5cblx0XHRcdFx0dGV4dHVyZSA9IChzZXF1ZW5jZS5yZWdpb25zW3NlcXVlbmNlSW5kZXhdPy50ZXh0dXJlIGFzIENhbnZhc1RleHR1cmUpLmdldEltYWdlKCk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGlmICh0ZXh0dXJlKSB7XG5cdFx0XHRcdGlmIChzbG90LmRhdGEuYmxlbmRNb2RlICE9PSBibGVuZE1vZGUpIGJsZW5kTW9kZSA9IHNsb3QuZGF0YS5ibGVuZE1vZGU7XG5cblx0XHRcdFx0Y29uc3Qgc2xvdENvbG9yID0gcG9zZS5jb2xvcjtcblx0XHRcdFx0Y29uc3QgYXR0YWNobWVudENvbG9yID0gYXR0YWNobWVudC5jb2xvcjtcblx0XHRcdFx0Y29sb3Iuc2V0KHNrZWxldG9uQ29sb3IuciAqIHNsb3RDb2xvci5yICogYXR0YWNobWVudENvbG9yLnIsXG5cdFx0XHRcdFx0c2tlbGV0b25Db2xvci5nICogc2xvdENvbG9yLmcgKiBhdHRhY2htZW50Q29sb3IuZyxcblx0XHRcdFx0XHRza2VsZXRvbkNvbG9yLmIgKiBzbG90Q29sb3IuYiAqIGF0dGFjaG1lbnRDb2xvci5iLFxuXHRcdFx0XHRcdHNrZWxldG9uQ29sb3IuYSAqIHNsb3RDb2xvci5hICogYXR0YWNobWVudENvbG9yLmEpO1xuXG5cdFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IGNvbG9yLmE7XG5cblx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCB0cmlhbmdsZXMubGVuZ3RoOyBqICs9IDMpIHtcblx0XHRcdFx0XHRjb25zdCB0MSA9IHRyaWFuZ2xlc1tqXSAqIDgsIHQyID0gdHJpYW5nbGVzW2ogKyAxXSAqIDgsIHQzID0gdHJpYW5nbGVzW2ogKyAyXSAqIDg7XG5cblx0XHRcdFx0XHRjb25zdCB4MCA9IHZlcnRpY2VzW3QxXSwgeTAgPSB2ZXJ0aWNlc1t0MSArIDFdLCB1MCA9IHZlcnRpY2VzW3QxICsgNl0sIHYwID0gdmVydGljZXNbdDEgKyA3XTtcblx0XHRcdFx0XHRjb25zdCB4MSA9IHZlcnRpY2VzW3QyXSwgeTEgPSB2ZXJ0aWNlc1t0MiArIDFdLCB1MSA9IHZlcnRpY2VzW3QyICsgNl0sIHYxID0gdmVydGljZXNbdDIgKyA3XTtcblx0XHRcdFx0XHRjb25zdCB4MiA9IHZlcnRpY2VzW3QzXSwgeTIgPSB2ZXJ0aWNlc1t0MyArIDFdLCB1MiA9IHZlcnRpY2VzW3QzICsgNl0sIHYyID0gdmVydGljZXNbdDMgKyA3XTtcblxuXHRcdFx0XHRcdHRoaXMuZHJhd1RyaWFuZ2xlKHRleHR1cmUsIHgwLCB5MCwgdTAsIHYwLCB4MSwgeTEsIHUxLCB2MSwgeDIsIHkyLCB1MiwgdjIpO1xuXG5cdFx0XHRcdFx0aWYgKHRoaXMuZGVidWdSZW5kZXJpbmcpIHtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2VTdHlsZSA9IFwiZ3JlZW5cIjtcblx0XHRcdFx0XHRcdGN0eC5iZWdpblBhdGgoKTtcblx0XHRcdFx0XHRcdGN0eC5tb3ZlVG8oeDAsIHkwKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDEsIHkxKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDIsIHkyKTtcblx0XHRcdFx0XHRcdGN0eC5saW5lVG8oeDAsIHkwKTtcblx0XHRcdFx0XHRcdGN0eC5zdHJva2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cdH1cblxuXHQvLyBBZGFwdGVkIGZyb20gaHR0cDovL2V4dHJlbWVseXNhdGlzZmFjdG9yeXRvdGFsaXRhcmlhbmlzbS5jb20vYmxvZy8/cD0yMTIwXG5cdC8vIEFwYWNoZSAyIGxpY2Vuc2VkXG5cdHByaXZhdGUgZHJhd1RyaWFuZ2xlIChpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHgwOiBudW1iZXIsIHkwOiBudW1iZXIsIHUwOiBudW1iZXIsIHYwOiBudW1iZXIsXG5cdFx0eDE6IG51bWJlciwgeTE6IG51bWJlciwgdTE6IG51bWJlciwgdjE6IG51bWJlcixcblx0XHR4MjogbnVtYmVyLCB5MjogbnVtYmVyLCB1MjogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG5cdFx0Y29uc3QgY3R4ID0gdGhpcy5jdHg7XG5cblx0XHRjb25zdCB3aWR0aCA9IGltZy53aWR0aCAtIDE7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gaW1nLmhlaWdodCAtIDE7XG5cdFx0dTAgKj0gd2lkdGg7XG5cdFx0djAgKj0gaGVpZ2h0O1xuXHRcdHUxICo9IHdpZHRoO1xuXHRcdHYxICo9IGhlaWdodDtcblx0XHR1MiAqPSB3aWR0aDtcblx0XHR2MiAqPSBoZWlnaHQ7XG5cblx0XHRjdHguYmVnaW5QYXRoKCk7XG5cdFx0Y3R4Lm1vdmVUbyh4MCwgeTApO1xuXHRcdGN0eC5saW5lVG8oeDEsIHkxKTtcblx0XHRjdHgubGluZVRvKHgyLCB5Mik7XG5cdFx0Y3R4LmNsb3NlUGF0aCgpO1xuXG5cdFx0eDEgLT0geDA7XG5cdFx0eTEgLT0geTA7XG5cdFx0eDIgLT0geDA7XG5cdFx0eTIgLT0geTA7XG5cblx0XHR1MSAtPSB1MDtcblx0XHR2MSAtPSB2MDtcblx0XHR1MiAtPSB1MDtcblx0XHR2MiAtPSB2MDtcblxuXHRcdGxldCBkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTtcblx0XHRpZiAoZGV0ID09PSAwKSByZXR1cm47XG5cdFx0ZGV0ID0gMSAvIGRldDtcblxuXHRcdC8vIGxpbmVhciB0cmFuc2Zvcm1hdGlvblxuXHRcdGNvbnN0IGEgPSAodjIgKiB4MSAtIHYxICogeDIpICogZGV0O1xuXHRcdGNvbnN0IGIgPSAodjIgKiB5MSAtIHYxICogeTIpICogZGV0O1xuXHRcdGNvbnN0IGMgPSAodTEgKiB4MiAtIHUyICogeDEpICogZGV0O1xuXHRcdGNvbnN0IGQgPSAodTEgKiB5MiAtIHUyICogeTEpICogZGV0O1xuXG5cdFx0Ly8gdHJhbnNsYXRpb25cblx0XHRjb25zdCBlID0geDAgLSBhICogdTAgLSBjICogdjA7XG5cdFx0Y29uc3QgZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwO1xuXG5cdFx0Y3R4LnNhdmUoKTtcblx0XHRjdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXHRcdGN0eC5jbGlwKCk7XG5cdFx0Y3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuXHRcdGN0eC5yZXN0b3JlKCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbXB1dGVSZWdpb25WZXJ0aWNlcyAoc2xvdDogU2xvdCwgcmVnaW9uOiBSZWdpb25BdHRhY2htZW50LCBvZmZzZXRzOiBOdW1iZXJBcnJheUxpa2UsIHV2czogTnVtYmVyQXJyYXlMaWtlLCBwbWE6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBza2VsZXRvbkNvbG9yID0gc2xvdC5za2VsZXRvbi5jb2xvcjtcblx0XHRjb25zdCBzbG90Q29sb3IgPSBzbG90LmFwcGxpZWRQb3NlLmNvbG9yO1xuXHRcdGNvbnN0IHJlZ2lvbkNvbG9yID0gcmVnaW9uLmNvbG9yO1xuXHRcdGNvbnN0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiByZWdpb25Db2xvci5hO1xuXHRcdGNvbnN0IG11bHRpcGxpZXIgPSBwbWEgPyBhbHBoYSA6IDE7XG5cdFx0Y29uc3QgY29sb3IgPSB0aGlzLnRlbXBDb2xvcjtcblx0XHRjb2xvci5zZXQoc2tlbGV0b25Db2xvci5yICogc2xvdENvbG9yLnIgKiByZWdpb25Db2xvci5yICogbXVsdGlwbGllcixcblx0XHRcdHNrZWxldG9uQ29sb3IuZyAqIHNsb3RDb2xvci5nICogcmVnaW9uQ29sb3IuZyAqIG11bHRpcGxpZXIsXG5cdFx0XHRza2VsZXRvbkNvbG9yLmIgKiBzbG90Q29sb3IuYiAqIHJlZ2lvbkNvbG9yLmIgKiBtdWx0aXBsaWVyLFxuXHRcdFx0YWxwaGEpO1xuXG5cdFx0cmVnaW9uLmNvbXB1dGVXb3JsZFZlcnRpY2VzKHNsb3QsIG9mZnNldHMsIHRoaXMudmVydGljZXMsIDAsIFNrZWxldG9uUmVuZGVyZXIuVkVSVEVYX1NJWkUpO1xuXG5cdFx0Y29uc3QgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuXG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMVJdID0gY29sb3Iucjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMxR10gPSBjb2xvci5nO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzFCXSA9IGNvbG9yLmI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMUFdID0gY29sb3IuYTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlUxXSA9IHV2c1swXTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlYxXSA9IHV2c1sxXTtcblxuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzJSXSA9IGNvbG9yLnI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DMkddID0gY29sb3IuZztcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMyQl0gPSBjb2xvci5iO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzJBXSA9IGNvbG9yLmE7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5VMl0gPSB1dnNbMl07XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5WMl0gPSB1dnNbM107XG5cblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMzUl0gPSBjb2xvci5yO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzNHXSA9IGNvbG9yLmc7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DM0JdID0gY29sb3IuYjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkMzQV0gPSBjb2xvci5hO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuVTNdID0gdXZzWzRdO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuVjNdID0gdXZzWzVdO1xuXG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DNFJdID0gY29sb3Iucjtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LkM0R10gPSBjb2xvci5nO1xuXHRcdHZlcnRpY2VzW1JlZ2lvbkF0dGFjaG1lbnQuQzRCXSA9IGNvbG9yLmI7XG5cdFx0dmVydGljZXNbUmVnaW9uQXR0YWNobWVudC5DNEFdID0gY29sb3IuYTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlU0XSA9IHV2c1s2XTtcblx0XHR2ZXJ0aWNlc1tSZWdpb25BdHRhY2htZW50LlY0XSA9IHV2c1s3XTtcblxuXHRcdHJldHVybiB2ZXJ0aWNlcztcblx0fVxuXG5cdHByaXZhdGUgY29tcHV0ZU1lc2hWZXJ0aWNlcyAoc2xvdDogU2xvdCwgbWVzaDogTWVzaEF0dGFjaG1lbnQsIHV2czogTnVtYmVyQXJyYXlMaWtlLCBwbWE6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBza2VsZXRvbiA9IHNsb3Quc2tlbGV0b247XG5cdFx0Y29uc3Qgc2tlbGV0b25Db2xvciA9IHNrZWxldG9uLmNvbG9yO1xuXHRcdGNvbnN0IHNsb3RDb2xvciA9IHNsb3QuYXBwbGllZFBvc2UuY29sb3I7XG5cdFx0Y29uc3QgcmVnaW9uQ29sb3IgPSBtZXNoLmNvbG9yO1xuXHRcdGNvbnN0IGFscGhhID0gc2tlbGV0b25Db2xvci5hICogc2xvdENvbG9yLmEgKiByZWdpb25Db2xvci5hO1xuXHRcdGNvbnN0IG11bHRpcGxpZXIgPSBwbWEgPyBhbHBoYSA6IDE7XG5cdFx0Y29uc3QgY29sb3IgPSB0aGlzLnRlbXBDb2xvcjtcblx0XHRjb2xvci5zZXQoc2tlbGV0b25Db2xvci5yICogc2xvdENvbG9yLnIgKiByZWdpb25Db2xvci5yICogbXVsdGlwbGllcixcblx0XHRcdHNrZWxldG9uQ29sb3IuZyAqIHNsb3RDb2xvci5nICogcmVnaW9uQ29sb3IuZyAqIG11bHRpcGxpZXIsXG5cdFx0XHRza2VsZXRvbkNvbG9yLmIgKiBzbG90Q29sb3IuYiAqIHJlZ2lvbkNvbG9yLmIgKiBtdWx0aXBsaWVyLFxuXHRcdFx0YWxwaGEpO1xuXG5cdFx0Y29uc3QgdmVydGV4Q291bnQgPSBtZXNoLndvcmxkVmVydGljZXNMZW5ndGggLyAyO1xuXHRcdGxldCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cdFx0aWYgKHZlcnRpY2VzLmxlbmd0aCA8IG1lc2gud29ybGRWZXJ0aWNlc0xlbmd0aCkgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzID0gVXRpbHMubmV3RmxvYXRBcnJheShtZXNoLndvcmxkVmVydGljZXNMZW5ndGgpO1xuXHRcdG1lc2guY29tcHV0ZVdvcmxkVmVydGljZXMoc2tlbGV0b24sIHNsb3QsIDAsIG1lc2gud29ybGRWZXJ0aWNlc0xlbmd0aCwgdmVydGljZXMsIDAsIFNrZWxldG9uUmVuZGVyZXIuVkVSVEVYX1NJWkUpO1xuXG5cblx0XHRmb3IgKGxldCBpID0gMCwgdSA9IDAsIHYgPSAyOyBpIDwgdmVydGV4Q291bnQ7IGkrKykge1xuXHRcdFx0dmVydGljZXNbdisrXSA9IGNvbG9yLnI7XG5cdFx0XHR2ZXJ0aWNlc1t2KytdID0gY29sb3IuZztcblx0XHRcdHZlcnRpY2VzW3YrK10gPSBjb2xvci5iO1xuXHRcdFx0dmVydGljZXNbdisrXSA9IGNvbG9yLmE7XG5cdFx0XHR2ZXJ0aWNlc1t2KytdID0gdXZzW3UrK107XG5cdFx0XHR2ZXJ0aWNlc1t2KytdID0gdXZzW3UrK107XG5cdFx0XHR2ICs9IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZlcnRpY2VzO1xuXHR9XG59XG4iXX0=
|