@esotericsoftware/spine-core 4.0.7 → 4.0.11

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.
Files changed (95) hide show
  1. package/dist/Animation.js +577 -710
  2. package/dist/AnimationState.js +239 -259
  3. package/dist/AnimationStateData.js +15 -17
  4. package/dist/AssetManagerBase.d.ts +3 -0
  5. package/dist/AssetManagerBase.js +168 -147
  6. package/dist/AtlasAttachmentLoader.js +20 -22
  7. package/dist/Bone.js +89 -91
  8. package/dist/BoneData.js +4 -6
  9. package/dist/ConstraintData.js +4 -6
  10. package/dist/Event.js +4 -6
  11. package/dist/EventData.js +4 -6
  12. package/dist/IkConstraint.js +48 -50
  13. package/dist/IkConstraintData.js +12 -31
  14. package/dist/PathConstraint.js +116 -118
  15. package/dist/PathConstraintData.js +9 -28
  16. package/dist/Skeleton.d.ts +0 -4
  17. package/dist/Skeleton.js +190 -213
  18. package/dist/SkeletonBinary.js +352 -363
  19. package/dist/SkeletonBounds.js +79 -81
  20. package/dist/SkeletonClipping.js +86 -88
  21. package/dist/SkeletonData.d.ts +0 -2
  22. package/dist/SkeletonData.js +46 -66
  23. package/dist/SkeletonJson.js +307 -307
  24. package/dist/Skin.js +65 -69
  25. package/dist/Slot.js +16 -18
  26. package/dist/SlotData.js +4 -6
  27. package/dist/Texture.js +14 -39
  28. package/dist/TextureAtlas.js +56 -85
  29. package/dist/TransformConstraint.js +77 -79
  30. package/dist/TransformConstraintData.js +20 -39
  31. package/dist/Triangulator.js +71 -73
  32. package/dist/Updatable.js +1 -1
  33. package/dist/Utils.js +183 -245
  34. package/dist/VertexEffect.js +1 -1
  35. package/dist/attachments/Attachment.js +41 -62
  36. package/dist/attachments/AttachmentLoader.js +1 -1
  37. package/dist/attachments/BoundingBoxAttachment.js +9 -28
  38. package/dist/attachments/ClippingAttachment.js +9 -28
  39. package/dist/attachments/MeshAttachment.js +29 -48
  40. package/dist/attachments/PathAttachment.js +11 -30
  41. package/dist/attachments/PointAttachment.js +16 -35
  42. package/dist/attachments/RegionAttachment.js +82 -101
  43. package/dist/attachments/index.js +1 -1
  44. package/dist/iife/spine-core.js +89 -85
  45. package/dist/iife/spine-core.js.map +2 -2
  46. package/dist/iife/spine-core.min.js +2 -2
  47. package/dist/index.js +1 -1
  48. package/dist/polyfills.js +2 -2
  49. package/dist/vertexeffects/JitterEffect.js +10 -12
  50. package/dist/vertexeffects/SwirlEffect.js +18 -20
  51. package/package.json +1 -1
  52. package/dist/Animation.js.map +0 -1
  53. package/dist/AnimationState.js.map +0 -1
  54. package/dist/AnimationStateData.js.map +0 -1
  55. package/dist/AssetManagerBase.js.map +0 -1
  56. package/dist/AtlasAttachmentLoader.js.map +0 -1
  57. package/dist/Bone.js.map +0 -1
  58. package/dist/BoneData.js.map +0 -1
  59. package/dist/ConstraintData.js.map +0 -1
  60. package/dist/Event.js.map +0 -1
  61. package/dist/EventData.js.map +0 -1
  62. package/dist/IkConstraint.js.map +0 -1
  63. package/dist/IkConstraintData.js.map +0 -1
  64. package/dist/PathConstraint.js.map +0 -1
  65. package/dist/PathConstraintData.js.map +0 -1
  66. package/dist/Skeleton.js.map +0 -1
  67. package/dist/SkeletonBinary.js.map +0 -1
  68. package/dist/SkeletonBounds.js.map +0 -1
  69. package/dist/SkeletonClipping.js.map +0 -1
  70. package/dist/SkeletonData.js.map +0 -1
  71. package/dist/SkeletonJson.js.map +0 -1
  72. package/dist/Skin.js.map +0 -1
  73. package/dist/Slot.js.map +0 -1
  74. package/dist/SlotData.js.map +0 -1
  75. package/dist/Texture.js.map +0 -1
  76. package/dist/TextureAtlas.js.map +0 -1
  77. package/dist/TransformConstraint.js.map +0 -1
  78. package/dist/TransformConstraintData.js.map +0 -1
  79. package/dist/Triangulator.js.map +0 -1
  80. package/dist/Updatable.js.map +0 -1
  81. package/dist/Utils.js.map +0 -1
  82. package/dist/VertexEffect.js.map +0 -1
  83. package/dist/attachments/Attachment.js.map +0 -1
  84. package/dist/attachments/AttachmentLoader.js.map +0 -1
  85. package/dist/attachments/BoundingBoxAttachment.js.map +0 -1
  86. package/dist/attachments/ClippingAttachment.js.map +0 -1
  87. package/dist/attachments/MeshAttachment.js.map +0 -1
  88. package/dist/attachments/PathAttachment.js.map +0 -1
  89. package/dist/attachments/PointAttachment.js.map +0 -1
  90. package/dist/attachments/RegionAttachment.js.map +0 -1
  91. package/dist/attachments/index.js.map +0 -1
  92. package/dist/index.js.map +0 -1
  93. package/dist/polyfills.js.map +0 -1
  94. package/dist/vertexeffects/JitterEffect.js.map +0 -1
  95. package/dist/vertexeffects/SwirlEffect.js.map +0 -1
