@esotericsoftware/spine-core 4.3.0 → 4.3.2
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/BonePose.d.ts +2 -0
- package/dist/BonePose.js +131 -101
- package/dist/ConstraintData.d.ts +9 -0
- package/dist/ConstraintData.js +11 -1
- package/dist/IkConstraint.d.ts +2 -1
- package/dist/IkConstraint.js +13 -13
- package/dist/IkConstraintData.d.ts +1 -11
- package/dist/IkConstraintData.js +2 -13
- package/dist/PathConstraint.d.ts +0 -1
- package/dist/PathConstraint.js +3 -4
- package/dist/PhysicsConstraint.js +14 -2
- package/dist/PhysicsConstraintData.d.ts +6 -1
- package/dist/PhysicsConstraintData.js +13 -2
- package/dist/SkeletonBinary.js +14 -3
- package/dist/SkeletonJson.js +6 -2
- package/dist/Utils.d.ts +2 -0
- package/dist/Utils.js +3 -1
- package/dist/esm/spine-core.min.mjs +2 -2
- package/dist/esm/spine-core.mjs +218 -148
- package/dist/esm/spine-core.mjs.map +3 -3
- package/dist/iife/spine-core.js +218 -148
- package/dist/iife/spine-core.js.map +3 -3
- package/dist/iife/spine-core.min.js +2 -2
- package/package.json +1 -1
package/dist/BonePose.d.ts
CHANGED
|
@@ -97,6 +97,8 @@ export declare class BonePose implements Pose<BonePose>, Update {
|
|
|
97
97
|
* Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after
|
|
98
98
|
* calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */
|
|
99
99
|
updateLocalTransform(skeleton: Skeleton): void;
|
|
100
|
+
private set4;
|
|
101
|
+
private set5;
|
|
100
102
|
/** If the world transform has been modified by constraints and the local transform no longer matches,
|
|
101
103
|
* {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before
|
|
102
104
|
* using the applied local transform. */
|
package/dist/BonePose.js
CHANGED
|
@@ -148,76 +148,71 @@ export class BonePose {
|
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
150
150
|
case Inherit.OnlyTranslation: {
|
|
151
|
+
const sx = skeleton.scaleX, sy = skeleton.scaleY;
|
|
151
152
|
const rx = (rotation + shearX) * MathUtils.degRad;
|
|
152
153
|
const ry = (rotation + 90 + shearY) * MathUtils.degRad;
|
|
153
|
-
this.a = Math.cos(rx) * scaleX;
|
|
154
|
-
this.b = Math.cos(ry) * scaleY;
|
|
155
|
-
this.c = Math.sin(rx) * scaleX;
|
|
156
|
-
this.d = Math.sin(ry) * scaleY;
|
|
154
|
+
this.a = Math.cos(rx) * scaleX * sx;
|
|
155
|
+
this.b = Math.cos(ry) * scaleY * sx;
|
|
156
|
+
this.c = Math.sin(rx) * scaleX * sy;
|
|
157
|
+
this.d = Math.sin(ry) * scaleY * sy;
|
|
157
158
|
break;
|
|
158
159
|
}
|
|
159
160
|
case Inherit.NoRotationOrReflection: {
|
|
160
|
-
const sx =
|
|
161
|
-
pa *=
|
|
162
|
-
pc *=
|
|
161
|
+
const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;
|
|
162
|
+
pa *= sxi;
|
|
163
|
+
pc *= syi;
|
|
163
164
|
let s = pa * pa + pc * pc;
|
|
164
|
-
let
|
|
165
|
-
if (s >
|
|
166
|
-
s = Math.abs(pa * pd *
|
|
165
|
+
let r = 0;
|
|
166
|
+
if (s > MathUtils.epsilon2) {
|
|
167
|
+
s = Math.abs(pa * pd * syi - pb * sxi * pc) / s;
|
|
167
168
|
pb = pc * s;
|
|
168
169
|
pd = pa * s;
|
|
169
|
-
|
|
170
|
+
r = rotation - MathUtils.atan2Deg(pc, pa);
|
|
170
171
|
}
|
|
171
172
|
else {
|
|
172
173
|
pa = 0;
|
|
173
174
|
pc = 0;
|
|
174
|
-
|
|
175
|
+
r = rotation - 90 + MathUtils.atan2Deg(pd, pb);
|
|
175
176
|
}
|
|
176
|
-
const rx = (
|
|
177
|
-
const ry = (
|
|
177
|
+
const rx = (r + shearX) * MathUtils.degRad;
|
|
178
|
+
const ry = (r + shearY + 90) * MathUtils.degRad;
|
|
178
179
|
const la = Math.cos(rx) * scaleX;
|
|
179
180
|
const lb = Math.cos(ry) * scaleY;
|
|
180
181
|
const lc = Math.sin(rx) * scaleX;
|
|
181
182
|
const ld = Math.sin(ry) * scaleY;
|
|
182
|
-
this.a = pa * la - pb * lc;
|
|
183
|
-
this.b = pa * lb - pb * ld;
|
|
184
|
-
this.c = pc * la + pd * lc;
|
|
185
|
-
this.d = pc * lb + pd * ld;
|
|
183
|
+
this.a = (pa * la - pb * lc) * sx;
|
|
184
|
+
this.b = (pa * lb - pb * ld) * sx;
|
|
185
|
+
this.c = (pc * la + pd * lc) * sy;
|
|
186
|
+
this.d = (pc * lb + pd * ld) * sy;
|
|
186
187
|
break;
|
|
187
188
|
}
|
|
188
189
|
case Inherit.NoScale:
|
|
189
190
|
case Inherit.NoScaleOrReflection: {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
let
|
|
193
|
-
let
|
|
194
|
-
|
|
195
|
-
s = 1 / s;
|
|
191
|
+
const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;
|
|
192
|
+
const r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
|
|
193
|
+
let za = (pa * cos + pb * sin) * sxi;
|
|
194
|
+
let zc = (pc * cos + pd * sin) * syi;
|
|
195
|
+
const s = 1 / Math.sqrt(za * za + zc * zc);
|
|
196
196
|
za *= s;
|
|
197
197
|
zc *= s;
|
|
198
|
-
|
|
199
|
-
if (this.inherit === Inherit.NoScale &&
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const zd = Math.sin(r) * s;
|
|
198
|
+
let zb = -zc, zd = za;
|
|
199
|
+
if (this.inherit === Inherit.NoScale && pa * pd - pb * pc < 0 !== (sx < 0 !== sy < 0)) {
|
|
200
|
+
zb = -zb;
|
|
201
|
+
zd = -zd;
|
|
202
|
+
}
|
|
204
203
|
const rx = shearX * MathUtils.degRad;
|
|
205
204
|
const ry = (90 + shearY) * MathUtils.degRad;
|
|
206
205
|
const la = Math.cos(rx) * scaleX;
|
|
207
206
|
const lb = Math.cos(ry) * scaleY;
|
|
208
207
|
const lc = Math.sin(rx) * scaleX;
|
|
209
208
|
const ld = Math.sin(ry) * scaleY;
|
|
210
|
-
this.a = za * la + zb * lc;
|
|
211
|
-
this.b = za * lb + zb * ld;
|
|
212
|
-
this.c = zc * la + zd * lc;
|
|
213
|
-
this.d = zc * lb + zd * ld;
|
|
209
|
+
this.a = (za * la + zb * lc) * sx;
|
|
210
|
+
this.b = (za * lb + zb * ld) * sx;
|
|
211
|
+
this.c = (zc * la + zd * lc) * sy;
|
|
212
|
+
this.d = (zc * lb + zd * ld) * sy;
|
|
214
213
|
break;
|
|
215
214
|
}
|
|
216
215
|
}
|
|
217
|
-
this.a *= skeleton.scaleX;
|
|
218
|
-
this.b *= skeleton.scaleX;
|
|
219
|
-
this.c *= skeleton.scaleY;
|
|
220
|
-
this.d *= skeleton.scaleY;
|
|
221
216
|
}
|
|
222
217
|
/** Computes the local transform values from the world transform.
|
|
223
218
|
*
|
|
@@ -230,83 +225,118 @@ export class BonePose {
|
|
|
230
225
|
updateLocalTransform(skeleton) {
|
|
231
226
|
this.local = 0;
|
|
232
227
|
this.world = skeleton._update;
|
|
228
|
+
const sx = skeleton.scaleX, sy = skeleton.scaleY;
|
|
233
229
|
if (!this.bone.parent) {
|
|
234
|
-
|
|
235
|
-
this.
|
|
236
|
-
|
|
237
|
-
this.
|
|
238
|
-
this.scaleX = Math.sqrt(a * a + c * c);
|
|
239
|
-
this.scaleY = Math.sqrt(b * b + d * d);
|
|
240
|
-
this.shearX = 0;
|
|
241
|
-
this.shearY = MathUtils.atan2Deg(a * b + c * d, a * d - b * c);
|
|
230
|
+
const sxi = 1 / sx, syi = 1 / sy;
|
|
231
|
+
this.x = (this.worldX - skeleton.x) * sxi;
|
|
232
|
+
this.y = (this.worldY - skeleton.y) * syi;
|
|
233
|
+
this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);
|
|
242
234
|
return;
|
|
243
235
|
}
|
|
244
236
|
const parent = this.bone.parent.appliedPose;
|
|
245
237
|
let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
|
|
246
|
-
|
|
247
|
-
|
|
238
|
+
const pad = pa * pd - pb * pc, pid = 1 / (pa * pd - pb * pc);
|
|
239
|
+
const ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;
|
|
248
240
|
const dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
|
|
249
|
-
this.x =
|
|
250
|
-
this.y =
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
241
|
+
this.x = dx * ia - dy * ib;
|
|
242
|
+
this.y = dy * id - dx * ic;
|
|
243
|
+
switch (this.inherit) {
|
|
244
|
+
case Inherit.Normal:
|
|
245
|
+
this.set5(ia * this.a - ib * this.c, ia * this.b - ib * this.d, id * this.c - ic * this.a, id * this.d - ic * this.b, 0);
|
|
246
|
+
break;
|
|
247
|
+
case Inherit.OnlyTranslation: {
|
|
248
|
+
const sxi = 1 / sx, syi = 1 / sy;
|
|
249
|
+
this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
case Inherit.NoRotationOrReflection: {
|
|
253
|
+
const sxi = 1 / sx, syi = 1 / sy;
|
|
254
|
+
pa *= sxi;
|
|
255
|
+
pc *= syi;
|
|
256
|
+
const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;
|
|
257
|
+
const s = 1 / (pa * pa + pc * pc), det = 1 / Math.abs(pad * sxi * syi);
|
|
258
|
+
this.set5((pa * wa + pc * wc) * s, (pa * wb + pc * wd) * s, (pa * wc - pc * wa) * det, (pa * wd - pc * wb) * det, MathUtils.atan2Deg(pc, pa));
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
case Inherit.NoScale:
|
|
262
|
+
case Inherit.NoScaleOrReflection: {
|
|
263
|
+
const sxi = 1 / sx, syi = 1 / sy;
|
|
264
|
+
const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;
|
|
265
|
+
let tx = pd * this.a - pb * this.c, ty = pa * this.c - pc * this.a;
|
|
266
|
+
if (pad < 0) {
|
|
267
|
+
tx = -tx;
|
|
268
|
+
ty = -ty;
|
|
269
|
+
}
|
|
270
|
+
let r = MathUtils.atan2Deg(ty, tx);
|
|
271
|
+
this.rotation = r;
|
|
272
|
+
r *= MathUtils.degRad;
|
|
273
|
+
const cos = Math.cos(r), sin = Math.sin(r);
|
|
274
|
+
let za = (pa * cos + pb * sin) * sxi;
|
|
275
|
+
let zc = (pc * cos + pd * sin) * syi;
|
|
276
|
+
const s = 1 / Math.sqrt(za * za + zc * zc);
|
|
277
|
+
za *= s;
|
|
278
|
+
zc *= s;
|
|
279
|
+
const si = this.inherit === Inherit.NoScale && pad < 0 !== (sx < 0 !== sy < 0) ? -1 : 1;
|
|
280
|
+
this.set4(za * wa + zc * wc, za * wb + zc * wd, (za * wc - zc * wa) * si, (za * wd - zc * wb) * si);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
set4(ra, rb, rc, rd) {
|
|
285
|
+
const x = ra * ra + rc * rc, y = rb * rb + rd * rd;
|
|
286
|
+
if (x > MathUtils.epsilon2) {
|
|
287
|
+
this.shearX = MathUtils.atan2Deg(rc, ra);
|
|
288
|
+
this.scaleX = Math.sqrt(x);
|
|
257
289
|
}
|
|
258
290
|
else {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
case Inherit.NoScale:
|
|
270
|
-
case Inherit.NoScaleOrReflection: {
|
|
271
|
-
let r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);
|
|
272
|
-
pa = (pa * cos + pb * sin) / skeleton.scaleX;
|
|
273
|
-
pc = (pc * cos + pd * sin) / skeleton.scaleY;
|
|
274
|
-
let s = Math.sqrt(pa * pa + pc * pc);
|
|
275
|
-
if (s > 0.00001)
|
|
276
|
-
s = 1 / s;
|
|
277
|
-
pa *= s;
|
|
278
|
-
pc *= s;
|
|
279
|
-
s = Math.sqrt(pa * pa + pc * pc);
|
|
280
|
-
if (this.inherit === Inherit.NoScale && pid < 0 !== (skeleton.scaleX < 0 !== skeleton.scaleY < 0))
|
|
281
|
-
s = -s;
|
|
282
|
-
r = MathUtils.PI / 2 + Math.atan2(pc, pa);
|
|
283
|
-
pb = Math.cos(r) * s;
|
|
284
|
-
pd = Math.sin(r) * s;
|
|
285
|
-
pid = 1 / (pa * pd - pb * pc);
|
|
286
|
-
ia = pd * pid;
|
|
287
|
-
ib = pb * pid;
|
|
288
|
-
ic = pc * pid;
|
|
289
|
-
id = pa * pid;
|
|
290
|
-
}
|
|
291
|
+
this.shearX = 0;
|
|
292
|
+
this.scaleX = 0;
|
|
293
|
+
}
|
|
294
|
+
this.scaleY = Math.sqrt(y);
|
|
295
|
+
if (y > MathUtils.epsilon2) {
|
|
296
|
+
this.shearY = MathUtils.atan2Deg(rd, rb);
|
|
297
|
+
if (ra * rd - rb * rc < 0) {
|
|
298
|
+
this.scaleY = -this.scaleY;
|
|
299
|
+
this.shearY += 90;
|
|
291
300
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
301
|
+
else
|
|
302
|
+
this.shearY -= 90;
|
|
303
|
+
if (this.shearY > 180)
|
|
304
|
+
this.shearY -= 360;
|
|
305
|
+
else if (this.shearY <= -180) //
|
|
306
|
+
this.shearY += 360;
|
|
296
307
|
}
|
|
308
|
+
else
|
|
309
|
+
this.shearY = 0;
|
|
310
|
+
}
|
|
311
|
+
set5(ra, rb, rc, rd, ro) {
|
|
297
312
|
this.shearX = 0;
|
|
298
|
-
|
|
299
|
-
if (
|
|
300
|
-
const
|
|
301
|
-
this.
|
|
302
|
-
this.
|
|
303
|
-
this.
|
|
313
|
+
const x = ra * ra + rc * rc, y = rb * rb + rd * rd;
|
|
314
|
+
if (x > MathUtils.epsilon2) {
|
|
315
|
+
const r = MathUtils.atan2Deg(rc, ra);
|
|
316
|
+
this.rotation = r + ro;
|
|
317
|
+
this.scaleX = Math.sqrt(x);
|
|
318
|
+
this.scaleY = Math.sqrt(y);
|
|
319
|
+
if (y > MathUtils.epsilon2) {
|
|
320
|
+
this.shearY = MathUtils.atan2Deg(rd, rb);
|
|
321
|
+
if (ra * rd - rb * rc < 0) {
|
|
322
|
+
this.scaleY = -this.scaleY;
|
|
323
|
+
this.shearY += 90 - r;
|
|
324
|
+
}
|
|
325
|
+
else
|
|
326
|
+
this.shearY -= 90 + r;
|
|
327
|
+
if (this.shearY > 180)
|
|
328
|
+
this.shearY -= 360;
|
|
329
|
+
else if (this.shearY <= -180) //
|
|
330
|
+
this.shearY += 360;
|
|
331
|
+
}
|
|
332
|
+
else
|
|
333
|
+
this.shearY = 0;
|
|
304
334
|
}
|
|
305
335
|
else {
|
|
306
336
|
this.scaleX = 0;
|
|
307
|
-
this.scaleY = Math.sqrt(
|
|
337
|
+
this.scaleY = Math.sqrt(y);
|
|
308
338
|
this.shearY = 0;
|
|
309
|
-
this.rotation =
|
|
339
|
+
this.rotation = y > MathUtils.epsilon2 ? MathUtils.atan2Deg(rd, rb) - 90 + ro : ro;
|
|
310
340
|
}
|
|
311
341
|
}
|
|
312
342
|
/** If the world transform has been modified by constraints and the local transform no longer matches,
|
|
@@ -423,4 +453,4 @@ export class BonePose {
|
|
|
423
453
|
this.d = sin * rb + cos * this.d;
|
|
424
454
|
}
|
|
425
455
|
}
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZVBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZVBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLeEMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFFckQ7Ozs7Ozs7O3FEQVFxRDtBQUNyRCxNQUFNLE9BQU8sUUFBUTtJQUNwQixJQUFJLENBQVE7SUFFWiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXpCLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sMkRBQTJEO0lBQzNELENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwyREFBMkQ7SUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sdUZBQXVGO0lBQ3ZGLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYsR0FBRyxDQUFFLElBQWM7UUFDbEIsSUFBSSxJQUFJ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cEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFeEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIs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QUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUCxDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7aUlBTzZIO0lBQ3RILG9CQUFvQixDQUFFLFFBQWtCO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDNUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFN0IsSUFBSSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNaLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDWixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ1AsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDakQsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNoRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUNkLE1BQU07Z0JBQ1AsQ0FBQztnQkFDRCxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsR0FBRyxPQUFPO3dCQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNSLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ1IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzFHLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JCLEdB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SUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgfSBmcm9tIFwiLi9VcGRhdGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgdHlwZSBWZWN0b3IyIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBhcHBsaWVkIGxvY2FsIHBvc2UgYW5kIHdvcmxkIHRyYW5zZm9ybSBmb3IgYSBib25lLiBUaGlzIGlzIHRoZSB7QGxpbmsgQm9uZS5nZXRQb3NlfSB3aXRoIGNvbnN0cmFpbnRzIGFwcGxpZWQgYW5kIHRoZVxuICogd29ybGQgdHJhbnNmb3JtIGNvbXB1dGVkIGJ5IHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYW5kIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0uXG4gKlxuICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBjaGFuZ2VkLCBjYWxsIHtAbGluayB1cGRhdGVMb2NhbFRyYW5zZm9ybX0gYmVmb3JlIHVzaW5nIHRoZSBsb2NhbCB0cmFuc2Zvcm0uIFRoZSBsb2NhbFxuICogdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlciBjb25zdHJhaW50KS5cbiAqXG4gKiBBZnRlciBjaGFuZ2luZyB0aGUgd29ybGQgdHJhbnNmb3JtLCBjYWxsIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0gb24gZXZlcnkgZGVzY2VuZGFudCBib25lLiBJdCBtYXkgYmUgbW9yZVxuICogY29udmVuaWVudCB0byBtb2RpZnkgdGhlIGxvY2FsIHRyYW5zZm9ybSBpbnN0ZWFkLCB0aGVuIGNhbGwge0BsaW5rIFNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byB1cGRhdGUgdGhlIHdvcmxkXG4gKiB0cmFuc2Zvcm1zIGZvciBhbGwgYm9uZXMgYW5kIGFwcGx5IGNvbnN0cmFpbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEJvbmVQb3NlIGltcGxlbWVudHMgUG9zZTxCb25lUG9zZT4sIFVwZGF0ZSB7XG5cdGJvbmUhOiBCb25lO1xuXG5cdC8qKiBUaGUgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0eCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRyb3RhdGlvbiA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVguICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVkuICovXG5cdHNjYWxlWSA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclguICovXG5cdHNoZWFyWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclkuICovXG5cdHNoZWFyWSA9IDA7XG5cblx0aW5oZXJpdCA9IEluaGVyaXQuTm9ybWFsO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGEgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGIgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGQgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWCBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFkgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWSBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdHdvcmxkID0gMDtcblx0bG9jYWwgPSAwO1xuXG5cdHNldCAocG9zZTogQm9uZVBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnggPSBwb3NlLng7XG5cdFx0dGhpcy55ID0gcG9zZS55O1xuXHRcdHRoaXMucm90YXRpb24gPSBwb3NlLnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGVYID0gcG9zZS5zY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBwb3NlLnNjYWxlWTtcblx0XHR0aGlzLnNoZWFyWCA9IHBvc2Uuc2hlYXJYO1xuXHRcdHRoaXMuc2hlYXJZID0gcG9zZS5zaGVhclk7XG5cdFx0dGhpcy5pbmhlcml0ID0gcG9zZS5pbmhlcml0O1xuXHR9XG5cblx0c2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0c2V0U2NhbGUgKHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlcik6IHZvaWQ7XG5cdHNldFNjYWxlIChzY2FsZTogbnVtYmVyKTogdm9pZDtcblx0c2V0U2NhbGUgKHNjYWxlT3JYOiBudW1iZXIsIHNjYWxlWT86IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuc2NhbGVYID0gc2NhbGVPclg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVkgPT09IHVuZGVmaW5lZCA/IHNjYWxlT3JYIDogc2NhbGVZO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgaG93IHBhcmVudCB3b3JsZCB0cmFuc2Zvcm1zIGFmZmVjdCB0aGlzIGJvbmUuICovXG5cdHB1YmxpYyBnZXRJbmhlcml0ICgpOiBJbmhlcml0IHtcblx0XHRyZXR1cm4gdGhpcy5pbmhlcml0O1xuXHR9XG5cblx0cHVibGljIHNldEluaGVyaXQgKGluaGVyaXQ6IEluaGVyaXQpOiB2b2lkIHtcblx0XHRpZiAoaW5oZXJpdCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJpbmhlcml0IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmluaGVyaXQgPSBpbmhlcml0O1xuXHR9XG5cblx0LyoqIENhbGxlZCBieSB7QGxpbmsgU2tlbGV0b24udXBkYXRlQ2FjaGV9IHRvIGNvbXB1dGUgdGhlIHdvcmxkIHRyYW5zZm9ybSwgaWYgbmVlZGVkLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpOiB2b2lkIHtcblx0XHRpZiAodGhpcy53b3JsZCAhPT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUncyB3b3JsZCB0cmFuc2Zvcm0gYW5kIHRoaXMgYXBwbGllZCBsb2NhbCBwb3NlLiBDaGlsZCBib25lcyBhcmUgbm90XG5cdCAqIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zXCI+V29ybGQgdHJhbnNmb3JtczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHR1cGRhdGVXb3JsZFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpXG5cdFx0XHR0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRjb25zdCBzY2FsZVggPSB0aGlzLnNjYWxlWDtcblx0XHRjb25zdCBzY2FsZVkgPSB0aGlzLnNjYWxlWTtcblx0XHRjb25zdCBzaGVhclggPSB0aGlzLnNoZWFyWDtcblx0XHRjb25zdCBzaGVhclkgPSB0aGlzLnNoZWFyWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdHRoaXMuYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWCAqIHN4O1xuXHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHR0aGlzLmMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVggKiBzeTtcblx0XHRcdHRoaXMuZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWSAqIHN5O1xuXHRcdFx0dGhpcy53b3JsZFggPSB0aGlzLnggKiBzeCArIHNrZWxldG9uLng7XG5cdFx0XHR0aGlzLndvcmxkWSA9IHRoaXMueSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlO1xuXHRcdGxldCBwYSA9IHBhcmVudC5hLCBwYiA9IHBhcmVudC5iLCBwYyA9IHBhcmVudC5jLCBwZCA9IHBhcmVudC5kO1xuXHRcdHRoaXMud29ybGRYID0gcGEgKiB0aGlzLnggKyBwYiAqIHRoaXMueSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHRoaXMueCArIHBkICogdGhpcy55ICsgcGFyZW50LndvcmxkWTtcblxuXHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9ybWFsOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgbGEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3MocnkpICogc2NhbGVZO1xuXHRcdFx0XHRjb25zdCBsYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHBhICogbGEgKyBwYiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSBwYSAqIGxiICsgcGIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gcGMgKiBsYSArIHBkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHBjICogbGIgKyBwZCAqIGxkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0dGhpcy5hID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHR0aGlzLmIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0dGhpcy5kID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4ID0gMSAvIHNrZWxldG9uLnNjYWxlWCwgc3kgPSAxIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRwYSAqPSBzeDtcblx0XHRcdFx0cGMgKj0gc3k7XG5cdFx0XHRcdGxldCBzID0gcGEgKiBwYSArIHBjICogcGM7XG5cdFx0XHRcdGxldCBwcnggPSAwO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMSkge1xuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhwYSAqIHBkICogc3kgLSBwYiAqIHN4ICogcGMpIC8gcztcblx0XHRcdFx0XHRwYiA9IHBjICogcztcblx0XHRcdFx0XHRwZCA9IHBhICogcztcblx0XHRcdFx0XHRwcnggPSBNYXRoVXRpbHMuYXRhbjJEZWcocGMsIHBhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYSA9IDA7XG5cdFx0XHRcdFx0cGMgPSAwO1xuXHRcdFx0XHRcdHByeCA9IDkwIC0gTWF0aFV0aWxzLmF0YW4yRGVnKHBkLCBwYik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclggLSBwcngpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyBzaGVhclkgLSBwcnggKyA5MCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gcGEgKiBsYSAtIHBiICogbGM7XG5cdFx0XHRcdHRoaXMuYiA9IHBhICogbGIgLSBwYiAqIGxkO1xuXHRcdFx0XHR0aGlzLmMgPSBwYyAqIGxhICsgcGQgKiBsYztcblx0XHRcdFx0dGhpcy5kID0gcGMgKiBsYiArIHBkICogbGQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGU6XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZU9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRsZXQgciA9IHJvdGF0aW9uICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdGxldCB6YyA9IChwYyAqIGNvcyArIHBkICogc2luKSAvIHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHRpZiAocyA+IDAuMDAwMDEpIHMgPSAxIC8gcztcblx0XHRcdFx0emEgKj0gcztcblx0XHRcdFx0emMgKj0gcztcblx0XHRcdFx0cyA9IE1hdGguc3FydCh6YSAqIHphICsgemMgKiB6Yyk7XG5cdFx0XHRcdGlmICh0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiAocGEgKiBwZCAtIHBiICogcGMgPCAwKSAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdHIgPSBNYXRoLlBJIC8gMiArIE1hdGguYXRhbjIoemMsIHphKTtcblx0XHRcdFx0Y29uc3QgemIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdGNvbnN0IHpkID0gTWF0aC5zaW4ocikgKiBzO1xuXHRcdFx0XHRjb25zdCByeCA9IHNoZWFyWCAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSB6YSAqIGxhICsgemIgKiBsYztcblx0XHRcdFx0dGhpcy5iID0gemEgKiBsYiArIHpiICogbGQ7XG5cdFx0XHRcdHRoaXMuYyA9IHpjICogbGEgKyB6ZCAqIGxjO1xuXHRcdFx0XHR0aGlzLmQgPSB6YyAqIGxiICsgemQgKiBsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYSAqPSBza2VsZXRvbi5zY2FsZVg7XG5cdFx0dGhpcy5iICo9IHNrZWxldG9uLnNjYWxlWDtcblx0XHR0aGlzLmMgKj0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdHRoaXMuZCAqPSBza2VsZXRvbi5zY2FsZVk7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIGxvY2FsIHRyYW5zZm9ybSB2YWx1ZXMgZnJvbSB0aGUgd29ybGQgdHJhbnNmb3JtLlxuXHQgKlxuXHQgKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGlzIG1vZGlmaWVkIChieSBhIGNvbnN0cmFpbnQsIHtAbGluayByb3RhdGVXb3JsZH0sIGV0YykgdGhlbiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIHNvXG5cdCAqIHRoZSBsb2NhbCB0cmFuc2Zvcm0gbWF0Y2hlcyB0aGUgd29ybGQgdHJhbnNmb3JtLiBUaGUgbG9jYWwgdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlclxuXHQgKiBjb25zdHJhaW50KS5cblx0ICpcblx0ICogU29tZSBpbmZvcm1hdGlvbiBpcyBhbWJpZ3VvdXMgaW4gdGhlIHdvcmxkIHRyYW5zZm9ybSwgc3VjaCBhcyAtMSwtMSBzY2FsZSB2ZXJzdXMgMTgwIHJvdGF0aW9uLiBUaGUgbG9jYWwgdHJhbnNmb3JtIGFmdGVyXG5cdCAqIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgbG9jYWwgdHJhbnNmb3JtIHVzZWQgdG8gY29tcHV0ZSB0aGUgd29ybGQgdHJhbnNmb3JtLCBidXQgbWF5IG5vdCBiZSBpZGVudGljYWwuICovXG5cdHB1YmxpYyB1cGRhdGVMb2NhbFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IDA7XG5cdFx0dGhpcy53b3JsZCA9IHNrZWxldG9uLl91cGRhdGU7XG5cblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHtcblx0XHRcdHRoaXMueCA9IHRoaXMud29ybGRYIC0gc2tlbGV0b24ueDtcblx0XHRcdHRoaXMueSA9IHRoaXMud29ybGRZIC0gc2tlbGV0b24ueTtcblx0XHRcdGNvbnN0IGEgPSB0aGlzLmEsIGIgPSB0aGlzLmIsIGMgPSB0aGlzLmMsIGQgPSB0aGlzLmQ7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKGMsIGEpO1xuXHRcdFx0dGhpcy5zY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBjICogYyk7XG5cdFx0XHR0aGlzLnNjYWxlWSA9IE1hdGguc3FydChiICogYiArIGQgKiBkKTtcblx0XHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHRcdHRoaXMuc2hlYXJZID0gTWF0aFV0aWxzLmF0YW4yRGVnKGEgKiBiICsgYyAqIGQsIGEgKiBkIC0gYiAqIGMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2U7XG5cdFx0bGV0IHBhID0gcGFyZW50LmEsIHBiID0gcGFyZW50LmIsIHBjID0gcGFyZW50LmMsIHBkID0gcGFyZW50LmQ7XG5cdFx0bGV0IHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdGxldCBpYSA9IHBkICogcGlkLCBpYiA9IHBiICogcGlkLCBpYyA9IHBjICogcGlkLCBpZCA9IHBhICogcGlkO1xuXHRcdGNvbnN0IGR4ID0gdGhpcy53b3JsZFggLSBwYXJlbnQud29ybGRYLCBkeSA9IHRoaXMud29ybGRZIC0gcGFyZW50LndvcmxkWTtcblx0XHR0aGlzLnggPSAoZHggKiBpYSAtIGR5ICogaWIpO1xuXHRcdHRoaXMueSA9IChkeSAqIGlkIC0gZHggKiBpYyk7XG5cblx0XHRsZXQgcmE6IG51bWJlciwgcmI6IG51bWJlciwgcmM6IG51bWJlciwgcmQ6IG51bWJlcjtcblx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk9ubHlUcmFuc2xhdGlvbikge1xuXHRcdFx0cmEgPSB0aGlzLmE7XG5cdFx0XHRyYiA9IHRoaXMuYjtcblx0XHRcdHJjID0gdGhpcy5jO1xuXHRcdFx0cmQgPSB0aGlzLmQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRcdGNhc2UgSW5oZXJpdC5Ob1JvdGF0aW9uT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdFx0Y29uc3QgcyA9IE1hdGguYWJzKHBhICogcGQgLSBwYiAqIHBjKSAvIChwYSAqIHBhICsgcGMgKiBwYyk7XG5cdFx0XHRcdFx0cGIgPSAtcGMgKiBza2VsZXRvbi5zY2FsZVggKiBzIC8gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0XHRcdHBkID0gcGEgKiBza2VsZXRvbi5zY2FsZVkgKiBzIC8gc2tlbGV0b24uc2NhbGVYO1xuXHRcdFx0XHRcdHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdFx0XHRcdGlhID0gcGQgKiBwaWQ7XG5cdFx0XHRcdFx0aWIgPSBwYiAqIHBpZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246IHtcblx0XHRcdFx0XHRsZXQgciA9IHRoaXMucm90YXRpb24gKiBNYXRoVXRpbHMuZGVnUmFkLCBjb3MgPSBNYXRoLmNvcyhyKSwgc2luID0gTWF0aC5zaW4ocik7XG5cdFx0XHRcdFx0cGEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVg7XG5cdFx0XHRcdFx0cGMgPSAocGMgKiBjb3MgKyBwZCAqIHNpbikgLyBza2VsZXRvbi5zY2FsZVk7XG5cdFx0XHRcdFx0bGV0IHMgPSBNYXRoLnNxcnQocGEgKiBwYSArIHBjICogcGMpO1xuXHRcdFx0XHRcdGlmIChzID4gMC4wMDAwMSkgcyA9IDEgLyBzO1xuXHRcdFx0XHRcdHBhICo9IHM7XG5cdFx0XHRcdFx0cGMgKj0gcztcblx0XHRcdFx0XHRzID0gTWF0aC5zcXJ0KHBhICogcGEgKyBwYyAqIHBjKTtcblx0XHRcdFx0XHRpZiAodGhpcy5pbmhlcml0ID09PSBJbmhlcml0Lk5vU2NhbGUgJiYgcGlkIDwgMCAhPT0gKHNrZWxldG9uLnNjYWxlWCA8IDAgIT09IHNrZWxldG9uLnNjYWxlWSA8IDApKSBzID0gLXM7XG5cdFx0XHRcdFx0ciA9IE1hdGhVdGlscy5QSSAvIDIgKyBNYXRoLmF0YW4yKHBjLCBwYSk7XG5cdFx0XHRcdFx0cGIgPSBNYXRoLmNvcyhyKSAqIHM7XG5cdFx0XHRcdFx0cGQgPSBNYXRoLnNpbihyKSAqIHM7XG5cdFx0XHRcdFx0cGlkID0gMSAvIChwYSAqIHBkIC0gcGIgKiBwYyk7XG5cdFx0XHRcdFx0aWEgPSBwZCAqIHBpZDtcblx0XHRcdFx0XHRpYiA9IHBiICogcGlkO1xuXHRcdFx0XHRcdGljID0gcGMgKiBwaWQ7XG5cdFx0XHRcdFx0aWQgPSBwYSAqIHBpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmEgPSBpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jO1xuXHRcdFx0cmIgPSBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kO1xuXHRcdFx0cmMgPSBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hO1xuXHRcdFx0cmQgPSBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iO1xuXHRcdH1cblxuXHRcdHRoaXMuc2hlYXJYID0gMDtcblx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydChyYSAqIHJhICsgcmMgKiByYyk7XG5cdFx0aWYgKHRoaXMuc2NhbGVYID4gMC4wMDAxKSB7XG5cdFx0XHRjb25zdCBkZXQgPSByYSAqIHJkIC0gcmIgKiByYztcblx0XHRcdHRoaXMuc2NhbGVZID0gZGV0IC8gdGhpcy5zY2FsZVg7XG5cdFx0XHR0aGlzLnNoZWFyWSA9IC1NYXRoVXRpbHMuYXRhbjJEZWcocmEgKiByYiArIHJjICogcmQsIGRldCk7XG5cdFx0XHR0aGlzLnJvdGF0aW9uID0gTWF0aFV0aWxzLmF0YW4yRGVnKHJjLCByYSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2NhbGVYID0gMDtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHJiICogcmIgKyByZCAqIHJkKTtcblx0XHRcdHRoaXMuc2hlYXJZID0gMDtcblx0XHRcdHRoaXMucm90YXRpb24gPSA5MCAtIE1hdGhVdGlscy5hdGFuMkRlZyhyZCwgcmIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKiBJZiB0aGUgd29ybGQgdHJhbnNmb3JtIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGNvbnN0cmFpbnRzIGFuZCB0aGUgbG9jYWwgdHJhbnNmb3JtIG5vIGxvbmdlciBtYXRjaGVzLFxuXHQgKiB7QGxpbmsgdXBkYXRlTG9jYWxUcmFuc2Zvcm19IGlzIGNhbGxlZC4gQ2FsbCB0aGlzIGFmdGVyIHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYmVmb3JlXG5cdCAqIHVzaW5nIHRoZSBhcHBsaWVkIGxvY2FsIHRyYW5zZm9ybS4gKi9cblx0cHVibGljIHZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0gKHNrZWxldG9uOiBTa2VsZXRvbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvY2FsID09PSBza2VsZXRvbi5fdXBkYXRlKSB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0fVxuXG5cdG1vZGlmeUxvY2FsIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbCA9PT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdFx0dGhpcy53b3JsZCA9IDA7XG5cdFx0dGhpcy5yZXNldFdvcmxkKHNrZWxldG9uLl91cGRhdGUpO1xuXHR9XG5cblx0bW9kaWZ5V29ybGQgKHVwZGF0ZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5sb2NhbCA9IHVwZGF0ZTtcblx0XHR0aGlzLndvcmxkID0gdXBkYXRlO1xuXHRcdHRoaXMucmVzZXRXb3JsZCh1cGRhdGUpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldFdvcmxkICh1cGRhdGU6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy5ib25lLmNoaWxkcmVuO1xuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldLmFwcGxpZWRQb3NlO1xuXHRcdFx0aWYgKGNoaWxkLndvcmxkID09PSB1cGRhdGUpIHtcblx0XHRcdFx0Y2hpbGQud29ybGQgPSAwO1xuXHRcdFx0XHRjaGlsZC5sb2NhbCA9IDA7XG5cdFx0XHRcdGNoaWxkLnJlc2V0V29ybGQodXBkYXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIHdvcmxkIHJvdGF0aW9uIGZvciB0aGUgWCBheGlzLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiBUaGlzIGlzIHRoZSBkaXJlY3Rpb24gdGhlIGJvbmUgaXNcblx0ICogcG9pbnRpbmcuICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWCAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYywgdGhpcy5hKTtcblx0fVxuXG5cdC8qKiBUaGUgd29ybGQgcm90YXRpb24gZm9yIHRoZSBZIGF4aXMsIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFJvdGF0aW9uWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuZCwgdGhpcy5iKTtcblx0fVxuXG5cdC8qKiBUaGUgbWFnbml0dWRlIChhbHdheXMgcG9zaXRpdmUpIG9mIHRoZSB3b3JsZCBzY2FsZSBYLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBhfSBhbmQge0BsaW5rIGN9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRTY2FsZVggKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmEgKiB0aGlzLmEgKyB0aGlzLmMgKiB0aGlzLmMpO1xuXHR9XG5cblx0LyoqIFRoZSBtYWduaXR1ZGUgKGFsd2F5cyBwb3NpdGl2ZSkgb2YgdGhlIHdvcmxkIHNjYWxlIFksIGNhbGN1bGF0ZWQgdXNpbmcge0BsaW5rIGJ9IGFuZCB7QGxpbmsgZH0uICovXG5cdHB1YmxpYyBnZXRXb3JsZFNjYWxlWSAoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuYiAqIHRoaXMuYiArIHRoaXMuZCAqIHRoaXMuZCk7XG5cdH1cblxuXHQvLyBwdWJsaWMgTWF0cml4MyBnZXRXb3JsZFRyYW5zZm9ybSAoTWF0cml4MyB3b3JsZFRyYW5zZm9ybSkge1xuXHQvLyBcdGlmICh3b3JsZFRyYW5zZm9ybSA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFwid29ybGRUcmFuc2Zvcm0gY2Fubm90IGJlIG51bGwuXCIpO1xuXHQvLyBcdGZsb2F0W10gdmFsID0gd29ybGRUcmFuc2Zvcm0udmFsO1xuXHQvLyBcdHZhbFtNMDBdID0gYTtcblx0Ly8gXHR2YWxbTTAxXSA9IGI7XG5cdC8vIFx0dmFsW00xMF0gPSBjO1xuXHQvLyBcdHZhbFtNMTFdID0gZDtcblx0Ly8gXHR2YWxbTTAyXSA9IHdvcmxkWDtcblx0Ly8gXHR2YWxbTTEyXSA9IHdvcmxkWTtcblx0Ly8gXHR2YWxbTTIwXSA9IDA7XG5cdC8vIFx0dmFsW00yMV0gPSAwO1xuXHQvLyBcdHZhbFtNMjJdID0gMTtcblx0Ly8gXHRyZXR1cm4gd29ybGRUcmFuc2Zvcm07XG5cdC8vIH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9Mb2NhbCAod29ybGQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IGRldCA9IHRoaXMuYSAqIHRoaXMuZCAtIHRoaXMuYiAqIHRoaXMuYztcblx0XHRjb25zdCB4ID0gd29ybGQueCAtIHRoaXMud29ybGRYLCB5ID0gd29ybGQueSAtIHRoaXMud29ybGRZO1xuXHRcdHdvcmxkLnggPSAoeCAqIHRoaXMuZCAtIHkgKiB0aGlzLmIpIC8gZGV0O1xuXHRcdHdvcmxkLnkgPSAoeSAqIHRoaXMuYSAtIHggKiB0aGlzLmMpIC8gZGV0O1xuXHRcdHJldHVybiB3b3JsZDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB0aGUgYm9uZSdzIGxvY2FsIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRwdWJsaWMgbG9jYWxUb1dvcmxkIChsb2NhbDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmIChsb2NhbCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJsb2NhbCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0Y29uc3QgeCA9IGxvY2FsLngsIHkgPSBsb2NhbC55O1xuXHRcdGxvY2FsLnggPSB4ICogdGhpcy5hICsgeSAqIHRoaXMuYiArIHRoaXMud29ybGRYO1xuXHRcdGxvY2FsLnkgPSB4ICogdGhpcy5jICsgeSAqIHRoaXMuZCArIHRoaXMud29ybGRZO1xuXHRcdHJldHVybiBsb2NhbDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgcG9pbnQgZnJvbSB3b3JsZCBjb29yZGluYXRlcyB0byB0aGUgcGFyZW50IGJvbmUncyBsb2NhbCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIHdvcmxkVG9QYXJlbnQgKHdvcmxkOiBWZWN0b3IyKTogVmVjdG9yMiB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRyZXR1cm4gdGhpcy5ib25lLnBhcmVudCA9PSBudWxsID8gd29ybGQgOiB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlLndvcmxkVG9Mb2NhbCh3b3JsZCk7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gdGhlIHBhcmVudCBib25lJ3MgY29vcmRpbmF0ZXMgdG8gd29ybGQgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyBwYXJlbnRUb1dvcmxkICh3b3JsZDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmICh3b3JsZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JsZCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5ib25lLnBhcmVudC5hcHBsaWVkUG9zZS5sb2NhbFRvV29ybGQod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSB3b3JsZCByb3RhdGlvbiB0byBhIGxvY2FsIHJvdGF0aW9uLiAqL1xuXHRwdWJsaWMgd29ybGRUb0xvY2FsUm90YXRpb24gKHdvcmxkUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0d29ybGRSb3RhdGlvbiAqPSBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKHdvcmxkUm90YXRpb24pLCBjb3MgPSBNYXRoLmNvcyh3b3JsZFJvdGF0aW9uKTtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKHRoaXMuYSAqIHNpbiAtIHRoaXMuYyAqIGNvcywgdGhpcy5kICogY29zIC0gdGhpcy5iICogc2luKSArIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWDtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgbG9jYWwgcm90YXRpb24gdG8gYSB3b3JsZCByb3RhdGlvbi4gKi9cblx0bG9jYWxUb1dvcmxkUm90YXRpb24gKGxvY2FsUm90YXRpb246IG51bWJlcik6IG51bWJlciB7XG5cdFx0bG9jYWxSb3RhdGlvbiA9IChsb2NhbFJvdGF0aW9uIC0gdGhpcy5yb3RhdGlvbiAtIHRoaXMuc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4obG9jYWxSb3RhdGlvbiksIGNvcyA9IE1hdGguY29zKGxvY2FsUm90YXRpb24pO1xuXHRcdHJldHVybiBNYXRoVXRpbHMuYXRhbjJEZWcoY29zICogdGhpcy5jICsgc2luICogdGhpcy5kLCBjb3MgKiB0aGlzLmEgKyBzaW4gKiB0aGlzLmIpO1xuXHR9XG5cblx0LyoqIFJvdGF0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gKi9cblx0cm90YXRlV29ybGQgKGRlZ3JlZXM6IG51bWJlcikge1xuXHRcdGRlZ3JlZXMgKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbihkZWdyZWVzKSwgY29zID0gTWF0aC5jb3MoZGVncmVlcyk7XG5cdFx0Y29uc3QgcmEgPSB0aGlzLmEsIHJiID0gdGhpcy5iO1xuXHRcdHRoaXMuYSA9IGNvcyAqIHJhIC0gc2luICogdGhpcy5jO1xuXHRcdHRoaXMuYiA9IGNvcyAqIHJiIC0gc2luICogdGhpcy5kO1xuXHRcdHRoaXMuYyA9IHNpbiAqIHJhICsgY29zICogdGhpcy5jO1xuXHRcdHRoaXMuZCA9IHNpbiAqIHJiICsgY29zICogdGhpcy5kO1xuXHR9XG59XG4iXX0=
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZVBvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZVBvc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLeEMsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFFckQ7Ozs7Ozs7O3FEQVFxRDtBQUNyRCxNQUFNLE9BQU8sUUFBUTtJQUNwQixJQUFJLENBQVE7SUFFWiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sd0RBQXdEO0lBQ3hELFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRXpCLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sMkRBQTJEO0lBQzNELENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwyREFBMkQ7SUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLDJEQUEyRDtJQUMzRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sdUZBQXVGO0lBQ3ZGLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRVYsR0FBRyxDQUFFLElBQWM7UUFDbEIsSUFBSSxJQUFJ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cEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2QyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUM1QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFeEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIs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LENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU07WUFDUCxDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLEtBQUssT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0UsTUFBTSxDQUFDLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNyQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDUixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxF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RSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDakUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFM0IsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsS0FBSyxPQUFPLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUs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RyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELFdBQVcsQ0FBRSxPQUFlO1FBQzNCLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgdHlwZSB7IEJvbmUgfSBmcm9tIFwiLi9Cb25lLmpzXCI7XG5pbXBvcnQgeyBJbmhlcml0IH0gZnJvbSBcIi4vQm9uZURhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNpY3MuanNcIjtcbmltcG9ydCB0eXBlIHsgUG9zZSB9IGZyb20gXCIuL1Bvc2UuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgfSBmcm9tIFwiLi9VcGRhdGUuanNcIjtcbmltcG9ydCB7IE1hdGhVdGlscywgdHlwZSBWZWN0b3IyIH0gZnJvbSBcIi4vVXRpbHMuanNcIjtcblxuLyoqIFRoZSBhcHBsaWVkIGxvY2FsIHBvc2UgYW5kIHdvcmxkIHRyYW5zZm9ybSBmb3IgYSBib25lLiBUaGlzIGlzIHRoZSB7QGxpbmsgQm9uZS5nZXRQb3NlfSB3aXRoIGNvbnN0cmFpbnRzIGFwcGxpZWQgYW5kIHRoZVxuICogd29ybGQgdHJhbnNmb3JtIGNvbXB1dGVkIGJ5IHtAbGluayBTa2VsZXRvbi51cGRhdGVXb3JsZFRyYW5zZm9ybX0gYW5kIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0uXG4gKlxuICogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBpcyBjaGFuZ2VkLCBjYWxsIHtAbGluayB1cGRhdGVMb2NhbFRyYW5zZm9ybX0gYmVmb3JlIHVzaW5nIHRoZSBsb2NhbCB0cmFuc2Zvcm0uIFRoZSBsb2NhbFxuICogdHJhbnNmb3JtIG1heSBiZSBuZWVkZWQgYnkgb3RoZXIgY29kZSAoZWcgdG8gYXBwbHkgYW5vdGhlciBjb25zdHJhaW50KS5cbiAqXG4gKiBBZnRlciBjaGFuZ2luZyB0aGUgd29ybGQgdHJhbnNmb3JtLCBjYWxsIHtAbGluayB1cGRhdGVXb3JsZFRyYW5zZm9ybX0gb24gZXZlcnkgZGVzY2VuZGFudCBib25lLiBJdCBtYXkgYmUgbW9yZVxuICogY29udmVuaWVudCB0byBtb2RpZnkgdGhlIGxvY2FsIHRyYW5zZm9ybSBpbnN0ZWFkLCB0aGVuIGNhbGwge0BsaW5rIFNrZWxldG9uLnVwZGF0ZVdvcmxkVHJhbnNmb3JtfSB0byB1cGRhdGUgdGhlIHdvcmxkXG4gKiB0cmFuc2Zvcm1zIGZvciBhbGwgYm9uZXMgYW5kIGFwcGx5IGNvbnN0cmFpbnRzLiAqL1xuZXhwb3J0IGNsYXNzIEJvbmVQb3NlIGltcGxlbWVudHMgUG9zZTxCb25lUG9zZT4sIFVwZGF0ZSB7XG5cdGJvbmUhOiBCb25lO1xuXG5cdC8qKiBUaGUgbG9jYWwgeCB0cmFuc2xhdGlvbi4gKi9cblx0eCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCB5IHRyYW5zbGF0aW9uLiAqL1xuXHR5ID0gMDtcblxuXHQvKiogVGhlIGxvY2FsIHJvdGF0aW9uIGluIGRlZ3JlZXMsIGNvdW50ZXIgY2xvY2t3aXNlLiAqL1xuXHRyb3RhdGlvbiA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVguICovXG5cdHNjYWxlWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzY2FsZVkuICovXG5cdHNjYWxlWSA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclguICovXG5cdHNoZWFyWCA9IDA7XG5cblx0LyoqIFRoZSBsb2NhbCBzaGVhclkuICovXG5cdHNoZWFyWSA9IDA7XG5cblx0aW5oZXJpdCA9IEluaGVyaXQuTm9ybWFsO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGEgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeCBjb21wb25lbnQuICovXG5cdGIgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB4LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGMgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgdHJhbnNmb3JtIGBbYSBiXVtjIGRdYCB5LWF4aXMgeSBjb21wb25lbnQuICovXG5cdGQgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWCBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFkgPSAwO1xuXG5cdC8qKiBUaGUgd29ybGQgWSBwb3NpdGlvbi4gSWYgY2hhbmdlZCwge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBzaG91bGQgYmUgY2FsbGVkLiAqL1xuXHR3b3JsZFggPSAwO1xuXG5cdHdvcmxkID0gMDtcblx0bG9jYWwgPSAwO1xuXG5cdHNldCAocG9zZTogQm9uZVBvc2UpOiB2b2lkIHtcblx0XHRpZiAocG9zZSA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJwb3NlIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLnggPSBwb3NlLng7XG5cdFx0dGhpcy55ID0gcG9zZS55O1xuXHRcdHRoaXMucm90YXRpb24gPSBwb3NlLnJvdGF0aW9uO1xuXHRcdHRoaXMuc2NhbGVYID0gcG9zZS5zY2FsZVg7XG5cdFx0dGhpcy5zY2FsZVkgPSBwb3NlLnNjYWxlWTtcblx0XHR0aGlzLnNoZWFyWCA9IHBvc2Uuc2hlYXJYO1xuXHRcdHRoaXMuc2hlYXJZID0gcG9zZS5zaGVhclk7XG5cdFx0dGhpcy5pbmhlcml0ID0gcG9zZS5pbmhlcml0O1xuXHR9XG5cblx0c2V0UG9zaXRpb24gKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHR9XG5cblx0c2V0U2NhbGUgKHNjYWxlWDogbnVtYmVyLCBzY2FsZVk6IG51bWJlcik6IHZvaWQ7XG5cdHNldFNjYWxlIChzY2FsZTogbnVtYmVyKTogdm9pZDtcblx0c2V0U2NhbGUgKHNjYWxlT3JYOiBudW1iZXIsIHNjYWxlWT86IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMuc2NhbGVYID0gc2NhbGVPclg7XG5cdFx0dGhpcy5zY2FsZVkgPSBzY2FsZVkgPT09IHVuZGVmaW5lZCA/IHNjYWxlT3JYIDogc2NhbGVZO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgaG93IHBhcmVudCB3b3JsZCB0cmFuc2Zvcm1zIGFmZmVjdCB0aGlzIGJvbmUuICovXG5cdHB1YmxpYyBnZXRJbmhlcml0ICgpOiBJbmhlcml0IHtcblx0XHRyZXR1cm4gdGhpcy5pbmhlcml0O1xuXHR9XG5cblx0cHVibGljIHNldEluaGVyaXQgKGluaGVyaXQ6IEluaGVyaXQpOiB2b2lkIHtcblx0XHRpZiAoaW5oZXJpdCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJpbmhlcml0IGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHR0aGlzLmluaGVyaXQgPSBpbmhlcml0O1xuXHR9XG5cblx0LyoqIENhbGxlZCBieSB7QGxpbmsgU2tlbGV0b24udXBkYXRlQ2FjaGV9IHRvIGNvbXB1dGUgdGhlIHdvcmxkIHRyYW5zZm9ybSwgaWYgbmVlZGVkLiAqL1xuXHRwdWJsaWMgdXBkYXRlIChza2VsZXRvbjogU2tlbGV0b24sIHBoeXNpY3M6IFBoeXNpY3MpOiB2b2lkIHtcblx0XHRpZiAodGhpcy53b3JsZCAhPT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHQvKiogQ29tcHV0ZXMgdGhlIHdvcmxkIHRyYW5zZm9ybSB1c2luZyB0aGUgcGFyZW50IGJvbmUncyB3b3JsZCB0cmFuc2Zvcm0gYW5kIHRoaXMgYXBwbGllZCBsb2NhbCBwb3NlLiBDaGlsZCBib25lcyBhcmUgbm90XG5cdCAqIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIFNlZSA8YSBocmVmPVwiaHR0cHM6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1ydW50aW1lLXNrZWxldG9ucyNXb3JsZC10cmFuc2Zvcm1zXCI+V29ybGQgdHJhbnNmb3JtczwvYT4gaW4gdGhlIFNwaW5lXG5cdCAqIFJ1bnRpbWVzIEd1aWRlLiAqL1xuXHR1cGRhdGVXb3JsZFRyYW5zZm9ybSAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpXG5cdFx0XHR0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHNrZWxldG9uKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcblx0XHRjb25zdCBzY2FsZVggPSB0aGlzLnNjYWxlWDtcblx0XHRjb25zdCBzY2FsZVkgPSB0aGlzLnNjYWxlWTtcblx0XHRjb25zdCBzaGVhclggPSB0aGlzLnNoZWFyWDtcblx0XHRjb25zdCBzaGVhclkgPSB0aGlzLnNoZWFyWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHsgLy8gUm9vdCBib25lLlxuXHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZO1xuXHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdHRoaXMuYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWCAqIHN4O1xuXHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHR0aGlzLmMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVggKiBzeTtcblx0XHRcdHRoaXMuZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWSAqIHN5O1xuXHRcdFx0dGhpcy53b3JsZFggPSB0aGlzLnggKiBzeCArIHNrZWxldG9uLng7XG5cdFx0XHR0aGlzLndvcmxkWSA9IHRoaXMueSAqIHN5ICsgc2tlbGV0b24ueTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmJvbmUucGFyZW50LmFwcGxpZWRQb3NlO1xuXHRcdGxldCBwYSA9IHBhcmVudC5hLCBwYiA9IHBhcmVudC5iLCBwYyA9IHBhcmVudC5jLCBwZCA9IHBhcmVudC5kO1xuXHRcdHRoaXMud29ybGRYID0gcGEgKiB0aGlzLnggKyBwYiAqIHRoaXMueSArIHBhcmVudC53b3JsZFg7XG5cdFx0dGhpcy53b3JsZFkgPSBwYyAqIHRoaXMueCArIHBkICogdGhpcy55ICsgcGFyZW50LndvcmxkWTtcblxuXHRcdHN3aXRjaCAodGhpcy5pbmhlcml0KSB7XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9ybWFsOiB7XG5cdFx0XHRcdGNvbnN0IHJ4ID0gKHJvdGF0aW9uICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHJvdGF0aW9uICsgOTAgKyBzaGVhclkpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgbGEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxiID0gTWF0aC5jb3MocnkpICogc2NhbGVZO1xuXHRcdFx0XHRjb25zdCBsYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdHRoaXMuYSA9IHBhICogbGEgKyBwYiAqIGxjO1xuXHRcdFx0XHR0aGlzLmIgPSBwYSAqIGxiICsgcGIgKiBsZDtcblx0XHRcdFx0dGhpcy5jID0gcGMgKiBsYSArIHBkICogbGM7XG5cdFx0XHRcdHRoaXMuZCA9IHBjICogbGIgKyBwZCAqIGxkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4ID0gc2tlbGV0b24uc2NhbGVYLCBzeSA9IHNrZWxldG9uLnNjYWxlWTtcblx0XHRcdFx0Y29uc3QgcnggPSAocm90YXRpb24gKyBzaGVhclgpICogTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRcdFx0Y29uc3QgcnkgPSAocm90YXRpb24gKyA5MCArIHNoZWFyWSkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHR0aGlzLmEgPSBNYXRoLmNvcyhyeCkgKiBzY2FsZVggKiBzeDtcblx0XHRcdFx0dGhpcy5iID0gTWF0aC5jb3MocnkpICogc2NhbGVZICogc3g7XG5cdFx0XHRcdHRoaXMuYyA9IE1hdGguc2luKHJ4KSAqIHNjYWxlWCAqIHN5O1xuXHRcdFx0XHR0aGlzLmQgPSBNYXRoLnNpbihyeSkgKiBzY2FsZVkgKiBzeTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9Sb3RhdGlvbk9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRjb25zdCBzeCA9IHNrZWxldG9uLnNjYWxlWCwgc3kgPSBza2VsZXRvbi5zY2FsZVksIHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHRwYSAqPSBzeGk7XG5cdFx0XHRcdHBjICo9IHN5aTtcblx0XHRcdFx0bGV0IHMgPSBwYSAqIHBhICsgcGMgKiBwYztcblx0XHRcdFx0bGV0IHIgPSAwO1xuXHRcdFx0XHRpZiAocyA+IE1hdGhVdGlscy5lcHNpbG9uMikge1xuXHRcdFx0XHRcdHMgPSBNYXRoLmFicyhwYSAqIHBkICogc3lpIC0gcGIgKiBzeGkgKiBwYykgLyBzO1xuXHRcdFx0XHRcdHBiID0gcGMgKiBzO1xuXHRcdFx0XHRcdHBkID0gcGEgKiBzO1xuXHRcdFx0XHRcdHIgPSByb3RhdGlvbiAtIE1hdGhVdGlscy5hdGFuMkRlZyhwYywgcGEpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhID0gMDtcblx0XHRcdFx0XHRwYyA9IDA7XG5cdFx0XHRcdFx0ciA9IHJvdGF0aW9uIC0gOTAgKyBNYXRoVXRpbHMuYXRhbjJEZWcocGQsIHBiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByeCA9IChyICsgc2hlYXJYKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKHIgKyBzaGVhclkgKyA5MCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdFx0XHRjb25zdCBsYSA9IE1hdGguY29zKHJ4KSAqIHNjYWxlWDtcblx0XHRcdFx0Y29uc3QgbGIgPSBNYXRoLmNvcyhyeSkgKiBzY2FsZVk7XG5cdFx0XHRcdGNvbnN0IGxjID0gTWF0aC5zaW4ocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsZCA9IE1hdGguc2luKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0dGhpcy5hID0gKHBhICogbGEgLSBwYiAqIGxjKSAqIHN4O1xuXHRcdFx0XHR0aGlzLmIgPSAocGEgKiBsYiAtIHBiICogbGQpICogc3g7XG5cdFx0XHRcdHRoaXMuYyA9IChwYyAqIGxhICsgcGQgKiBsYykgKiBzeTtcblx0XHRcdFx0dGhpcy5kID0gKHBjICogbGIgKyBwZCAqIGxkKSAqIHN5O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlOlxuXHRcdFx0Y2FzZSBJbmhlcml0Lk5vU2NhbGVPclJlZmxlY3Rpb246IHtcblx0XHRcdFx0Y29uc3Qgc3ggPSBza2VsZXRvbi5zY2FsZVgsIHN5ID0gc2tlbGV0b24uc2NhbGVZLCBzeGkgPSAxIC8gc3gsIHN5aSA9IDEgLyBzeTtcblx0XHRcdFx0Y29uc3QgciA9IHJvdGF0aW9uICogTWF0aFV0aWxzLmRlZ1JhZCwgY29zID0gTWF0aC5jb3MociksIHNpbiA9IE1hdGguc2luKHIpO1xuXHRcdFx0XHRsZXQgemEgPSAocGEgKiBjb3MgKyBwYiAqIHNpbikgKiBzeGk7XG5cdFx0XHRcdGxldCB6YyA9IChwYyAqIGNvcyArIHBkICogc2luKSAqIHN5aTtcblx0XHRcdFx0Y29uc3QgcyA9IDEgLyBNYXRoLnNxcnQoemEgKiB6YSArIHpjICogemMpO1xuXHRcdFx0XHR6YSAqPSBzO1xuXHRcdFx0XHR6YyAqPSBzO1xuXHRcdFx0XHRsZXQgemIgPSAtemMsIHpkID0gemE7XG5cdFx0XHRcdGlmICh0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiBwYSAqIHBkIC0gcGIgKiBwYyA8IDAgIT09IChzeCA8IDAgIT09IHN5IDwgMCkpIHtcblx0XHRcdFx0XHR6YiA9IC16Yjtcblx0XHRcdFx0XHR6ZCA9IC16ZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByeCA9IHNoZWFyWCAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IHJ5ID0gKDkwICsgc2hlYXJZKSAqIE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGxhID0gTWF0aC5jb3MocngpICogc2NhbGVYO1xuXHRcdFx0XHRjb25zdCBsYiA9IE1hdGguY29zKHJ5KSAqIHNjYWxlWTtcblx0XHRcdFx0Y29uc3QgbGMgPSBNYXRoLnNpbihyeCkgKiBzY2FsZVg7XG5cdFx0XHRcdGNvbnN0IGxkID0gTWF0aC5zaW4ocnkpICogc2NhbGVZO1xuXHRcdFx0XHR0aGlzLmEgPSAoemEgKiBsYSArIHpiICogbGMpICogc3g7XG5cdFx0XHRcdHRoaXMuYiA9ICh6YSAqIGxiICsgemIgKiBsZCkgKiBzeDtcblx0XHRcdFx0dGhpcy5jID0gKHpjICogbGEgKyB6ZCAqIGxjKSAqIHN5O1xuXHRcdFx0XHR0aGlzLmQgPSAoemMgKiBsYiArIHpkICogbGQpICogc3k7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBDb21wdXRlcyB0aGUgbG9jYWwgdHJhbnNmb3JtIHZhbHVlcyBmcm9tIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXG5cdCAqXG5cdCAqIElmIHRoZSB3b3JsZCB0cmFuc2Zvcm0gaXMgbW9kaWZpZWQgKGJ5IGEgY29uc3RyYWludCwge0BsaW5rIHJvdGF0ZVdvcmxkfSwgZXRjKSB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgc29cblx0ICogdGhlIGxvY2FsIHRyYW5zZm9ybSBtYXRjaGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0uIFRoZSBsb2NhbCB0cmFuc2Zvcm0gbWF5IGJlIG5lZWRlZCBieSBvdGhlciBjb2RlIChlZyB0byBhcHBseSBhbm90aGVyXG5cdCAqIGNvbnN0cmFpbnQpLlxuXHQgKlxuXHQgKiBTb21lIGluZm9ybWF0aW9uIGlzIGFtYmlndW91cyBpbiB0aGUgd29ybGQgdHJhbnNmb3JtLCBzdWNoIGFzIC0xLC0xIHNjYWxlIHZlcnN1cyAxODAgcm90YXRpb24uIFRoZSBsb2NhbCB0cmFuc2Zvcm0gYWZ0ZXJcblx0ICogY2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBsb2NhbCB0cmFuc2Zvcm0gdXNlZCB0byBjb21wdXRlIHRoZSB3b3JsZCB0cmFuc2Zvcm0sIGJ1dCBtYXkgbm90IGJlIGlkZW50aWNhbC4gKi9cblx0cHVibGljIHVwZGF0ZUxvY2FsVHJhbnNmb3JtIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHR0aGlzLmxvY2FsID0gMDtcblx0XHR0aGlzLndvcmxkID0gc2tlbGV0b24uX3VwZGF0ZTtcblxuXHRcdGNvbnN0IHN4ID0gc2tlbGV0b24uc2NhbGVYLCBzeSA9IHNrZWxldG9uLnNjYWxlWTtcblx0XHRpZiAoIXRoaXMuYm9uZS5wYXJlbnQpIHtcblx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0dGhpcy54ID0gKHRoaXMud29ybGRYIC0gc2tlbGV0b24ueCkgKiBzeGk7XG5cdFx0XHR0aGlzLnkgPSAodGhpcy53b3JsZFkgLSBza2VsZXRvbi55KSAqIHN5aTtcblx0XHRcdHRoaXMuc2V0NSh0aGlzLmEgKiBzeGksIHRoaXMuYiAqIHN4aSwgdGhpcy5jICogc3lpLCB0aGlzLmQgKiBzeWksIDApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2U7XG5cdFx0bGV0IHBhID0gcGFyZW50LmEsIHBiID0gcGFyZW50LmIsIHBjID0gcGFyZW50LmMsIHBkID0gcGFyZW50LmQ7XG5cdFx0Y29uc3QgcGFkID0gcGEgKiBwZCAtIHBiICogcGMsIHBpZCA9IDEgLyAocGEgKiBwZCAtIHBiICogcGMpO1xuXHRcdGNvbnN0IGlhID0gcGQgKiBwaWQsIGliID0gcGIgKiBwaWQsIGljID0gcGMgKiBwaWQsIGlkID0gcGEgKiBwaWQ7XG5cdFx0Y29uc3QgZHggPSB0aGlzLndvcmxkWCAtIHBhcmVudC53b3JsZFgsIGR5ID0gdGhpcy53b3JsZFkgLSBwYXJlbnQud29ybGRZO1xuXHRcdHRoaXMueCA9IGR4ICogaWEgLSBkeSAqIGliO1xuXHRcdHRoaXMueSA9IGR5ICogaWQgLSBkeCAqIGljO1xuXG5cdFx0c3dpdGNoICh0aGlzLmluaGVyaXQpIHtcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob3JtYWw6IHRoaXMuc2V0NShpYSAqIHRoaXMuYSAtIGliICogdGhpcy5jLCBpYSAqIHRoaXMuYiAtIGliICogdGhpcy5kLCBpZCAqIHRoaXMuYyAtIGljICogdGhpcy5hLCBpZCAqIHRoaXMuZCAtIGljICogdGhpcy5iLCAwKTsgYnJlYWs7XG5cdFx0XHRjYXNlIEluaGVyaXQuT25seVRyYW5zbGF0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHR0aGlzLnNldDUodGhpcy5hICogc3hpLCB0aGlzLmIgKiBzeGksIHRoaXMuYyAqIHN5aSwgdGhpcy5kICogc3lpLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9Sb3RhdGlvbk9yUmVmbGVjdGlvbjoge1xuXHRcdFx0XHRjb25zdCBzeGkgPSAxIC8gc3gsIHN5aSA9IDEgLyBzeTtcblx0XHRcdFx0cGEgKj0gc3hpO1xuXHRcdFx0XHRwYyAqPSBzeWk7XG5cdFx0XHRcdGNvbnN0IHdhID0gdGhpcy5hICogc3hpLCB3YiA9IHRoaXMuYiAqIHN4aSwgd2MgPSB0aGlzLmMgKiBzeWksIHdkID0gdGhpcy5kICogc3lpO1xuXHRcdFx0XHRjb25zdCBzID0gMSAvIChwYSAqIHBhICsgcGMgKiBwYyksIGRldCA9IDEgLyBNYXRoLmFicyhwYWQgKiBzeGkgKiBzeWkpO1xuXHRcdFx0XHR0aGlzLnNldDUoKHBhICogd2EgKyBwYyAqIHdjKSAqIHMsIChwYSAqIHdiICsgcGMgKiB3ZCkgKiBzLCAocGEgKiB3YyAtIHBjICogd2EpICogZGV0LCAocGEgKiB3ZCAtIHBjICogd2IpICogZGV0LFxuXHRcdFx0XHRcdE1hdGhVdGlscy5hdGFuMkRlZyhwYywgcGEpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIEluaGVyaXQuTm9TY2FsZTpcblx0XHRcdGNhc2UgSW5oZXJpdC5Ob1NjYWxlT3JSZWZsZWN0aW9uOiB7XG5cdFx0XHRcdGNvbnN0IHN4aSA9IDEgLyBzeCwgc3lpID0gMSAvIHN5O1xuXHRcdFx0XHRjb25zdCB3YSA9IHRoaXMuYSAqIHN4aSwgd2IgPSB0aGlzLmIgKiBzeGksIHdjID0gdGhpcy5jICogc3lpLCB3ZCA9IHRoaXMuZCAqIHN5aTtcblx0XHRcdFx0bGV0IHR4ID0gcGQgKiB0aGlzLmEgLSBwYiAqIHRoaXMuYywgdHkgPSBwYSAqIHRoaXMuYyAtIHBjICogdGhpcy5hO1xuXHRcdFx0XHRpZiAocGFkIDwgMCkge1xuXHRcdFx0XHRcdHR4ID0gLXR4O1xuXHRcdFx0XHRcdHR5ID0gLXR5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCByID0gTWF0aFV0aWxzLmF0YW4yRGVnKHR5LCB0eCk7XG5cdFx0XHRcdHRoaXMucm90YXRpb24gPSByO1xuXHRcdFx0XHRyICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0XHRcdGNvbnN0IGNvcyA9IE1hdGguY29zKHIpLCBzaW4gPSBNYXRoLnNpbihyKTtcblx0XHRcdFx0bGV0IHphID0gKHBhICogY29zICsgcGIgKiBzaW4pICogc3hpO1xuXHRcdFx0XHRsZXQgemMgPSAocGMgKiBjb3MgKyBwZCAqIHNpbikgKiBzeWk7XG5cdFx0XHRcdGNvbnN0IHMgPSAxIC8gTWF0aC5zcXJ0KHphICogemEgKyB6YyAqIHpjKTtcblx0XHRcdFx0emEgKj0gcztcblx0XHRcdFx0emMgKj0gcztcblx0XHRcdFx0Y29uc3Qgc2kgPSB0aGlzLmluaGVyaXQgPT09IEluaGVyaXQuTm9TY2FsZSAmJiBwYWQgPCAwICE9PSAoc3ggPCAwICE9PSBzeSA8IDApID8gLTEgOiAxO1xuXHRcdFx0XHR0aGlzLnNldDQoemEgKiB3YSArIHpjICogd2MsIHphICogd2IgKyB6YyAqIHdkLCAoemEgKiB3YyAtIHpjICogd2EpICogc2ksICh6YSAqIHdkIC0gemMgKiB3YikgKiBzaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzZXQ0IChyYTogbnVtYmVyLCByYjogbnVtYmVyLCByYzogbnVtYmVyLCByZDogbnVtYmVyKTogdm9pZCB7XG5cdFx0Y29uc3QgeCA9IHJhICogcmEgKyByYyAqIHJjLCB5ID0gcmIgKiByYiArIHJkICogcmQ7XG5cdFx0aWYgKHggPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdHRoaXMuc2hlYXJYID0gTWF0aFV0aWxzLmF0YW4yRGVnKHJjLCByYSk7XG5cdFx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydCh4KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaGVhclggPSAwO1xuXHRcdFx0dGhpcy5zY2FsZVggPSAwO1xuXHRcdH1cblx0XHR0aGlzLnNjYWxlWSA9IE1hdGguc3FydCh5KTtcblx0XHRpZiAoeSA+IE1hdGhVdGlscy5lcHNpbG9uMikge1xuXHRcdFx0dGhpcy5zaGVhclkgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKTtcblx0XHRcdGlmIChyYSAqIHJkIC0gcmIgKiByYyA8IDApIHtcblx0XHRcdFx0dGhpcy5zY2FsZVkgPSAtdGhpcy5zY2FsZVk7XG5cdFx0XHRcdHRoaXMuc2hlYXJZICs9IDkwO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHRoaXMuc2hlYXJZIC09IDkwO1xuXHRcdFx0aWYgKHRoaXMuc2hlYXJZID4gMTgwKVxuXHRcdFx0XHR0aGlzLnNoZWFyWSAtPSAzNjA7XG5cdFx0XHRlbHNlIGlmICh0aGlzLnNoZWFyWSA8PSAtMTgwKSAvL1xuXHRcdFx0XHR0aGlzLnNoZWFyWSArPSAzNjA7XG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLnNoZWFyWSA9IDA7XG5cdH1cblxuXHRwcml2YXRlIHNldDUgKHJhOiBudW1iZXIsIHJiOiBudW1iZXIsIHJjOiBudW1iZXIsIHJkOiBudW1iZXIsIHJvOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLnNoZWFyWCA9IDA7XG5cdFx0Y29uc3QgeCA9IHJhICogcmEgKyByYyAqIHJjLCB5ID0gcmIgKiByYiArIHJkICogcmQ7XG5cdFx0aWYgKHggPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdGNvbnN0IHIgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmMsIHJhKTtcblx0XHRcdHRoaXMucm90YXRpb24gPSByICsgcm87XG5cdFx0XHR0aGlzLnNjYWxlWCA9IE1hdGguc3FydCh4KTtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHkpO1xuXHRcdFx0aWYgKHkgPiBNYXRoVXRpbHMuZXBzaWxvbjIpIHtcblx0XHRcdFx0dGhpcy5zaGVhclkgPSBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKTtcblx0XHRcdFx0aWYgKHJhICogcmQgLSByYiAqIHJjIDwgMCkge1xuXHRcdFx0XHRcdHRoaXMuc2NhbGVZID0gLXRoaXMuc2NhbGVZO1xuXHRcdFx0XHRcdHRoaXMuc2hlYXJZICs9IDkwIC0gcjtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0dGhpcy5zaGVhclkgLT0gOTAgKyByO1xuXHRcdFx0XHRpZiAodGhpcy5zaGVhclkgPiAxODApXG5cdFx0XHRcdFx0dGhpcy5zaGVhclkgLT0gMzYwO1xuXHRcdFx0XHRlbHNlIGlmICh0aGlzLnNoZWFyWSA8PSAtMTgwKSAvL1xuXHRcdFx0XHRcdHRoaXMuc2hlYXJZICs9IDM2MDtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHR0aGlzLnNoZWFyWSA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2NhbGVYID0gMDtcblx0XHRcdHRoaXMuc2NhbGVZID0gTWF0aC5zcXJ0KHkpO1xuXHRcdFx0dGhpcy5zaGVhclkgPSAwO1xuXHRcdFx0dGhpcy5yb3RhdGlvbiA9IHkgPiBNYXRoVXRpbHMuZXBzaWxvbjIgPyBNYXRoVXRpbHMuYXRhbjJEZWcocmQsIHJiKSAtIDkwICsgcm8gOiBybztcblx0XHR9XG5cdH1cblxuXHQvKiogSWYgdGhlIHdvcmxkIHRyYW5zZm9ybSBoYXMgYmVlbiBtb2RpZmllZCBieSBjb25zdHJhaW50cyBhbmQgdGhlIGxvY2FsIHRyYW5zZm9ybSBubyBsb25nZXIgbWF0Y2hlcyxcblx0ICoge0BsaW5rIHVwZGF0ZUxvY2FsVHJhbnNmb3JtfSBpcyBjYWxsZWQuIENhbGwgdGhpcyBhZnRlciB7QGxpbmsgU2tlbGV0b24udXBkYXRlV29ybGRUcmFuc2Zvcm19IGJlZm9yZVxuXHQgKiB1c2luZyB0aGUgYXBwbGllZCBsb2NhbCB0cmFuc2Zvcm0uICovXG5cdHB1YmxpYyB2YWxpZGF0ZUxvY2FsVHJhbnNmb3JtIChza2VsZXRvbjogU2tlbGV0b24pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbCA9PT0gc2tlbGV0b24uX3VwZGF0ZSkgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybShza2VsZXRvbik7XG5cdH1cblxuXHRtb2RpZnlMb2NhbCAoc2tlbGV0b246IFNrZWxldG9uKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9jYWwgPT09IHNrZWxldG9uLl91cGRhdGUpIHRoaXMudXBkYXRlTG9jYWxUcmFuc2Zvcm0oc2tlbGV0b24pO1xuXHRcdHRoaXMud29ybGQgPSAwO1xuXHRcdHRoaXMucmVzZXRXb3JsZChza2VsZXRvbi5fdXBkYXRlKTtcblx0fVxuXG5cdG1vZGlmeVdvcmxkICh1cGRhdGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubG9jYWwgPSB1cGRhdGU7XG5cdFx0dGhpcy53b3JsZCA9IHVwZGF0ZTtcblx0XHR0aGlzLnJlc2V0V29ybGQodXBkYXRlKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRXb3JsZCAodXBkYXRlOiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBjaGlsZHJlbiA9IHRoaXMuYm9uZS5jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBpID0gMCwgbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3QgY2hpbGQgPSBjaGlsZHJlbltpXS5hcHBsaWVkUG9zZTtcblx0XHRcdGlmIChjaGlsZC53b3JsZCA9PT0gdXBkYXRlKSB7XG5cdFx0XHRcdGNoaWxkLndvcmxkID0gMDtcblx0XHRcdFx0Y2hpbGQubG9jYWwgPSAwO1xuXHRcdFx0XHRjaGlsZC5yZXNldFdvcmxkKHVwZGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIFRoZSB3b3JsZCByb3RhdGlvbiBmb3IgdGhlIFggYXhpcywgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgYX0gYW5kIHtAbGluayBjfS4gVGhpcyBpcyB0aGUgZGlyZWN0aW9uIHRoZSBib25lIGlzXG5cdCAqIHBvaW50aW5nLiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRSb3RhdGlvblggKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmMsIHRoaXMuYSk7XG5cdH1cblxuXHQvKiogVGhlIHdvcmxkIHJvdGF0aW9uIGZvciB0aGUgWSBheGlzLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBifSBhbmQge0BsaW5rIGR9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRSb3RhdGlvblkgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmQsIHRoaXMuYik7XG5cdH1cblxuXHQvKiogVGhlIG1hZ25pdHVkZSAoYWx3YXlzIHBvc2l0aXZlKSBvZiB0aGUgd29ybGQgc2NhbGUgWCwgY2FsY3VsYXRlZCB1c2luZyB7QGxpbmsgYX0gYW5kIHtAbGluayBjfS4gKi9cblx0cHVibGljIGdldFdvcmxkU2NhbGVYICgpOiBudW1iZXIge1xuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy5hICogdGhpcy5hICsgdGhpcy5jICogdGhpcy5jKTtcblx0fVxuXG5cdC8qKiBUaGUgbWFnbml0dWRlIChhbHdheXMgcG9zaXRpdmUpIG9mIHRoZSB3b3JsZCBzY2FsZSBZLCBjYWxjdWxhdGVkIHVzaW5nIHtAbGluayBifSBhbmQge0BsaW5rIGR9LiAqL1xuXHRwdWJsaWMgZ2V0V29ybGRTY2FsZVkgKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLmIgKiB0aGlzLmIgKyB0aGlzLmQgKiB0aGlzLmQpO1xuXHR9XG5cblx0Ly8gcHVibGljIE1hdHJpeDMgZ2V0V29ybGRUcmFuc2Zvcm0gKE1hdHJpeDMgd29ybGRUcmFuc2Zvcm0pIHtcblx0Ly8gXHRpZiAod29ybGRUcmFuc2Zvcm0gPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihcIndvcmxkVHJhbnNmb3JtIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0Ly8gXHRmbG9hdFtdIHZhbCA9IHdvcmxkVHJhbnNmb3JtLnZhbDtcblx0Ly8gXHR2YWxbTTAwXSA9IGE7XG5cdC8vIFx0dmFsW00wMV0gPSBiO1xuXHQvLyBcdHZhbFtNMTBdID0gYztcblx0Ly8gXHR2YWxbTTExXSA9IGQ7XG5cdC8vIFx0dmFsW00wMl0gPSB3b3JsZFg7XG5cdC8vIFx0dmFsW00xMl0gPSB3b3JsZFk7XG5cdC8vIFx0dmFsW00yMF0gPSAwO1xuXHQvLyBcdHZhbFtNMjFdID0gMDtcblx0Ly8gXHR2YWxbTTIyXSA9IDE7XG5cdC8vIFx0cmV0dXJuIHdvcmxkVHJhbnNmb3JtO1xuXHQvLyB9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSBwb2ludCBmcm9tIHdvcmxkIGNvb3JkaW5hdGVzIHRvIHRoZSBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyB3b3JsZFRvTG9jYWwgKHdvcmxkOiBWZWN0b3IyKTogVmVjdG9yMiB7XG5cdFx0aWYgKHdvcmxkID09IG51bGwpIHRocm93IG5ldyBFcnJvcihcIndvcmxkIGNhbm5vdCBiZSBudWxsLlwiKTtcblx0XHRjb25zdCBkZXQgPSB0aGlzLmEgKiB0aGlzLmQgLSB0aGlzLmIgKiB0aGlzLmM7XG5cdFx0Y29uc3QgeCA9IHdvcmxkLnggLSB0aGlzLndvcmxkWCwgeSA9IHdvcmxkLnkgLSB0aGlzLndvcmxkWTtcblx0XHR3b3JsZC54ID0gKHggKiB0aGlzLmQgLSB5ICogdGhpcy5iKSAvIGRldDtcblx0XHR3b3JsZC55ID0gKHkgKiB0aGlzLmEgLSB4ICogdGhpcy5jKSAvIGRldDtcblx0XHRyZXR1cm4gd29ybGQ7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gdGhlIGJvbmUncyBsb2NhbCBjb29yZGluYXRlcyB0byB3b3JsZCBjb29yZGluYXRlcy4gKi9cblx0cHVibGljIGxvY2FsVG9Xb3JsZCAobG9jYWw6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAobG9jYWwgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwibG9jYWwgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdGNvbnN0IHggPSBsb2NhbC54LCB5ID0gbG9jYWwueTtcblx0XHRsb2NhbC54ID0geCAqIHRoaXMuYSArIHkgKiB0aGlzLmIgKyB0aGlzLndvcmxkWDtcblx0XHRsb2NhbC55ID0geCAqIHRoaXMuYyArIHkgKiB0aGlzLmQgKyB0aGlzLndvcmxkWTtcblx0XHRyZXR1cm4gbG9jYWw7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIHBvaW50IGZyb20gd29ybGQgY29vcmRpbmF0ZXMgdG8gdGhlIHBhcmVudCBib25lJ3MgbG9jYWwgY29vcmRpbmF0ZXMuICovXG5cdHB1YmxpYyB3b3JsZFRvUGFyZW50ICh3b3JsZDogVmVjdG9yMik6IFZlY3RvcjIge1xuXHRcdGlmICh3b3JsZCA9PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JsZCBjYW5ub3QgYmUgbnVsbC5cIik7XG5cdFx0cmV0dXJuIHRoaXMuYm9uZS5wYXJlbnQgPT0gbnVsbCA/IHdvcmxkIDogdGhpcy5ib25lLnBhcmVudC5hcHBsaWVkUG9zZS53b3JsZFRvTG9jYWwod29ybGQpO1xuXHR9XG5cblx0LyoqIFRyYW5zZm9ybXMgYSBwb2ludCBmcm9tIHRoZSBwYXJlbnQgYm9uZSdzIGNvb3JkaW5hdGVzIHRvIHdvcmxkIGNvb3JkaW5hdGVzLiAqL1xuXHRwdWJsaWMgcGFyZW50VG9Xb3JsZCAod29ybGQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcblx0XHRpZiAod29ybGQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwid29ybGQgY2Fubm90IGJlIG51bGwuXCIpO1xuXHRcdHJldHVybiB0aGlzLmJvbmUucGFyZW50ID09IG51bGwgPyB3b3JsZCA6IHRoaXMuYm9uZS5wYXJlbnQuYXBwbGllZFBvc2UubG9jYWxUb1dvcmxkKHdvcmxkKTtcblx0fVxuXG5cdC8qKiBUcmFuc2Zvcm1zIGEgd29ybGQgcm90YXRpb24gdG8gYSBsb2NhbCByb3RhdGlvbi4gKi9cblx0cHVibGljIHdvcmxkVG9Mb2NhbFJvdGF0aW9uICh3b3JsZFJvdGF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHdvcmxkUm90YXRpb24gKj0gTWF0aFV0aWxzLmRlZ1JhZDtcblx0XHRjb25zdCBzaW4gPSBNYXRoLnNpbih3b3JsZFJvdGF0aW9uKSwgY29zID0gTWF0aC5jb3Mod29ybGRSb3RhdGlvbik7XG5cdFx0cmV0dXJuIE1hdGhVdGlscy5hdGFuMkRlZyh0aGlzLmEgKiBzaW4gLSB0aGlzLmMgKiBjb3MsIHRoaXMuZCAqIGNvcyAtIHRoaXMuYiAqIHNpbikgKyB0aGlzLnJvdGF0aW9uIC0gdGhpcy5zaGVhclg7XG5cdH1cblxuXHQvKiogVHJhbnNmb3JtcyBhIGxvY2FsIHJvdGF0aW9uIHRvIGEgd29ybGQgcm90YXRpb24uICovXG5cdGxvY2FsVG9Xb3JsZFJvdGF0aW9uIChsb2NhbFJvdGF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGxvY2FsUm90YXRpb24gPSAobG9jYWxSb3RhdGlvbiAtIHRoaXMucm90YXRpb24gLSB0aGlzLnNoZWFyWCkgKiBNYXRoVXRpbHMuZGVnUmFkO1xuXHRcdGNvbnN0IHNpbiA9IE1hdGguc2luKGxvY2FsUm90YXRpb24pLCBjb3MgPSBNYXRoLmNvcyhsb2NhbFJvdGF0aW9uKTtcblx0XHRyZXR1cm4gTWF0aFV0aWxzLmF0YW4yRGVnKGNvcyAqIHRoaXMuYyArIHNpbiAqIHRoaXMuZCwgY29zICogdGhpcy5hICsgc2luICogdGhpcy5iKTtcblx0fVxuXG5cdC8qKiBSb3RhdGVzIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdGhlIHNwZWNpZmllZCBhbW91bnQuICovXG5cdHJvdGF0ZVdvcmxkIChkZWdyZWVzOiBudW1iZXIpIHtcblx0XHRkZWdyZWVzICo9IE1hdGhVdGlscy5kZWdSYWQ7XG5cdFx0Y29uc3Qgc2luID0gTWF0aC5zaW4oZGVncmVlcyksIGNvcyA9IE1hdGguY29zKGRlZ3JlZXMpO1xuXHRcdGNvbnN0IHJhID0gdGhpcy5hLCByYiA9IHRoaXMuYjtcblx0XHR0aGlzLmEgPSBjb3MgKiByYSAtIHNpbiAqIHRoaXMuYztcblx0XHR0aGlzLmIgPSBjb3MgKiByYiAtIHNpbiAqIHRoaXMuZDtcblx0XHR0aGlzLmMgPSBzaW4gKiByYSArIGNvcyAqIHRoaXMuYztcblx0XHR0aGlzLmQgPSBzaW4gKiByYiArIGNvcyAqIHRoaXMuZDtcblx0fVxufVxuIl19
|
package/dist/ConstraintData.d.ts
CHANGED
|
@@ -35,3 +35,12 @@ export declare abstract class ConstraintData<T extends Constraint<T, ConstraintD
|
|
|
35
35
|
constructor(name: string, setup: P);
|
|
36
36
|
abstract create(skeleton: Skeleton): T;
|
|
37
37
|
}
|
|
38
|
+
/** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */
|
|
39
|
+
export declare enum ScaleYMode {
|
|
40
|
+
/** scaleY is not changed. */
|
|
41
|
+
None = 0,
|
|
42
|
+
/** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */
|
|
43
|
+
Uniform = 1,
|
|
44
|
+
/** scaleY is divided by the scaleX factor, preserving the bone's area. */
|
|
45
|
+
Volume = 2
|
|
46
|
+
}
|
package/dist/ConstraintData.js
CHANGED
|
@@ -33,4 +33,14 @@ export class ConstraintData extends PosedData {
|
|
|
33
33
|
super(name, setup);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
/** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */
|
|
37
|
+
export var ScaleYMode;
|
|
38
|
+
(function (ScaleYMode) {
|
|
39
|
+
/** scaleY is not changed. */
|
|
40
|
+
ScaleYMode[ScaleYMode["None"] = 0] = "None";
|
|
41
|
+
/** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */
|
|
42
|
+
ScaleYMode[ScaleYMode["Uniform"] = 1] = "Uniform";
|
|
43
|
+
/** scaleY is divided by the scaleX factor, preserving the bone's area. */
|
|
44
|
+
ScaleYMode[ScaleYMode["Volume"] = 2] = "Volume";
|
|
45
|
+
})(ScaleYMode || (ScaleYMode = {}));
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RyYWludERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc3RyYWludERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQywrQ0FBK0M7QUFDL0MsTUFBTSxPQUFnQixjQUdyQixTQUFRLFNBQVk7SUFFcEIsWUFBYSxJQUFZLEVBQUUsS0FBUTtRQUNsQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FHRDtBQUVELDhGQUE4RjtBQUM5RixNQUFNLENBQU4sSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3JCLDZCQUE2QjtJQUM3QiwyQ0FBSSxDQUFBO0lBQ0oscUZBQXFGO0lBQ3JGLGlEQUFPLENBQUE7SUFDUCwwRUFBMEU7SUFDMUUsK0NBQU0sQ0FBQTtBQUNQLENBQUMsRUFQVyxVQUFVLEtBQVYsVUFBVSxRQU9yQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIFNwaW5lIFJ1bnRpbWVzIExpY2Vuc2UgQWdyZWVtZW50XG4gKiBMYXN0IHVwZGF0ZWQgQXByaWwgNSwgMjAyNS4gUmVwbGFjZXMgYWxsIHByaW9yIHZlcnNpb25zLlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy0yMDI1LCBFc290ZXJpYyBTb2Z0d2FyZSBMTENcbiAqXG4gKiBJbnRlZ3JhdGlvbiBvZiB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZSBvciBvdGhlcndpc2UgY3JlYXRpbmdcbiAqIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGlzIHBlcm1pdHRlZCB1bmRlciB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIFNlY3Rpb24gMiBvZiB0aGUgU3BpbmUgRWRpdG9yIExpY2Vuc2UgQWdyZWVtZW50OlxuICogaHR0cDovL2Vzb3Rlcmljc29mdHdhcmUuY29tL3NwaW5lLWVkaXRvci1saWNlbnNlXG4gKlxuICogT3RoZXJ3aXNlLCBpdCBpcyBwZXJtaXR0ZWQgdG8gaW50ZWdyYXRlIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlXG4gKiBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIChjb2xsZWN0aXZlbHksXG4gKiBcIlByb2R1Y3RzXCIpLCBwcm92aWRlZCB0aGF0IGVhY2ggdXNlciBvZiB0aGUgUHJvZHVjdHMgbXVzdCBvYnRhaW4gdGhlaXIgb3duXG4gKiBTcGluZSBFZGl0b3IgbGljZW5zZSBhbmQgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3RzIGluIGFueSBmb3JtIG11c3RcbiAqIGluY2x1ZGUgdGhpcyBsaWNlbnNlIGFuZCBjb3B5cmlnaHQgbm90aWNlLlxuICpcbiAqIFRIRSBTUElORSBSVU5USU1FUyBBUkUgUFJPVklERUQgQlkgRVNPVEVSSUMgU09GVFdBUkUgTExDIFwiQVMgSVNcIiBBTkQgQU5ZXG4gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBFU09URVJJQyBTT0ZUV0FSRSBMTEMgQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsXG4gKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRIRSBTUElORSBSVU5USU1FUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHR5cGUgeyBCb25lUG9zZSB9IGZyb20gXCIuL0JvbmVQb3NlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tIFwiLi9Db25zdHJhaW50LmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2UgfSBmcm9tIFwiLi9Qb3NlLmpzXCI7XG5pbXBvcnQgeyBQb3NlZERhdGEgfSBmcm9tIFwiLi9Qb3NlZERhdGEuanNcIjtcbmltcG9ydCB0eXBlIHsgU2tlbGV0b24gfSBmcm9tIFwiLi9Ta2VsZXRvbi5qc1wiO1xuXG4vKiogVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJhaW50IGRhdGFzLiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnN0cmFpbnREYXRhPFxuXHRUIGV4dGVuZHMgQ29uc3RyYWludDxULCBDb25zdHJhaW50RGF0YTxULCBQPiwgUD4sXG5cdFAgZXh0ZW5kcyBQb3NlPFA+PlxuXHRleHRlbmRzIFBvc2VkRGF0YTxQPiB7XG5cblx0Y29uc3RydWN0b3IgKG5hbWU6IHN0cmluZywgc2V0dXA6IFApIHtcblx0XHRzdXBlcihuYW1lLCBzZXR1cCk7XG5cdH1cblxuXHRhYnN0cmFjdCBjcmVhdGUgKHNrZWxldG9uOiBTa2VsZXRvbik6IFQ7XG59XG5cbi8qKiBEZXRlcm1pbmVzIGhvdyB0aGUge0BsaW5rIEJvbmVQb3NlLnNjYWxlWX0gY2hhbmdlcyB3aGVuIHtAbGluayBCb25lUG9zZS5zY2FsZVh9IGlzIHNldC4gKi9cbmV4cG9ydCBlbnVtIFNjYWxlWU1vZGUge1xuXHQvKiogc2NhbGVZIGlzIG5vdCBjaGFuZ2VkLiAqL1xuXHROb25lLFxuXHQvKiogc2NhbGVZIGlzIG11bHRpcGxpZWQgYnkgdGhlIHNjYWxlWCBmYWN0b3IsIHByZXNlcnZpbmcgdGhlIGJvbmUncyBhc3BlY3QgcmF0aW8uICovXG5cdFVuaWZvcm0sXG5cdC8qKiBzY2FsZVkgaXMgZGl2aWRlZCBieSB0aGUgc2NhbGVYIGZhY3RvciwgcHJlc2VydmluZyB0aGUgYm9uZSdzIGFyZWEuICovXG5cdFZvbHVtZVxufVxuIl19
|
package/dist/IkConstraint.d.ts
CHANGED
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
import type { Bone } from "./Bone.js";
|
|
30
30
|
import type { BonePose } from "./BonePose.js";
|
|
31
31
|
import { Constraint } from "./Constraint.js";
|
|
32
|
-
import {
|
|
32
|
+
import { ScaleYMode } from "./ConstraintData.js";
|
|
33
|
+
import type { IkConstraintData } from "./IkConstraintData.js";
|
|
33
34
|
import { IkConstraintPose } from "./IkConstraintPose.js";
|
|
34
35
|
import type { Physics } from "./Physics.js";
|
|
35
36
|
import type { Skeleton } from "./Skeleton.js";
|