ag-psd 15.0.0 → 15.0.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.
Files changed (102) hide show
  1. package/TODO +0 -2
  2. package/clean.js +3 -0
  3. package/dist/abr.d.ts +132 -132
  4. package/dist/abr.js +270 -271
  5. package/dist/abr.js.map +1 -0
  6. package/dist/additionalInfo.d.ts +25 -25
  7. package/dist/additionalInfo.js +2026 -2045
  8. package/dist/additionalInfo.js.map +1 -0
  9. package/dist/bundle.js +9133 -8707
  10. package/dist/csh.d.ts +10 -10
  11. package/dist/csh.js +48 -49
  12. package/dist/csh.js.map +1 -0
  13. package/dist/descriptor.d.ts +411 -390
  14. package/dist/descriptor.js +1689 -1644
  15. package/dist/descriptor.js.map +1 -0
  16. package/dist/effectsHelpers.d.ts +5 -5
  17. package/dist/effectsHelpers.js +309 -310
  18. package/dist/effectsHelpers.js.map +1 -0
  19. package/dist/engineData.d.ts +2 -2
  20. package/dist/engineData.js +337 -338
  21. package/dist/engineData.js.map +1 -0
  22. package/dist/helpers.d.ts +93 -93
  23. package/dist/helpers.js +332 -333
  24. package/dist/helpers.js.map +1 -0
  25. package/dist/imageResources.d.ts +13 -13
  26. package/dist/imageResources.js +1007 -788
  27. package/dist/imageResources.js.map +1 -0
  28. package/dist/index.d.ts +20 -20
  29. package/dist/index.js +53 -54
  30. package/dist/index.js.map +1 -0
  31. package/dist/initializeCanvas.d.ts +1 -1
  32. package/dist/initializeCanvas.js +26 -27
  33. package/dist/initializeCanvas.js.map +1 -0
  34. package/dist/jpeg.d.ts +1 -1
  35. package/dist/jpeg.js +1019 -1020
  36. package/dist/jpeg.js.map +1 -0
  37. package/dist/psd.d.ts +1200 -1147
  38. package/dist/psd.js +22 -23
  39. package/dist/psd.js.map +1 -0
  40. package/dist/psdReader.d.ts +36 -34
  41. package/dist/psdReader.js +958 -941
  42. package/dist/psdReader.js.map +1 -0
  43. package/dist/psdWriter.d.ts +27 -27
  44. package/dist/psdWriter.js +694 -690
  45. package/dist/psdWriter.js.map +1 -0
  46. package/dist/text.d.ts +168 -168
  47. package/dist/text.js +557 -558
  48. package/dist/text.js.map +1 -0
  49. package/dist/utf8.d.ts +5 -5
  50. package/dist/utf8.js +152 -153
  51. package/dist/utf8.js.map +1 -0
  52. package/dist-es/abr.d.ts +132 -132
  53. package/dist-es/abr.js +266 -267
  54. package/dist-es/abr.js.map +1 -0
  55. package/dist-es/additionalInfo.d.ts +25 -25
  56. package/dist-es/additionalInfo.js +2020 -2039
  57. package/dist-es/additionalInfo.js.map +1 -0
  58. package/dist-es/csh.d.ts +10 -10
  59. package/dist-es/csh.js +44 -45
  60. package/dist-es/csh.js.map +1 -0
  61. package/dist-es/descriptor.d.ts +411 -390
  62. package/dist-es/descriptor.js +1661 -1616
  63. package/dist-es/descriptor.js.map +1 -0
  64. package/dist-es/effectsHelpers.d.ts +5 -5
  65. package/dist-es/effectsHelpers.js +304 -305
  66. package/dist-es/effectsHelpers.js.map +1 -0
  67. package/dist-es/engineData.d.ts +2 -2
  68. package/dist-es/engineData.js +332 -333
  69. package/dist-es/engineData.js.map +1 -0
  70. package/dist-es/helpers.d.ts +93 -93
  71. package/dist-es/helpers.js +315 -316
  72. package/dist-es/helpers.js.map +1 -0
  73. package/dist-es/imageResources.d.ts +13 -13
  74. package/dist-es/imageResources.js +1004 -785
  75. package/dist-es/imageResources.js.map +1 -0
  76. package/dist-es/index.d.ts +20 -20
  77. package/dist-es/index.js +31 -32
  78. package/dist-es/index.js.map +1 -0
  79. package/dist-es/initializeCanvas.d.ts +1 -1
  80. package/dist-es/initializeCanvas.js +22 -23
  81. package/dist-es/initializeCanvas.js.map +1 -0
  82. package/dist-es/jpeg.d.ts +1 -1
  83. package/dist-es/jpeg.js +1015 -1016
  84. package/dist-es/jpeg.js.map +1 -0
  85. package/dist-es/psd.d.ts +1200 -1147
  86. package/dist-es/psd.js +19 -20
  87. package/dist-es/psd.js.map +1 -0
  88. package/dist-es/psdReader.d.ts +36 -34
  89. package/dist-es/psdReader.js +928 -912
  90. package/dist-es/psdReader.js.map +1 -0
  91. package/dist-es/psdWriter.d.ts +27 -27
  92. package/dist-es/psdWriter.js +670 -666
  93. package/dist-es/psdWriter.js.map +1 -0
  94. package/dist-es/text.d.ts +168 -168
  95. package/dist-es/text.js +552 -553
  96. package/dist-es/text.js.map +1 -0
  97. package/dist-es/utf8.d.ts +5 -5
  98. package/dist-es/utf8.js +145 -146
  99. package/dist-es/utf8.js.map +1 -0
  100. package/package.json +11 -17
  101. package/tsconfig-es6.json +7 -0
  102. package/tsconfig.json +7 -1