@@ -26,39 +26,20 @@
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
- var __extends = (this && this.__extends) || (function () {
30
- var extendStatics = function (d, b) {
31
- extendStatics = Object.setPrototypeOf ||
32
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
34
- return extendStatics(d, b);
35
- };
36
- return function (d, b) {
37
- if (typeof b !== "function" && b !== null)
38
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
39
- extendStatics(d, b);
40
- function __() { this.constructor = d; }
41
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
42
- };
43
- })();
44
29
  import { ConstraintData } from "./ConstraintData";
45
30
  /** Stores the setup pose for a {@link PathConstraint}.
46
31
  *
47
32
  * See [path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */
48
- var PathConstraintData = /** @class */ (function (_super) {
49
- __extends(PathConstraintData, _super);
50
- function PathConstraintData(name) {
51
- var _this = _super.call(this, name, 0, false) || this;
33
+ export class PathConstraintData extends ConstraintData {
34
+ constructor(name) {
35
+ super(name, 0, false);
52
36
  /** The bones that will be modified by this path constraint. */
53
- _this.bones = new Array();
54
- _this.mixRotate = 0;
55
- _this.mixX = 0;
56
- _this.mixY = 0;
57
- return _this;
37
+ this.bones = new Array();
38
+ this.mixRotate = 0;
39
+ this.mixX = 0;
40
+ this.mixY = 0;
58
41
  }
59
- return PathConstraintData;
60
- }(ConstraintData));
61
- export { PathConstraintData };
42
+ }
62
43
  /** Controls how the first bone is positioned along the path.
63
44
  *
64
45
  * See [position](http://esotericsoftware.com/spine-path-constraints#Position) in the Spine User Guide. */
@@ -86,4 +67,4 @@ export var RotateMode;
86
67
  RotateMode[RotateMode["Chain"] = 1] = "Chain";
87
68
  RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale";
88
69
  })(RotateMode || (RotateMode = {}));
