forked from cazala/shoal
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbundle.js
355 lines (308 loc) · 30.2 KB
/
bundle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
"use strict";
var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
var foo = require("./fun.js");
var test2 = require("./src/test2.js");
console.log(foo(5));
test2(10);
var math = _interopRequireWildcard(require("./src/test3.js"));
console.log("2π = " + math.sum(math.pi, math.pi));
console.log(math.empty("hello"));
var createCanvas = require("./src/test3").createCanvas;
var test = createCanvas();
},{"./fun.js":2,"./src/test2.js":5,"./src/test3":6,"./src/test3.js":6}],2:[function(require,module,exports){
"use strict";
module.exports = function (n) {
return n * 1000;
};
},{}],3:[function(require,module,exports){
"use strict";
exports.Point = Point;
var Vector = require("./Gvector").Vector;
function Point(x, y) {
this.x = x || 0;
this.y = y || 0;
};
Point.prototype.toVector = function () {
return new Vector(this.x, this.y);
};
Object.defineProperty(exports, "__esModule", {
value: true
});
},{"./Gvector":4}],4:[function(require,module,exports){
"use strict";
/*jshint camelcase: true, browser:true, maxlen: 100, curly: true, eqeqeq: true, immed: true, latedef: true, noarg: true, noempty: true, nonew: true, quotmark: true, undef: true, unused: true, strict: true, maxdepth: 3, maxstatements:20, maxcomplexity: 5 */
/* global $:true, Vector:true, Fish:true, Food:true */
// helper library to work with vectors
exports.Vector = Vector;
function Vector(x, y) {
this.x = x || 0;
this.y = y || 0;
}
Vector.prototype = {
set: function set(x, y) {
this.x = x;
this.y = y;
return this;
},
add: function add(v) {
this.x += v.x;
this.y += v.y;
return this;
},
sub: function sub(v) {
this.x -= v.x;
this.y -= v.y;
return this;
},
subtract: function subtract(v) {
return this.sub(v);
},
mul: function mul(s) {
this.x *= s;
this.y *= s;
return this;
},
multiply: function multiply(s) {
return this.mul(s);
},
div: function div(s) {
!s && console.log("Division by zero!");
this.x /= s;
this.y /= s;
return this;
},
divide: function divide(s) {
return this.div(s);
},
mag: function mag() {
return Math.sqrt(this.x * this.x + this.y * this.y);
},
magnitude: function magnitude() {
return Math.sqrt(this.x * this.x + this.y * this.y);
},
length: function length() {
return this.mag();
},
truncate: function truncate(value) {
if (this.length() > value) {
this.normalize();
this.multiply(value);
}
return this;
},
normalize: function normalize() {
"use strict";
var mag = this.magnitude();
mag && this.div(mag);
return this;
},
unit: function unit() {
"use strict";
var mag = this.mag();
return new Vector(this.x / mag, this.y / mag);
},
angle: function angle() {
return Math.atan2(this.y, this.x);
},
setMag: function setMag(m) {
"use strict";
var angle = this.angle();
this.x = m * Math.cos(angle);
this.y = m * Math.sin(angle);
return this;
},
setAngle: function setAngle(a) {
"use strict";
var mag = this.mag();
this.x = mag * Math.cos(a);
this.y = mag * Math.sin(a);
return this;
},
rotate: function rotate(a) {
this.setAngle(this.angle() + a);
return this;
},
limit: function limit(l) {
"use strict";
var mag = this.mag();
if (mag > l) {
this.setMag(l);
}
return this;
},
angleBetween: function angleBetween(v) {
return this.angle() - v.angle();
},
dot: function dot(v) {
return this.x * v.x + this.y * v.y;
},
lerp: function lerp(v, amt) {
this.x += (v.x - this.x) * amt;
this.y += (v.y - this.y) * amt;
return this;
},
dist: function dist(v) {
"use strict";
var dx = this.x - v.x;
var dy = this.y - v.y;
return Math.sqrt(dx * dx + dy * dy);
},
near: function near(v, length) {
return this.dist(v) < length;
},
copy: function copy() {
return new Vector(this.x, this.y);
},
clone: function clone() {
return this.copy();
},
toString: function toString() {
return "x: " + this.x & " | y: " + this.y;
},
toArray: function toArray() {
return [this.x, this.y];
},
mix: function mix(v, amount) {
if (typeof amount === "undefined") {
amount = 0.5;
}
this.x = (1 - amount) * this.x + amount * v.x;
this.y = (1 - amount) * this.y + amount * v.y;
return this;
},
zero: function zero() {
this.x = this.y = 0;
},
cross: function cross(v) {
return this.x * v.y - this.y * v.x;
},
projectOnto: function projectOnto(vec2) {
"use strict";
var coeff = (this.x * vec2.x + this.y * vec2.y) / (vec2.x * vec2.x + vec2.y * vec2.y);
this.x = coeff * vec2.x;
this.y = coeff * vec2.y;
return this;
},
horizontalAngle: function horizontalAngle() {
return Math.atan2(this.y, this.x);
},
verticalAngle: function verticalAngle() {
return Math.atan2(this.x, this.y);
},
lengthSq: function lengthSq() {
return this.x * this.x + this.y * this.y;
},
isEqualTo: function isEqualTo(v) {
return this.x === v.x && this.y === v.y;
},
toObject: function toObject() {
return {
x: this.x,
y: this.y
};
},
perpRight: function perpRight() {
return new Vector(-this.y, this.x);
},
clamp: function clamp(vMin, vMax) {
if (this.x < vMin.x) {
this.x = vMin.x;
} else if (this.x > vMax.x) {
this.x = vMax.x;
}
if (this.y < vMin.y) {
this.y = vMin.y;
} else if (this.y > vMax.y) {
this.y = vMax.y;
}
return this;
},
clampScalar: function clampScalar(min, max) {
if (this.x < min) {
this.x = min;
} else if (this.x > max) {
this.x = max;
}
if (this.y < min) {
this.y = min;
} else if (this.y > max) {
this.y = max;
}
return this;
},
ceil: function ceil() {
this.x = Math.ceil(this.x);
this.y = Math.ceil(this.y);
return this;
},
floor: function floor() {
this.x = Math.floor(this.x);
this.y = Math.floor(this.y);
return this;
},
negate: function negate() {
this.x = -this.x;
this.y = -this.y;
return this;
}
};
Object.defineProperty(exports, "__esModule", {
value: true
});
},{}],5:[function(require,module,exports){
"use strict";
module.exports = function (n) {
console.log("what");
return n * 1000;
};
},{}],6:[function(require,module,exports){
"use strict";
var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; };
exports.sum = sum;
exports.createCanvas = createCanvas;
function sum(x, y) {
return x + y;
}
var pi = exports.pi = 3.141593;
var empty = function (x) {
console.log(x);
return x + " there!";
};
exports.empty = empty;
var testThis = require("./test4").testThis;
var Vector = require("./Gvector").Vector;
var V = _interopRequireWildcard(require("./Gvector.js"));
console.log(JSON.stringify(V));
console.log(JSON.stringify(V.prototype));
var Vec = new Vector(5, 1);
console.log(Vec.x);
var Point = require("./Gpoint").Point;
var P1 = new Point(10, 20);
console.log(P1.x);
function createCanvas() {
document.addEventListener("DOMContentLoaded", function (event) {
console.log("DOM fully loaded and parsed");
testThis();
console.log(JSON.stringify(Vector));
console.log(JSON.stringify(Vector.prototype));
var canv = document.createElement("canvas");
canv.id = "someId";
document.body.appendChild(canv);
return canv;
});
};
Object.defineProperty(exports, "__esModule", {
value: true
});
},{"./Gpoint":3,"./Gvector":4,"./Gvector.js":4,"./test4":7}],7:[function(require,module,exports){
"use strict";
exports.testThis = testThis;
function testThis() {
console.log("outside test");
};
Object.defineProperty(exports, "__esModule", {
value: true
});
},{}]},{},[1])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS91YnVudHUvd29ya3NwYWNlL21haW4uanMiLCIvaG9tZS91YnVudHUvd29ya3NwYWNlL2Z1bi5qcyIsIi9ob21lL3VidW50dS93b3Jrc3BhY2Uvc3JjL0dwb2ludC5qcyIsIi9ob21lL3VidW50dS93b3Jrc3BhY2Uvc3JjL0d2ZWN0b3IuanMiLCIvaG9tZS91YnVudHUvd29ya3NwYWNlL3NyYy90ZXN0Mi5qcyIsIi9ob21lL3VidW50dS93b3Jrc3BhY2Uvc3JjL3Rlc3QzLmpzIiwiL2hvbWUvdWJ1bnR1L3dvcmtzcGFjZS9zcmMvdGVzdDQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FDQUEsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUVFLElBQUksbUNBQU0sZ0JBQWdCOztBQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O0FBRWxELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztJQUV6QixZQUFZLFdBQU8sYUFBYSxFQUFoQyxZQUFZOztBQUVwQixJQUFJLElBQUksR0FBRyxZQUFZLEVBQUUsQ0FBQzs7Ozs7QUNaMUIsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRTtBQUFFLFNBQU8sQ0FBQyxHQUFHLElBQUksQ0FB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QyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJ2YXIgZm9vID0gcmVxdWlyZSgnLi9mdW4uanMnKTtcbnZhciB0ZXN0MiA9IHJlcXVpcmUoJy4vc3JjL3Rlc3QyLmpzJyk7XG5jb25zb2xlLmxvZyhmb28oNSkpO1xudGVzdDIoMTApO1xuXG5pbXBvcnQgKiBhcyBtYXRoIGZyb20gXCIuL3NyYy90ZXN0My5qc1wiO1xuY29uc29sZS5sb2coXCIyz4AgPSBcIiArIG1hdGguc3VtKG1hdGgucGksIG1hdGgucGkpKTtcblxuY29uc29sZS5sb2cobWF0aC5lbXB0eSgnaGVsbG8nKSk7XG5cbmltcG9ydCB7Y3JlYXRlQ2FudmFzfSBmcm9tIFwiLi9zcmMvdGVzdDNcIjtcblxudmFyIHRlc3QgPSBjcmVhdGVDYW52YXMoKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiBuICogMTAwMCB9IiwiaW1wb3J0IHtWZWN0b3J9IGZyb20gXCIuL0d2ZWN0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFBvaW50KHgseSl7XG5cdHRoaXMueCA9IHggfHwgMDtcblx0dGhpcy55ID0geSB8fCAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvVmVjdG9yID0gZnVuY3Rpb24oKXtcblx0cmV0dXJuIG5ldyBWZWN0b3IodGhpcy54LHRoaXMueSk7XG59OyIsIi8qanNoaW50IGNhbWVsY2FzZTogdHJ1ZSwgYnJvd3Nlcjp0cnVlLCBtYXhsZW46IDEwMCwgY3VybHk6IHRydWUsIGVxZXFlcTogdHJ1ZSwgaW1tZWQ6IHRydWUsIGxhdGVkZWY6IHRydWUsIG5vYXJnOiB0cnVlLCBub2VtcHR5OiB0cnVlLCBub25ldzogdHJ1ZSwgcXVvdG1hcms6IHRydWUsIHVuZGVmOiB0cnVlLCB1bnVzZWQ6IHRydWUsIHN0cmljdDogdHJ1ZSwgbWF4ZGVwdGg6IDMsIG1heHN0YXRlbWVudHM6MjAsIG1heGNvbXBsZXhpdHk6IDUgKi9cbi8qIGdsb2JhbCAkOnRydWUsIFZlY3Rvcjp0cnVlLCBGaXNoOnRydWUsIEZvb2Q6dHJ1ZSAqL1xuXG4vLyBoZWxwZXIgbGlicmFyeSB0byB3b3JrIHdpdGggdmVjdG9yc1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBWZWN0b3IoeCwgeSkge1xuXHR0aGlzLnggPSB4IHx8IDA7XG5cdHRoaXMueSA9IHkgfHwgMDtcbn1cblxuVmVjdG9yLnByb3RvdHlwZSA9IHtcblx0c2V0OiBmdW5jdGlvbih4LCB5KSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblxuXHRhZGQ6IGZ1bmN0aW9uKHYpIHtcblx0XHR0aGlzLnggKz0gdi54O1xuXHRcdHRoaXMueSArPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzdWI6IGZ1bmN0aW9uKHYpIHtcblx0XHR0aGlzLnggLT0gdi54O1xuXHRcdHRoaXMueSAtPSB2Lnk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0c3VidHJhY3Q6IGZ1bmN0aW9uKHYpe1xuXHRcdHJldHVybiB0aGlzLnN1Yih2KTtcblx0fSxcblxuXHRtdWw6IGZ1bmN0aW9uKHMpIHtcblx0XHR0aGlzLnggKj0gcztcblx0XHR0aGlzLnkgKj0gcztcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRtdWx0aXBseTogZnVuY3Rpb24ocyl7XG5cdFx0XG5cdFx0cmV0dXJuIHRoaXMubXVsKHMpO1xuXHR9LFxuXHRkaXY6IGZ1bmN0aW9uKHMpIHtcblx0XHQhcyAmJiBjb25zb2xlLmxvZygnRGl2aXNpb24gYnkgemVybyEnKTtcblxuXHRcdHRoaXMueCAvPSBzO1xuXHRcdHRoaXMueSAvPSBzO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdGRpdmlkZTogZnVuY3Rpb24ocyl7XG5cdFx0cmV0dXJuIHRoaXMuZGl2KHMpXG5cdH0sXG5cdG1hZzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkpO1xuXHR9LFxuXHRtYWduaXR1ZGU6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkpO1xuXHR9LFxuXHRsZW5ndGg6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHRoaXMubWFnKCk7XG5cdH0sXG5cdHRydW5jYXRlOiBmdW5jdGlvbih2YWx1ZSl7XG5cdFx0aWYgKHRoaXMubGVuZ3RoKCk+dmFsdWUpe1xuXHRcdFx0dGhpcy5ub3JtYWxpemUoKTtcblx0XHRcdHRoaXMubXVsdGlwbHkodmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0bm9ybWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7XG5cdFx0Y29uc3QgbWFnID0gdGhpcy5tYWduaXR1ZGUoKTtcblx0XHRtYWcgJiYgdGhpcy5kaXYobWFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0dW5pdDogZnVuY3Rpb24oKSB7XG5cdFx0J3VzZSBzdHJpY3QnO1xuXHRcdGNvbnN0IG1hZyA9IHRoaXMubWFnKCk7XG5cdFx0cmV0dXJuIG5ldyBWZWN0b3IodGhpcy54IC8gbWFnLCB0aGlzLnkgLyBtYWcpO1xuXHR9LFxuXHRhbmdsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LCB0aGlzLngpO1xuXHR9LFxuXHRzZXRNYWc6IGZ1bmN0aW9uKG0pIHtcblx0XHQndXNlIHN0cmljdCc7XG5cdFx0Y29uc3QgYW5nbGUgPSB0aGlzLmFuZ2xlKCk7XG5cdFx0dGhpcy54ID0gbSAqIE1hdGguY29zKGFuZ2xlKTtcblx0XHR0aGlzLnkgPSBtICogTWF0aC5zaW4oYW5nbGUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRzZXRBbmdsZTogZnVuY3Rpb24oYSkge1xuXHRcdCd1c2Ugc3RyaWN0Jztcblx0XHRjb25zdCBtYWcgPSB0aGlzLm1hZygpO1xuXHRcdHRoaXMueCA9IG1hZyAqIE1hdGguY29zKGEpO1xuXHRcdHRoaXMueSA9IG1hZyAqIE1hdGguc2luKGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRyb3RhdGU6IGZ1bmN0aW9uKGEpIHtcblx0XHR0aGlzLnNldEFuZ2xlKHRoaXMuYW5nbGUoKSArIGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRsaW1pdDogZnVuY3Rpb24obCkge1xuXHRcdCd1c2Ugc3RyaWN0Jztcblx0XHRjb25zdCBtYWcgPSB0aGlzLm1hZygpO1xuXHRcdGlmIChtYWcgPiBsKSB7XG5cdFx0XHR0aGlzLnNldE1hZyhsKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdGFuZ2xlQmV0d2VlbjogZnVuY3Rpb24odikge1xuXHRcdHJldHVybiB0aGlzLmFuZ2xlKCkgLSB2LmFuZ2xlKCk7XG5cdH0sXG5cdGRvdDogZnVuY3Rpb24odikge1xuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2Lnk7XG5cdH0sXG5cdGxlcnA6IGZ1bmN0aW9uKHYsIGFtdCkge1xuXHRcdHRoaXMueCArPSAodi54IC0gdGhpcy54KSAqIGFtdDtcblx0XHR0aGlzLnkgKz0gKHYueSAtIHRoaXMueSkgKiBhbXQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdGRpc3Q6IGZ1bmN0aW9uKHYpIHtcblx0XHQndXNlIHN0cmljdCc7XG5cdFx0Y29uc3QgZHggPSB0aGlzLnggLSB2Lng7XG5cdFx0Y29uc3QgZHkgPSB0aGlzLnkgLSB2Lnk7XG5cdFx0cmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cdH0sXG5cdG5lYXI6IGZ1bmN0aW9uKHYsbGVuZ3RoKXtcblx0XHRyZXR1cm4gdGhpcy5kaXN0KHYpIDwgbGVuZ3RoO1xuXHR9LFxuXHRjb3B5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gbmV3IFZlY3Rvcih0aGlzLngsIHRoaXMueSk7XG5cdH0sXG5cdGNsb25lOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jb3B5KCk7XG5cdH0sXG5cdHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gJ3g6ICcgKyB0aGlzLnggJiAnIHwgeTogJyArIHRoaXMueTtcblx0fSxcblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIFt0aGlzLngsIHRoaXMueV07XG5cdH0sXG5cdG1peDogZnVuY3Rpb24odiwgYW1vdW50KSB7XG5cdFx0aWYgKHR5cGVvZiBhbW91bnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRhbW91bnQgPSAwLjU7XG5cdFx0fVxuXHRcdHRoaXMueCA9ICgxIC0gYW1vdW50KSAqIHRoaXMueCArIGFtb3VudCAqIHYueDtcblx0XHR0aGlzLnkgPSAoMSAtIGFtb3VudCkgKiB0aGlzLnkgKyBhbW91bnQgKiB2Lnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdHplcm86IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMueCA9IHRoaXMueSA9IDA7XG5cdH0sXG5cdGNyb3NzOiBmdW5jdGlvbih2KSB7XG5cdFx0cmV0dXJuICh0aGlzLnggKiB2LnkpIC0gKHRoaXMueSAqIHYueCk7XG5cdH0sXG5cdHByb2plY3RPbnRvOiBmdW5jdGlvbih2ZWMyKSB7XG5cdFx0J3VzZSBzdHJpY3QnO1xuXHRcdGNvbnN0IGNvZWZmID0gKCh0aGlzLnggKiB2ZWMyLngpICsgKHRoaXMueSAqIHZlYzIueSkpIC8gKCh2ZWMyLnggKiB2ZWMyLngpICsgKHZlYzIueSAqIHZlYzIueSkpO1xuXHRcdHRoaXMueCA9IGNvZWZmICogdmVjMi54O1xuXHRcdHRoaXMueSA9IGNvZWZmICogdmVjMi55O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRob3Jpem9udGFsQW5nbGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSwgdGhpcy54KTtcblx0fSxcblx0dmVydGljYWxBbmdsZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIE1hdGguYXRhbjIodGhpcy54LCB0aGlzLnkpO1xuXHR9LFxuXHRsZW5ndGhTcTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueTtcblx0fSxcblx0aXNFcXVhbFRvOiBmdW5jdGlvbih2KSB7XG5cdFx0cmV0dXJuIHRoaXMueCA9PT0gdi54ICYmIHRoaXMueSA9PT0gdi55O1xuXHR9LFxuXHR0b09iamVjdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHRoaXMueCxcblx0XHRcdHk6IHRoaXMueVxuXHRcdH07XG5cdH0sXG5cdHBlcnBSaWdodDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBWZWN0b3IoLXRoaXMueSwgdGhpcy54KTtcblx0fSxcblx0Y2xhbXA6IGZ1bmN0aW9uKHZNaW4sdk1heCl7XG5cdFx0aWYgKHRoaXMueCA8IHZNaW4ueCkge3RoaXMueCA9IHZNaW4ueH0gZWxzZSBpZiAodGhpcy54ID4gdk1heC54KXt0aGlzLnggPSB2TWF4Lnh9XG5cdFx0aWYgKHRoaXMueSA8IHZNaW4ueSl7dGhpcy55ID0gdk1pbi55fWVsc2UgaWYgKHRoaXMueSA+IHZNYXgueSl7dGhpcy55ID0gdk1heC55fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRjbGFtcFNjYWxhcjogZnVuY3Rpb24obWluLG1heCl7XG5cdFx0aWYgKHRoaXMueCA8IG1pbikge3RoaXMueCA9IG1pbn0gZWxzZSBpZiAodGhpcy54ID4gbWF4KXt0aGlzLnggPSBtYXh9XG5cdFx0aWYgKHRoaXMueSA8IG1pbil7dGhpcy55ID0gbWlufWVsc2UgaWYgKHRoaXMueSA+IG1heCl7dGhpcy55ID0gbWF4fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRjZWlsOiBmdW5jdGlvbigpe1xuXHRcdHRoaXMueCA9IE1hdGguY2VpbCh0aGlzLngpO1xuXHRcdHRoaXMueSA9IE1hdGguY2VpbCh0aGlzLnkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRmbG9vcjogZnVuY3Rpb24oKXtcblx0XHR0aGlzLnggPSBNYXRoLmZsb29yKHRoaXMueCk7XG5cdFx0dGhpcy55ID0gTWF0aC5mbG9vcih0aGlzLnkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRuZWdhdGU6IGZ1bmN0aW9uKCl7XG5cdFx0dGhpcy54ID0gLSB0aGlzLng7XG5cdFx0dGhpcy55ID0gLSB0aGlzLnk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuKSB7XG4gICAgY29uc29sZS5sb2coXCJ3aGF0XCIpO1xuICAgIHJldHVybiBuICogMTAwMDtcbn07IiwiZXhwb3J0IGZ1bmN0aW9uIHN1bSh4LCB5KSB7XG4gICAgcmV0dXJuIHggKyB5O1xufVxuZXhwb3J0IHZhciBwaSA9IDMuMTQxNTkzO1xuXG5sZXQgZW1wdHkgPSAoeCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHgpO1xuICAgIHJldHVybiB4ICsgXCIgdGhlcmUhXCI7XG59O1xuXG5leHBvcnQge1xuICAgIGVtcHR5XG59XG5cbmltcG9ydCB7dGVzdFRoaXN9IGZyb20gXCIuL3Rlc3Q0XCI7XG5pbXBvcnQge1ZlY3Rvcn0gZnJvbSBcIi4vR3ZlY3RvclwiO1xuaW1wb3J0ICogYXMgViBmcm9tIFwiLi9HdmVjdG9yLmpzXCI7XG5cbmNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KFYpKTtcbmNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KFYucHJvdG90eXBlKSk7XG52YXIgVmVjID0gbmV3IFZlY3Rvcig1LDEpO1xuY29uc29sZS5sb2coVmVjLngpO1xuaW1wb3J0IHtQb2ludH0gZnJvbSBcIi4vR3BvaW50XCI7XG52YXIgUDEgPSBuZXcgUG9pbnQoMTAsMjApO1xuY29uc29sZS5sb2coUDEueCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYW52YXMoKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRE9NIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXCIpO1xuICAgICAgICB0ZXN0VGhpcygpO1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShWZWN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoVmVjdG9yLnByb3RvdHlwZSkpO1xuICAgICAgICB2YXIgY2FudiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52LmlkID0gJ3NvbWVJZCc7XG5cbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52KTtcbiAgICAgICAgcmV0dXJuIGNhbnY7XG4gICAgfSk7XG5cbn07XG5cbiIsImV4cG9ydCBmdW5jdGlvbiB0ZXN0VGhpcygpe2NvbnNvbGUubG9nKFwib3V0c2lkZSB0ZXN0XCIpfTsiXX0=