@@ -1,316 +1,315 @@
1
- import { fromByteArray } from 'base64-js';
2
- import { deflate } from 'pako';
3
- export var MOCK_HANDLERS = false;
4
- export var RAW_IMAGE_DATA = false;
5
- export var fromBlendMode = {};
6
- export var toBlendMode = {
7
- 'pass': 'pass through',
8
- 'norm': 'normal',
9
- 'diss': 'dissolve',
10
- 'dark': 'darken',
11
- 'mul ': 'multiply',
12
- 'idiv': 'color burn',
13
- 'lbrn': 'linear burn',
14
- 'dkCl': 'darker color',
15
- 'lite': 'lighten',
16
- 'scrn': 'screen',
17
- 'div ': 'color dodge',
18
- 'lddg': 'linear dodge',
19
- 'lgCl': 'lighter color',
20
- 'over': 'overlay',
21
- 'sLit': 'soft light',
22
- 'hLit': 'hard light',
23
- 'vLit': 'vivid light',
24
- 'lLit': 'linear light',
25
- 'pLit': 'pin light',
26
- 'hMix': 'hard mix',
27
- 'diff': 'difference',
28
- 'smud': 'exclusion',
29
- 'fsub': 'subtract',
30
- 'fdiv': 'divide',
31
- 'hue ': 'hue',
32
- 'sat ': 'saturation',
33
- 'colr': 'color',
34
- 'lum ': 'luminosity',
35
- };
36
- Object.keys(toBlendMode).forEach(function (key) { return fromBlendMode[toBlendMode[key]] = key; });
37
- export var layerColors = [
38
- 'none', 'red', 'orange', 'yellow', 'green', 'blue', 'violet', 'gray'
39
- ];
40
- export var largeAdditionalInfoKeys = [
41
- // from documentation
42
- 'LMsk', 'Lr16', 'Lr32', 'Layr', 'Mt16', 'Mt32', 'Mtrn', 'Alph', 'FMsk', 'lnk2', 'FEid', 'FXid', 'PxSD',
43
- // from guessing
44
- 'cinf',
45
- ];
46
- export function revMap(map) {
47
- var result = {};
48
- Object.keys(map).forEach(function (key) { return result[map[key]] = key; });
49
- return result;
50
- }
51
- export function createEnum(prefix, def, map) {
52
- var rev = revMap(map);
53
- var decode = function (val) {
54
- var value = val.split('.')[1];
55
- if (value && !rev[value])
56
- throw new Error("Unrecognized value for enum: '".concat(val, "'"));
57
- return rev[value] || def;
58
- };
59
- var encode = function (val) {
60
- if (val && !map[val])
61
- throw new Error("Invalid value for enum: '".concat(val, "'"));
62
- return "".concat(prefix, ".").concat(map[val] || map[def]);
63
- };
64
- return { decode: decode, encode: encode };
65
- }
66
- export var ColorSpace;
67
- (function (ColorSpace) {
68
- ColorSpace[ColorSpace["RGB"] = 0] = "RGB";
69
- ColorSpace[ColorSpace["HSB"] = 1] = "HSB";
70
- ColorSpace[ColorSpace["CMYK"] = 2] = "CMYK";
71
- ColorSpace[ColorSpace["Lab"] = 7] = "Lab";
72
- ColorSpace[ColorSpace["Grayscale"] = 8] = "Grayscale";
73
- })(ColorSpace || (ColorSpace = {}));
74
- export var LayerMaskFlags;
75
- (function (LayerMaskFlags) {
76
- LayerMaskFlags[LayerMaskFlags["PositionRelativeToLayer"] = 1] = "PositionRelativeToLayer";
77
- LayerMaskFlags[LayerMaskFlags["LayerMaskDisabled"] = 2] = "LayerMaskDisabled";
78
- LayerMaskFlags[LayerMaskFlags["InvertLayerMaskWhenBlending"] = 4] = "InvertLayerMaskWhenBlending";
79
- LayerMaskFlags[LayerMaskFlags["LayerMaskFromRenderingOtherData"] = 8] = "LayerMaskFromRenderingOtherData";
80
- LayerMaskFlags[LayerMaskFlags["MaskHasParametersAppliedToIt"] = 16] = "MaskHasParametersAppliedToIt";
81
- })(LayerMaskFlags || (LayerMaskFlags = {}));
82
- export var MaskParams;
83
- (function (MaskParams) {
84
- MaskParams[MaskParams["UserMaskDensity"] = 1] = "UserMaskDensity";
85
- MaskParams[MaskParams["UserMaskFeather"] = 2] = "UserMaskFeather";
86
- MaskParams[MaskParams["VectorMaskDensity"] = 4] = "VectorMaskDensity";
87
- MaskParams[MaskParams["VectorMaskFeather"] = 8] = "VectorMaskFeather";
88
- })(MaskParams || (MaskParams = {}));
89
- export var ChannelID;
90
- (function (ChannelID) {
91
- ChannelID[ChannelID["Color0"] = 0] = "Color0";
92
- ChannelID[ChannelID["Color1"] = 1] = "Color1";
93
- ChannelID[ChannelID["Color2"] = 2] = "Color2";
94
- ChannelID[ChannelID["Color3"] = 3] = "Color3";
95
- ChannelID[ChannelID["Transparency"] = -1] = "Transparency";
96
- ChannelID[ChannelID["UserMask"] = -2] = "UserMask";
97
- ChannelID[ChannelID["RealUserMask"] = -3] = "RealUserMask";
98
- })(ChannelID || (ChannelID = {}));
99
- export var Compression;
100
- (function (Compression) {
101
- Compression[Compression["RawData"] = 0] = "RawData";
102
- Compression[Compression["RleCompressed"] = 1] = "RleCompressed";
103
- Compression[Compression["ZipWithoutPrediction"] = 2] = "ZipWithoutPrediction";
104
- Compression[Compression["ZipWithPrediction"] = 3] = "ZipWithPrediction";
105
- })(Compression || (Compression = {}));
106
- export function offsetForChannel(channelId, cmyk) {
107
- switch (channelId) {
108
- case 0 /* ChannelID.Color0 */: return 0;
109
- case 1 /* ChannelID.Color1 */: return 1;
110
- case 2 /* ChannelID.Color2 */: return 2;
111
- case 3 /* ChannelID.Color3 */: return cmyk ? 3 : channelId + 1;
112
- case -1 /* ChannelID.Transparency */: return cmyk ? 4 : 3;
113
- default: return channelId + 1;
114
- }
115
- }
116
- export function clamp(value, min, max) {
117
- return value < min ? min : (value > max ? max : value);
118
- }
119
- export function hasAlpha(data) {
120
- var size = data.width * data.height * 4;
121
- for (var i = 3; i < size; i += 4) {
122
- if (data.data[i] !== 255) {
123
- return true;
124
- }
125
- }
126
- return false;
127
- }
128
- export function resetImageData(_a) {
129
- var data = _a.data;
130
- var buffer = new Uint32Array(data.buffer);
131
- var size = buffer.length | 0;
132
- for (var p = 0; p < size; p = (p + 1) | 0) {
133
- buffer[p] = 0xff000000;
134
- }
135
- }
136
- export function decodeBitmap(input, output, width, height) {
137
- for (var y = 0, p = 0, o = 0; y < height; y++) {
138
- for (var x = 0; x < width;) {
139
- var b = input[o++];
140
- for (var i = 0; i < 8 && x < width; i++, x++) {
141
- var v = b & 0x80 ? 0 : 255;
142
- b = b << 1;
143
- output[p++] = v;
144
- output[p++] = v;
145
- output[p++] = v;
146
- output[p++] = 255;
147
- }
148
- }
149
- }
150
- }
151
- export function writeDataRaw(data, offset, width, height) {
152
- if (!width || !height)
153
- return undefined;
154
- var array = new Uint8Array(width * height);
155
- for (var i = 0; i < array.length; i++) {
156
- array[i] = data.data[i * 4 + offset];
157
- }
158
- return array;
159
- }
160
- export function writeDataRLE(buffer, _a, offsets, large) {
161
- var data = _a.data, width = _a.width, height = _a.height;
162
- if (!width || !height)
163
- return undefined;
164
- var stride = (4 * width) | 0;
165
- var ol = 0;
166
- var o = (offsets.length * (large ? 4 : 2) * height) | 0;
167
- for (var _i = 0, offsets_1 = offsets; _i < offsets_1.length; _i++) {
168
- var offset = offsets_1[_i];
169
- for (var y = 0, p = offset | 0; y < height; y++) {
170
- var strideStart = (y * stride) | 0;
171
- var strideEnd = (strideStart + stride) | 0;
172
- var lastIndex = (strideEnd + offset - 4) | 0;
173
- var lastIndex2 = (lastIndex - 4) | 0;
174
- var startOffset = o;
175
- for (p = (strideStart + offset) | 0; p < strideEnd; p = (p + 4) | 0) {
176
- if (p < lastIndex2) {
177
- var value1 = data[p];
178
- p = (p + 4) | 0;
179
- var value2 = data[p];
180
- p = (p + 4) | 0;
181
- var value3 = data[p];
182
- if (value1 === value2 && value1 === value3) {
183
- var count = 3;
184
- while (count < 128 && p < lastIndex && data[(p + 4) | 0] === value1) {
185
- count = (count + 1) | 0;
186
- p = (p + 4) | 0;
187
- }
188
- buffer[o++] = 1 - count;
189
- buffer[o++] = value1;
190
- }
191
- else {
192
- var countIndex = o;
193
- var writeLast = true;
194
- var count = 1;
195
- buffer[o++] = 0;
196
- buffer[o++] = value1;
197
- while (p < lastIndex && count < 128) {
198
- p = (p + 4) | 0;
199
- value1 = value2;
200
- value2 = value3;
201
- value3 = data[p];
202
- if (value1 === value2 && value1 === value3) {
203
- p = (p - 12) | 0;
204
- writeLast = false;
205
- break;
206
- }
207
- else {
208
- count++;
209
- buffer[o++] = value1;
210
- }
211
- }
212
- if (writeLast) {
213
- if (count < 127) {
214
- buffer[o++] = value2;
215
- buffer[o++] = value3;
216
- count += 2;
217
- }
218
- else if (count < 128) {
219
- buffer[o++] = value2;
220
- count++;
221
- p = (p - 4) | 0;
222
- }
223
- else {
224
- p = (p - 8) | 0;
225
- }
226
- }
227
- buffer[countIndex] = count - 1;
228
- }
229
- }
230
- else if (p === lastIndex) {
231
- buffer[o++] = 0;
232
- buffer[o++] = data[p];
233
- }
234
- else { // p === lastIndex2
235
- buffer[o++] = 1;
236
- buffer[o++] = data[p];
237
- p = (p + 4) | 0;
238
- buffer[o++] = data[p];
239
- }
240
- }
241
- var length_1 = o - startOffset;
242
- if (large) {
243
- buffer[ol++] = (length_1 >> 24) & 0xff;
244
- buffer[ol++] = (length_1 >> 16) & 0xff;
245
- }
246
- buffer[ol++] = (length_1 >> 8) & 0xff;
247
- buffer[ol++] = length_1 & 0xff;
248
- }
249
- }
250
- return buffer.slice(0, o);
251
- }
252
- export function writeDataZipWithoutPrediction(_a, offsets) {
253
- var data = _a.data, width = _a.width, height = _a.height;
254
- var size = width * height;
255
- var channel = new Uint8Array(size);
256
- var buffers = [];
257
- var totalLength = 0;
258
- for (var _i = 0, offsets_2 = offsets; _i < offsets_2.length; _i++) {
259
- var offset = offsets_2[_i];
260
- for (var i = 0, o = offset; i < size; i++, o += 4) {
261
- channel[i] = data[o];
262
- }
263
- var buffer = deflate(channel);
264
- buffers.push(buffer);
265
- totalLength += buffer.byteLength;
266
- }
267
- if (buffers.length > 0) {
268
- var buffer = new Uint8Array(totalLength);
269
- var offset = 0;
270
- for (var _b = 0, buffers_1 = buffers; _b < buffers_1.length; _b++) {
271
- var b = buffers_1[_b];
272
- buffer.set(b, offset);
273
- offset += b.byteLength;
274
- }
275
- return buffer;
276
- }
277
- else {
278
- return buffers[0];
279
- }
280
- }
281
- export var createCanvas = function () {
282
- throw new Error('Canvas not initialized, use initializeCanvas method to set up createCanvas method');
283
- };
284
- export var createCanvasFromData = function () {
285
- throw new Error('Canvas not initialized, use initializeCanvas method to set up createCanvasFromData method');
286
- };
287
- var tempCanvas = undefined;
288
- export var createImageData = function (width, height) {
289
- if (!tempCanvas)
290
- tempCanvas = createCanvas(1, 1);
291
- return tempCanvas.getContext('2d').createImageData(width, height);
292
- };
293
- if (typeof document !== 'undefined') {
294
- createCanvas = function (width, height) {
295
- var canvas = document.createElement('canvas');
296
- canvas.width = width;
297
- canvas.height = height;
298
- return canvas;
299
- };
300
- createCanvasFromData = function (data) {
301
- var image = new Image();
302
- image.src = 'data:image/jpeg;base64,' + fromByteArray(data);
303
- var canvas = document.createElement('canvas');
304
- canvas.width = image.width;
305
- canvas.height = image.height;
306
- canvas.getContext('2d').drawImage(image, 0, 0);
307
- return canvas;
308
- };
309
- }
310
- export function initializeCanvas(createCanvasMethod, createCanvasFromDataMethod, createImageDataMethod) {
311
- createCanvas = createCanvasMethod;
312
- createCanvasFromData = createCanvasFromDataMethod || createCanvasFromData;
313
- createImageData = createImageDataMethod || createImageData;
314
- }
315
-
316
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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R0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDL0Isa0JBQXdFLEVBQ3hFLDBCQUFvRSxFQUNwRSxxQkFBb0U7SUFFcEUsWUFBWSxHQUFHLGtCQUFrQixDQUFDO0lBQ2xDLG9CQUFvQixHQUFHLDBCQUEwQixJQUFJLG9CQUFvQixDQUFDO0lBQzFFLGVBQWUsR0FBRyxxQkFBcUIsSUFBSSxlQUFlLENBQUM7QUFDNUQsQ0FBQyIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbUJ5dGVBcnJheSB9IGZyb20gJ2Jhc2U2NC1qcyc7XG5pbXBvcnQgeyBkZWZsYXRlIH0gZnJvbSAncGFrbyc7XG5pbXBvcnQgeyBMYXllciwgQmxlbmRNb2RlLCBMYXllckNvbG9yIH0gZnJvbSAnLi9wc2QnO1xuXG5leHBvcnQgY29uc3QgTU9DS19IQU5ETEVSUyA9IGZhbHNlO1xuZXhwb3J0IGNvbnN0IFJBV19JTUFHRV9EQVRBID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBmcm9tQmxlbmRNb2RlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5leHBvcnQgY29uc3QgdG9CbGVuZE1vZGU6IHsgW2tleTogc3RyaW5nXTogQmxlbmRNb2RlIH0gPSB7XG5cdCdwYXNzJzogJ3Bhc3MgdGhyb3VnaCcsXG5cdCdub3JtJzogJ25vcm1hbCcsXG5cdCdkaXNzJzogJ2Rpc3NvbHZlJyxcblx0J2RhcmsnOiAnZGFya2VuJyxcblx0J211bCAnOiAnbXVsdGlwbHknLFxuXHQnaWRpdic6ICdjb2xvciBidXJuJyxcblx0J2xicm4nOiAnbGluZWFyIGJ1cm4nLFxuXHQnZGtDbCc6ICdkYXJrZXIgY29sb3InLFxuXHQnbGl0ZSc6ICdsaWdodGVuJyxcblx0J3Njcm4nOiAnc2NyZWVuJyxcblx0J2RpdiAnOiAnY29sb3IgZG9kZ2UnLFxuXHQnbGRkZyc6ICdsaW5lYXIgZG9kZ2UnLFxuXHQnbGdDbCc6ICdsaWdodGVyIGNvbG9yJyxcblx0J292ZXInOiAnb3ZlcmxheScsXG5cdCdzTGl0JzogJ3NvZnQgbGlnaHQnLFxuXHQnaExpdCc6ICdoYXJkIGxpZ2h0Jyxcblx0J3ZMaXQnOiAndml2aWQgbGlnaHQnLFxuXHQnbExpdCc6ICdsaW5lYXIgbGlnaHQnLFxuXHQncExpdCc6ICdwaW4gbGlnaHQnLFxuXHQnaE1peCc6ICdoYXJkIG1peCcsXG5cdCdkaWZmJzogJ2RpZmZlcmVuY2UnLFxuXHQnc211ZCc6ICdleGNsdXNpb24nLFxuXHQnZnN1Yic6ICdzdWJ0cmFjdCcsXG5cdCdmZGl2JzogJ2RpdmlkZScsXG5cdCdodWUgJzogJ2h1ZScsXG5cdCdzYXQgJzogJ3NhdHVyYXRpb24nLFxuXHQnY29scic6ICdjb2xvcicsXG5cdCdsdW0gJzogJ2x1bWlub3NpdHknLFxufTtcblxuT2JqZWN0LmtleXModG9CbGVuZE1vZGUpLmZvckVhY2goa2V5ID0+IGZyb21CbGVuZE1vZGVbdG9CbGVuZE1vZGVba2V5XV0gPSBrZXkpO1xuXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvcnM6IExheWVyQ29sb3JbXSA9IFtcblx0J25vbmUnLCAncmVkJywgJ29yYW5nZScsICd5ZWxsb3cnLCAnZ3JlZW4nLCAnYmx1ZScsICd2aW9sZXQnLCAnZ3JheSdcbl07XG5cbmV4cG9ydCBjb25zdCBsYXJnZUFkZGl0aW9uYWxJbmZvS2V5cyA9IFtcblx0Ly8gZnJvbSBkb2N1bWVudGF0aW9uXG5cdCdMTXNrJywgJ0xyMTYnLCAnTHIzMicsICdMYXlyJywgJ010MTYnLCAnTXQzMicsICdNdHJuJywgJ0FscGgnLCAnRk1zaycsICdsbmsyJywgJ0ZFaWQnLCAnRlhpZCcsICdQeFNEJyxcblx0Ly8gZnJvbSBndWVzc2luZ1xuXHQnY2luZicsXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIERpY3Qge1xuXHRba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXZNYXAobWFwOiBEaWN0KSB7XG5cdGNvbnN0IHJlc3VsdDogRGljdCA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYXApLmZvckVhY2goa2V5ID0+IHJlc3VsdFttYXBba2V5XV0gPSBrZXkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW51bTxUPihwcmVmaXg6IHN0cmluZywgZGVmOiBzdHJpbmcsIG1hcDogRGljdCkge1xuXHRjb25zdCByZXYgPSByZXZNYXAobWFwKTtcblx0Y29uc3QgZGVjb2RlID0gKHZhbDogc3RyaW5nKTogVCA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWwuc3BsaXQoJy4nKVsxXTtcblx0XHRpZiAodmFsdWUgJiYgIXJldlt2YWx1ZV0pIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHZhbHVlIGZvciBlbnVtOiAnJHt2YWx9J2ApO1xuXHRcdHJldHVybiAocmV2W3ZhbHVlXSBhcyBhbnkpIHx8IGRlZjtcblx0fTtcblx0Y29uc3QgZW5jb2RlID0gKHZhbDogVCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG5cdFx0aWYgKHZhbCAmJiAhbWFwW3ZhbCBhcyBhbnldKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgZm9yIGVudW06ICcke3ZhbH0nYCk7XG5cdFx0cmV0dXJuIGAke3ByZWZpeH0uJHttYXBbdmFsIGFzIGFueV0gfHwgbWFwW2RlZl19YDtcblx0fTtcblx0cmV0dXJuIHsgZGVjb2RlLCBlbmNvZGUgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sb3JTcGFjZSB7XG5cdFJHQiA9IDAsXG5cdEhTQiA9IDEsXG5cdENNWUsgPSAyLFxuXHRMYWIgPSA3LFxuXHRHcmF5c2NhbGUgPSA4LFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBMYXllck1hc2tGbGFncyB7XG5cdFBvc2l0aW9uUmVsYXRpdmVUb0xheWVyID0gMSxcblx0TGF5ZXJNYXNrRGlzYWJsZWQgPSAyLFxuXHRJbnZlcnRMYXllck1hc2tXaGVuQmxlbmRpbmcgPSA0LCAvLyBvYnNvbGV0ZVxuXHRMYXllck1hc2tGcm9tUmVuZGVyaW5nT3RoZXJEYXRhID0gOCxcblx0TWFza0hhc1BhcmFtZXRlcnNBcHBsaWVkVG9JdCA9IDE2LFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBNYXNrUGFyYW1zIHtcblx0VXNlck1hc2tEZW5zaXR5ID0gMSxcblx0VXNlck1hc2tGZWF0aGVyID0gMixcblx0VmVjdG9yTWFza0RlbnNpdHkgPSA0LFxuXHRWZWN0b3JNYXNrRmVhdGhlciA9IDgsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIENoYW5uZWxJRCB7XG5cdENvbG9yMCA9IDAsIC8vIHJlZCAocmdiKSAvIGN5YW4gKGNteWspXG5cdENvbG9yMSA9IDEsIC8vIGdyZWVuIChyZ2IpIC8gbWFnZW50YSAoY215aylcblx0Q29sb3IyID0gMiwgLy8gYmx1ZSAocmdiKSAvIHllbGxvdyAoY215aylcblx0Q29sb3IzID0gMywgLy8gLSAocmdiKSAvIGJsYWNrIChjbXlrKVxuXHRUcmFuc3BhcmVuY3kgPSAtMSxcblx0VXNlck1hc2sgPSAtMixcblx0UmVhbFVzZXJNYXNrID0gLTMsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIENvbXByZXNzaW9uIHtcblx0UmF3RGF0YSA9IDAsXG5cdFJsZUNvbXByZXNzZWQgPSAxLFxuXHRaaXBXaXRob3V0UHJlZGljdGlvbiA9IDIsXG5cdFppcFdpdGhQcmVkaWN0aW9uID0gMyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFubmVsRGF0YSB7XG5cdGNoYW5uZWxJZDogQ2hhbm5lbElEO1xuXHRjb21wcmVzc2lvbjogQ29tcHJlc3Npb247XG5cdGJ1ZmZlcjogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblx0bGVuZ3RoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm91bmRzIHtcblx0dG9wOiBudW1iZXI7XG5cdGxlZnQ6IG51bWJlcjtcblx0cmlnaHQ6IG51bWJlcjtcblx0Ym90dG9tOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJDaGFubmVsRGF0YSB7XG5cdGxheWVyOiBMYXllcjtcblx0Y2hhbm5lbHM6IENoYW5uZWxEYXRhW107XG5cdHRvcDogbnVtYmVyO1xuXHRsZWZ0OiBudW1iZXI7XG5cdHJpZ2h0OiBudW1iZXI7XG5cdGJvdHRvbTogbnVtYmVyO1xuXHRtYXNrPzogQm91bmRzO1xufVxuXG5leHBvcnQgdHlwZSBQaXhlbEFycmF5ID0gVWludDhDbGFtcGVkQXJyYXkgfCBVaW50OEFycmF5O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBpeGVsRGF0YSB7XG5cdGRhdGE6IFBpeGVsQXJyYXk7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0Rm9yQ2hhbm5lbChjaGFubmVsSWQ6IENoYW5uZWxJRCwgY215azogYm9vbGVhbikge1xuXHRzd2l0Y2ggKGNoYW5uZWxJZCkge1xuXHRcdGNhc2UgQ2hhbm5lbElELkNvbG9yMDogcmV0dXJuIDA7XG5cdFx0Y2FzZSBDaGFubmVsSUQuQ29sb3IxOiByZXR1cm4gMTtcblx0XHRjYXNlIENoYW5uZWxJRC5Db2xvcjI6IHJldHVybiAyO1xuXHRcdGNhc2UgQ2hhbm5lbElELkNvbG9yMzogcmV0dXJuIGNteWsgPyAzIDogY2hhbm5lbElkICsgMTtcblx0XHRjYXNlIENoYW5uZWxJRC5UcmFuc3BhcmVuY3k6IHJldHVybiBjbXlrID8gNCA6IDM7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIGNoYW5uZWxJZCArIDE7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuXHRyZXR1cm4gdmFsdWUgPCBtaW4gPyBtaW4gOiAodmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNBbHBoYShkYXRhOiBQaXhlbERhdGEpIHtcblx0Y29uc3Qgc2l6ZSA9IGRhdGEud2lkdGggKiBkYXRhLmhlaWdodCAqIDQ7XG5cblx0Zm9yIChsZXQgaSA9IDM7IGkgPCBzaXplOyBpICs9IDQpIHtcblx0XHRpZiAoZGF0YS5kYXRhW2ldICE9PSAyNTUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0SW1hZ2VEYXRhKHsgZGF0YSB9OiBQaXhlbERhdGEpIHtcblx0Y29uc3QgYnVmZmVyID0gbmV3IFVpbnQzMkFycmF5KGRhdGEuYnVmZmVyKTtcblx0Y29uc3Qgc2l6ZSA9IGJ1ZmZlci5sZW5ndGggfCAwO1xuXG5cdGZvciAobGV0IHAgPSAwOyBwIDwgc2l6ZTsgcCA9IChwICsgMSkgfCAwKSB7XG5cdFx0YnVmZmVyW3BdID0gMHhmZjAwMDAwMDtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQml0bWFwKGlucHV0OiBQaXhlbEFycmF5LCBvdXRwdXQ6IFBpeGVsQXJyYXksIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdGZvciAobGV0IHkgPSAwLCBwID0gMCwgbyA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuXHRcdGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7KSB7XG5cdFx0XHRsZXQgYiA9IGlucHV0W28rK107XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgOCAmJiB4IDwgd2lkdGg7IGkrKywgeCsrKSB7XG5cdFx0XHRcdGNvbnN0IHYgPSBiICYgMHg4MCA/IDAgOiAyNTU7XG5cdFx0XHRcdGIgPSBiIDw8IDE7XG5cdFx0XHRcdG91dHB1dFtwKytdID0gdjtcblx0XHRcdFx0b3V0cHV0W3ArK10gPSB2O1xuXHRcdFx0XHRvdXRwdXRbcCsrXSA9IHY7XG5cdFx0XHRcdG91dHB1dFtwKytdID0gMjU1O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRhUmF3KGRhdGE6IFBpeGVsRGF0YSwgb2Zmc2V0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdGlmICghd2lkdGggfHwgIWhlaWdodClcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRhcnJheVtpXSA9IGRhdGEuZGF0YVtpICogNCArIG9mZnNldF07XG5cdH1cblxuXHRyZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGFSTEUoYnVmZmVyOiBVaW50OEFycmF5LCB7IGRhdGEsIHdpZHRoLCBoZWlnaHQgfTogUGl4ZWxEYXRhLCBvZmZzZXRzOiBudW1iZXJbXSwgbGFyZ2U6IGJvb2xlYW4pIHtcblx0aWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSByZXR1cm4gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHN0cmlkZSA9ICg0ICogd2lkdGgpIHwgMDtcblxuXHRsZXQgb2wgPSAwO1xuXHRsZXQgbyA9IChvZmZzZXRzLmxlbmd0aCAqIChsYXJnZSA/IDQgOiAyKSAqIGhlaWdodCkgfCAwO1xuXG5cdGZvciAoY29uc3Qgb2Zmc2V0IG9mIG9mZnNldHMpIHtcblx0XHRmb3IgKGxldCB5ID0gMCwgcCA9IG9mZnNldCB8IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuXHRcdFx0Y29uc3Qgc3RyaWRlU3RhcnQgPSAoeSAqIHN0cmlkZSkgfCAwO1xuXHRcdFx0Y29uc3Qgc3RyaWRlRW5kID0gKHN0cmlkZVN0YXJ0ICsgc3RyaWRlKSB8IDA7XG5cdFx0XHRjb25zdCBsYXN0SW5kZXggPSAoc3RyaWRlRW5kICsgb2Zmc2V0IC0gNCkgfCAwO1xuXHRcdFx0Y29uc3QgbGFzdEluZGV4MiA9IChsYXN0SW5kZXggLSA0KSB8IDA7XG5cdFx0XHRjb25zdCBzdGFydE9mZnNldCA9IG87XG5cblx0XHRcdGZvciAocCA9IChzdHJpZGVTdGFydCArIG9mZnNldCkgfCAwOyBwIDwgc3RyaWRlRW5kOyBwID0gKHAgKyA0KSB8IDApIHtcblx0XHRcdFx0aWYgKHAgPCBsYXN0SW5kZXgyKSB7XG5cdFx0XHRcdFx0bGV0IHZhbHVlMSA9IGRhdGFbcF07XG5cdFx0XHRcdFx0cCA9IChwICsgNCkgfCAwO1xuXHRcdFx0XHRcdGxldCB2YWx1ZTIgPSBkYXRhW3BdO1xuXHRcdFx0XHRcdHAgPSAocCArIDQpIHwgMDtcblx0XHRcdFx0XHRsZXQgdmFsdWUzID0gZGF0YVtwXTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZTEgPT09IHZhbHVlMiAmJiB2YWx1ZTEgPT09IHZhbHVlMykge1xuXHRcdFx0XHRcdFx0bGV0IGNvdW50ID0gMztcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGNvdW50IDwgMTI4ICYmIHAgPCBsYXN0SW5kZXggJiYgZGF0YVsocCArIDQpIHwgMF0gPT09IHZhbHVlMSkge1xuXHRcdFx0XHRcdFx0XHRjb3VudCA9IChjb3VudCArIDEpIHwgMDtcblx0XHRcdFx0XHRcdFx0cCA9IChwICsgNCkgfCAwO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRidWZmZXJbbysrXSA9IDEgLSBjb3VudDtcblx0XHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gdmFsdWUxO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb3VudEluZGV4ID0gbztcblx0XHRcdFx0XHRcdGxldCB3cml0ZUxhc3QgPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGNvdW50ID0gMTtcblx0XHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gMDtcblx0XHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gdmFsdWUxO1xuXG5cdFx0XHRcdFx0XHR3aGlsZSAocCA8IGxhc3RJbmRleCAmJiBjb3VudCA8IDEyOCkge1xuXHRcdFx0XHRcdFx0XHRwID0gKHAgKyA0KSB8IDA7XG5cdFx0XHRcdFx0XHRcdHZhbHVlMSA9IHZhbHVlMjtcblx0XHRcdFx0XHRcdFx0dmFsdWUyID0gdmFsdWUzO1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTMgPSBkYXRhW3BdO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZTEgPT09IHZhbHVlMiAmJiB2YWx1ZTEgPT09IHZhbHVlMykge1xuXHRcdFx0XHRcdFx0XHRcdHAgPSAocCAtIDEyKSB8IDA7XG5cdFx0XHRcdFx0XHRcdFx0d3JpdGVMYXN0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHRcdFx0XHRidWZmZXJbbysrXSA9IHZhbHVlMTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAod3JpdGVMYXN0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjb3VudCA8IDEyNykge1xuXHRcdFx0XHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gdmFsdWUyO1xuXHRcdFx0XHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gdmFsdWUzO1xuXHRcdFx0XHRcdFx0XHRcdGNvdW50ICs9IDI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoY291bnQgPCAxMjgpIHtcblx0XHRcdFx0XHRcdFx0XHRidWZmZXJbbysrXSA9IHZhbHVlMjtcblx0XHRcdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdHAgPSAocCAtIDQpIHwgMDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRwID0gKHAgLSA4KSB8IDA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0YnVmZmVyW2NvdW50SW5kZXhdID0gY291bnQgLSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChwID09PSBsYXN0SW5kZXgpIHtcblx0XHRcdFx0XHRidWZmZXJbbysrXSA9IDA7XG5cdFx0XHRcdFx0YnVmZmVyW28rK10gPSBkYXRhW3BdO1xuXHRcdFx0XHR9IGVsc2UgeyAvLyBwID09PSBsYXN0SW5kZXgyXG5cdFx0XHRcdFx0YnVmZmVyW28rK10gPSAxO1xuXHRcdFx0XHRcdGJ1ZmZlcltvKytdID0gZGF0YVtwXTtcblx0XHRcdFx0XHRwID0gKHAgKyA0KSB8IDA7XG5cdFx0XHRcdFx0YnVmZmVyW28rK10gPSBkYXRhW3BdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxlbmd0aCA9IG8gLSBzdGFydE9mZnNldDtcblxuXHRcdFx0aWYgKGxhcmdlKSB7XG5cdFx0XHRcdGJ1ZmZlcltvbCsrXSA9IChsZW5ndGggPj4gMjQpICYgMHhmZjtcblx0XHRcdFx0YnVmZmVyW29sKytdID0gKGxlbmd0aCA+PiAxNikgJiAweGZmO1xuXHRcdFx0fVxuXG5cdFx0XHRidWZmZXJbb2wrK10gPSAobGVuZ3RoID4+IDgpICYgMHhmZjtcblx0XHRcdGJ1ZmZlcltvbCsrXSA9IGxlbmd0aCAmIDB4ZmY7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJ1ZmZlci5zbGljZSgwLCBvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0YVppcFdpdGhvdXRQcmVkaWN0aW9uKHsgZGF0YSwgd2lkdGgsIGhlaWdodCB9OiBQaXhlbERhdGEsIG9mZnNldHM6IG51bWJlcltdKSB7XG5cdGNvbnN0IHNpemUgPSB3aWR0aCAqIGhlaWdodDtcblx0Y29uc3QgY2hhbm5lbCA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuXHRjb25zdCBidWZmZXJzOiBVaW50OEFycmF5W10gPSBbXTtcblx0bGV0IHRvdGFsTGVuZ3RoID0gMDtcblxuXHRmb3IgKGNvbnN0IG9mZnNldCBvZiBvZmZzZXRzKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDAsIG8gPSBvZmZzZXQ7IGkgPCBzaXplOyBpKyssIG8gKz0gNCkge1xuXHRcdFx0Y2hhbm5lbFtpXSA9IGRhdGFbb107XG5cdFx0fVxuXG5cdFx0Y29uc3QgYnVmZmVyID0gZGVmbGF0ZShjaGFubmVsKTtcblx0XHRidWZmZXJzLnB1c2goYnVmZmVyKTtcblx0XHR0b3RhbExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcblx0fVxuXG5cdGlmIChidWZmZXJzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XG5cdFx0bGV0IG9mZnNldCA9IDA7XG5cblx0XHRmb3IgKGNvbnN0IGIgb2YgYnVmZmVycykge1xuXHRcdFx0YnVmZmVyLnNldChiLCBvZmZzZXQpO1xuXHRcdFx0b2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYnVmZmVyO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBidWZmZXJzWzBdO1xuXHR9XG59XG5cbmV4cG9ydCBsZXQgY3JlYXRlQ2FudmFzOiAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IEhUTUxDYW52YXNFbGVtZW50ID0gKCkgPT4ge1xuXHR0aHJvdyBuZXcgRXJyb3IoJ0NhbnZhcyBub3QgaW5pdGlhbGl6ZWQsIHVzZSBpbml0aWFsaXplQ2FudmFzIG1ldGhvZCB0byBzZXQgdXAgY3JlYXRlQ2FudmFzIG1ldGhvZCcpO1xufTtcblxuZXhwb3J0IGxldCBjcmVhdGVDYW52YXNGcm9tRGF0YTogKGRhdGE6IFVpbnQ4QXJyYXkpID0+IEhUTUxDYW52YXNFbGVtZW50ID0gKCkgPT4ge1xuXHR0aHJvdyBuZXcgRXJyb3IoJ0NhbnZhcyBub3QgaW5pdGlhbGl6ZWQsIHVzZSBpbml0aWFsaXplQ2FudmFzIG1ldGhvZCB0byBzZXQgdXAgY3JlYXRlQ2FudmFzRnJvbURhdGEgbWV0aG9kJyk7XG59O1xuXG5sZXQgdGVtcENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBsZXQgY3JlYXRlSW1hZ2VEYXRhOiAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IEltYWdlRGF0YSA9ICh3aWR0aCwgaGVpZ2h0KSA9PiB7XG5cdGlmICghdGVtcENhbnZhcykgdGVtcENhbnZhcyA9IGNyZWF0ZUNhbnZhcygxLCAxKTtcblx0cmV0dXJuIHRlbXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSEuY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xufTtcblxuaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Y3JlYXRlQ2FudmFzID0gKHdpZHRoLCBoZWlnaHQpID0+IHtcblx0XHRjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblx0XHRjYW52YXMud2lkdGggPSB3aWR0aDtcblx0XHRjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdHJldHVybiBjYW52YXM7XG5cdH07XG5cblx0Y3JlYXRlQ2FudmFzRnJvbURhdGEgPSAoZGF0YSkgPT4ge1xuXHRcdGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG5cdFx0aW1hZ2Uuc3JjID0gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJyArIGZyb21CeXRlQXJyYXkoZGF0YSk7XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XG5cdFx0Y2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcblx0XHRjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSEuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcblx0XHRyZXR1cm4gY2FudmFzO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNhbnZhcyhcblx0Y3JlYXRlQ2FudmFzTWV0aG9kOiAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IEhUTUxDYW52YXNFbGVtZW50LFxuXHRjcmVhdGVDYW52YXNGcm9tRGF0YU1ldGhvZD86IChkYXRhOiBVaW50OEFycmF5KSA9PiBIVE1MQ2FudmFzRWxlbWVudCxcblx0Y3JlYXRlSW1hZ2VEYXRhTWV0aG9kPzogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiBJbWFnZURhdGFcbikge1xuXHRjcmVhdGVDYW52YXMgPSBjcmVhdGVDYW52YXNNZXRob2Q7XG5cdGNyZWF0ZUNhbnZhc0Zyb21EYXRhID0gY3JlYXRlQ2FudmFzRnJvbURhdGFNZXRob2QgfHwgY3JlYXRlQ2FudmFzRnJvbURhdGE7XG5cdGNyZWF0ZUltYWdlRGF0YSA9IGNyZWF0ZUltYWdlRGF0YU1ldGhvZCB8fCBjcmVhdGVJbWFnZURhdGE7XG59XG4iXSwic291cmNlUm9vdCI6IkM6XFxQcm9qZWN0c1xcZ2l0aHViXFxhZy1wc2RcXHNyYyJ9
1
+ import { fromByteArray } from 'base64-js';
2
+ import { deflate } from 'pako';
3
+ export var MOCK_HANDLERS = false;
4
+ export var RAW_IMAGE_DATA = false;
5
+ export var fromBlendMode = {};
6
+ export var toBlendMode = {
7
+ 'pass': 'pass through',
8
+ 'norm': 'normal',
9
+ 'diss': 'dissolve',
10
+ 'dark': 'darken',
11
+ 'mul ': 'multiply',
12
+ 'idiv': 'color burn',
13
+ 'lbrn': 'linear burn',
14
+ 'dkCl': 'darker color',
15
+ 'lite': 'lighten',
16
+ 'scrn': 'screen',
17
+ 'div ': 'color dodge',
18
+ 'lddg': 'linear dodge',
19
+ 'lgCl': 'lighter color',
20
+ 'over': 'overlay',
21
+ 'sLit': 'soft light',
22
+ 'hLit': 'hard light',
23
+ 'vLit': 'vivid light',
24
+ 'lLit': 'linear light',
25
+ 'pLit': 'pin light',
26
+ 'hMix': 'hard mix',
27
+ 'diff': 'difference',
28
+ 'smud': 'exclusion',
29
+ 'fsub': 'subtract',
30
+ 'fdiv': 'divide',
31
+ 'hue ': 'hue',
32
+ 'sat ': 'saturation',
33
+ 'colr': 'color',
34
+ 'lum ': 'luminosity',
35
+ };
36
+ Object.keys(toBlendMode).forEach(function (key) { return fromBlendMode[toBlendMode[key]] = key; });
37
+ export var layerColors = [
38
+ 'none', 'red', 'orange', 'yellow', 'green', 'blue', 'violet', 'gray'
39
+ ];
40
+ export var largeAdditionalInfoKeys = [
41
+ // from documentation
42
+ 'LMsk', 'Lr16', 'Lr32', 'Layr', 'Mt16', 'Mt32', 'Mtrn', 'Alph', 'FMsk', 'lnk2', 'FEid', 'FXid', 'PxSD',
43
+ // from guessing
44
+ 'cinf',
45
+ ];
46
+ export function revMap(map) {
47
+ var result = {};
48
+ Object.keys(map).forEach(function (key) { return result[map[key]] = key; });
49
+ return result;
50
+ }
51
+ export function createEnum(prefix, def, map) {
52
+ var rev = revMap(map);
53
+ var decode = function (val) {
54
+ var value = val.split('.')[1];
55
+ if (value && !rev[value])
56
+ throw new Error("Unrecognized value for enum: '".concat(val, "'"));
57
+ return rev[value] || def;
58
+ };
59
+ var encode = function (val) {
60
+ if (val && !map[val])
61
+ throw new Error("Invalid value for enum: '".concat(val, "'"));
62
+ return "".concat(prefix, ".").concat(map[val] || map[def]);
63
+ };
64
+ return { decode: decode, encode: encode };
65
+ }
66
+ export var ColorSpace;
67
+ (function (ColorSpace) {
68
+ ColorSpace[ColorSpace["RGB"] = 0] = "RGB";
69
+ ColorSpace[ColorSpace["HSB"] = 1] = "HSB";
70
+ ColorSpace[ColorSpace["CMYK"] = 2] = "CMYK";
71
+ ColorSpace[ColorSpace["Lab"] = 7] = "Lab";
72
+ ColorSpace[ColorSpace["Grayscale"] = 8] = "Grayscale";
73
+ })(ColorSpace || (ColorSpace = {}));
74
+ export var LayerMaskFlags;
75
+ (function (LayerMaskFlags) {
76
+ LayerMaskFlags[LayerMaskFlags["PositionRelativeToLayer"] = 1] = "PositionRelativeToLayer";
77
+ LayerMaskFlags[LayerMaskFlags["LayerMaskDisabled"] = 2] = "LayerMaskDisabled";
78
+ LayerMaskFlags[LayerMaskFlags["InvertLayerMaskWhenBlending"] = 4] = "InvertLayerMaskWhenBlending";
79
+ LayerMaskFlags[LayerMaskFlags["LayerMaskFromRenderingOtherData"] = 8] = "LayerMaskFromRenderingOtherData";
80
+ LayerMaskFlags[LayerMaskFlags["MaskHasParametersAppliedToIt"] = 16] = "MaskHasParametersAppliedToIt";
81
+ })(LayerMaskFlags || (LayerMaskFlags = {}));
82
+ export var MaskParams;
83
+ (function (MaskParams) {
84
+ MaskParams[MaskParams["UserMaskDensity"] = 1] = "UserMaskDensity";
85
+ MaskParams[MaskParams["UserMaskFeather"] = 2] = "UserMaskFeather";
86
+ MaskParams[MaskParams["VectorMaskDensity"] = 4] = "VectorMaskDensity";
87
+ MaskParams[MaskParams["VectorMaskFeather"] = 8] = "VectorMaskFeather";
88
+ })(MaskParams || (MaskParams = {}));
89
+ export var ChannelID;
90
+ (function (ChannelID) {
91
+ ChannelID[ChannelID["Color0"] = 0] = "Color0";
92
+ ChannelID[ChannelID["Color1"] = 1] = "Color1";
93
+ ChannelID[ChannelID["Color2"] = 2] = "Color2";
94
+ ChannelID[ChannelID["Color3"] = 3] = "Color3";
95
+ ChannelID[ChannelID["Transparency"] = -1] = "Transparency";
96
+ ChannelID[ChannelID["UserMask"] = -2] = "UserMask";
97
+ ChannelID[ChannelID["RealUserMask"] = -3] = "RealUserMask";
98
+ })(ChannelID || (ChannelID = {}));
99
+ export var Compression;
100
+ (function (Compression) {
101
+ Compression[Compression["RawData"] = 0] = "RawData";
102
+ Compression[Compression["RleCompressed"] = 1] = "RleCompressed";
103
+ Compression[Compression["ZipWithoutPrediction"] = 2] = "ZipWithoutPrediction";
104
+ Compression[Compression["ZipWithPrediction"] = 3] = "ZipWithPrediction";
105
+ })(Compression || (Compression = {}));
106
+ export function offsetForChannel(channelId, cmyk) {
107
+ switch (channelId) {
108
+ case 0 /* ChannelID.Color0 */: return 0;
109
+ case 1 /* ChannelID.Color1 */: return 1;
110
+ case 2 /* ChannelID.Color2 */: return 2;
111
+ case 3 /* ChannelID.Color3 */: return cmyk ? 3 : channelId + 1;
112
+ case -1 /* ChannelID.Transparency */: return cmyk ? 4 : 3;
113
+ default: return channelId + 1;
114
+ }
115
+ }
116
+ export function clamp(value, min, max) {
117
+ return value < min ? min : (value > max ? max : value);
118
+ }
119
+ export function hasAlpha(data) {
120
+ var size = data.width * data.height * 4;
121
+ for (var i = 3; i < size; i += 4) {
122
+ if (data.data[i] !== 255) {
123
+ return true;
124
+ }
125
+ }
126
+ return false;
127
+ }
128
+ export function resetImageData(_a) {
129
+ var data = _a.data;
130
+ var buffer = new Uint32Array(data.buffer);
131
+ var size = buffer.length | 0;
132
+ for (var p = 0; p < size; p = (p + 1) | 0) {
133
+ buffer[p] = 0xff000000;
134
+ }
135
+ }
136
+ export function decodeBitmap(input, output, width, height) {
137
+ for (var y = 0, p = 0, o = 0; y < height; y++) {
138
+ for (var x = 0; x < width;) {
139
+ var b = input[o++];
140
+ for (var i = 0; i < 8 && x < width; i++, x++) {
141
+ var v = b & 0x80 ? 0 : 255;
142
+ b = b << 1;
143
+ output[p++] = v;
144
+ output[p++] = v;
145
+ output[p++] = v;
146
+ output[p++] = 255;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ export function writeDataRaw(data, offset, width, height) {
152
+ if (!width || !height)
153
+ return undefined;
154
+ var array = new Uint8Array(width * height);
155
+ for (var i = 0; i < array.length; i++) {
156
+ array[i] = data.data[i * 4 + offset];
157
+ }
158
+ return array;
159
+ }
160
+ export function writeDataRLE(buffer, _a, offsets, large) {
161
+ var data = _a.data, width = _a.width, height = _a.height;
162
+ if (!width || !height)
163
+ return undefined;
164
+ var stride = (4 * width) | 0;
165
+ var ol = 0;
166
+ var o = (offsets.length * (large ? 4 : 2) * height) | 0;
167
+ for (var _i = 0, offsets_1 = offsets; _i < offsets_1.length; _i++) {
168
+ var offset = offsets_1[_i];
169
+ for (var y = 0, p = offset | 0; y < height; y++) {
170
+ var strideStart = (y * stride) | 0;
171
+ var strideEnd = (strideStart + stride) | 0;
172
+ var lastIndex = (strideEnd + offset - 4) | 0;
173
+ var lastIndex2 = (lastIndex - 4) | 0;
174
+ var startOffset = o;
175
+ for (p = (strideStart + offset) | 0; p < strideEnd; p = (p + 4) | 0) {
176
+ if (p < lastIndex2) {
177
+ var value1 = data[p];
178
+ p = (p + 4) | 0;
179
+ var value2 = data[p];
180
+ p = (p + 4) | 0;
181
+ var value3 = data[p];
182
+ if (value1 === value2 && value1 === value3) {
183
+ var count = 3;
184
+ while (count < 128 && p < lastIndex && data[(p + 4) | 0] === value1) {
185
+ count = (count + 1) | 0;
186
+ p = (p + 4) | 0;
187
+ }
188
+ buffer[o++] = 1 - count;
189
+ buffer[o++] = value1;
190
+ }
191
+ else {
192
+ var countIndex = o;
193
+ var writeLast = true;
194
+ var count = 1;
195
+ buffer[o++] = 0;
196
+ buffer[o++] = value1;
197
+ while (p < lastIndex && count < 128) {
198
+ p = (p + 4) | 0;
199
+ value1 = value2;
200
+ value2 = value3;
201
+ value3 = data[p];
202
+ if (value1 === value2 && value1 === value3) {
203
+ p = (p - 12) | 0;
204
+ writeLast = false;
205
+ break;
206
+ }
207
+ else {
208
+ count++;
209
+ buffer[o++] = value1;
210
+ }
211
+ }
212
+ if (writeLast) {
213
+ if (count < 127) {
214
+ buffer[o++] = value2;
215
+ buffer[o++] = value3;
216
+ count += 2;
217
+ }
218
+ else if (count < 128) {
219
+ buffer[o++] = value2;
220
+ count++;
221
+ p = (p - 4) | 0;
222
+ }
223
+ else {
224
+ p = (p - 8) | 0;
225
+ }
226
+ }
227
+ buffer[countIndex] = count - 1;
228
+ }
229
+ }
230
+ else if (p === lastIndex) {
231
+ buffer[o++] = 0;
232
+ buffer[o++] = data[p];
233
+ }
234
+ else { // p === lastIndex2
235
+ buffer[o++] = 1;
236
+ buffer[o++] = data[p];
237
+ p = (p + 4) | 0;
238
+ buffer[o++] = data[p];
239
+ }
240
+ }
241
+ var length_1 = o - startOffset;
242
+ if (large) {
243
+ buffer[ol++] = (length_1 >> 24) & 0xff;
244
+ buffer[ol++] = (length_1 >> 16) & 0xff;
245
+ }
246
+ buffer[ol++] = (length_1 >> 8) & 0xff;
247
+ buffer[ol++] = length_1 & 0xff;
248
+ }
249
+ }
250
+ return buffer.slice(0, o);
251
+ }
252
+ export function writeDataZipWithoutPrediction(_a, offsets) {
253
+ var data = _a.data, width = _a.width, height = _a.height;
254
+ var size = width * height;
255
+ var channel = new Uint8Array(size);
256
+ var buffers = [];
257
+ var totalLength = 0;
258
+ for (var _i = 0, offsets_2 = offsets; _i < offsets_2.length; _i++) {
259
+ var offset = offsets_2[_i];
260
+ for (var i = 0, o = offset; i < size; i++, o += 4) {
261
+ channel[i] = data[o];
262
+ }
263
+ var buffer = deflate(channel);
264
+ buffers.push(buffer);
265
+ totalLength += buffer.byteLength;
266
+ }
267
+ if (buffers.length > 0) {
268
+ var buffer = new Uint8Array(totalLength);
269
+ var offset = 0;
270
+ for (var _b = 0, buffers_1 = buffers; _b < buffers_1.length; _b++) {
271
+ var b = buffers_1[_b];
272
+ buffer.set(b, offset);
273
+ offset += b.byteLength;
274
+ }
275
+ return buffer;
276
+ }
277
+ else {
278
+ return buffers[0];
279
+ }
280
+ }
281
+ export var createCanvas = function () {
282
+ throw new Error('Canvas not initialized, use initializeCanvas method to set up createCanvas method');
283
+ };
284
+ export var createCanvasFromData = function () {
285
+ throw new Error('Canvas not initialized, use initializeCanvas method to set up createCanvasFromData method');
286
+ };
287
+ var tempCanvas = undefined;
288
+ export var createImageData = function (width, height) {
289
+ if (!tempCanvas)
290
+ tempCanvas = createCanvas(1, 1);
291
+ return tempCanvas.getContext('2d').createImageData(width, height);
292
+ };
293
+ if (typeof document !== 'undefined') {
294
+ createCanvas = function (width, height) {
295
+ var canvas = document.createElement('canvas');
296
+ canvas.width = width;
297
+ canvas.height = height;
298
+ return canvas;
299
+ };
300
+ createCanvasFromData = function (data) {
301
+ var image = new Image();
302
+ image.src = 'data:image/jpeg;base64,' + fromByteArray(data);
303
+ var canvas = document.createElement('canvas');
304
+ canvas.width = image.width;
305
+ canvas.height = image.height;
306
+ canvas.getContext('2d').drawImage(image, 0, 0);
307
+ return canvas;
308
+ };
309
+ }
310
+ export function initializeCanvas(createCanvasMethod, createCanvasFromDataMethod, createImageDataMethod) {
311
+ createCanvas = createCanvasMethod;
312
+ createCanvasFromData = createCanvasFromDataMethod || createCanvasFromData;
313
+ createImageData = createImageDataMethod || createImageData;
314
+ }
315
+ //# sourceMappingURL=helpers.js.map