89
- //# sourceMappingURL=PathConstraintData.js.map
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aENvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BhdGhDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWxEOzt5R0FFeUc7QUFDekcsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUE4QnJELFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQTdCdkIsK0RBQStEO1FBQy9ELFVBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDO1FBdUI5QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFNBQUksR0FBRyxDQUFDLENBQUM7SUFJVCxDQUFDO0NBQ0Q7QUFFRDs7MEdBRTBHO0FBQzFHLE1BQU0sQ0FBTixJQUFZLFlBQStCO0FBQTNDLFdBQVksWUFBWTtJQUFHLGlEQUFLLENBQUE7SUFBRSxxREFBTyxDQUFBO0FBQUMsQ0FBQyxFQUEvQixZQUFZLEtBQVosWUFBWSxRQUFtQjtBQUUzQzs7d0dBRXdHO0FBQ3hHLE1BQU0sQ0FBTixJQUFZLFdBQW9EO0FBQWhFLFdBQVksV0FBVztJQUFHLGlEQUFNLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsbURBQU8sQ0FBQTtJQUFFLDZEQUFZLENBQUE7QUFBQyxDQUFDLEVBQXBELFdBQVcsS0FBWCxXQUFXLFFBQXlDO0FBRWhFOzs4R0FFOEc7QUFDOUcsTUFBTSxDQUFOLElBQVksVUFBeUM7QUFBckQsV0FBWSxVQUFVO0lBQUcsaURBQU8sQ0FBQTtJQUFFLDZDQUFLLENBQUE7SUFBRSx1REFBVSxDQUFBO0FBQUMsQ0FBQyxFQUF6QyxVQUFVLEtBQVYsVUFBVSxRQUErQiJ9
@@ -101,14 +101,10 @@ export declare class Skeleton {
101
101
  getRootBone(): Bone;
102
102
  /** @returns May be null. */
103
103
  findBone(boneName: string): Bone;
104
- /** @returns -1 if the bone was not found. */
105
- findBoneIndex(boneName: string): number;
106
104
  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
107
105
  * repeatedly.
108
106
  * @returns May be null. */
109
107
  findSlot(slotName: string): Slot;
110
- /** @returns -1 if the bone was not found. */
111
- findSlotIndex(slotName: string): number;
112
108
  /** Sets a skin by name.
113
109
  *
114
110
  * See {@link #setSkin()}. */
package/dist/Skeleton.js CHANGED
@@ -38,8 +38,8 @@ import { Color, Utils, MathUtils } from "./Utils";
38
38
  /** Stores the current pose for a skeleton.
39
39
  *
40
40
  * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */
41
- var Skeleton = /** @class */ (function () {
42
- function Skeleton(data) {
41
+ export class Skeleton {
42
+ constructor(data) {
43
43
  /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */
44
44
  this._updateCache = new Array();
45
45
  /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}.
@@ -60,40 +60,40 @@ var Skeleton = /** @class */ (function () {
60
60
  throw new Error("data cannot be null.");
61
61
  this.data = data;
62
62
  this.bones = new Array();
63
- for (var i = 0; i < data.bones.length; i++) {
64
- var boneData = data.bones[i];
65
- var bone = void 0;
63
+ for (let i = 0; i < data.bones.length; i++) {
64
+ let boneData = data.bones[i];
65
+ let bone;
66
66
  if (!boneData.parent)
67
67
  bone = new Bone(boneData, this, null);
68
68
  else {
69
- var parent_1 = this.bones[boneData.parent.index];
70
- bone = new Bone(boneData, this, parent_1);
71
- parent_1.children.push(bone);
69
+ let parent = this.bones[boneData.parent.index];
70
+ bone = new Bone(boneData, this, parent);
71
+ parent.children.push(bone);
72
72
  }
73
73
  this.bones.push(bone);
74
74
  }
75
75
  this.slots = new Array();
76
76
  this.drawOrder = new Array();
77
- for (var i = 0; i < data.slots.length; i++) {
78
- var slotData = data.slots[i];
79
- var bone = this.bones[slotData.boneData.index];
80
- var slot = new Slot(slotData, bone);
77
+ for (let i = 0; i < data.slots.length; i++) {
78
+ let slotData = data.slots[i];
79
+ let bone = this.bones[slotData.boneData.index];
80
+ let slot = new Slot(slotData, bone);
81
81
  this.slots.push(slot);
82
82
  this.drawOrder.push(slot);
83
83
  }
84
84
  this.ikConstraints = new Array();
85
- for (var i = 0; i < data.ikConstraints.length; i++) {
86
- var ikConstraintData = data.ikConstraints[i];
85
+ for (let i = 0; i < data.ikConstraints.length; i++) {
86
+ let ikConstraintData = data.ikConstraints[i];
87
87
  this.ikConstraints.push(new IkConstraint(ikConstraintData, this));
88
88
  }
89
89
  this.transformConstraints = new Array();
90
- for (var i = 0; i < data.transformConstraints.length; i++) {
91
- var transformConstraintData = data.transformConstraints[i];
90
+ for (let i = 0; i < data.transformConstraints.length; i++) {
91
+ let transformConstraintData = data.transformConstraints[i];
92
92
  this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));
93
93
  }
94
94
  this.pathConstraints = new Array();
95
- for (var i = 0; i < data.pathConstraints.length; i++) {
96
- var pathConstraintData = data.pathConstraints[i];
95
+ for (let i = 0; i < data.pathConstraints.length; i++) {
96
+ let pathConstraintData = data.pathConstraints[i];
97
97
  this.pathConstraints.push(new PathConstraint(pathConstraintData, this));
98
98
  }
99
99
  this.color = new Color(1, 1, 1, 1);
@@ -101,19 +101,19 @@ var Skeleton = /** @class */ (function () {
101
101
  }
102
102
  /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,
103
103
  * constraints, or weighted path attachments are added or removed. */
104
- Skeleton.prototype.updateCache = function () {
105
- var updateCache = this._updateCache;
104
+ updateCache() {
105
+ let updateCache = this._updateCache;
106
106
  updateCache.length = 0;
107
- var bones = this.bones;
108
- for (var i = 0, n = bones.length; i < n; i++) {
109
- var bone = bones[i];
107
+ let bones = this.bones;
108
+ for (let i = 0, n = bones.length; i < n; i++) {
109
+ let bone = bones[i];
110
110
  bone.sorted = bone.data.skinRequired;
111
111
  bone.active = !bone.sorted;
112
112
  }
113
113
  if (this.skin) {
114
- var skinBones = this.skin.bones;
115
- for (var i = 0, n = this.skin.bones.length; i < n; i++) {
116
- var bone = this.bones[skinBones[i].index];
114
+ let skinBones = this.skin.bones;
115
+ for (let i = 0, n = this.skin.bones.length; i < n; i++) {
116
+ let bone = this.bones[skinBones[i].index];
117
117
  do {
118
118
  bone.sorted = false;
119
119
  bone.active = true;
@@ -122,160 +122,160 @@ var Skeleton = /** @class */ (function () {
122
122
  }
123
123
  }
124
124
  // IK first, lowest hierarchy depth first.
125
- var ikConstraints = this.ikConstraints;
126
- var transformConstraints = this.transformConstraints;
127
- var pathConstraints = this.pathConstraints;
128
- var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
129
- var constraintCount = ikCount + transformCount + pathCount;
130
- outer: for (var i = 0; i < constraintCount; i++) {
131
- for (var ii = 0; ii < ikCount; ii++) {
132
- var constraint = ikConstraints[ii];
125
+ let ikConstraints = this.ikConstraints;
126
+ let transformConstraints = this.transformConstraints;
127
+ let pathConstraints = this.pathConstraints;
128
+ let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
129
+ let constraintCount = ikCount + transformCount + pathCount;
130
+ outer: for (let i = 0; i < constraintCount; i++) {
131
+ for (let ii = 0; ii < ikCount; ii++) {
132
+ let constraint = ikConstraints[ii];
133
133
  if (constraint.data.order == i) {
134
134
  this.sortIkConstraint(constraint);
135
135
  continue outer;
136
136
  }
137
137
  }
138
- for (var ii = 0; ii < transformCount; ii++) {
139
- var constraint = transformConstraints[ii];
138
+ for (let ii = 0; ii < transformCount; ii++) {
139
+ let constraint = transformConstraints[ii];
140
140
  if (constraint.data.order == i) {
141
141
  this.sortTransformConstraint(constraint);
142
142
  continue outer;
143
143
  }
144
144
  }
145
- for (var ii = 0; ii < pathCount; ii++) {
146
- var constraint = pathConstraints[ii];
145
+ for (let ii = 0; ii < pathCount; ii++) {
146
+ let constraint = pathConstraints[ii];
147
147
  if (constraint.data.order == i) {
148
148
  this.sortPathConstraint(constraint);
149
149
  continue outer;
150
150
  }
151
151
  }
152
152
  }
153
- for (var i = 0, n = bones.length; i < n; i++)
153
+ for (let i = 0, n = bones.length; i < n; i++)
154
154
  this.sortBone(bones[i]);
155
- };
156
- Skeleton.prototype.sortIkConstraint = function (constraint) {
155
+ }
156
+ sortIkConstraint(constraint) {
157
157
  constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
158
158
  if (!constraint.active)
159
159
  return;
160
- var target = constraint.target;
160
+ let target = constraint.target;
161
161
  this.sortBone(target);
162
- var constrained = constraint.bones;
163
- var parent = constrained[0];
162
+ let constrained = constraint.bones;
163
+ let parent = constrained[0];
164
164
  this.sortBone(parent);
165
165
  if (constrained.length == 1) {
166
166
  this._updateCache.push(constraint);
167
167
  this.sortReset(parent.children);
168
168
  }
169
169
  else {
170
- var child = constrained[constrained.length - 1];
170
+ let child = constrained[constrained.length - 1];
171
171
  this.sortBone(child);
172
172
  this._updateCache.push(constraint);
173
173
  this.sortReset(parent.children);
174
174
  child.sorted = true;
175
175
  }
176
- };
177
- Skeleton.prototype.sortPathConstraint = function (constraint) {
176
+ }
177
+ sortPathConstraint(constraint) {
178
178
  constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
179
179
  if (!constraint.active)
180
180
  return;
181
- var slot = constraint.target;
182
- var slotIndex = slot.data.index;
183
- var slotBone = slot.bone;
181
+ let slot = constraint.target;
182
+ let slotIndex = slot.data.index;
183
+ let slotBone = slot.bone;
184
184
  if (this.skin)
185
185
  this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);
186
186
  if (this.data.defaultSkin && this.data.defaultSkin != this.skin)
187
187
  this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);
188
- for (var i = 0, n = this.data.skins.length; i < n; i++)
188
+ for (let i = 0, n = this.data.skins.length; i < n; i++)
189
189
  this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);
190
- var attachment = slot.getAttachment();
190
+ let attachment = slot.getAttachment();
191
191
  if (attachment instanceof PathAttachment)
192
192
  this.sortPathConstraintAttachmentWith(attachment, slotBone);
193
- var constrained = constraint.bones;
194
- var boneCount = constrained.length;
195
- for (var i = 0; i < boneCount; i++)
193
+ let constrained = constraint.bones;
194
+ let boneCount = constrained.length;
195
+ for (let i = 0; i < boneCount; i++)
196
196
  this.sortBone(constrained[i]);
197
197
  this._updateCache.push(constraint);
198
- for (var i = 0; i < boneCount; i++)
198
+ for (let i = 0; i < boneCount; i++)
199
199
  this.sortReset(constrained[i].children);
200
- for (var i = 0; i < boneCount; i++)
200
+ for (let i = 0; i < boneCount; i++)
201
201
  constrained[i].sorted = true;
202
- };
203
- Skeleton.prototype.sortTransformConstraint = function (constraint) {
202
+ }
203
+ sortTransformConstraint(constraint) {
204
204
  constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
205
205
  if (!constraint.active)
206
206
  return;
207
207
  this.sortBone(constraint.target);
208
- var constrained = constraint.bones;
209
- var boneCount = constrained.length;
208
+ let constrained = constraint.bones;
209
+ let boneCount = constrained.length;
210
210
  if (constraint.data.local) {
211
- for (var i = 0; i < boneCount; i++) {
212
- var child = constrained[i];
211
+ for (let i = 0; i < boneCount; i++) {
212
+ let child = constrained[i];
213
213
  this.sortBone(child.parent);
214
214
  this.sortBone(child);
215
215
  }
216
216
  }
217
217
  else {
218
- for (var i = 0; i < boneCount; i++) {
218
+ for (let i = 0; i < boneCount; i++) {
219
219
  this.sortBone(constrained[i]);
220
220
  }
221
221
  }
222
222
  this._updateCache.push(constraint);
223
- for (var i = 0; i < boneCount; i++)
223
+ for (let i = 0; i < boneCount; i++)
224
224
  this.sortReset(constrained[i].children);
225
- for (var i = 0; i < boneCount; i++)
225
+ for (let i = 0; i < boneCount; i++)
226
226
  constrained[i].sorted = true;
227
- };
228
- Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {
229
- var attachments = skin.attachments[slotIndex];
227
+ }
228
+ sortPathConstraintAttachment(skin, slotIndex, slotBone) {
229
+ let attachments = skin.attachments[slotIndex];
230
230
  if (!attachments)
231
231
  return;
232
- for (var key in attachments) {
232
+ for (let key in attachments) {
233
233
  this.sortPathConstraintAttachmentWith(attachments[key], slotBone);
234
234
  }
235
- };
236
- Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {
235
+ }
236
+ sortPathConstraintAttachmentWith(attachment, slotBone) {
237
237
  if (!(attachment instanceof PathAttachment))
238
238
  return;
239
- var pathBones = attachment.bones;
239
+ let pathBones = attachment.bones;
240
240
  if (!pathBones)
241
241
  this.sortBone(slotBone);
242
242
  else {
243
- var bones = this.bones;
244
- for (var i = 0, n = pathBones.length; i < n;) {
245
- var nn = pathBones[i++];
243
+ let bones = this.bones;
244
+ for (let i = 0, n = pathBones.length; i < n;) {
245
+ let nn = pathBones[i++];
246
246
  nn += i;
247
247
  while (i < nn)
248
248
  this.sortBone(bones[pathBones[i++]]);
249
249
  }
250
250
  }
251
- };
252
- Skeleton.prototype.sortBone = function (bone) {
251
+ }
252
+ sortBone(bone) {
253
253
  if (bone.sorted)
254
254
  return;
255
- var parent = bone.parent;
255
+ let parent = bone.parent;
256
256
  if (parent)
257
257
  this.sortBone(parent);
258
258
  bone.sorted = true;
259
259
  this._updateCache.push(bone);
260
- };
261
- Skeleton.prototype.sortReset = function (bones) {
262
- for (var i = 0, n = bones.length; i < n; i++) {
263
- var bone = bones[i];
260
+ }
261
+ sortReset(bones) {
262
+ for (let i = 0, n = bones.length; i < n; i++) {
263
+ let bone = bones[i];
264
264
  if (!bone.active)
265
265
  continue;
266
266
  if (bone.sorted)
267
267
  this.sortReset(bone.children);
268
268
  bone.sorted = false;
269
269
  }
270
- };
270
+ }
271
271
  /** Updates the world transform for each bone and applies all constraints.
272
272
  *
273
273
  * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
274
274
  * Runtimes Guide. */
275
- Skeleton.prototype.updateWorldTransform = function () {
276
- var bones = this.bones;
277
- for (var i = 0, n = bones.length; i < n; i++) {
278
- var bone = bones[i];
275
+ updateWorldTransform() {
276
+ let bones = this.bones;
277
+ for (let i = 0, n = bones.length; i < n; i++) {
278
+ let bone = bones[i];
279
279
  bone.ax = bone.x;
280
280
  bone.ay = bone.y;
281
281
  bone.arotation = bone.rotation;
@@ -284,56 +284,56 @@ var Skeleton = /** @class */ (function () {
284
284
  bone.ashearX = bone.shearX;
285
285
  bone.ashearY = bone.shearY;
286
286
  }
287
- var updateCache = this._updateCache;
288
- for (var i = 0, n = updateCache.length; i < n; i++)
287
+ let updateCache = this._updateCache;
288
+ for (let i = 0, n = updateCache.length; i < n; i++)
289
289
  updateCache[i].update();
290
- };
291
- Skeleton.prototype.updateWorldTransformWith = function (parent) {
290
+ }
291
+ updateWorldTransformWith(parent) {
292
292
  // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.
293
- var rootBone = this.getRootBone();
294
- var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
293
+ let rootBone = this.getRootBone();
294
+ let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
295
295
  rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;
296
296
  rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;
297
- var rotationY = rootBone.rotation + 90 + rootBone.shearY;
298
- var la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
299
- var lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
300
- var lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
301
- var ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
297
+ let rotationY = rootBone.rotation + 90 + rootBone.shearY;
298
+ let la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
299
+ let lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
300
+ let lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
301
+ let ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
302
302
  rootBone.a = (pa * la + pb * lc) * this.scaleX;
303
303
  rootBone.b = (pa * lb + pb * ld) * this.scaleX;
304
304
  rootBone.c = (pc * la + pd * lc) * this.scaleY;
305
305
  rootBone.d = (pc * lb + pd * ld) * this.scaleY;
306
306
  // Update everything except root bone.
307
- var updateCache = this._updateCache;
308
- for (var i = 0, n = updateCache.length; i < n; i++) {
309
- var updatable = updateCache[i];
307
+ let updateCache = this._updateCache;
308
+ for (let i = 0, n = updateCache.length; i < n; i++) {
309
+ let updatable = updateCache[i];
310
310
  if (updatable != rootBone)
311
311
  updatable.update();
312
312
  }
313
- };
313
+ }
314
314
  /** Sets the bones, constraints, and slots to their setup pose values. */
315
- Skeleton.prototype.setToSetupPose = function () {
315
+ setToSetupPose() {
316
316
  this.setBonesToSetupPose();
317
317
  this.setSlotsToSetupPose();
318
- };
318
+ }
319
319
  /** Sets the bones and constraints to their setup pose values. */
320
- Skeleton.prototype.setBonesToSetupPose = function () {
321
- var bones = this.bones;
322
- for (var i = 0, n = bones.length; i < n; i++)
320
+ setBonesToSetupPose() {
321
+ let bones = this.bones;
322
+ for (let i = 0, n = bones.length; i < n; i++)
323
323
  bones[i].setToSetupPose();
324
- var ikConstraints = this.ikConstraints;
325
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
326
- var constraint = ikConstraints[i];
324
+ let ikConstraints = this.ikConstraints;
325
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
326
+ let constraint = ikConstraints[i];
327
327
  constraint.mix = constraint.data.mix;
328
328
  constraint.softness = constraint.data.softness;
329
329
  constraint.bendDirection = constraint.data.bendDirection;
330
330
  constraint.compress = constraint.data.compress;
331
331
  constraint.stretch = constraint.data.stretch;
332
332
  }
333
- var transformConstraints = this.transformConstraints;
334
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
335
- var constraint = transformConstraints[i];
336
- var data = constraint.data;
333
+ let transformConstraints = this.transformConstraints;
334
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
335
+ let constraint = transformConstraints[i];
336
+ let data = constraint.data;
337
337
  constraint.mixRotate = data.mixRotate;
338
338
  constraint.mixX = data.mixX;
339
339
  constraint.mixY = data.mixY;
@@ -341,85 +341,65 @@ var Skeleton = /** @class */ (function () {
341
341
  constraint.mixScaleY = data.mixScaleY;
342
342
  constraint.mixShearY = data.mixShearY;
343
343
  }
344
- var pathConstraints = this.pathConstraints;
345
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
346
- var constraint = pathConstraints[i];
347
- var data = constraint.data;
344
+ let pathConstraints = this.pathConstraints;
345
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
346
+ let constraint = pathConstraints[i];
347
+ let data = constraint.data;
348
348
  constraint.position = data.position;
349
349
  constraint.spacing = data.spacing;
350
350
  constraint.mixRotate = data.mixRotate;
351
351
  constraint.mixX = data.mixX;
352
352
  constraint.mixY = data.mixY;
353
353
  }
354
- };
354
+ }
355
355
  /** Sets the slots and draw order to their setup pose values. */
356
- Skeleton.prototype.setSlotsToSetupPose = function () {
357
- var slots = this.slots;
356
+ setSlotsToSetupPose() {
357
+ let slots = this.slots;
358
358
  Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);
359
- for (var i = 0, n = slots.length; i < n; i++)
359
+ for (let i = 0, n = slots.length; i < n; i++)
360
360
  slots[i].setToSetupPose();
361
- };
361
+ }
362
362
  /** @returns May return null. */
363
- Skeleton.prototype.getRootBone = function () {
363
+ getRootBone() {
364
364
  if (this.bones.length == 0)
365
365
  return null;
366
366
  return this.bones[0];
367
- };
367
+ }
368
368
  /** @returns May be null. */
369
- Skeleton.prototype.findBone = function (boneName) {
369
+ findBone(boneName) {
370
370
  if (!boneName)
371
371
  throw new Error("boneName cannot be null.");
372
- var bones = this.bones;
373
- for (var i = 0, n = bones.length; i < n; i++) {
374
- var bone = bones[i];
372
+ let bones = this.bones;
373
+ for (let i = 0, n = bones.length; i < n; i++) {
374
+ let bone = bones[i];
375
375
  if (bone.data.name == boneName)
376
376
  return bone;
377
377
  }
378
378
  return null;
379
- };
380
- /** @returns -1 if the bone was not found. */
381
- Skeleton.prototype.findBoneIndex = function (boneName) {
382
- if (!boneName)
383
- throw new Error("boneName cannot be null.");
384
- var bones = this.bones;
385
- for (var i = 0, n = bones.length; i < n; i++)
386
- if (bones[i].data.name == boneName)
387
- return i;
388
- return -1;
389
- };
379
+ }
390
380
  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
391
381
  * repeatedly.
392
382
  * @returns May be null. */
393
- Skeleton.prototype.findSlot = function (slotName) {
383
+ findSlot(slotName) {
394
384
  if (!slotName)
395
385
  throw new Error("slotName cannot be null.");
396
- var slots = this.slots;
397
- for (var i = 0, n = slots.length; i < n; i++) {
398
- var slot = slots[i];
386
+ let slots = this.slots;
387
+ for (let i = 0, n = slots.length; i < n; i++) {
388
+ let slot = slots[i];
399
389
  if (slot.data.name == slotName)
400
390
  return slot;
401
391
  }
402
392
  return null;
403
- };
404
- /** @returns -1 if the bone was not found. */
405
- Skeleton.prototype.findSlotIndex = function (slotName) {
406
- if (!slotName)
407
- throw new Error("slotName cannot be null.");
408
- var slots = this.slots;
409
- for (var i = 0, n = slots.length; i < n; i++)
410
- if (slots[i].data.name == slotName)
411
- return i;
412
- return -1;
413
- };
393
+ }
414
394
  /** Sets a skin by name.
415
395
  *
416
396
  * See {@link #setSkin()}. */
417
- Skeleton.prototype.setSkinByName = function (skinName) {
418
- var skin = this.data.findSkin(skinName);
397
+ setSkinByName(skinName) {
398
+ let skin = this.data.findSkin(skinName);
419
399
  if (!skin)
420
400
  throw new Error("Skin not found: " + skinName);
421
401
  this.setSkin(skin);
422
- };
402
+ }
423
403
  /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the
424
404
  * skin is changed, {@link #updateCache()} is called.
425
405
  *
@@ -430,19 +410,19 @@ var Skeleton = /** @class */ (function () {
430
410
  * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the
431
411
  * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.
432
412
  * @param newSkin May be null. */
433
- Skeleton.prototype.setSkin = function (newSkin) {
413
+ setSkin(newSkin) {
434
414
  if (newSkin == this.skin)
435
415
  return;
436
416
  if (newSkin) {
437
417
  if (this.skin)
438
418
  newSkin.attachAll(this, this.skin);
439
419
  else {
440
- var slots = this.slots;
441
- for (var i = 0, n = slots.length; i < n; i++) {
442
- var slot = slots[i];
443
- var name_1 = slot.data.attachmentName;
444
- if (name_1) {
445
- var attachment = newSkin.getAttachment(i, name_1);
420
+ let slots = this.slots;
421
+ for (let i = 0, n = slots.length; i < n; i++) {
422
+ let slot = slots[i];
423
+ let name = slot.data.attachmentName;
424
+ if (name) {
425
+ let attachment = newSkin.getAttachment(i, name);
446
426
  if (attachment)
447
427
  slot.setAttachment(attachment);
448
428
  }
@@ -451,43 +431,43 @@ var Skeleton = /** @class */ (function () {
451
431
  }
452
432
  this.skin = newSkin;
453
433
  this.updateCache();
454
- };
434
+ }
455
435
  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment
456
436
  * name.
457
437
  *
458
438
  * See {@link #getAttachment()}.
459
439
  * @returns May be null. */
460
- Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {
461
- return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);
462
- };
440
+ getAttachmentByName(slotName, attachmentName) {
441
+ return this.getAttachment(this.data.findSlot(slotName).index, attachmentName);
442
+ }
463
443
  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and
464
444
  * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.
465
445
  *
466
446
  * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.
467
447
  * @returns May be null. */
468
- Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {
448
+ getAttachment(slotIndex, attachmentName) {
469
449
  if (!attachmentName)
470
450
  throw new Error("attachmentName cannot be null.");
471
451
  if (this.skin) {
472
- var attachment = this.skin.getAttachment(slotIndex, attachmentName);
452
+ let attachment = this.skin.getAttachment(slotIndex, attachmentName);
473
453
  if (attachment)
474
454
  return attachment;
475
455
  }
476
456
  if (this.data.defaultSkin)
477
457
  return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
478
458
  return null;
479
- };
459
+ }
480
460
  /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with
481
461
  * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.
482
462
  * @param attachmentName May be null to clear the slot's attachment. */
483
- Skeleton.prototype.setAttachment = function (slotName, attachmentName) {
463
+ setAttachment(slotName, attachmentName) {
484
464
  if (!slotName)
485
465
  throw new Error("slotName cannot be null.");
486
- var slots = this.slots;
487
- for (var i = 0, n = slots.length; i < n; i++) {
488
- var slot = slots[i];
466
+ let slots = this.slots;
467
+ for (let i = 0, n = slots.length; i < n; i++) {
468
+ let slot = slots[i];
489
469
  if (slot.data.name == slotName) {
490
- var attachment = null;
470
+ let attachment = null;
491
471
  if (attachmentName) {
492
472
  attachment = this.getAttachment(i, attachmentName);
493
473
  if (!attachment)
@@ -498,82 +478,81 @@ var Skeleton = /** @class */ (function () {
498
478
  }
499
479
  }
500
480
  throw new Error("Slot not found: " + slotName);
501
- };
481
+ }
502
482
  /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
503
483
  * than to call it repeatedly.
504
484
  * @return May be null. */
505
- Skeleton.prototype.findIkConstraint = function (constraintName) {
485
+ findIkConstraint(constraintName) {
506
486
  if (!constraintName)
507
487
  throw new Error("constraintName cannot be null.");
508
- var ikConstraints = this.ikConstraints;
509
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
510
- var ikConstraint = ikConstraints[i];
488
+ let ikConstraints = this.ikConstraints;
489
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
490
+ let ikConstraint = ikConstraints[i];
511
491
  if (ikConstraint.data.name == constraintName)
512
492
  return ikConstraint;
513
493
  }
514
494
  return null;
515
- };
495
+ }
516
496
  /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
517
497
  * this method than to call it repeatedly.
518
498
  * @return May be null. */
519
- Skeleton.prototype.findTransformConstraint = function (constraintName) {
499
+ findTransformConstraint(constraintName) {
520
500
  if (!constraintName)
521
501
  throw new Error("constraintName cannot be null.");
522
- var transformConstraints = this.transformConstraints;
523
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
524
- var constraint = transformConstraints[i];
502
+ let transformConstraints = this.transformConstraints;
503
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
504
+ let constraint = transformConstraints[i];
525
505
  if (constraint.data.name == constraintName)
526
506
  return constraint;
527
507
  }
528
508
  return null;
529
- };
509
+ }
530
510
  /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
531
511
  * than to call it repeatedly.
532
512
  * @return May be null. */
533
- Skeleton.prototype.findPathConstraint = function (constraintName) {
513
+ findPathConstraint(constraintName) {
534
514
  if (!constraintName)
535
515
  throw new Error("constraintName cannot be null.");
536
- var pathConstraints = this.pathConstraints;
537
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
538
- var constraint = pathConstraints[i];
516
+ let pathConstraints = this.pathConstraints;
517
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
518
+ let constraint = pathConstraints[i];
539
519
  if (constraint.data.name == constraintName)
540
520
  return constraint;
541
521
  }
542
522
  return null;
543
- };
523
+ }
544
524
  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.
545
525
  * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
546
526
  * @param size An output value, the width and height of the AABB.
547
527
  * @param temp Working memory to temporarily store attachments' computed world vertices. */
548
- Skeleton.prototype.getBounds = function (offset, size, temp) {
549
- if (temp === void 0) { temp = new Array(2); }
528
+ getBounds(offset, size, temp = new Array(2)) {
550
529
  if (!offset)
551
530
  throw new Error("offset cannot be null.");
552
531
  if (!size)
553
532
  throw new Error("size cannot be null.");
554
- var drawOrder = this.drawOrder;
555
- var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
556
- for (var i = 0, n = drawOrder.length; i < n; i++) {
557
- var slot = drawOrder[i];
533
+ let drawOrder = this.drawOrder;
534
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
535
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
536
+ let slot = drawOrder[i];
558
537
  if (!slot.bone.active)
559
538
  continue;
560
- var verticesLength = 0;
561
- var vertices = null;
562
- var attachment = slot.getAttachment();
539
+ let verticesLength = 0;
540
+ let vertices = null;
541
+ let attachment = slot.getAttachment();
563
542
  if (attachment instanceof RegionAttachment) {
564
543
  verticesLength = 8;
565
544
  vertices = Utils.setArraySize(temp, verticesLength, 0);
566
545
  attachment.computeWorldVertices(slot.bone, vertices, 0, 2);
567
546
  }
568
547
  else if (attachment instanceof MeshAttachment) {
569
- var mesh = attachment;
548
+ let mesh = attachment;
570
549
  verticesLength = mesh.worldVerticesLength;
571
550
  vertices = Utils.setArraySize(temp, verticesLength, 0);
572
551
  mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
573
552
  }
574
553
  if (vertices) {
575
- for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {
576
- var x = vertices[ii], y = vertices[ii + 1];
554
+ for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {
555
+ let x = vertices[ii], y = vertices[ii + 1];
577
556
  minX = Math.min(minX, x);
578
557
  minY = Math.min(minY, y);
579
558
  maxX = Math.max(maxX, x);
@@ -583,12 +562,10 @@ var Skeleton = /** @class */ (function () {
583
562
  }
584
563
  offset.set(minX, minY);
585
564
  size.set(maxX - minX, maxY - minY);
586
- };
565
+ }
587
566
  /** Increments the skeleton's {@link #time}. */
588
- Skeleton.prototype.update = function (delta) {
567
+ update(delta) {
589
568
  this.time += delta;
590
- };
591
- return Skeleton;
592
- }());
593
- export { Skeleton };
594
- //# sourceMappingURL=Skeleton.js.map
569
+ }
570
+ }
571
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUE0QixNQUFNLFNBQVMsQ0FBQztBQUU1RTs7a0lBRWtJO0FBQ2xJLE1BQU0sT0FBTyxRQUFRO0lBa0RwQixZQUFhLElBQWtCO1FBNUIvQiw0SEFBNEg7UUFDNUgsaUJBQVksR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBUXRDOztvQ0FFNEI7UUFDNUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVUOzJCQUNtQjtRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVg7MkJBQ21CO1FBQ25CLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxxRkFBcUY7UUFDckYsTUFBQyxHQUFHLENBQUMsQ0FBQztRQUVOLHFGQUFxRjtRQUNyRixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR0wsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixD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