for-modules 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.txt +12 -0
- package/README.md +1 -0
- package/babel.config.json +6 -0
- package/dist/Structures/Filters.d.ts +109 -0
- package/dist/Structures/Filters.js +296 -0
- package/dist/Structures/Manager.d.ts +192 -0
- package/dist/Structures/Manager.js +580 -0
- package/dist/Structures/Node.d.ts +140 -0
- package/dist/Structures/Node.js +588 -0
- package/dist/Structures/Player.d.ts +250 -0
- package/dist/Structures/Player.js +750 -0
- package/dist/Structures/Queue.d.ts +38 -0
- package/dist/Structures/Queue.js +180 -0
- package/dist/Structures/Rest.d.ts +60 -0
- package/dist/Structures/Rest.js +246 -0
- package/dist/Structures/Utils.d.ts +174 -0
- package/dist/Structures/Utils.js +318 -0
- package/dist/Utils/FiltersEqualizers.d.ts +12 -0
- package/dist/Utils/FiltersEqualizers.js +227 -0
- package/dist/Utils/ManagerCheck.d.ts +2 -0
- package/dist/Utils/ManagerCheck.js +75 -0
- package/dist/Utils/NodeCheck.d.ts +2 -0
- package/dist/Utils/NodeCheck.js +54 -0
- package/dist/Utils/PlayerCheck.d.ts +2 -0
- package/dist/Utils/PlayerCheck.js +38 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +127 -0
- package/eslint.config.d.ts +2 -0
- package/eslint.config.js +12 -0
- package/package.json +51 -0
- package/renovate.json +6 -0
- package/tsconfig.json +25 -0
@@ -0,0 +1,750 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.Player = void 0;
|
7
|
+
var _Filters = require("./Filters");
|
8
|
+
var _Utils = require("./Utils");
|
9
|
+
var _ = _interopRequireWildcard(require("lodash"));
|
10
|
+
var _PlayerCheck = _interopRequireDefault(require("../Utils/PlayerCheck"));
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
12
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
13
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
14
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
15
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
16
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
17
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
18
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
19
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
20
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
21
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
22
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
23
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
24
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
25
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
26
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
27
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
28
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
29
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
30
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
31
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
32
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
33
|
+
var Player = exports.Player = /*#__PURE__*/function () {
|
34
|
+
/**
|
35
|
+
* Creates a new player, returns one if it already exists.
|
36
|
+
* @param options
|
37
|
+
*/
|
38
|
+
function Player(options) {
|
39
|
+
var _options$volume;
|
40
|
+
_classCallCheck(this, Player);
|
41
|
+
/** The Queue for the Player. */
|
42
|
+
_defineProperty(this, "queue", new (_Utils.Structure.get("Queue"))());
|
43
|
+
/** Whether the queue repeats the track. */
|
44
|
+
_defineProperty(this, "trackRepeat", false);
|
45
|
+
/** Whether the queue repeats the queue. */
|
46
|
+
_defineProperty(this, "queueRepeat", false);
|
47
|
+
/**Whether the queue repeats and shuffles after each song. */
|
48
|
+
_defineProperty(this, "dynamicRepeat", false);
|
49
|
+
/** The time the player is in the track. */
|
50
|
+
_defineProperty(this, "position", 0);
|
51
|
+
/** Whether the player is playing. */
|
52
|
+
_defineProperty(this, "playing", false);
|
53
|
+
/** Whether the player is paused. */
|
54
|
+
_defineProperty(this, "paused", false);
|
55
|
+
/** The voice channel for the player. */
|
56
|
+
_defineProperty(this, "voiceChannel", null);
|
57
|
+
/** The text channel for the player. */
|
58
|
+
_defineProperty(this, "textChannel", null);
|
59
|
+
/** The current state of the player. */
|
60
|
+
_defineProperty(this, "state", "DISCONNECTED");
|
61
|
+
/** The equalizer bands array. */
|
62
|
+
_defineProperty(this, "bands", new Array(15).fill(0.0));
|
63
|
+
/** The autoplay state of the player. */
|
64
|
+
_defineProperty(this, "isAutoplay", false);
|
65
|
+
_defineProperty(this, "data", {});
|
66
|
+
this.options = options;
|
67
|
+
if (!this.manager) this.manager = _Utils.Structure.get("Player")._manager;
|
68
|
+
if (!this.manager) throw new RangeError("Manager has not been initiated.");
|
69
|
+
if (this.manager.players.has(options.guild)) {
|
70
|
+
return this.manager.players.get(options.guild);
|
71
|
+
}
|
72
|
+
(0, _PlayerCheck["default"])(options);
|
73
|
+
this.guild = options.guild;
|
74
|
+
this.voiceState = Object.assign({
|
75
|
+
op: "voiceUpdate",
|
76
|
+
guild_id: options.guild
|
77
|
+
});
|
78
|
+
if (options.voiceChannel) this.voiceChannel = options.voiceChannel;
|
79
|
+
if (options.textChannel) this.textChannel = options.textChannel;
|
80
|
+
var node = this.manager.nodes.get(options.node);
|
81
|
+
this.node = node || this.manager.useableNodes;
|
82
|
+
if (!this.node) throw new RangeError("No available nodes.");
|
83
|
+
this.manager.players.set(options.guild, this);
|
84
|
+
this.manager.emit("PlayerCreate", this);
|
85
|
+
this.setVolume((_options$volume = options.volume) !== null && _options$volume !== void 0 ? _options$volume : 100);
|
86
|
+
this.filters = new _Filters.Filters(this);
|
87
|
+
}
|
88
|
+
|
89
|
+
/**
|
90
|
+
* Same as Manager#search() but a shortcut on the player itself.
|
91
|
+
* @param query
|
92
|
+
* @param requester
|
93
|
+
*/
|
94
|
+
return _createClass(Player, [{
|
95
|
+
key: "set",
|
96
|
+
value:
|
97
|
+
/**
|
98
|
+
* Set custom data.
|
99
|
+
* @param key
|
100
|
+
* @param value
|
101
|
+
*/
|
102
|
+
function set(key, value) {
|
103
|
+
this.data[key] = value;
|
104
|
+
}
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Get custom data.
|
108
|
+
* @param key
|
109
|
+
*/
|
110
|
+
}, {
|
111
|
+
key: "get",
|
112
|
+
value: function get(key) {
|
113
|
+
return this.data[key];
|
114
|
+
}
|
115
|
+
|
116
|
+
/** @hidden */
|
117
|
+
}, {
|
118
|
+
key: "search",
|
119
|
+
value: function search(query, requester) {
|
120
|
+
return this.manager.search(query, requester);
|
121
|
+
}
|
122
|
+
|
123
|
+
/** Connect to the voice channel. */
|
124
|
+
}, {
|
125
|
+
key: "connect",
|
126
|
+
value: function connect() {
|
127
|
+
if (!this.voiceChannel) throw new RangeError("No voice channel has been set.");
|
128
|
+
this.state = "CONNECTING";
|
129
|
+
this.manager.options.send(this.guild, {
|
130
|
+
op: 4,
|
131
|
+
d: {
|
132
|
+
guild_id: this.guild,
|
133
|
+
channel_id: this.voiceChannel,
|
134
|
+
self_mute: this.options.selfMute || false,
|
135
|
+
self_deaf: this.options.selfDeafen || false
|
136
|
+
}
|
137
|
+
});
|
138
|
+
this.state = "CONNECTED";
|
139
|
+
return this;
|
140
|
+
}
|
141
|
+
|
142
|
+
/**
|
143
|
+
* Moves the player to a different node.
|
144
|
+
*
|
145
|
+
* @param {string} [node] - The ID of the node to move to.
|
146
|
+
* @returns {this} - The player instance.
|
147
|
+
*/
|
148
|
+
}, {
|
149
|
+
key: "moveNode",
|
150
|
+
value: (function () {
|
151
|
+
var _moveNode = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(node) {
|
152
|
+
var _this = this,
|
153
|
+
_this$queue$current,
|
154
|
+
_voiceState;
|
155
|
+
var destroyOldNode, currentNode, destinationNode, position, fetchedPlayer;
|
156
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
157
|
+
while (1) switch (_context2.prev = _context2.next) {
|
158
|
+
case 0:
|
159
|
+
node = node || this.manager.leastLoadNode.first().options.identifier || this.manager.nodes.filter(function (n) {
|
160
|
+
return n.connected;
|
161
|
+
}).first().options.identifier;
|
162
|
+
if (this.manager.nodes.has(node)) {
|
163
|
+
_context2.next = 3;
|
164
|
+
break;
|
165
|
+
}
|
166
|
+
throw new RangeError("No nodes available.");
|
167
|
+
case 3:
|
168
|
+
if (!(this.node.options.identifier === node)) {
|
169
|
+
_context2.next = 5;
|
170
|
+
break;
|
171
|
+
}
|
172
|
+
return _context2.abrupt("return", this);
|
173
|
+
case 5:
|
174
|
+
destroyOldNode = /*#__PURE__*/function () {
|
175
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(node) {
|
176
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
177
|
+
while (1) switch (_context.prev = _context.next) {
|
178
|
+
case 0:
|
179
|
+
_this.state = "MOVING";
|
180
|
+
if (!(_this.manager.nodes.get(node.options.identifier) && _this.manager.nodes.get(node.options.identifier).connected)) {
|
181
|
+
_context.next = 4;
|
182
|
+
break;
|
183
|
+
}
|
184
|
+
_context.next = 4;
|
185
|
+
return node.rest.destroyPlayer(_this.guild);
|
186
|
+
case 4:
|
187
|
+
setTimeout(function () {
|
188
|
+
return _this.state = "CONNECTED";
|
189
|
+
}, 5000);
|
190
|
+
case 5:
|
191
|
+
case "end":
|
192
|
+
return _context.stop();
|
193
|
+
}
|
194
|
+
}, _callee);
|
195
|
+
}));
|
196
|
+
return function destroyOldNode(_x2) {
|
197
|
+
return _ref.apply(this, arguments);
|
198
|
+
};
|
199
|
+
}();
|
200
|
+
currentNode = this.node;
|
201
|
+
destinationNode = this.manager.nodes.get(node);
|
202
|
+
position = this.position;
|
203
|
+
if (!currentNode.connected) {
|
204
|
+
_context2.next = 14;
|
205
|
+
break;
|
206
|
+
}
|
207
|
+
_context2.next = 12;
|
208
|
+
return currentNode.rest.get("/v4/sessions/".concat(currentNode.sessionId, "/players/").concat(this.guild));
|
209
|
+
case 12:
|
210
|
+
fetchedPlayer = _context2.sent;
|
211
|
+
position = fetchedPlayer.track.info.position;
|
212
|
+
case 14:
|
213
|
+
_context2.next = 16;
|
214
|
+
return destinationNode.rest.updatePlayer({
|
215
|
+
guildId: this.guild,
|
216
|
+
data: {
|
217
|
+
encodedTrack: (_this$queue$current = this.queue.current) === null || _this$queue$current === void 0 ? void 0 : _this$queue$current.track,
|
218
|
+
position: position,
|
219
|
+
volume: this.volume,
|
220
|
+
paused: this.paused,
|
221
|
+
filters: {
|
222
|
+
distortion: this.filters.distortion,
|
223
|
+
equalizer: this.filters.equalizer,
|
224
|
+
karaoke: this.filters.karaoke,
|
225
|
+
rotation: this.filters.rotation,
|
226
|
+
timescale: this.filters.timescale,
|
227
|
+
vibrato: this.filters.vibrato,
|
228
|
+
volume: this.filters.volume
|
229
|
+
}
|
230
|
+
}
|
231
|
+
});
|
232
|
+
case 16:
|
233
|
+
_context2.next = 18;
|
234
|
+
return destinationNode.rest.updatePlayer({
|
235
|
+
guildId: this.guild,
|
236
|
+
data: {
|
237
|
+
voice: {
|
238
|
+
token: this.voiceState.event.token,
|
239
|
+
endpoint: this.voiceState.event.endpoint,
|
240
|
+
sessionId: (_voiceState = this.voiceState) === null || _voiceState === void 0 ? void 0 : _voiceState.sessionId
|
241
|
+
}
|
242
|
+
}
|
243
|
+
});
|
244
|
+
case 18:
|
245
|
+
this.node = destinationNode;
|
246
|
+
destroyOldNode(currentNode);
|
247
|
+
return _context2.abrupt("return", this);
|
248
|
+
case 21:
|
249
|
+
case "end":
|
250
|
+
return _context2.stop();
|
251
|
+
}
|
252
|
+
}, _callee2, this);
|
253
|
+
}));
|
254
|
+
function moveNode(_x) {
|
255
|
+
return _moveNode.apply(this, arguments);
|
256
|
+
}
|
257
|
+
return moveNode;
|
258
|
+
}() /** Disconnect from the voice channel. */)
|
259
|
+
}, {
|
260
|
+
key: "disconnect",
|
261
|
+
value: function disconnect() {
|
262
|
+
if (this.voiceChannel === null) return this;
|
263
|
+
this.state = "DISCONNECTING";
|
264
|
+
this.pause(true);
|
265
|
+
this.manager.options.send(this.guild, {
|
266
|
+
op: 4,
|
267
|
+
d: {
|
268
|
+
guild_id: this.guild,
|
269
|
+
channel_id: null,
|
270
|
+
self_mute: false,
|
271
|
+
self_deaf: false
|
272
|
+
}
|
273
|
+
});
|
274
|
+
this.voiceChannel = null;
|
275
|
+
this.state = "DISCONNECTED";
|
276
|
+
return this;
|
277
|
+
}
|
278
|
+
|
279
|
+
/** Destroys the player. */
|
280
|
+
}, {
|
281
|
+
key: "destroy",
|
282
|
+
value: function destroy() {
|
283
|
+
var disconnect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
284
|
+
this.state = "DESTROYING";
|
285
|
+
if (disconnect) {
|
286
|
+
this.disconnect();
|
287
|
+
}
|
288
|
+
this.node.rest.destroyPlayer(this.guild);
|
289
|
+
this.manager.emit("PlayerDestroy", this);
|
290
|
+
this.manager.players["delete"](this.guild);
|
291
|
+
}
|
292
|
+
|
293
|
+
/**
|
294
|
+
* Sets the player voice channel.
|
295
|
+
* @param channel
|
296
|
+
*/
|
297
|
+
}, {
|
298
|
+
key: "setVoiceChannel",
|
299
|
+
value: function setVoiceChannel(channel) {
|
300
|
+
if (typeof channel !== "string") throw new TypeError("Channel must be a non-empty string.");
|
301
|
+
this.voiceChannel = channel;
|
302
|
+
this.connect();
|
303
|
+
return this;
|
304
|
+
}
|
305
|
+
|
306
|
+
/**
|
307
|
+
* Sets the player text channel.
|
308
|
+
* @param channel
|
309
|
+
*/
|
310
|
+
}, {
|
311
|
+
key: "setTextChannel",
|
312
|
+
value: function setTextChannel(channel) {
|
313
|
+
if (typeof channel !== "string") throw new TypeError("Channel must be a non-empty string.");
|
314
|
+
this.textChannel = channel;
|
315
|
+
return this;
|
316
|
+
}
|
317
|
+
|
318
|
+
/** Sets the now playing message. */
|
319
|
+
}, {
|
320
|
+
key: "setNowPlayingMessage",
|
321
|
+
value: function setNowPlayingMessage(message) {
|
322
|
+
if (!message) {
|
323
|
+
throw new TypeError("You must provide the message of the now playing message.");
|
324
|
+
}
|
325
|
+
return this.nowPlayingMessage = message;
|
326
|
+
}
|
327
|
+
|
328
|
+
/** Plays the next track. */
|
329
|
+
}, {
|
330
|
+
key: "play",
|
331
|
+
value: function () {
|
332
|
+
var _play = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(optionsOrTrack, playOptions) {
|
333
|
+
var _this$queue$current2;
|
334
|
+
var finalOptions;
|
335
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
336
|
+
while (1) switch (_context3.prev = _context3.next) {
|
337
|
+
case 0:
|
338
|
+
if (typeof optionsOrTrack !== "undefined" && _Utils.TrackUtils.validate(optionsOrTrack)) {
|
339
|
+
if (this.queue.current) this.queue.previous = this.queue.current;
|
340
|
+
this.queue.current = optionsOrTrack;
|
341
|
+
}
|
342
|
+
if (this.queue.current) {
|
343
|
+
_context3.next = 3;
|
344
|
+
break;
|
345
|
+
}
|
346
|
+
throw new RangeError("No current track.");
|
347
|
+
case 3:
|
348
|
+
finalOptions = playOptions ? playOptions : ["startTime", "endTime", "noReplace"].every(function (v) {
|
349
|
+
return Object.keys(optionsOrTrack || {}).includes(v);
|
350
|
+
}) ? optionsOrTrack : {};
|
351
|
+
if (!_Utils.TrackUtils.isUnresolvedTrack(this.queue.current)) {
|
352
|
+
_context3.next = 17;
|
353
|
+
break;
|
354
|
+
}
|
355
|
+
_context3.prev = 5;
|
356
|
+
_context3.next = 8;
|
357
|
+
return _Utils.TrackUtils.getClosestTrack(this.queue.current);
|
358
|
+
case 8:
|
359
|
+
this.queue.current = _context3.sent;
|
360
|
+
_context3.next = 17;
|
361
|
+
break;
|
362
|
+
case 11:
|
363
|
+
_context3.prev = 11;
|
364
|
+
_context3.t0 = _context3["catch"](5);
|
365
|
+
this.manager.emit("TrackError", this, this.queue.current, _context3.t0);
|
366
|
+
if (!this.queue[0]) {
|
367
|
+
_context3.next = 16;
|
368
|
+
break;
|
369
|
+
}
|
370
|
+
return _context3.abrupt("return", this.play(this.queue[0]));
|
371
|
+
case 16:
|
372
|
+
return _context3.abrupt("return");
|
373
|
+
case 17:
|
374
|
+
_context3.next = 19;
|
375
|
+
return this.node.rest.updatePlayer({
|
376
|
+
guildId: this.guild,
|
377
|
+
data: _objectSpread({
|
378
|
+
encodedTrack: (_this$queue$current2 = this.queue.current) === null || _this$queue$current2 === void 0 ? void 0 : _this$queue$current2.track
|
379
|
+
}, finalOptions)
|
380
|
+
});
|
381
|
+
case 19:
|
382
|
+
Object.assign(this, {
|
383
|
+
position: 0,
|
384
|
+
playing: true
|
385
|
+
});
|
386
|
+
case 20:
|
387
|
+
case "end":
|
388
|
+
return _context3.stop();
|
389
|
+
}
|
390
|
+
}, _callee3, this, [[5, 11]]);
|
391
|
+
}));
|
392
|
+
function play(_x3, _x4) {
|
393
|
+
return _play.apply(this, arguments);
|
394
|
+
}
|
395
|
+
return play;
|
396
|
+
}()
|
397
|
+
/**
|
398
|
+
* Sets the autoplay-state of the player.
|
399
|
+
* @param autoplayState
|
400
|
+
* @param botUser
|
401
|
+
*/
|
402
|
+
}, {
|
403
|
+
key: "setAutoplay",
|
404
|
+
value: function setAutoplay(autoplayState, botUser) {
|
405
|
+
if (typeof autoplayState !== "boolean") {
|
406
|
+
throw new TypeError("autoplayState must be a boolean.");
|
407
|
+
}
|
408
|
+
if (_typeof(botUser) !== "object") {
|
409
|
+
throw new TypeError("botUser must be a user-object.");
|
410
|
+
}
|
411
|
+
this.isAutoplay = autoplayState;
|
412
|
+
this.set("Internal_BotUser", botUser);
|
413
|
+
return this;
|
414
|
+
}
|
415
|
+
|
416
|
+
/**
|
417
|
+
* Gets recommended tracks and returns an array of tracks.
|
418
|
+
* @param track
|
419
|
+
* @param requester
|
420
|
+
*/
|
421
|
+
}, {
|
422
|
+
key: "getRecommended",
|
423
|
+
value: (function () {
|
424
|
+
var _getRecommended = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(track, requester) {
|
425
|
+
var node, hasSpotifyURL, hasYouTubeURL, _res, info, isSpotifyPluginEnabled, isSpotifySourceManagerEnabled, trackID, artistID, identifier, recommendedResult, playlistData, recommendedTracks, _tracks, videoID, _res2, searchURI, res, tracks, filteredTracks, _iterator, _step, _track, _track$title$split$ma, _track$title$split$ma2, author, title;
|
426
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
427
|
+
while (1) switch (_context4.prev = _context4.next) {
|
428
|
+
case 0:
|
429
|
+
node = this.manager.useableNodes;
|
430
|
+
if (node) {
|
431
|
+
_context4.next = 3;
|
432
|
+
break;
|
433
|
+
}
|
434
|
+
throw new Error("No available nodes.");
|
435
|
+
case 3:
|
436
|
+
hasSpotifyURL = ["spotify.com", "open.spotify.com"].some(function (url) {
|
437
|
+
return track.uri.includes(url);
|
438
|
+
});
|
439
|
+
hasYouTubeURL = ["youtube.com", "youtu.be"].some(function (url) {
|
440
|
+
return track.uri.includes(url);
|
441
|
+
});
|
442
|
+
if (!hasSpotifyURL) {
|
443
|
+
_context4.next = 27;
|
444
|
+
break;
|
445
|
+
}
|
446
|
+
_context4.next = 8;
|
447
|
+
return node.rest.get("/v4/info");
|
448
|
+
case 8:
|
449
|
+
_res = _context4.sent;
|
450
|
+
info = _res;
|
451
|
+
isSpotifyPluginEnabled = info.plugins.some(function (plugin) {
|
452
|
+
return plugin.name === "lavasrc-plugin";
|
453
|
+
});
|
454
|
+
isSpotifySourceManagerEnabled = info.sourceManagers.includes("spotify");
|
455
|
+
if (!(isSpotifyPluginEnabled && isSpotifySourceManagerEnabled)) {
|
456
|
+
_context4.next = 27;
|
457
|
+
break;
|
458
|
+
}
|
459
|
+
trackID = node.extractSpotifyTrackID(track.uri);
|
460
|
+
artistID = node.extractSpotifyArtistID(track.pluginInfo.artistUrl);
|
461
|
+
identifier = "";
|
462
|
+
if (trackID && artistID) {
|
463
|
+
identifier = "sprec:seed_artists=".concat(artistID, "&seed_tracks=").concat(trackID);
|
464
|
+
} else if (trackID) {
|
465
|
+
identifier = "sprec:seed_tracks=".concat(trackID);
|
466
|
+
} else if (artistID) {
|
467
|
+
identifier = "sprec:seed_artists=".concat(artistID);
|
468
|
+
}
|
469
|
+
if (!identifier) {
|
470
|
+
_context4.next = 27;
|
471
|
+
break;
|
472
|
+
}
|
473
|
+
_context4.next = 20;
|
474
|
+
return node.rest.get("/v4/loadtracks?identifier=".concat(encodeURIComponent(identifier)));
|
475
|
+
case 20:
|
476
|
+
recommendedResult = _context4.sent;
|
477
|
+
if (!(recommendedResult.loadType === "playlist")) {
|
478
|
+
_context4.next = 27;
|
479
|
+
break;
|
480
|
+
}
|
481
|
+
playlistData = recommendedResult.data;
|
482
|
+
recommendedTracks = playlistData.tracks;
|
483
|
+
if (!recommendedTracks) {
|
484
|
+
_context4.next = 27;
|
485
|
+
break;
|
486
|
+
}
|
487
|
+
_tracks = recommendedTracks.map(function (track) {
|
488
|
+
return _Utils.TrackUtils.build(track, requester);
|
489
|
+
});
|
490
|
+
return _context4.abrupt("return", _tracks);
|
491
|
+
case 27:
|
492
|
+
videoID = track.uri.substring(track.uri.indexOf("=") + 1);
|
493
|
+
if (hasYouTubeURL) {
|
494
|
+
_context4.next = 33;
|
495
|
+
break;
|
496
|
+
}
|
497
|
+
_context4.next = 31;
|
498
|
+
return this.manager.search("".concat(track.author, " - ").concat(track.title));
|
499
|
+
case 31:
|
500
|
+
_res2 = _context4.sent;
|
501
|
+
videoID = _res2.tracks[0].uri.substring(_res2.tracks[0].uri.indexOf("=") + 1);
|
502
|
+
case 33:
|
503
|
+
searchURI = "https://www.youtube.com/watch?v=".concat(videoID, "&list=RD").concat(videoID);
|
504
|
+
_context4.next = 36;
|
505
|
+
return this.manager.search(searchURI);
|
506
|
+
case 36:
|
507
|
+
res = _context4.sent;
|
508
|
+
if (!(res.loadType === "empty" || res.loadType === "error")) {
|
509
|
+
_context4.next = 39;
|
510
|
+
break;
|
511
|
+
}
|
512
|
+
return _context4.abrupt("return");
|
513
|
+
case 39:
|
514
|
+
tracks = res.tracks;
|
515
|
+
if (res.loadType === "playlist") {
|
516
|
+
tracks = res.playlist.tracks;
|
517
|
+
}
|
518
|
+
filteredTracks = tracks.filter(function (track) {
|
519
|
+
return track.uri !== "https://www.youtube.com/watch?v=".concat(videoID);
|
520
|
+
});
|
521
|
+
if (this.manager.options.replaceYouTubeCredentials) {
|
522
|
+
_iterator = _createForOfIteratorHelper(filteredTracks);
|
523
|
+
try {
|
524
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
525
|
+
_track = _step.value;
|
526
|
+
_track.author = _track.author.replace("- Topic", "");
|
527
|
+
_track.title = _track.title.replace("Topic -", "");
|
528
|
+
if (_track.title.includes("-")) {
|
529
|
+
_track$title$split$ma = _track.title.split("-").map(function (str) {
|
530
|
+
return str.trim();
|
531
|
+
}), _track$title$split$ma2 = _slicedToArray(_track$title$split$ma, 2), author = _track$title$split$ma2[0], title = _track$title$split$ma2[1];
|
532
|
+
_track.author = author;
|
533
|
+
_track.title = title;
|
534
|
+
}
|
535
|
+
}
|
536
|
+
} catch (err) {
|
537
|
+
_iterator.e(err);
|
538
|
+
} finally {
|
539
|
+
_iterator.f();
|
540
|
+
}
|
541
|
+
}
|
542
|
+
return _context4.abrupt("return", filteredTracks);
|
543
|
+
case 44:
|
544
|
+
case "end":
|
545
|
+
return _context4.stop();
|
546
|
+
}
|
547
|
+
}, _callee4, this);
|
548
|
+
}));
|
549
|
+
function getRecommended(_x5, _x6) {
|
550
|
+
return _getRecommended.apply(this, arguments);
|
551
|
+
}
|
552
|
+
return getRecommended;
|
553
|
+
}()
|
554
|
+
/**
|
555
|
+
* Sets the player volume.
|
556
|
+
* @param volume
|
557
|
+
*/
|
558
|
+
)
|
559
|
+
}, {
|
560
|
+
key: "setVolume",
|
561
|
+
value: function setVolume(volume) {
|
562
|
+
if (isNaN(volume)) throw new TypeError("Volume must be a number.");
|
563
|
+
this.node.rest.updatePlayer({
|
564
|
+
guildId: this.options.guild,
|
565
|
+
data: {
|
566
|
+
volume: volume
|
567
|
+
}
|
568
|
+
});
|
569
|
+
this.volume = volume;
|
570
|
+
return this;
|
571
|
+
}
|
572
|
+
|
573
|
+
/**
|
574
|
+
* Sets the track repeat.
|
575
|
+
* @param repeat
|
576
|
+
*/
|
577
|
+
}, {
|
578
|
+
key: "setTrackRepeat",
|
579
|
+
value: function setTrackRepeat(repeat) {
|
580
|
+
if (typeof repeat !== "boolean") throw new TypeError('Repeat can only be "true" or "false".');
|
581
|
+
var oldPlayer = _objectSpread({}, this);
|
582
|
+
if (repeat) {
|
583
|
+
this.trackRepeat = true;
|
584
|
+
this.queueRepeat = false;
|
585
|
+
this.dynamicRepeat = false;
|
586
|
+
} else {
|
587
|
+
this.trackRepeat = false;
|
588
|
+
this.queueRepeat = false;
|
589
|
+
this.dynamicRepeat = false;
|
590
|
+
}
|
591
|
+
this.manager.emit("PlayerStateUpdate", oldPlayer, this);
|
592
|
+
return this;
|
593
|
+
}
|
594
|
+
|
595
|
+
/**
|
596
|
+
* Sets the queue repeat.
|
597
|
+
* @param repeat
|
598
|
+
*/
|
599
|
+
}, {
|
600
|
+
key: "setQueueRepeat",
|
601
|
+
value: function setQueueRepeat(repeat) {
|
602
|
+
if (typeof repeat !== "boolean") throw new TypeError('Repeat can only be "true" or "false".');
|
603
|
+
var oldPlayer = _objectSpread({}, this);
|
604
|
+
if (repeat) {
|
605
|
+
this.trackRepeat = false;
|
606
|
+
this.queueRepeat = true;
|
607
|
+
this.dynamicRepeat = false;
|
608
|
+
} else {
|
609
|
+
this.trackRepeat = false;
|
610
|
+
this.queueRepeat = false;
|
611
|
+
this.dynamicRepeat = false;
|
612
|
+
}
|
613
|
+
this.manager.emit("PlayerStateUpdate", oldPlayer, this);
|
614
|
+
return this;
|
615
|
+
}
|
616
|
+
|
617
|
+
/**
|
618
|
+
* Sets the queue to repeat and shuffles the queue after each song.
|
619
|
+
* @param repeat "true" or "false".
|
620
|
+
* @param ms After how many milliseconds to trigger dynamic repeat.
|
621
|
+
*/
|
622
|
+
}, {
|
623
|
+
key: "setDynamicRepeat",
|
624
|
+
value: function setDynamicRepeat(repeat, ms) {
|
625
|
+
var _this2 = this;
|
626
|
+
if (typeof repeat !== "boolean") {
|
627
|
+
throw new TypeError('Repeat can only be "true" or "false".');
|
628
|
+
}
|
629
|
+
if (this.queue.size <= 1) {
|
630
|
+
throw new RangeError("The queue size must be greater than 1.");
|
631
|
+
}
|
632
|
+
var oldPlayer = _objectSpread({}, this);
|
633
|
+
if (repeat) {
|
634
|
+
this.trackRepeat = false;
|
635
|
+
this.queueRepeat = false;
|
636
|
+
this.dynamicRepeat = true;
|
637
|
+
this.dynamicLoopInterval = setInterval(function () {
|
638
|
+
if (!_this2.dynamicRepeat) return;
|
639
|
+
var shuffled = _.shuffle(_this2.queue);
|
640
|
+
_this2.queue.clear();
|
641
|
+
shuffled.forEach(function (track) {
|
642
|
+
_this2.queue.add(track);
|
643
|
+
});
|
644
|
+
}, ms);
|
645
|
+
} else {
|
646
|
+
clearInterval(this.dynamicLoopInterval);
|
647
|
+
this.trackRepeat = false;
|
648
|
+
this.queueRepeat = false;
|
649
|
+
this.dynamicRepeat = false;
|
650
|
+
}
|
651
|
+
this.manager.emit("PlayerStateUpdate", oldPlayer, this);
|
652
|
+
return this;
|
653
|
+
}
|
654
|
+
|
655
|
+
/** Restarts the current track to the start. */
|
656
|
+
}, {
|
657
|
+
key: "restart",
|
658
|
+
value: function restart() {
|
659
|
+
var _this$queue$current3, _this$queue$current4;
|
660
|
+
if (!((_this$queue$current3 = this.queue.current) !== null && _this$queue$current3 !== void 0 && _this$queue$current3.track)) {
|
661
|
+
if (this.queue.length) this.play();
|
662
|
+
return;
|
663
|
+
}
|
664
|
+
this.node.rest.updatePlayer({
|
665
|
+
guildId: this.guild,
|
666
|
+
data: {
|
667
|
+
position: 0,
|
668
|
+
encodedTrack: (_this$queue$current4 = this.queue.current) === null || _this$queue$current4 === void 0 ? void 0 : _this$queue$current4.track
|
669
|
+
}
|
670
|
+
});
|
671
|
+
}
|
672
|
+
|
673
|
+
/** Stops the current track, optionally give an amount to skip to, e.g 5 would play the 5th song. */
|
674
|
+
}, {
|
675
|
+
key: "stop",
|
676
|
+
value: function stop(amount) {
|
677
|
+
if (typeof amount === "number" && amount > 1) {
|
678
|
+
if (amount > this.queue.length) throw new RangeError("Cannot skip more than the queue length.");
|
679
|
+
this.queue.splice(0, amount - 1);
|
680
|
+
}
|
681
|
+
this.node.rest.updatePlayer({
|
682
|
+
guildId: this.guild,
|
683
|
+
data: {
|
684
|
+
encodedTrack: null
|
685
|
+
}
|
686
|
+
});
|
687
|
+
return this;
|
688
|
+
}
|
689
|
+
|
690
|
+
/**
|
691
|
+
* Pauses the current track.
|
692
|
+
* @param pause
|
693
|
+
*/
|
694
|
+
}, {
|
695
|
+
key: "pause",
|
696
|
+
value: function pause(_pause) {
|
697
|
+
if (typeof _pause !== "boolean") throw new RangeError('Pause can only be "true" or "false".');
|
698
|
+
if (this.paused === _pause || !this.queue.totalSize) return this;
|
699
|
+
var oldPlayer = _objectSpread({}, this);
|
700
|
+
this.playing = !_pause;
|
701
|
+
this.paused = _pause;
|
702
|
+
this.node.rest.updatePlayer({
|
703
|
+
guildId: this.guild,
|
704
|
+
data: {
|
705
|
+
paused: _pause
|
706
|
+
}
|
707
|
+
});
|
708
|
+
this.manager.emit("PlayerStateUpdate", oldPlayer, this);
|
709
|
+
return this;
|
710
|
+
}
|
711
|
+
|
712
|
+
/** Go back to the previous song. */
|
713
|
+
}, {
|
714
|
+
key: "previous",
|
715
|
+
value: function previous() {
|
716
|
+
this.queue.unshift(this.queue.previous);
|
717
|
+
this.stop();
|
718
|
+
return this;
|
719
|
+
}
|
720
|
+
|
721
|
+
/**
|
722
|
+
* Seeks to the position in the current track.
|
723
|
+
* @param position
|
724
|
+
*/
|
725
|
+
}, {
|
726
|
+
key: "seek",
|
727
|
+
value: function seek(position) {
|
728
|
+
if (!this.queue.current) return undefined;
|
729
|
+
position = Number(position);
|
730
|
+
if (isNaN(position)) throw new RangeError("Position must be a number.");
|
731
|
+
if (position < 0 || position > this.queue.current.duration) position = Math.max(Math.min(position, this.queue.current.duration), 0);
|
732
|
+
this.position = position;
|
733
|
+
this.node.rest.updatePlayer({
|
734
|
+
guildId: this.guild,
|
735
|
+
data: {
|
736
|
+
position: position
|
737
|
+
}
|
738
|
+
});
|
739
|
+
return this;
|
740
|
+
}
|
741
|
+
}], [{
|
742
|
+
key: "init",
|
743
|
+
value: function init(manager) {
|
744
|
+
this._manager = manager;
|
745
|
+
}
|
746
|
+
}]);
|
747
|
+
}();
|
748
|
+
/** If track partials are set some of these will be `undefined` as they were removed. */
|
749
|
+
/** Unresolved tracks can't be played normally, they will resolve before playing into a Track. */
|
750
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRmlsdGVycyIsInJlcXVpcmUiLCJfVXRpbHMiLCJfIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfUGxheWVyQ2hlY2siLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX24iLCJGIiwicyIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwicHJvdG90eXBlIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImgiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiUGxheWVyIiwiZXhwb3J0cyIsIm9wdGlvbnMiLCJfb3B0aW9ucyR2b2x1bWUiLCJTdHJ1Y3R1cmUiLCJmaWxsIiwibWFuYWdlciIsIl9tYW5hZ2VyIiwiUmFuZ2VFcnJvciIsInBsYXllcnMiLCJndWlsZCIsInBsYXllckNoZWNrIiwidm9pY2VTdGF0ZSIsImFzc2lnbiIsIm9wIiwiZ3VpbGRfaWQiLCJ2b2ljZUNoYW5uZWwiLCJ0ZXh0Q2hhbm5lbCIsIm5vZGUiLCJub2RlcyIsInVzZWFibGVOb2RlcyIsImVtaXQiLCJzZXRWb2x1bWUiLCJ2b2x1bWUiLCJmaWx0ZXJzIiwiRmlsdGVycyIsImRhdGEiLCJzZWFyY2giLCJxdWVyeSIsInJlcXVlc3RlciIsImNvbm5lY3QiLCJzdGF0ZSIsInNlbmQiLCJjaGFubmVsX2lkIiwic2VsZl9tdXRlIiwic2VsZk11dGUiLCJzZWxmX2RlYWYiLCJzZWxmRGVhZmVuIiwiX21vdmVOb2RlIiwiX2NhbGxlZTIiLCJfdGhpcyIsIl90aGlzJHF1ZXVlJGN1cnJlbnQiLCJfdm9pY2VTdGF0ZSIsImRlc3Ryb3lPbGROb2RlIiwiY3VycmVudE5vZGUiLCJkZXN0aW5hdGlvbk5vZGUiLCJwb3NpdGlvbiIsImZldGNoZWRQbGF5ZXIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJsZWFzdExvYWROb2RlIiwiZmlyc3QiLCJpZGVudGlmaWVyIiwiY29ubmVjdGVkIiwiX3JlZiIsIl9jYWxsZWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicmVzdCIsImRlc3Ryb3lQbGF5ZXIiLCJzZXRUaW1lb3V0IiwiX3gyIiwiY29uY2F0Iiwic2Vzc2lvbklkIiwidHJhY2siLCJpbmZvIiwidXBkYXRlUGxheWVyIiwiZ3VpbGRJZCIsImVuY29kZWRUcmFjayIsInF1ZXVlIiwiY3VycmVudCIsInBhdXNlZCIsImRpc3RvcnRpb24iLCJlcXVhbGl6ZXIiLCJrYXJhb2tlIiwicm90YXRpb24iLCJ0aW1lc2NhbGUiLCJ2aWJyYXRvIiwidm9pY2UiLCJ0b2tlbiIsImV2ZW50IiwiZW5kcG9pbnQiLCJtb3ZlTm9kZSIsIl94IiwiZGlzY29ubmVjdCIsInBhdXNlIiwiZGVzdHJveSIsInVuZGVmaW5lZCIsInNldFZvaWNlQ2hhbm5lbCIsImNoYW5uZWwiLCJzZXRUZXh0Q2hhbm5lbCIsInNldE5vd1BsYXlpbmdNZXNzYWdlIiwibWVzc2FnZSIsIm5vd1BsYXlpbmdNZXNzYWdlIiwiX3BsYXkiLCJfY2FsbGVlMyIsIm9wdGlvbnNPclRyYWNrIiwicGxheU9wdGlvbnMiLCJfdGhpcyRxdWV1ZSRjdXJyZW50MiIsImZpbmFsT3B0aW9ucyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlRyYWNrVXRpbHMiLCJ2YWxpZGF0ZSIsInByZXZpb3VzIiwiZXZlcnkiLCJpbmNsdWRlcyIsImlzVW5yZXNvbHZlZFRyYWNrIiwiZ2V0Q2xvc2VzdFRyYWNrIiwidDAiLCJwbGF5IiwicGxheWluZyIsIl94MyIsIl94NCIsInNldEF1dG9wbGF5IiwiYXV0b3BsYXlTdGF0ZSIsImJvdFVzZXIiLCJpc0F1dG9wbGF5IiwiX2dldFJlY29tbWVuZGVkIiwiX2NhbGxlZTQiLCJoYXNTcG90aWZ5VVJMIiwiaGFzWW91VHViZVVSTCIsIl9yZXMiLCJpc1Nwb3RpZnlQbHVnaW5FbmFibGVkIiwiaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQiLCJ0cmFja0lEIiwiYXJ0aXN0SUQiLCJyZWNvbW1lbmRlZFJlc3VsdCIsInBsYXlsaXN0RGF0YSIsInJlY29tbWVuZGVkVHJhY2tzIiwiX3RyYWNrcyIsInZpZGVvSUQiLCJfcmVzMiIsInNlYXJjaFVSSSIsInJlcyIsInRyYWNrcyIsImZpbHRlcmVkVHJhY2tzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfdHJhY2siLCJfdHJhY2skdGl0bGUkc3BsaXQkbWEiLCJfdHJhY2skdGl0bGUkc3BsaXQkbWEyIiwiYXV0aG9yIiwidGl0bGUiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzb21lIiwidXJsIiwidXJpIiwicGx1Z2lucyIsInBsdWdpbiIsInNvdXJjZU1hbmFnZXJzIiwiZXh0cmFjdFNwb3RpZnlUcmFja0lEIiwiZXh0cmFjdFNwb3RpZnlBcnRpc3RJRCIsInBsdWdpbkluZm8iLCJhcnRpc3RVcmwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJsb2FkVHlwZSIsIm1hcCIsImJ1aWxkIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInBsYXlsaXN0IiwicmVwbGFjZVlvdVR1YmVDcmVkZW50aWFscyIsInJlcGxhY2UiLCJzcGxpdCIsInN0ciIsInRyaW0iLCJlcnIiLCJnZXRSZWNvbW1lbmRlZCIsIl94NSIsIl94NiIsInNldFRyYWNrUmVwZWF0IiwicmVwZWF0Iiwib2xkUGxheWVyIiwidHJhY2tSZXBlYXQiLCJxdWV1ZVJlcGVhdCIsImR5bmFtaWNSZXBlYXQiLCJzZXRRdWV1ZVJlcGVhdCIsInNldER5bmFtaWNSZXBlYXQiLCJtcyIsIl90aGlzMiIsInNpemUiLCJkeW5hbWljTG9vcEludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJzaHVmZmxlZCIsInNodWZmbGUiLCJjbGVhciIsImFkZCIsImNsZWFySW50ZXJ2YWwiLCJyZXN0YXJ0IiwiX3RoaXMkcXVldWUkY3VycmVudDMiLCJfdGhpcyRxdWV1ZSRjdXJyZW50NCIsImFtb3VudCIsInNwbGljZSIsInRvdGFsU2l6ZSIsInVuc2hpZnQiLCJzZWVrIiwiZHVyYXRpb24iLCJNYXRoIiwibWF4IiwibWluIiwiaW5pdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdHJ1Y3R1cmVzL1BsYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJzIH0gZnJvbSBcIi4vRmlsdGVyc1wiO1xuaW1wb3J0IHsgTGF2YWxpbmtSZXNwb25zZSwgTWFuYWdlciwgUGxheWxpc3RSYXdEYXRhLCBTZWFyY2hRdWVyeSwgU2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4vTWFuYWdlclwiO1xuaW1wb3J0IHsgTGF2YWxpbmtJbmZvLCBOb2RlIH0gZnJvbSBcIi4vTm9kZVwiO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi9RdWV1ZVwiO1xuaW1wb3J0IHsgU2l6ZXMsIFN0YXRlLCBTdHJ1Y3R1cmUsIFRyYWNrU291cmNlTmFtZSwgVHJhY2tVdGlscywgVm9pY2VTdGF0ZSB9IGZyb20gXCIuL1V0aWxzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwbGF5ZXJDaGVjayBmcm9tIFwiLi4vVXRpbHMvUGxheWVyQ2hlY2tcIjtcbmltcG9ydCB7IENsaWVudFVzZXIsIE1lc3NhZ2UsIFVzZXIgfSBmcm9tIFwiZGlzY29yZC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUGxheWVyIHtcblx0LyoqIFRoZSBRdWV1ZSBmb3IgdGhlIFBsYXllci4gKi9cblx0cHVibGljIHJlYWRvbmx5IHF1ZXVlID0gbmV3IChTdHJ1Y3R1cmUuZ2V0KFwiUXVldWVcIikpKCkgYXMgUXVldWU7XG5cdC8qKiBUaGUgZmlsdGVycyBhcHBsaWVkIHRvIHRoZSBhdWRpby4gKi9cblx0cHVibGljIGZpbHRlcnM6IEZpbHRlcnM7XG5cdC8qKiBXaGV0aGVyIHRoZSBxdWV1ZSByZXBlYXRzIHRoZSB0cmFjay4gKi9cblx0cHVibGljIHRyYWNrUmVwZWF0ID0gZmFsc2U7XG5cdC8qKiBXaGV0aGVyIHRoZSBxdWV1ZSByZXBlYXRzIHRoZSBxdWV1ZS4gKi9cblx0cHVibGljIHF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdC8qKldoZXRoZXIgdGhlIHF1ZXVlIHJlcGVhdHMgYW5kIHNodWZmbGVzIGFmdGVyIGVhY2ggc29uZy4gKi9cblx0cHVibGljIGR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0LyoqIFRoZSB0aW1lIHRoZSBwbGF5ZXIgaXMgaW4gdGhlIHRyYWNrLiAqL1xuXHRwdWJsaWMgcG9zaXRpb24gPSAwO1xuXHQvKiogV2hldGhlciB0aGUgcGxheWVyIGlzIHBsYXlpbmcuICovXG5cdHB1YmxpYyBwbGF5aW5nID0gZmFsc2U7XG5cdC8qKiBXaGV0aGVyIHRoZSBwbGF5ZXIgaXMgcGF1c2VkLiAqL1xuXHRwdWJsaWMgcGF1c2VkID0gZmFsc2U7XG5cdC8qKiBUaGUgdm9sdW1lIGZvciB0aGUgcGxheWVyICovXG5cdHB1YmxpYyB2b2x1bWU6IG51bWJlcjtcblx0LyoqIFRoZSBOb2RlIGZvciB0aGUgUGxheWVyLiAqL1xuXHRwdWJsaWMgbm9kZTogTm9kZTtcblx0LyoqIFRoZSBndWlsZCBmb3IgdGhlIHBsYXllci4gKi9cblx0cHVibGljIGd1aWxkOiBzdHJpbmc7XG5cdC8qKiBUaGUgdm9pY2UgY2hhbm5lbCBmb3IgdGhlIHBsYXllci4gKi9cblx0cHVibGljIHZvaWNlQ2hhbm5lbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdC8qKiBUaGUgdGV4dCBjaGFubmVsIGZvciB0aGUgcGxheWVyLiAqL1xuXHRwdWJsaWMgdGV4dENoYW5uZWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHQvKipUaGUgbm93IHBsYXlpbmcgbWVzc2FnZS4gKi9cblx0cHVibGljIG5vd1BsYXlpbmdNZXNzYWdlPzogTWVzc2FnZTtcblx0LyoqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbGF5ZXIuICovXG5cdHB1YmxpYyBzdGF0ZTogU3RhdGUgPSBcIkRJU0NPTk5FQ1RFRFwiO1xuXHQvKiogVGhlIGVxdWFsaXplciBiYW5kcyBhcnJheS4gKi9cblx0cHVibGljIGJhbmRzID0gbmV3IEFycmF5PG51bWJlcj4oMTUpLmZpbGwoMC4wKTtcblx0LyoqIFRoZSB2b2ljZSBzdGF0ZSBvYmplY3QgZnJvbSBEaXNjb3JkLiAqL1xuXHRwdWJsaWMgdm9pY2VTdGF0ZTogVm9pY2VTdGF0ZTtcblx0LyoqIFRoZSBNYW5hZ2VyLiAqL1xuXHRwdWJsaWMgbWFuYWdlcjogTWFuYWdlcjtcblx0LyoqIFRoZSBhdXRvcGxheSBzdGF0ZSBvZiB0aGUgcGxheWVyLiAqL1xuXHRwdWJsaWMgaXNBdXRvcGxheTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3RhdGljIF9tYW5hZ2VyOiBNYW5hZ2VyO1xuXHRwcml2YXRlIHJlYWRvbmx5IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdHByaXZhdGUgZHluYW1pY0xvb3BJbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQ7XG5cblx0LyoqXG5cdCAqIFNldCBjdXN0b20gZGF0YS5cblx0ICogQHBhcmFtIGtleVxuXHQgKiBAcGFyYW0gdmFsdWVcblx0ICovXG5cdHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgY3VzdG9tIGRhdGEuXG5cdCAqIEBwYXJhbSBrZXlcblx0ICovXG5cdHB1YmxpYyBnZXQ8VD4oa2V5OiBzdHJpbmcpOiBUIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhW2tleV0gYXMgVDtcblx0fVxuXG5cdC8qKiBAaGlkZGVuICovXG5cdHB1YmxpYyBzdGF0aWMgaW5pdChtYW5hZ2VyOiBNYW5hZ2VyKTogdm9pZCB7XG5cdFx0dGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBwbGF5ZXIsIHJldHVybnMgb25lIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFBsYXllck9wdGlvbnMpIHtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhpcy5tYW5hZ2VyID0gU3RydWN0dXJlLmdldChcIlBsYXllclwiKS5fbWFuYWdlcjtcblx0XHRpZiAoIXRoaXMubWFuYWdlcikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNYW5hZ2VyIGhhcyBub3QgYmVlbiBpbml0aWF0ZWQuXCIpO1xuXG5cdFx0aWYgKHRoaXMubWFuYWdlci5wbGF5ZXJzLmhhcyhvcHRpb25zLmd1aWxkKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMubWFuYWdlci5wbGF5ZXJzLmdldChvcHRpb25zLmd1aWxkKTtcblx0XHR9XG5cblx0XHRwbGF5ZXJDaGVjayhvcHRpb25zKTtcblxuXHRcdHRoaXMuZ3VpbGQgPSBvcHRpb25zLmd1aWxkO1xuXHRcdHRoaXMudm9pY2VTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe1xuXHRcdFx0b3A6IFwidm9pY2VVcGRhdGVcIixcblx0XHRcdGd1aWxkX2lkOiBvcHRpb25zLmd1aWxkLFxuXHRcdH0pO1xuXG5cdFx0aWYgKG9wdGlvbnMudm9pY2VDaGFubmVsKSB0aGlzLnZvaWNlQ2hhbm5lbCA9IG9wdGlvbnMudm9pY2VDaGFubmVsO1xuXHRcdGlmIChvcHRpb25zLnRleHRDaGFubmVsKSB0aGlzLnRleHRDaGFubmVsID0gb3B0aW9ucy50ZXh0Q2hhbm5lbDtcblxuXHRcdGNvbnN0IG5vZGUgPSB0aGlzLm1hbmFnZXIubm9kZXMuZ2V0KG9wdGlvbnMubm9kZSk7XG5cdFx0dGhpcy5ub2RlID0gbm9kZSB8fCB0aGlzLm1hbmFnZXIudXNlYWJsZU5vZGVzO1xuXG5cdFx0aWYgKCF0aGlzLm5vZGUpIHRocm93IG5ldyBSYW5nZUVycm9yKFwiTm8gYXZhaWxhYmxlIG5vZGVzLlwiKTtcblxuXHRcdHRoaXMubWFuYWdlci5wbGF5ZXJzLnNldChvcHRpb25zLmd1aWxkLCB0aGlzKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlBsYXllckNyZWF0ZVwiLCB0aGlzKTtcblx0XHR0aGlzLnNldFZvbHVtZShvcHRpb25zLnZvbHVtZSA/PyAxMDApO1xuXHRcdHRoaXMuZmlsdGVycyA9IG5ldyBGaWx0ZXJzKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhbWUgYXMgTWFuYWdlciNzZWFyY2goKSBidXQgYSBzaG9ydGN1dCBvbiB0aGUgcGxheWVyIGl0c2VsZi5cblx0ICogQHBhcmFtIHF1ZXJ5XG5cdCAqIEBwYXJhbSByZXF1ZXN0ZXJcblx0ICovXG5cdHB1YmxpYyBzZWFyY2gocXVlcnk6IHN0cmluZyB8IFNlYXJjaFF1ZXJ5LCByZXF1ZXN0ZXI/OiBVc2VyIHwgQ2xpZW50VXNlcik6IFByb21pc2U8U2VhcmNoUmVzdWx0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWFuYWdlci5zZWFyY2gocXVlcnksIHJlcXVlc3Rlcik7XG5cdH1cblxuXHQvKiogQ29ubmVjdCB0byB0aGUgdm9pY2UgY2hhbm5lbC4gKi9cblx0cHVibGljIGNvbm5lY3QoKTogdGhpcyB7XG5cdFx0aWYgKCF0aGlzLnZvaWNlQ2hhbm5lbCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyB2b2ljZSBjaGFubmVsIGhhcyBiZWVuIHNldC5cIik7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiQ09OTkVDVElOR1wiO1xuXG5cdFx0dGhpcy5tYW5hZ2VyLm9wdGlvbnMuc2VuZCh0aGlzLmd1aWxkLCB7XG5cdFx0XHRvcDogNCxcblx0XHRcdGQ6IHtcblx0XHRcdFx0Z3VpbGRfaWQ6IHRoaXMuZ3VpbGQsXG5cdFx0XHRcdGNoYW5uZWxfaWQ6IHRoaXMudm9pY2VDaGFubmVsLFxuXHRcdFx0XHRzZWxmX211dGU6IHRoaXMub3B0aW9ucy5zZWxmTXV0ZSB8fCBmYWxzZSxcblx0XHRcdFx0c2VsZl9kZWFmOiB0aGlzLm9wdGlvbnMuc2VsZkRlYWZlbiB8fCBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnN0YXRlID0gXCJDT05ORUNURURcIjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3ZlcyB0aGUgcGxheWVyIHRvIGEgZGlmZmVyZW50IG5vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbm9kZV0gLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gbW92ZSB0by5cblx0ICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBsYXllciBpbnN0YW5jZS5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBtb3ZlTm9kZShub2RlPzogc3RyaW5nKTogUHJvbWlzZTx0aGlzPiB7XG5cdFx0bm9kZSA9IG5vZGUgfHwgdGhpcy5tYW5hZ2VyLmxlYXN0TG9hZE5vZGUuZmlyc3QoKS5vcHRpb25zLmlkZW50aWZpZXIgfHwgdGhpcy5tYW5hZ2VyLm5vZGVzLmZpbHRlcigobikgPT4gbi5jb25uZWN0ZWQpLmZpcnN0KCkub3B0aW9ucy5pZGVudGlmaWVyO1xuXHRcdGlmICghdGhpcy5tYW5hZ2VyLm5vZGVzLmhhcyhub2RlKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyBub2RlcyBhdmFpbGFibGUuXCIpO1xuXHRcdGlmICh0aGlzLm5vZGUub3B0aW9ucy5pZGVudGlmaWVyID09PSBub2RlKSByZXR1cm4gdGhpcztcblxuXHRcdGNvbnN0IGRlc3Ryb3lPbGROb2RlID0gYXN5bmMgKG5vZGU6IE5vZGUpID0+IHtcblx0XHRcdHRoaXMuc3RhdGUgPSBcIk1PVklOR1wiO1xuXG5cdFx0XHRpZiAodGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlLm9wdGlvbnMuaWRlbnRpZmllcikgJiYgdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlLm9wdGlvbnMuaWRlbnRpZmllcikuY29ubmVjdGVkKSBhd2FpdCBub2RlLnJlc3QuZGVzdHJveVBsYXllcih0aGlzLmd1aWxkKTtcblxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiAodGhpcy5zdGF0ZSA9IFwiQ09OTkVDVEVEXCIpLCA1MDAwKTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgY3VycmVudE5vZGUgPSB0aGlzLm5vZGU7XG5cdFx0Y29uc3QgZGVzdGluYXRpb25Ob2RlID0gdGhpcy5tYW5hZ2VyLm5vZGVzLmdldChub2RlKTtcblx0XHRsZXQgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuXG5cdFx0aWYgKGN1cnJlbnROb2RlLmNvbm5lY3RlZCkge1xuXHRcdFx0Y29uc3QgZmV0Y2hlZFBsYXllcjogYW55ID0gYXdhaXQgY3VycmVudE5vZGUucmVzdC5nZXQoYC92NC9zZXNzaW9ucy8ke2N1cnJlbnROb2RlLnNlc3Npb25JZH0vcGxheWVycy8ke3RoaXMuZ3VpbGR9YCk7XG5cdFx0XHRwb3NpdGlvbiA9IGZldGNoZWRQbGF5ZXIudHJhY2suaW5mby5wb3NpdGlvbjtcblx0XHR9XG5cblx0XHRhd2FpdCBkZXN0aW5hdGlvbk5vZGUucmVzdC51cGRhdGVQbGF5ZXIoe1xuXHRcdFx0Z3VpbGRJZDogdGhpcy5ndWlsZCxcblx0XHRcdGRhdGE6IHtcblx0XHRcdFx0ZW5jb2RlZFRyYWNrOiB0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrLFxuXHRcdFx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0XHRcdHZvbHVtZTogdGhpcy52b2x1bWUsXG5cdFx0XHRcdHBhdXNlZDogdGhpcy5wYXVzZWQsXG5cdFx0XHRcdGZpbHRlcnM6IHtcblx0XHRcdFx0XHRkaXN0b3J0aW9uOiB0aGlzLmZpbHRlcnMuZGlzdG9ydGlvbixcblx0XHRcdFx0XHRlcXVhbGl6ZXI6IHRoaXMuZmlsdGVycy5lcXVhbGl6ZXIsXG5cdFx0XHRcdFx0a2FyYW9rZTogdGhpcy5maWx0ZXJzLmthcmFva2UsXG5cdFx0XHRcdFx0cm90YXRpb246IHRoaXMuZmlsdGVycy5yb3RhdGlvbixcblx0XHRcdFx0XHR0aW1lc2NhbGU6IHRoaXMuZmlsdGVycy50aW1lc2NhbGUsXG5cdFx0XHRcdFx0dmlicmF0bzogdGhpcy5maWx0ZXJzLnZpYnJhdG8sXG5cdFx0XHRcdFx0dm9sdW1lOiB0aGlzLmZpbHRlcnMudm9sdW1lLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdGF3YWl0IGRlc3RpbmF0aW9uTm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHR2b2ljZToge1xuXHRcdFx0XHRcdHRva2VuOiB0aGlzLnZvaWNlU3RhdGUuZXZlbnQudG9rZW4sXG5cdFx0XHRcdFx0ZW5kcG9pbnQ6IHRoaXMudm9pY2VTdGF0ZS5ldmVudC5lbmRwb2ludCxcblx0XHRcdFx0XHRzZXNzaW9uSWQ6IHRoaXMhLnZvaWNlU3RhdGU/LnNlc3Npb25JZCEsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5ub2RlID0gZGVzdGluYXRpb25Ob2RlO1xuXHRcdGRlc3Ryb3lPbGROb2RlKGN1cnJlbnROb2RlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBEaXNjb25uZWN0IGZyb20gdGhlIHZvaWNlIGNoYW5uZWwuICovXG5cdHB1YmxpYyBkaXNjb25uZWN0KCk6IHRoaXMge1xuXHRcdGlmICh0aGlzLnZvaWNlQ2hhbm5lbCA9PT0gbnVsbCkgcmV0dXJuIHRoaXM7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiRElTQ09OTkVDVElOR1wiO1xuXG5cdFx0dGhpcy5wYXVzZSh0cnVlKTtcblx0XHR0aGlzLm1hbmFnZXIub3B0aW9ucy5zZW5kKHRoaXMuZ3VpbGQsIHtcblx0XHRcdG9wOiA0LFxuXHRcdFx0ZDoge1xuXHRcdFx0XHRndWlsZF9pZDogdGhpcy5ndWlsZCxcblx0XHRcdFx0Y2hhbm5lbF9pZDogbnVsbCxcblx0XHRcdFx0c2VsZl9tdXRlOiBmYWxzZSxcblx0XHRcdFx0c2VsZl9kZWFmOiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnZvaWNlQ2hhbm5lbCA9IG51bGw7XG5cdFx0dGhpcy5zdGF0ZSA9IFwiRElTQ09OTkVDVEVEXCI7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogRGVzdHJveXMgdGhlIHBsYXllci4gKi9cblx0cHVibGljIGRlc3Ryb3koZGlzY29ubmVjdCA9IHRydWUpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlID0gXCJERVNUUk9ZSU5HXCI7XG5cblx0XHRpZiAoZGlzY29ubmVjdCkge1xuXHRcdFx0dGhpcy5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5ub2RlLnJlc3QuZGVzdHJveVBsYXllcih0aGlzLmd1aWxkKTtcblx0XHR0aGlzLm1hbmFnZXIuZW1pdChcIlBsYXllckRlc3Ryb3lcIiwgdGhpcyk7XG5cdFx0dGhpcy5tYW5hZ2VyLnBsYXllcnMuZGVsZXRlKHRoaXMuZ3VpbGQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHBsYXllciB2b2ljZSBjaGFubmVsLlxuXHQgKiBAcGFyYW0gY2hhbm5lbFxuXHQgKi9cblx0cHVibGljIHNldFZvaWNlQ2hhbm5lbChjaGFubmVsOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRpZiAodHlwZW9mIGNoYW5uZWwgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDaGFubmVsIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcblxuXHRcdHRoaXMudm9pY2VDaGFubmVsID0gY2hhbm5lbDtcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBwbGF5ZXIgdGV4dCBjaGFubmVsLlxuXHQgKiBAcGFyYW0gY2hhbm5lbFxuXHQgKi9cblx0cHVibGljIHNldFRleHRDaGFubmVsKGNoYW5uZWw6IHN0cmluZyk6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgY2hhbm5lbCAhPT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNoYW5uZWwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xuXG5cdFx0dGhpcy50ZXh0Q2hhbm5lbCA9IGNoYW5uZWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgbm93IHBsYXlpbmcgbWVzc2FnZS4gKi9cblx0cHVibGljIHNldE5vd1BsYXlpbmdNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2UpOiBNZXNzYWdlIHtcblx0XHRpZiAoIW1lc3NhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJZb3UgbXVzdCBwcm92aWRlIHRoZSBtZXNzYWdlIG9mIHRoZSBub3cgcGxheWluZyBtZXNzYWdlLlwiKTtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLm5vd1BsYXlpbmdNZXNzYWdlID0gbWVzc2FnZSk7XG5cdH1cblxuXHQvKiogUGxheXMgdGhlIG5leHQgdHJhY2suICovXG5cdHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIFBsYXlzIHRoZSBzcGVjaWZpZWQgdHJhY2suXG5cdCAqIEBwYXJhbSB0cmFja1xuXHQgKi9cblx0cHVibGljIGFzeW5jIHBsYXkodHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKipcblx0ICogUGxheXMgdGhlIG5leHQgdHJhY2sgd2l0aCBzb21lIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgcGxheShvcHRpb25zOiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIFBsYXlzIHRoZSBzcGVjaWZpZWQgdHJhY2sgd2l0aCBzb21lIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB0cmFja1xuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0cHVibGljIGFzeW5jIHBsYXkodHJhY2s6IFRyYWNrIHwgVW5yZXNvbHZlZFRyYWNrLCBvcHRpb25zOiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5cdHB1YmxpYyBhc3luYyBwbGF5KG9wdGlvbnNPclRyYWNrPzogUGxheU9wdGlvbnMgfCBUcmFjayB8IFVucmVzb2x2ZWRUcmFjaywgcGxheU9wdGlvbnM/OiBQbGF5T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0eXBlb2Ygb3B0aW9uc09yVHJhY2sgIT09IFwidW5kZWZpbmVkXCIgJiYgVHJhY2tVdGlscy52YWxpZGF0ZShvcHRpb25zT3JUcmFjaykpIHtcblx0XHRcdGlmICh0aGlzLnF1ZXVlLmN1cnJlbnQpIHRoaXMucXVldWUucHJldmlvdXMgPSB0aGlzLnF1ZXVlLmN1cnJlbnQ7XG5cdFx0XHR0aGlzLnF1ZXVlLmN1cnJlbnQgPSBvcHRpb25zT3JUcmFjayBhcyBUcmFjaztcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMucXVldWUuY3VycmVudCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyBjdXJyZW50IHRyYWNrLlwiKTtcblxuXHRcdGNvbnN0IGZpbmFsT3B0aW9ucyA9IHBsYXlPcHRpb25zXG5cdFx0XHQ/IHBsYXlPcHRpb25zXG5cdFx0XHQ6IFtcInN0YXJ0VGltZVwiLCBcImVuZFRpbWVcIiwgXCJub1JlcGxhY2VcIl0uZXZlcnkoKHYpID0+IE9iamVjdC5rZXlzKG9wdGlvbnNPclRyYWNrIHx8IHt9KS5pbmNsdWRlcyh2KSlcblx0XHRcdD8gKG9wdGlvbnNPclRyYWNrIGFzIFBsYXlPcHRpb25zKVxuXHRcdFx0OiB7fTtcblxuXHRcdGlmIChUcmFja1V0aWxzLmlzVW5yZXNvbHZlZFRyYWNrKHRoaXMucXVldWUuY3VycmVudCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXMucXVldWUuY3VycmVudCA9IGF3YWl0IFRyYWNrVXRpbHMuZ2V0Q2xvc2VzdFRyYWNrKHRoaXMucXVldWUuY3VycmVudCBhcyBVbnJlc29sdmVkVHJhY2spO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJUcmFja0Vycm9yXCIsIHRoaXMsIHRoaXMucXVldWUuY3VycmVudCwgZXJyb3IpO1xuXHRcdFx0XHRpZiAodGhpcy5xdWV1ZVswXSkgcmV0dXJuIHRoaXMucGxheSh0aGlzLnF1ZXVlWzBdKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRlbmNvZGVkVHJhY2s6IHRoaXMucXVldWUuY3VycmVudD8udHJhY2ssXG5cdFx0XHRcdC4uLmZpbmFsT3B0aW9ucyxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRPYmplY3QuYXNzaWduKHRoaXMsIHsgcG9zaXRpb246IDAsIHBsYXlpbmc6IHRydWUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgYXV0b3BsYXktc3RhdGUgb2YgdGhlIHBsYXllci5cblx0ICogQHBhcmFtIGF1dG9wbGF5U3RhdGVcblx0ICogQHBhcmFtIGJvdFVzZXJcblx0ICovXG5cdHB1YmxpYyBzZXRBdXRvcGxheShhdXRvcGxheVN0YXRlOiBib29sZWFuLCBib3RVc2VyOiBvYmplY3QpIHtcblx0XHRpZiAodHlwZW9mIGF1dG9wbGF5U3RhdGUgIT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXV0b3BsYXlTdGF0ZSBtdXN0IGJlIGEgYm9vbGVhbi5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBib3RVc2VyICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYm90VXNlciBtdXN0IGJlIGEgdXNlci1vYmplY3QuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNBdXRvcGxheSA9IGF1dG9wbGF5U3RhdGU7XG5cdFx0dGhpcy5zZXQoXCJJbnRlcm5hbF9Cb3RVc2VyXCIsIGJvdFVzZXIpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyByZWNvbW1lbmRlZCB0cmFja3MgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdHJhY2tzLlxuXHQgKiBAcGFyYW0gdHJhY2tcblx0ICogQHBhcmFtIHJlcXVlc3RlclxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldFJlY29tbWVuZGVkKHRyYWNrOiBUcmFjaywgcmVxdWVzdGVyPzogVXNlciB8IENsaWVudFVzZXIpIHtcblx0XHRjb25zdCBub2RlID0gdGhpcy5tYW5hZ2VyLnVzZWFibGVOb2RlcztcblxuXHRcdGlmICghbm9kZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIG5vZGVzLlwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNTcG90aWZ5VVJMID0gW1wic3BvdGlmeS5jb21cIiwgXCJvcGVuLnNwb3RpZnkuY29tXCJdLnNvbWUoKHVybCkgPT4gdHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXHRcdGNvbnN0IGhhc1lvdVR1YmVVUkwgPSBbXCJ5b3V0dWJlLmNvbVwiLCBcInlvdXR1LmJlXCJdLnNvbWUoKHVybCkgPT4gdHJhY2sudXJpLmluY2x1ZGVzKHVybCkpO1xuXG5cdFx0aWYgKGhhc1Nwb3RpZnlVUkwpIHtcblx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IG5vZGUucmVzdC5nZXQoYC92NC9pbmZvYCk7XG5cdFx0XHRjb25zdCBpbmZvID0gcmVzIGFzIExhdmFsaW5rSW5mbztcblxuXHRcdFx0Y29uc3QgaXNTcG90aWZ5UGx1Z2luRW5hYmxlZCA9IGluZm8ucGx1Z2lucy5zb21lKChwbHVnaW46IHsgbmFtZTogc3RyaW5nIH0pID0+IHBsdWdpbi5uYW1lID09PSBcImxhdmFzcmMtcGx1Z2luXCIpO1xuXHRcdFx0Y29uc3QgaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQgPSBpbmZvLnNvdXJjZU1hbmFnZXJzLmluY2x1ZGVzKFwic3BvdGlmeVwiKTtcblxuXHRcdFx0aWYgKGlzU3BvdGlmeVBsdWdpbkVuYWJsZWQgJiYgaXNTcG90aWZ5U291cmNlTWFuYWdlckVuYWJsZWQpIHtcblx0XHRcdFx0Y29uc3QgdHJhY2tJRCA9IG5vZGUuZXh0cmFjdFNwb3RpZnlUcmFja0lEKHRyYWNrLnVyaSk7XG5cdFx0XHRcdGNvbnN0IGFydGlzdElEID0gbm9kZS5leHRyYWN0U3BvdGlmeUFydGlzdElEKHRyYWNrLnBsdWdpbkluZm8uYXJ0aXN0VXJsKTtcblxuXHRcdFx0XHRsZXQgaWRlbnRpZmllciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0cmFja0lEICYmIGFydGlzdElEKSB7XG5cdFx0XHRcdFx0aWRlbnRpZmllciA9IGBzcHJlYzpzZWVkX2FydGlzdHM9JHthcnRpc3RJRH0mc2VlZF90cmFja3M9JHt0cmFja0lEfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHJhY2tJRCkge1xuXHRcdFx0XHRcdGlkZW50aWZpZXIgPSBgc3ByZWM6c2VlZF90cmFja3M9JHt0cmFja0lEfWA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYXJ0aXN0SUQpIHtcblx0XHRcdFx0XHRpZGVudGlmaWVyID0gYHNwcmVjOnNlZWRfYXJ0aXN0cz0ke2FydGlzdElEfWA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0XHRcdGNvbnN0IHJlY29tbWVuZGVkUmVzdWx0ID0gKGF3YWl0IG5vZGUucmVzdC5nZXQoYC92NC9sb2FkdHJhY2tzP2lkZW50aWZpZXI9JHtlbmNvZGVVUklDb21wb25lbnQoaWRlbnRpZmllcil9YCkpIGFzIExhdmFsaW5rUmVzcG9uc2U7XG5cblx0XHRcdFx0XHRpZiAocmVjb21tZW5kZWRSZXN1bHQubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGxheWxpc3REYXRhID0gcmVjb21tZW5kZWRSZXN1bHQuZGF0YSBhcyBQbGF5bGlzdFJhd0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCByZWNvbW1lbmRlZFRyYWNrcyA9IHBsYXlsaXN0RGF0YS50cmFja3M7XG5cblx0XHRcdFx0XHRcdGlmIChyZWNvbW1lbmRlZFRyYWNrcykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0cmFja3MgPSByZWNvbW1lbmRlZFRyYWNrcy5tYXAoKHRyYWNrKSA9PiBUcmFja1V0aWxzLmJ1aWxkKHRyYWNrLCByZXF1ZXN0ZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJhY2tzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCB2aWRlb0lEID0gdHJhY2sudXJpLnN1YnN0cmluZyh0cmFjay51cmkuaW5kZXhPZihcIj1cIikgKyAxKTtcblxuXHRcdGlmICghaGFzWW91VHViZVVSTCkge1xuXHRcdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYW5hZ2VyLnNlYXJjaChgJHt0cmFjay5hdXRob3J9IC0gJHt0cmFjay50aXRsZX1gKTtcblxuXHRcdFx0dmlkZW9JRCA9IHJlcy50cmFja3NbMF0udXJpLnN1YnN0cmluZyhyZXMudHJhY2tzWzBdLnVyaS5pbmRleE9mKFwiPVwiKSArIDEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlYXJjaFVSSSA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JRH0mbGlzdD1SRCR7dmlkZW9JRH1gO1xuXG5cdFx0Y29uc3QgcmVzID0gYXdhaXQgdGhpcy5tYW5hZ2VyLnNlYXJjaChzZWFyY2hVUkkpO1xuXG5cdFx0aWYgKHJlcy5sb2FkVHlwZSA9PT0gXCJlbXB0eVwiIHx8IHJlcy5sb2FkVHlwZSA9PT0gXCJlcnJvclwiKSByZXR1cm47XG5cblx0XHRsZXQgdHJhY2tzID0gcmVzLnRyYWNrcztcblxuXHRcdGlmIChyZXMubG9hZFR5cGUgPT09IFwicGxheWxpc3RcIikge1xuXHRcdFx0dHJhY2tzID0gcmVzLnBsYXlsaXN0LnRyYWNrcztcblx0XHR9XG5cblx0XHRjb25zdCBmaWx0ZXJlZFRyYWNrcyA9IHRyYWNrcy5maWx0ZXIoKHRyYWNrKSA9PiB0cmFjay51cmkgIT09IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JRH1gKTtcblxuXHRcdGlmICh0aGlzLm1hbmFnZXIub3B0aW9ucy5yZXBsYWNlWW91VHViZUNyZWRlbnRpYWxzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRyYWNrIG9mIGZpbHRlcmVkVHJhY2tzKSB7XG5cdFx0XHRcdHRyYWNrLmF1dGhvciA9IHRyYWNrLmF1dGhvci5yZXBsYWNlKFwiLSBUb3BpY1wiLCBcIlwiKTtcblx0XHRcdFx0dHJhY2sudGl0bGUgPSB0cmFjay50aXRsZS5yZXBsYWNlKFwiVG9waWMgLVwiLCBcIlwiKTtcblxuXHRcdFx0XHRpZiAodHJhY2sudGl0bGUuaW5jbHVkZXMoXCItXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgW2F1dGhvciwgdGl0bGVdID0gdHJhY2sudGl0bGUuc3BsaXQoXCItXCIpLm1hcCgoc3RyOiBzdHJpbmcpID0+IHN0ci50cmltKCkpO1xuXHRcdFx0XHRcdHRyYWNrLmF1dGhvciA9IGF1dGhvcjtcblx0XHRcdFx0XHR0cmFjay50aXRsZSA9IHRpdGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpbHRlcmVkVHJhY2tzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHBsYXllciB2b2x1bWUuXG5cdCAqIEBwYXJhbSB2b2x1bWVcblx0ICovXG5cdHB1YmxpYyBzZXRWb2x1bWUodm9sdW1lOiBudW1iZXIpOiB0aGlzIHtcblx0XHRpZiAoaXNOYU4odm9sdW1lKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlZvbHVtZSBtdXN0IGJlIGEgbnVtYmVyLlwiKTtcblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLm9wdGlvbnMuZ3VpbGQsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHZvbHVtZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHR0aGlzLnZvbHVtZSA9IHZvbHVtZTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHRyYWNrIHJlcGVhdC5cblx0ICogQHBhcmFtIHJlcGVhdFxuXHQgKi9cblx0cHVibGljIHNldFRyYWNrUmVwZWF0KHJlcGVhdDogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblxuXHRcdGNvbnN0IG9sZFBsYXllciA9IHsgLi4udGhpcyB9O1xuXG5cdFx0aWYgKHJlcGVhdCkge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IHRydWU7XG5cdFx0XHR0aGlzLnF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHF1ZXVlIHJlcGVhdC5cblx0ICogQHBhcmFtIHJlcGVhdFxuXHQgKi9cblx0cHVibGljIHNldFF1ZXVlUmVwZWF0KHJlcGVhdDogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblxuXHRcdGNvbnN0IG9sZFBsYXllciA9IHsgLi4udGhpcyB9O1xuXG5cdFx0aWYgKHJlcGVhdCkge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IHRydWU7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHF1ZXVlIHRvIHJlcGVhdCBhbmQgc2h1ZmZsZXMgdGhlIHF1ZXVlIGFmdGVyIGVhY2ggc29uZy5cblx0ICogQHBhcmFtIHJlcGVhdCBcInRydWVcIiBvciBcImZhbHNlXCIuXG5cdCAqIEBwYXJhbSBtcyBBZnRlciBob3cgbWFueSBtaWxsaXNlY29uZHMgdG8gdHJpZ2dlciBkeW5hbWljIHJlcGVhdC5cblx0ICovXG5cdHB1YmxpYyBzZXREeW5hbWljUmVwZWF0KHJlcGVhdDogYm9vbGVhbiwgbXM6IG51bWJlcik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcmVwZWF0ICE9PSBcImJvb2xlYW5cIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignUmVwZWF0IGNhbiBvbmx5IGJlIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5xdWV1ZS5zaXplIDw9IDEpIHtcblx0XHRcdHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHF1ZXVlIHNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMS5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb2xkUGxheWVyID0geyAuLi50aGlzIH07XG5cblx0XHRpZiAocmVwZWF0KSB7XG5cdFx0XHR0aGlzLnRyYWNrUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLnF1ZXVlUmVwZWF0ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmR5bmFtaWNSZXBlYXQgPSB0cnVlO1xuXG5cdFx0XHR0aGlzLmR5bmFtaWNMb29wSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5keW5hbWljUmVwZWF0KSByZXR1cm47XG5cdFx0XHRcdGNvbnN0IHNodWZmbGVkID0gXy5zaHVmZmxlKHRoaXMucXVldWUpO1xuXHRcdFx0XHR0aGlzLnF1ZXVlLmNsZWFyKCk7XG5cdFx0XHRcdHNodWZmbGVkLmZvckVhY2goKHRyYWNrKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5xdWV1ZS5hZGQodHJhY2spO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sIG1zKSBhcyBOb2RlSlMuVGltZW91dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmR5bmFtaWNMb29wSW50ZXJ2YWwpO1xuXHRcdFx0dGhpcy50cmFja1JlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5xdWV1ZVJlcGVhdCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5keW5hbWljUmVwZWF0ID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYW5hZ2VyLmVtaXQoXCJQbGF5ZXJTdGF0ZVVwZGF0ZVwiLCBvbGRQbGF5ZXIsIHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIFJlc3RhcnRzIHRoZSBjdXJyZW50IHRyYWNrIHRvIHRoZSBzdGFydC4gKi9cblx0cHVibGljIHJlc3RhcnQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrKSB7XG5cdFx0XHRpZiAodGhpcy5xdWV1ZS5sZW5ndGgpIHRoaXMucGxheSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwb3NpdGlvbjogMCxcblx0XHRcdFx0ZW5jb2RlZFRyYWNrOiB0aGlzLnF1ZXVlLmN1cnJlbnQ/LnRyYWNrLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKiBTdG9wcyB0aGUgY3VycmVudCB0cmFjaywgb3B0aW9uYWxseSBnaXZlIGFuIGFtb3VudCB0byBza2lwIHRvLCBlLmcgNSB3b3VsZCBwbGF5IHRoZSA1dGggc29uZy4gKi9cblx0cHVibGljIHN0b3AoYW1vdW50PzogbnVtYmVyKTogdGhpcyB7XG5cdFx0aWYgKHR5cGVvZiBhbW91bnQgPT09IFwibnVtYmVyXCIgJiYgYW1vdW50ID4gMSkge1xuXHRcdFx0aWYgKGFtb3VudCA+IHRoaXMucXVldWUubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbm5vdCBza2lwIG1vcmUgdGhhbiB0aGUgcXVldWUgbGVuZ3RoLlwiKTtcblx0XHRcdHRoaXMucXVldWUuc3BsaWNlKDAsIGFtb3VudCAtIDEpO1xuXHRcdH1cblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRlbmNvZGVkVHJhY2s6IG51bGwsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUGF1c2VzIHRoZSBjdXJyZW50IHRyYWNrLlxuXHQgKiBAcGFyYW0gcGF1c2Vcblx0ICovXG5cdHB1YmxpYyBwYXVzZShwYXVzZTogYm9vbGVhbik6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgcGF1c2UgIT09IFwiYm9vbGVhblwiKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignUGF1c2UgY2FuIG9ubHkgYmUgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiLicpO1xuXG5cdFx0aWYgKHRoaXMucGF1c2VkID09PSBwYXVzZSB8fCAhdGhpcy5xdWV1ZS50b3RhbFNpemUpIHJldHVybiB0aGlzO1xuXG5cdFx0Y29uc3Qgb2xkUGxheWVyID0geyAuLi50aGlzIH07XG5cblx0XHR0aGlzLnBsYXlpbmcgPSAhcGF1c2U7XG5cdFx0dGhpcy5wYXVzZWQgPSBwYXVzZTtcblxuXHRcdHRoaXMubm9kZS5yZXN0LnVwZGF0ZVBsYXllcih7XG5cdFx0XHRndWlsZElkOiB0aGlzLmd1aWxkLFxuXHRcdFx0ZGF0YToge1xuXHRcdFx0XHRwYXVzZWQ6IHBhdXNlLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdHRoaXMubWFuYWdlci5lbWl0KFwiUGxheWVyU3RhdGVVcGRhdGVcIiwgb2xkUGxheWVyLCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKiBHbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBzb25nLiAqL1xuXHRwdWJsaWMgcHJldmlvdXMoKTogdGhpcyB7XG5cdFx0dGhpcy5xdWV1ZS51bnNoaWZ0KHRoaXMucXVldWUucHJldmlvdXMpO1xuXHRcdHRoaXMuc3RvcCgpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2Vla3MgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IHRyYWNrLlxuXHQgKiBAcGFyYW0gcG9zaXRpb25cblx0ICovXG5cdHB1YmxpYyBzZWVrKHBvc2l0aW9uOiBudW1iZXIpOiB0aGlzIHtcblx0XHRpZiAoIXRoaXMucXVldWUuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRwb3NpdGlvbiA9IE51bWJlcihwb3NpdGlvbik7XG5cblx0XHRpZiAoaXNOYU4ocG9zaXRpb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlBvc2l0aW9uIG11c3QgYmUgYSBudW1iZXIuXCIpO1xuXHRcdGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiB0aGlzLnF1ZXVlLmN1cnJlbnQuZHVyYXRpb24pIHBvc2l0aW9uID0gTWF0aC5tYXgoTWF0aC5taW4ocG9zaXRpb24sIHRoaXMucXVldWUuY3VycmVudC5kdXJhdGlvbiksIDApO1xuXG5cdFx0dGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG5cdFx0dGhpcy5ub2RlLnJlc3QudXBkYXRlUGxheWVyKHtcblx0XHRcdGd1aWxkSWQ6IHRoaXMuZ3VpbGQsXG5cdFx0XHRkYXRhOiB7XG5cdFx0XHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHRcdH0sXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXllck9wdGlvbnMge1xuXHQvKiogVGhlIGd1aWxkIHRoZSBQbGF5ZXIgYmVsb25ncyB0by4gKi9cblx0Z3VpbGQ6IHN0cmluZztcblx0LyoqIFRoZSB0ZXh0IGNoYW5uZWwgdGhlIFBsYXllciBiZWxvbmdzIHRvLiAqL1xuXHR0ZXh0Q2hhbm5lbDogc3RyaW5nO1xuXHQvKiogVGhlIHZvaWNlIGNoYW5uZWwgdGhlIFBsYXllciBiZWxvbmdzIHRvLiAqL1xuXHR2b2ljZUNoYW5uZWw/OiBzdHJpbmc7XG5cdC8qKiBUaGUgbm9kZSB0aGUgUGxheWVyIHVzZXMuICovXG5cdG5vZGU/OiBzdHJpbmc7XG5cdC8qKiBUaGUgaW5pdGlhbCB2b2x1bWUgdGhlIFBsYXllciB3aWxsIHVzZS4gKi9cblx0dm9sdW1lPzogbnVtYmVyO1xuXHQvKiogSWYgdGhlIHBsYXllciBzaG91bGQgbXV0ZSBpdHNlbGYuICovXG5cdHNlbGZNdXRlPzogYm9vbGVhbjtcblx0LyoqIElmIHRoZSBwbGF5ZXIgc2hvdWxkIGRlYWYgaXRzZWxmLiAqL1xuXHRzZWxmRGVhZmVuPzogYm9vbGVhbjtcbn1cblxuLyoqIElmIHRyYWNrIHBhcnRpYWxzIGFyZSBzZXQgc29tZSBvZiB0aGVzZSB3aWxsIGJlIGB1bmRlZmluZWRgIGFzIHRoZXkgd2VyZSByZW1vdmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjayB7XG5cdC8qKiBUaGUgYmFzZTY0IGVuY29kZWQgdHJhY2suICovXG5cdHJlYWRvbmx5IHRyYWNrOiBzdHJpbmc7XG5cdC8qKiBUaGUgYXJ0d29yayB1cmwgb2YgdGhlIHRyYWNrLiAqL1xuXHRyZWFkb25seSBhcnR3b3JrVXJsOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHJhY2sgc291cmNlIG5hbWUuICovXG5cdHJlYWRvbmx5IHNvdXJjZU5hbWU6IFRyYWNrU291cmNlTmFtZTtcblx0LyoqIFRoZSB0aXRsZSBvZiB0aGUgdHJhY2suICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGlkZW50aWZpZXI6IHN0cmluZztcblx0LyoqIFRoZSBhdXRob3Igb2YgdGhlIHRyYWNrLiAqL1xuXHRhdXRob3I6IHN0cmluZztcblx0LyoqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cdC8qKiBUaGUgSVNSQyBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IGlzcmM6IHN0cmluZztcblx0LyoqIElmIHRoZSB0cmFjayBpcyBzZWVrYWJsZS4gKi9cblx0cmVhZG9ubHkgaXNTZWVrYWJsZTogYm9vbGVhbjtcblx0LyoqIElmIHRoZSB0cmFjayBpcyBhIHN0cmVhbS4uICovXG5cdHJlYWRvbmx5IGlzU3RyZWFtOiBib29sZWFuO1xuXHQvKiogVGhlIHVyaSBvZiB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IHVyaTogc3RyaW5nO1xuXHQvKiogVGhlIHRodW1ibmFpbCBvZiB0aGUgdHJhY2sgb3IgbnVsbCBpZiBpdCdzIGEgdW5zdXBwb3J0ZWQgc291cmNlLiAqL1xuXHRyZWFkb25seSB0aHVtYm5haWw6IHN0cmluZyB8IG51bGw7XG5cdC8qKiBUaGUgdXNlciB0aGF0IHJlcXVlc3RlZCB0aGUgdHJhY2suICovXG5cdHJlYWRvbmx5IHJlcXVlc3RlcjogVXNlciB8IENsaWVudFVzZXIgfCBudWxsO1xuXHQvKiogRGlzcGxheXMgdGhlIHRyYWNrIHRodW1ibmFpbCB3aXRoIG9wdGlvbmFsIHNpemUgb3IgbnVsbCBpZiBpdCdzIGEgdW5zdXBwb3J0ZWQgc291cmNlLiAqL1xuXHRkaXNwbGF5VGh1bWJuYWlsKHNpemU/OiBTaXplcyk6IHN0cmluZztcblx0LyoqIEFkZGl0aW9uYWwgdHJhY2sgaW5mbyBwcm92aWRlZCBieSBwbHVnaW5zLiAqL1xuXHRwbHVnaW5JbmZvOiBUcmFja1BsdWdpbkluZm87XG5cdC8qKiBBZGQgeW91ciBvd24gZGF0YSB0byB0aGUgdHJhY2suICovXG5cdGN1c3RvbURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrUGx1Z2luSW5mbyB7XG5cdGFsYnVtTmFtZT86IHN0cmluZztcblx0YWxidW1Vcmw/OiBzdHJpbmc7XG5cdGFydGlzdEFydHdvcmtVcmw/OiBzdHJpbmc7XG5cdGFydGlzdFVybD86IHN0cmluZztcblx0aXNQcmV2aWV3Pzogc3RyaW5nO1xuXHRwcmV2aWV3VXJsPzogc3RyaW5nO1xufVxuXG4vKiogVW5yZXNvbHZlZCB0cmFja3MgY2FuJ3QgYmUgcGxheWVkIG5vcm1hbGx5LCB0aGV5IHdpbGwgcmVzb2x2ZSBiZWZvcmUgcGxheWluZyBpbnRvIGEgVHJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIFVucmVzb2x2ZWRUcmFjayBleHRlbmRzIFBhcnRpYWw8VHJhY2s+IHtcblx0LyoqIFRoZSB0aXRsZSB0byBzZWFyY2ggYWdhaW5zdC4gKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqIFRoZSBhdXRob3IgdG8gc2VhcmNoIGFnYWluc3QuICovXG5cdGF1dGhvcj86IHN0cmluZztcblx0LyoqIFRoZSBkdXJhdGlvbiB0byBzZWFyY2ggd2l0aGluIDE1MDAgbWlsbGlzZWNvbmRzIG9mIHRoZSByZXN1bHRzIGZyb20gWW91VHViZS4gKi9cblx0ZHVyYXRpb24/OiBudW1iZXI7XG5cdC8qKiBSZXNvbHZlcyBpbnRvIGEgVHJhY2suICovXG5cdHJlc29sdmUoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5T3B0aW9ucyB7XG5cdC8qKiBUaGUgcG9zaXRpb24gdG8gc3RhcnQgdGhlIHRyYWNrLiAqL1xuXHRyZWFkb25seSBzdGFydFRpbWU/OiBudW1iZXI7XG5cdC8qKiBUaGUgcG9zaXRpb24gdG8gZW5kIHRoZSB0cmFjay4gKi9cblx0cmVhZG9ubHkgZW5kVGltZT86IG51bWJlcjtcblx0LyoqIFdoZXRoZXIgdG8gbm90IHJlcGxhY2UgdGhlIHRyYWNrIGlmIGEgcGxheSBwYXlsb2FkIGlzIHNlbnQuICovXG5cdHJlYWRvbmx5IG5vUmVwbGFjZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXF1YWxpemVyQmFuZCB7XG5cdC8qKiBUaGUgYmFuZCBudW1iZXIgYmVpbmcgMCB0byAxNC4gKi9cblx0YmFuZDogbnVtYmVyO1xuXHQvKiogVGhlIGdhaW4gYW1vdW50IGJlaW5nIC0wLjI1IHRvIDEuMDAsIDAuMjUgYmVpbmcgZG91YmxlLiAqL1xuXHRnYWluOiBudW1iZXI7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztB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
|