@getopenpay/openpay-js-react 0.5.18 → 0.5.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-HFr7ikKe-BkkXR00c.js → Resource-C6cGOqfG-GUFlXggW.js} +2 -2
  3. package/dist/SimpleSpanProcessor-WLy7ltpB-DdKkMf93.js +910 -0
  4. package/dist/detect-resources-B1jZ68eL-2xPSgjJ-.js +862 -0
  5. package/dist/diag-api-C_zKi0b7-Cy5P_A2d.js +6 -0
  6. package/dist/{index-DSODCre4-DXZ7TtVV.js → index-5VCdwOZo-BwuunTJ2.js} +2 -2
  7. package/dist/index-8_12HQkl.js +10119 -0
  8. package/dist/{index-BbMdoJGB-BBMW7CtA.js → index-Aim12b6v-D9AkYJUS.js} +8 -8
  9. package/dist/index-CHxj5IVb-DMRerDDE.js +1012 -0
  10. package/dist/{index-DAjwRG06-CTho4gsn.js → index-DRzb8eqM-BfJPwT6F.js} +2 -2
  11. package/dist/{index-B6cgwvwx-DMnT8m0d.js → index-DSbNf0Ed-yJ6DgZE_.js} +2 -2
  12. package/dist/{index-DHMgbwEW-n9BBoeYI.js → index-LKn6EYK5-zL_3q9KW.js} +28 -28
  13. package/dist/{index-D8qGXAcL-4qcWCIXD.js → index-_3Bhy0h1-DRE21ZBh.js} +14 -14
  14. package/dist/{index-BZ0BoexZ-CUX_5xZE.js → index-bEOv-Odd-DT2DC_zu.js} +2 -2
  15. package/dist/{index-DfiR_U2V-CFfpYe6F.js → index-jiv-Wh_6-ATnTXKMm.js} +5 -5
  16. package/dist/index.d.ts +30 -0
  17. package/dist/index.js +7 -7
  18. package/dist/{metrics-api-C4CAQNbw-C50jWnQn.js → metrics-api-BI2914Hx-C47GKUW7.js} +14 -14
  19. package/dist/suppress-tracing-B9EJ4b8o-GWLpgAiH.js +17 -0
  20. package/dist/{url-C62Jr65Y-DvJVmGJM.js → url-vsBaRxOk-CeKQIRAf.js} +49 -49
  21. package/dist/{utils-OFrrLDTb-BD_ZQVMg.js → utils-8pUbkedA-DPLtuLg1.js} +2 -2
  22. package/dist/{utils-CBe9LQu0-rzqmNwAr.js → utils-Drso8Pe_-Be9oT7I0.js} +11 -11
  23. package/package.json +1 -1
  24. package/dist/SimpleSpanProcessor-CXkHxvZK-CtgJXZxx.js +0 -910
  25. package/dist/detect-resources-CrwG-OzH-B3ZitYTN.js +0 -862
  26. package/dist/diag-api-CjpUap0H-CHa67IYb.js +0 -6
  27. package/dist/index-BBPNNneM-kIn-dVHD.js +0 -1012
  28. package/dist/index-Du2j-1vJ.js +0 -9660
  29. package/dist/suppress-tracing-BiiEFr8F-BsLEY_uR.js +0 -17
@@ -1,910 +0,0 @@
1
- import { Y as b, x as _, T as E, p as nt, r as ot, c as it, P as st, g as at } from "./index-Du2j-1vJ.js";
2
- import { r as l } from "./diag-api-CjpUap0H-CHa67IYb.js";
3
- import { dD as j, y as ut, dE as V, dF as ct, dG as I, p as pt, O as x, dH as lt, dI as ht, at as N, av as M, dJ as dt, au as ft } from "./url-C62Jr65Y-DvJVmGJM.js";
4
- import { E as f, O as P, v as _t, V as mt, Z as vt, f as W, S as St, n as yt, Q as C, l as Q, c as gt, d as Et, p as Tt, a as bt, b as v, e as Lt } from "./index-BBPNNneM-kIn-dVHD.js";
5
- import { u as Pt, a as wt } from "./suppress-tracing-BiiEFr8F-BsLEY_uR.js";
6
- import { R as H } from "./Resource-HFr7ikKe-BkkXR00c.js";
7
- import { a as U } from "./ExportResult-BacsqwKA-wgTHEn_9.js";
8
- var xt = "exception", B = function() {
9
- return B = Object.assign || function(e) {
10
- for (var t, r = 1, n = arguments.length; r < n; r++) {
11
- t = arguments[r];
12
- for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
13
- }
14
- return e;
15
- }, B.apply(this, arguments);
16
- }, At = function(e) {
17
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
18
- if (r) return r.call(e);
19
- if (e && typeof e.length == "number") return {
20
- next: function() {
21
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
22
- }
23
- };
24
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
25
- }, X = function(e, t) {
26
- var r = typeof Symbol == "function" && e[Symbol.iterator];
27
- if (!r) return e;
28
- var n = r.call(e), i, o = [], s;
29
- try {
30
- for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
31
- } catch (a) {
32
- s = { error: a };
33
- } finally {
34
- try {
35
- i && !i.done && (r = n.return) && r.call(n);
36
- } finally {
37
- if (s) throw s.error;
38
- }
39
- }
40
- return o;
41
- }, Ot = function(e, t, r) {
42
- if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
43
- (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
44
- return e.concat(o || Array.prototype.slice.call(t));
45
- }, Ct = (
46
- /** @class */
47
- (function() {
48
- function e(t, r, n, i, o, s, a, c, u, p) {
49
- a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
50
- code: it.UNSET
51
- }, this.endTime = [0, 0], this._ended = !1, this._duration = [-1, -1], this.name = n, this._spanContext = i, this.parentSpanId = s, this.kind = o, this.links = a;
52
- var h = Date.now();
53
- this._performanceStartTime = I.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = c != null, this.startTime = this._getTime(c ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, p != null && this.setAttributes(p), this._spanProcessor = t.getActiveSpanProcessor(), this._spanProcessor.onStart(this, r);
54
- }
55
- return e.prototype.spanContext = function() {
56
- return this._spanContext;
57
- }, e.prototype.setAttribute = function(t, r) {
58
- return r == null || this._isSpanEnded() ? this : t.length === 0 ? (l.warn("Invalid attribute key: " + t), this) : bt(r) ? Object.keys(this.attributes).length >= this._spanLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, t) ? (this._droppedAttributesCount++, this) : (this.attributes[t] = this._truncateToSize(r), this) : (l.warn("Invalid attribute value set for key: " + t), this);
59
- }, e.prototype.setAttributes = function(t) {
60
- var r, n;
61
- try {
62
- for (var i = At(Object.entries(t)), o = i.next(); !o.done; o = i.next()) {
63
- var s = X(o.value, 2), a = s[0], c = s[1];
64
- this.setAttribute(a, c);
65
- }
66
- } catch (u) {
67
- r = { error: u };
68
- } finally {
69
- try {
70
- o && !o.done && (n = i.return) && n.call(i);
71
- } finally {
72
- if (r) throw r.error;
73
- }
74
- }
75
- return this;
76
- }, e.prototype.addEvent = function(t, r, n) {
77
- if (this._isSpanEnded())
78
- return this;
79
- if (this._spanLimits.eventCountLimit === 0)
80
- return l.warn("No events allowed."), this._droppedEventsCount++, this;
81
- this.events.length >= this._spanLimits.eventCountLimit && (this._droppedEventsCount === 0 && l.debug("Dropping extra events."), this.events.shift(), this._droppedEventsCount++), V(r) && (V(n) || (n = r), r = void 0);
82
- var i = C(r);
83
- return this.events.push({
84
- name: t,
85
- attributes: i,
86
- time: this._getTime(n),
87
- droppedAttributesCount: 0
88
- }), this;
89
- }, e.prototype.addLink = function(t) {
90
- return this.links.push(t), this;
91
- }, e.prototype.addLinks = function(t) {
92
- var r;
93
- return (r = this.links).push.apply(r, Ot([], X(t), !1)), this;
94
- }, e.prototype.setStatus = function(t) {
95
- return this._isSpanEnded() ? this : (this.status = B({}, t), this.status.message != null && typeof t.message != "string" && (l.warn("Dropping invalid status.message of type '" + typeof t.message + "', expected 'string'"), delete this.status.message), this);
96
- }, e.prototype.updateName = function(t) {
97
- return this._isSpanEnded() ? this : (this.name = t, this);
98
- }, e.prototype.end = function(t) {
99
- if (this._isSpanEnded()) {
100
- l.error(this.name + " " + this._spanContext.traceId + "-" + this._spanContext.spanId + " - You can only call end() on a span once.");
101
- return;
102
- }
103
- this._ended = !0, this.endTime = this._getTime(t), this._duration = ct(this.startTime, this.endTime), this._duration[0] < 0 && (l.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime), this.endTime = this.startTime.slice(), this._duration = [0, 0]), this._droppedEventsCount > 0 && l.warn("Dropped " + this._droppedEventsCount + " events because eventCountLimit reached"), this._spanProcessor.onEnd(this);
104
- }, e.prototype._getTime = function(t) {
105
- if (typeof t == "number" && t <= I.now())
106
- return pt(t + this._performanceOffset);
107
- if (typeof t == "number")
108
- return x(t);
109
- if (t instanceof Date)
110
- return x(t.getTime());
111
- if (lt(t))
112
- return t;
113
- if (this._startTimeProvided)
114
- return x(Date.now());
115
- var r = I.now() - this._performanceStartTime;
116
- return ht(this.startTime, x(r));
117
- }, e.prototype.isRecording = function() {
118
- return this._ended === !1;
119
- }, e.prototype.recordException = function(t, r) {
120
- var n = {};
121
- typeof t == "string" ? n[M] = t : t && (t.code ? n[N] = t.code.toString() : t.name && (n[N] = t.name), t.message && (n[M] = t.message), t.stack && (n[ft] = t.stack)), n[N] || n[M] ? this.addEvent(xt, n, r) : l.warn("Failed to record an exception " + t);
122
- }, Object.defineProperty(e.prototype, "duration", {
123
- get: function() {
124
- return this._duration;
125
- },
126
- enumerable: !1,
127
- configurable: !0
128
- }), Object.defineProperty(e.prototype, "ended", {
129
- get: function() {
130
- return this._ended;
131
- },
132
- enumerable: !1,
133
- configurable: !0
134
- }), Object.defineProperty(e.prototype, "droppedAttributesCount", {
135
- get: function() {
136
- return this._droppedAttributesCount;
137
- },
138
- enumerable: !1,
139
- configurable: !0
140
- }), Object.defineProperty(e.prototype, "droppedEventsCount", {
141
- get: function() {
142
- return this._droppedEventsCount;
143
- },
144
- enumerable: !1,
145
- configurable: !0
146
- }), Object.defineProperty(e.prototype, "droppedLinksCount", {
147
- get: function() {
148
- return this._droppedLinksCount;
149
- },
150
- enumerable: !1,
151
- configurable: !0
152
- }), e.prototype._isSpanEnded = function() {
153
- return this._ended && l.warn("Can not execute the operation on ended Span {traceId: " + this._spanContext.traceId + ", spanId: " + this._spanContext.spanId + "}"), this._ended;
154
- }, e.prototype._truncateToLimitUtil = function(t, r) {
155
- return t.length <= r ? t : t.substring(0, r);
156
- }, e.prototype._truncateToSize = function(t) {
157
- var r = this, n = this._attributeValueLengthLimit;
158
- return n <= 0 ? (l.warn("Attribute value limit must be positive, got " + n), t) : typeof t == "string" ? this._truncateToLimitUtil(t, n) : Array.isArray(t) ? t.map(function(i) {
159
- return typeof i == "string" ? r._truncateToLimitUtil(i, n) : i;
160
- }) : t;
161
- }, e;
162
- })()
163
- ), L;
164
- (function(e) {
165
- e[e.NOT_RECORD = 0] = "NOT_RECORD", e[e.RECORD = 1] = "RECORD", e[e.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED";
166
- })(L || (L = {}));
167
- var R = (
168
- /** @class */
169
- (function() {
170
- function e() {
171
- }
172
- return e.prototype.shouldSample = function() {
173
- return {
174
- decision: L.NOT_RECORD
175
- };
176
- }, e.prototype.toString = function() {
177
- return "AlwaysOffSampler";
178
- }, e;
179
- })()
180
- ), T = (
181
- /** @class */
182
- (function() {
183
- function e() {
184
- }
185
- return e.prototype.shouldSample = function() {
186
- return {
187
- decision: L.RECORD_AND_SAMPLED
188
- };
189
- }, e.prototype.toString = function() {
190
- return "AlwaysOnSampler";
191
- }, e;
192
- })()
193
- ), D = (
194
- /** @class */
195
- (function() {
196
- function e(t) {
197
- var r, n, i, o;
198
- this._root = t.root, this._root || (f(new Error("ParentBasedSampler must have a root sampler configured")), this._root = new T()), this._remoteParentSampled = (r = t.remoteParentSampled) !== null && r !== void 0 ? r : new T(), this._remoteParentNotSampled = (n = t.remoteParentNotSampled) !== null && n !== void 0 ? n : new R(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new R();
199
- }
200
- return e.prototype.shouldSample = function(t, r, n, i, o, s) {
201
- var a = _.getSpanContext(t);
202
- return !a || !st(a) ? this._root.shouldSample(t, r, n, i, o, s) : a.isRemote ? a.traceFlags & b.SAMPLED ? this._remoteParentSampled.shouldSample(t, r, n, i, o, s) : this._remoteParentNotSampled.shouldSample(t, r, n, i, o, s) : a.traceFlags & b.SAMPLED ? this._localParentSampled.shouldSample(t, r, n, i, o, s) : this._localParentNotSampled.shouldSample(t, r, n, i, o, s);
203
- }, e.prototype.toString = function() {
204
- return "ParentBased{root=" + this._root.toString() + ", remoteParentSampled=" + this._remoteParentSampled.toString() + ", remoteParentNotSampled=" + this._remoteParentNotSampled.toString() + ", localParentSampled=" + this._localParentSampled.toString() + ", localParentNotSampled=" + this._localParentNotSampled.toString() + "}";
205
- }, e;
206
- })()
207
- ), q = (
208
- /** @class */
209
- (function() {
210
- function e(t) {
211
- t === void 0 && (t = 0), this._ratio = t, this._ratio = this._normalize(t), this._upperBound = Math.floor(this._ratio * 4294967295);
212
- }
213
- return e.prototype.shouldSample = function(t, r) {
214
- return {
215
- decision: at(r) && this._accumulate(r) < this._upperBound ? L.RECORD_AND_SAMPLED : L.NOT_RECORD
216
- };
217
- }, e.prototype.toString = function() {
218
- return "TraceIdRatioBased{" + this._ratio + "}";
219
- }, e.prototype._normalize = function(t) {
220
- return typeof t != "number" || isNaN(t) ? 0 : t >= 1 ? 1 : t <= 0 ? 0 : t;
221
- }, e.prototype._accumulate = function(t) {
222
- for (var r = 0, n = 0; n < t.length / 8; n++) {
223
- var i = n * 8, o = parseInt(t.slice(i, i + 8), 16);
224
- r = (r ^ o) >>> 0;
225
- }
226
- return r;
227
- }, e;
228
- })()
229
- ), Rt = v.AlwaysOn, g = 1;
230
- function J() {
231
- var e = P();
232
- return {
233
- sampler: $(e),
234
- forceFlushTimeoutMillis: 3e4,
235
- generalLimits: {
236
- attributeValueLengthLimit: e.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
237
- attributeCountLimit: e.OTEL_ATTRIBUTE_COUNT_LIMIT
238
- },
239
- spanLimits: {
240
- attributeValueLengthLimit: e.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
241
- attributeCountLimit: e.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
242
- linkCountLimit: e.OTEL_SPAN_LINK_COUNT_LIMIT,
243
- eventCountLimit: e.OTEL_SPAN_EVENT_COUNT_LIMIT,
244
- attributePerEventCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
245
- attributePerLinkCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
246
- },
247
- mergeResourceWithDefaults: !0
248
- };
249
- }
250
- function $(e) {
251
- switch (e === void 0 && (e = P()), e.OTEL_TRACES_SAMPLER) {
252
- case v.AlwaysOn:
253
- return new T();
254
- case v.AlwaysOff:
255
- return new R();
256
- case v.ParentBasedAlwaysOn:
257
- return new D({
258
- root: new T()
259
- });
260
- case v.ParentBasedAlwaysOff:
261
- return new D({
262
- root: new R()
263
- });
264
- case v.TraceIdRatio:
265
- return new q(Y(e));
266
- case v.ParentBasedTraceIdRatio:
267
- return new D({
268
- root: new q(Y(e))
269
- });
270
- default:
271
- return l.error('OTEL_TRACES_SAMPLER value "' + e.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + Rt + '".'), new T();
272
- }
273
- }
274
- function Y(e) {
275
- if (e.OTEL_TRACES_SAMPLER_ARG === void 0 || e.OTEL_TRACES_SAMPLER_ARG === "")
276
- return l.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + g + "."), g;
277
- var t = Number(e.OTEL_TRACES_SAMPLER_ARG);
278
- return isNaN(t) ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is invalid, defaulting to " + g + "."), g) : t < 0 || t > 1 ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is out of range ([0..1]), defaulting to " + g + "."), g) : t;
279
- }
280
- function It(e) {
281
- var t = {
282
- sampler: $()
283
- }, r = J(), n = Object.assign({}, r, t, e);
284
- return n.generalLimits = Object.assign({}, r.generalLimits, e.generalLimits || {}), n.spanLimits = Object.assign({}, r.spanLimits, e.spanLimits || {}), n;
285
- }
286
- function Nt(e) {
287
- var t, r, n, i, o, s, a, c, u, p, h, d, y = Object.assign({}, e.spanLimits), m = gt();
288
- return y.attributeCountLimit = (s = (o = (i = (r = (t = e.spanLimits) === null || t === void 0 ? void 0 : t.attributeCountLimit) !== null && r !== void 0 ? r : (n = e.generalLimits) === null || n === void 0 ? void 0 : n.attributeCountLimit) !== null && i !== void 0 ? i : m.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) !== null && o !== void 0 ? o : m.OTEL_ATTRIBUTE_COUNT_LIMIT) !== null && s !== void 0 ? s : Et, y.attributeValueLengthLimit = (d = (h = (p = (c = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && c !== void 0 ? c : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && p !== void 0 ? p : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : Tt, Object.assign({}, e, { spanLimits: y });
289
- }
290
- var Mt = (
291
- /** @class */
292
- (function() {
293
- function e(t, r) {
294
- this._exporter = t, this._isExporting = !1, this._finishedSpans = [], this._droppedSpansCount = 0;
295
- var n = P();
296
- this._maxExportBatchSize = typeof r?.maxExportBatchSize == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof r?.maxQueueSize == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof r?.scheduledDelayMillis == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof r?.exportTimeoutMillis == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new W(this._shutdown, this), this._maxExportBatchSize > this._maxQueueSize && (l.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"), this._maxExportBatchSize = this._maxQueueSize);
297
- }
298
- return e.prototype.forceFlush = function() {
299
- return this._shutdownOnce.isCalled ? this._shutdownOnce.promise : this._flushAll();
300
- }, e.prototype.onStart = function(t, r) {
301
- }, e.prototype.onEnd = function(t) {
302
- this._shutdownOnce.isCalled || (t.spanContext().traceFlags & b.SAMPLED) !== 0 && this._addToBuffer(t);
303
- }, e.prototype.shutdown = function() {
304
- return this._shutdownOnce.call();
305
- }, e.prototype._shutdown = function() {
306
- var t = this;
307
- return Promise.resolve().then(function() {
308
- return t.onShutdown();
309
- }).then(function() {
310
- return t._flushAll();
311
- }).then(function() {
312
- return t._exporter.shutdown();
313
- });
314
- }, e.prototype._addToBuffer = function(t) {
315
- if (this._finishedSpans.length >= this._maxQueueSize) {
316
- this._droppedSpansCount === 0 && l.debug("maxQueueSize reached, dropping spans"), this._droppedSpansCount++;
317
- return;
318
- }
319
- this._droppedSpansCount > 0 && (l.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached"), this._droppedSpansCount = 0), this._finishedSpans.push(t), this._maybeStartTimer();
320
- }, e.prototype._flushAll = function() {
321
- var t = this;
322
- return new Promise(function(r, n) {
323
- for (var i = [], o = Math.ceil(t._finishedSpans.length / t._maxExportBatchSize), s = 0, a = o; s < a; s++)
324
- i.push(t._flushOneBatch());
325
- Promise.all(i).then(function() {
326
- r();
327
- }).catch(n);
328
- });
329
- }, e.prototype._flushOneBatch = function() {
330
- var t = this;
331
- return this._clearTimer(), this._finishedSpans.length === 0 ? Promise.resolve() : new Promise(function(r, n) {
332
- var i = setTimeout(function() {
333
- n(new Error("Timeout"));
334
- }, t._exportTimeoutMillis);
335
- E.with(Pt(E.active()), function() {
336
- var o;
337
- t._finishedSpans.length <= t._maxExportBatchSize ? (o = t._finishedSpans, t._finishedSpans = []) : o = t._finishedSpans.splice(0, t._maxExportBatchSize);
338
- for (var s = function() {
339
- return t._exporter.export(o, function(h) {
340
- var d;
341
- clearTimeout(i), h.code === U.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
342
- });
343
- }, a = null, c = 0, u = o.length; c < u; c++) {
344
- var p = o[c];
345
- p.resource.asyncAttributesPending && p.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(p.resource.waitForAsyncAttributes()));
346
- }
347
- a === null ? s() : Promise.all(a).then(s, function(h) {
348
- f(h), n(h);
349
- });
350
- });
351
- });
352
- }, e.prototype._maybeStartTimer = function() {
353
- var t = this;
354
- if (!this._isExporting) {
355
- var r = function() {
356
- t._isExporting = !0, t._flushOneBatch().finally(function() {
357
- t._isExporting = !1, t._finishedSpans.length > 0 && (t._clearTimer(), t._maybeStartTimer());
358
- }).catch(function(n) {
359
- t._isExporting = !1, f(n);
360
- });
361
- };
362
- if (this._finishedSpans.length >= this._maxExportBatchSize)
363
- return r();
364
- this._timer === void 0 && (this._timer = setTimeout(function() {
365
- return r();
366
- }, this._scheduledDelayMillis), St(this._timer));
367
- }
368
- }, e.prototype._clearTimer = function() {
369
- this._timer !== void 0 && (clearTimeout(this._timer), this._timer = void 0);
370
- }, e;
371
- })()
372
- ), Dt = /* @__PURE__ */ (function() {
373
- var e = function(t, r) {
374
- return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, i) {
375
- n.__proto__ = i;
376
- } || function(n, i) {
377
- for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o]);
378
- }, e(t, r);
379
- };
380
- return function(t, r) {
381
- if (typeof r != "function" && r !== null)
382
- throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
383
- e(t, r);
384
- function n() {
385
- this.constructor = t;
386
- }
387
- t.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype, new n());
388
- };
389
- })(), Bt = (
390
- /** @class */
391
- (function(e) {
392
- Dt(t, e);
393
- function t(r, n) {
394
- var i = e.call(this, r, n) || this;
395
- return i.onInit(n), i;
396
- }
397
- return t.prototype.onInit = function(r) {
398
- var n = this;
399
- r?.disableAutoFlushOnDocumentHide !== !0 && typeof document < "u" && (this._visibilityChangeListener = function() {
400
- document.visibilityState === "hidden" && n.forceFlush().catch(function(i) {
401
- f(i);
402
- });
403
- }, this._pageHideListener = function() {
404
- n.forceFlush().catch(function(i) {
405
- f(i);
406
- });
407
- }, document.addEventListener("visibilitychange", this._visibilityChangeListener), document.addEventListener("pagehide", this._pageHideListener));
408
- }, t.prototype.onShutdown = function() {
409
- typeof document < "u" && (this._visibilityChangeListener && document.removeEventListener("visibilitychange", this._visibilityChangeListener), this._pageHideListener && document.removeEventListener("pagehide", this._pageHideListener));
410
- }, t;
411
- })(Mt)
412
- ), Ut = 8, Ft = 16, kt = (
413
- /** @class */
414
- /* @__PURE__ */ (function() {
415
- function e() {
416
- this.generateTraceId = Z(Ft), this.generateSpanId = Z(Ut);
417
- }
418
- return e;
419
- })()
420
- ), A = Array(32);
421
- function Z(e) {
422
- return function() {
423
- for (var t = 0; t < e * 2; t++)
424
- A[t] = Math.floor(Math.random() * 16) + 48, A[t] >= 58 && (A[t] += 39);
425
- return String.fromCharCode.apply(null, A.slice(0, e * 2));
426
- };
427
- }
428
- var zt = (
429
- /** @class */
430
- (function() {
431
- function e(t, r, n) {
432
- this._tracerProvider = n;
433
- var i = It(r);
434
- this._sampler = i.sampler, this._generalLimits = i.generalLimits, this._spanLimits = i.spanLimits, this._idGenerator = r.idGenerator || new kt(), this.resource = n.resource, this.instrumentationLibrary = t;
435
- }
436
- return e.prototype.startSpan = function(t, r, n) {
437
- var i, o, s;
438
- r === void 0 && (r = {}), n === void 0 && (n = E.active()), r.root && (n = _.deleteSpan(n));
439
- var a = _.getSpan(n);
440
- if (wt(n)) {
441
- l.debug("Instrumentation suppressed, returning Noop Span");
442
- var c = _.wrapSpanContext(nt);
443
- return c;
444
- }
445
- var u = a?.spanContext(), p = this._idGenerator.generateSpanId(), h, d, y;
446
- !u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, y = u.spanId);
447
- var m = (i = r.kind) !== null && i !== void 0 ? i : ot.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
448
- return {
449
- context: G.context,
450
- attributes: C(G.attributes)
451
- };
452
- }), k = C(r.attributes), w = this._sampler.shouldSample(n, h, t, m, k, F);
453
- d = (s = w.traceState) !== null && s !== void 0 ? s : d;
454
- var tt = w.decision === Q.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: p, traceFlags: tt, traceState: d };
455
- if (w.decision === Q.NOT_RECORD) {
456
- l.debug("Recording is off, propagating context in a non-recording span");
457
- var c = _.wrapSpanContext(z);
458
- return c;
459
- }
460
- var et = C(Object.assign(k, w.attributes)), rt = new Ct(this, n, t, z, m, y, F, r.startTime, void 0, et);
461
- return rt;
462
- }, e.prototype.startActiveSpan = function(t, r, n, i) {
463
- var o, s, a;
464
- if (!(arguments.length < 2)) {
465
- arguments.length === 2 ? a = r : arguments.length === 3 ? (o = r, a = n) : (o = r, s = n, a = i);
466
- var c = s ?? E.active(), u = this.startSpan(t, o, c), p = _.setSpan(c, u);
467
- return E.with(p, a, void 0, u);
468
- }
469
- }, e.prototype.getGeneralLimits = function() {
470
- return this._generalLimits;
471
- }, e.prototype.getSpanLimits = function() {
472
- return this._spanLimits;
473
- }, e.prototype.getActiveSpanProcessor = function() {
474
- return this._tracerProvider.getActiveSpanProcessor();
475
- }, e;
476
- })()
477
- ), O = function(e) {
478
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
479
- if (r) return r.call(e);
480
- if (e && typeof e.length == "number") return {
481
- next: function() {
482
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
483
- }
484
- };
485
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
486
- }, K = (
487
- /** @class */
488
- (function() {
489
- function e(t) {
490
- this._spanProcessors = t;
491
- }
492
- return e.prototype.forceFlush = function() {
493
- var t, r, n = [];
494
- try {
495
- for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
496
- var s = o.value;
497
- n.push(s.forceFlush());
498
- }
499
- } catch (a) {
500
- t = { error: a };
501
- } finally {
502
- try {
503
- o && !o.done && (r = i.return) && r.call(i);
504
- } finally {
505
- if (t) throw t.error;
506
- }
507
- }
508
- return new Promise(function(a) {
509
- Promise.all(n).then(function() {
510
- a();
511
- }).catch(function(c) {
512
- f(c || new Error("MultiSpanProcessor: forceFlush failed")), a();
513
- });
514
- });
515
- }, e.prototype.onStart = function(t, r) {
516
- var n, i;
517
- try {
518
- for (var o = O(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
519
- var a = s.value;
520
- a.onStart(t, r);
521
- }
522
- } catch (c) {
523
- n = { error: c };
524
- } finally {
525
- try {
526
- s && !s.done && (i = o.return) && i.call(o);
527
- } finally {
528
- if (n) throw n.error;
529
- }
530
- }
531
- }, e.prototype.onEnd = function(t) {
532
- var r, n;
533
- try {
534
- for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
535
- var s = o.value;
536
- s.onEnd(t);
537
- }
538
- } catch (a) {
539
- r = { error: a };
540
- } finally {
541
- try {
542
- o && !o.done && (n = i.return) && n.call(i);
543
- } finally {
544
- if (r) throw r.error;
545
- }
546
- }
547
- }, e.prototype.shutdown = function() {
548
- var t, r, n = [];
549
- try {
550
- for (var i = O(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
551
- var s = o.value;
552
- n.push(s.shutdown());
553
- }
554
- } catch (a) {
555
- t = { error: a };
556
- } finally {
557
- try {
558
- o && !o.done && (r = i.return) && r.call(i);
559
- } finally {
560
- if (t) throw t.error;
561
- }
562
- }
563
- return new Promise(function(a, c) {
564
- Promise.all(n).then(function() {
565
- a();
566
- }, c);
567
- });
568
- }, e;
569
- })()
570
- ), Gt = (
571
- /** @class */
572
- (function() {
573
- function e() {
574
- }
575
- return e.prototype.onStart = function(t, r) {
576
- }, e.prototype.onEnd = function(t) {
577
- }, e.prototype.shutdown = function() {
578
- return Promise.resolve();
579
- }, e.prototype.forceFlush = function() {
580
- return Promise.resolve();
581
- }, e;
582
- })()
583
- ), jt = function(e, t) {
584
- var r = typeof Symbol == "function" && e[Symbol.iterator];
585
- if (!r) return e;
586
- var n = r.call(e), i, o = [], s;
587
- try {
588
- for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
589
- } catch (a) {
590
- s = { error: a };
591
- } finally {
592
- try {
593
- i && !i.done && (r = n.return) && r.call(n);
594
- } finally {
595
- if (s) throw s.error;
596
- }
597
- }
598
- return o;
599
- }, Vt = function(e, t, r) {
600
- if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
601
- (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
602
- return e.concat(o || Array.prototype.slice.call(t));
603
- }, S;
604
- (function(e) {
605
- e[e.resolved = 0] = "resolved", e[e.timeout = 1] = "timeout", e[e.error = 2] = "error", e[e.unresolved = 3] = "unresolved";
606
- })(S || (S = {}));
607
- var te = (
608
- /** @class */
609
- (function() {
610
- function e(t) {
611
- t === void 0 && (t = {});
612
- var r, n;
613
- this._registeredSpanProcessors = [], this._tracers = /* @__PURE__ */ new Map();
614
- var i = yt({}, J(), Nt(t));
615
- if (this.resource = (r = i.resource) !== null && r !== void 0 ? r : H.empty(), i.mergeResourceWithDefaults && (this.resource = H.default().merge(this.resource)), this._config = Object.assign({}, i, {
616
- resource: this.resource
617
- }), !((n = t.spanProcessors) === null || n === void 0) && n.length)
618
- this._registeredSpanProcessors = Vt([], jt(t.spanProcessors), !1), this.activeSpanProcessor = new K(this._registeredSpanProcessors);
619
- else {
620
- var o = this._buildExporterFromEnv();
621
- if (o !== void 0) {
622
- var s = new Bt(o);
623
- this.activeSpanProcessor = s;
624
- } else
625
- this.activeSpanProcessor = new Gt();
626
- }
627
- }
628
- return e.prototype.getTracer = function(t, r, n) {
629
- var i = t + "@" + (r || "") + ":" + (n?.schemaUrl || "");
630
- return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n?.schemaUrl }, this._config, this)), this._tracers.get(i);
631
- }, e.prototype.addSpanProcessor = function(t) {
632
- this._registeredSpanProcessors.length === 0 && this.activeSpanProcessor.shutdown().catch(function(r) {
633
- return l.error("Error while trying to shutdown current span processor", r);
634
- }), this._registeredSpanProcessors.push(t), this.activeSpanProcessor = new K(this._registeredSpanProcessors);
635
- }, e.prototype.getActiveSpanProcessor = function() {
636
- return this.activeSpanProcessor;
637
- }, e.prototype.register = function(t) {
638
- t === void 0 && (t = {}), _.setGlobalTracerProvider(this), t.propagator === void 0 && (t.propagator = this._buildPropagatorFromEnv()), t.contextManager && E.setGlobalContextManager(t.contextManager), t.propagator && ut.setGlobalPropagator(t.propagator);
639
- }, e.prototype.forceFlush = function() {
640
- var t = this._config.forceFlushTimeoutMillis, r = this._registeredSpanProcessors.map(function(n) {
641
- return new Promise(function(i) {
642
- var o, s = setTimeout(function() {
643
- i(new Error("Span processor did not completed within timeout period of " + t + " ms")), o = S.timeout;
644
- }, t);
645
- n.forceFlush().then(function() {
646
- clearTimeout(s), o !== S.timeout && (o = S.resolved, i(o));
647
- }).catch(function(a) {
648
- clearTimeout(s), o = S.error, i(a);
649
- });
650
- });
651
- });
652
- return new Promise(function(n, i) {
653
- Promise.all(r).then(function(o) {
654
- var s = o.filter(function(a) {
655
- return a !== S.resolved;
656
- });
657
- s.length > 0 ? i(s) : n();
658
- }).catch(function(o) {
659
- return i([o]);
660
- });
661
- });
662
- }, e.prototype.shutdown = function() {
663
- return this.activeSpanProcessor.shutdown();
664
- }, e.prototype._getPropagator = function(t) {
665
- var r;
666
- return (r = this.constructor._registeredPropagators.get(t)) === null || r === void 0 ? void 0 : r();
667
- }, e.prototype._getSpanExporter = function(t) {
668
- var r;
669
- return (r = this.constructor._registeredExporters.get(t)) === null || r === void 0 ? void 0 : r();
670
- }, e.prototype._buildPropagatorFromEnv = function() {
671
- var t = this, r = Array.from(new Set(P().OTEL_PROPAGATORS)), n = r.map(function(o) {
672
- var s = t._getPropagator(o);
673
- return s || l.warn('Propagator "' + o + '" requested through environment variable is unavailable.'), s;
674
- }), i = n.reduce(function(o, s) {
675
- return s && o.push(s), o;
676
- }, []);
677
- if (i.length !== 0)
678
- return r.length === 1 ? i[0] : new _t({
679
- propagators: i
680
- });
681
- }, e.prototype._buildExporterFromEnv = function() {
682
- var t = P().OTEL_TRACES_EXPORTER;
683
- if (!(t === "none" || t === "")) {
684
- var r = this._getSpanExporter(t);
685
- return r || l.error('Exporter "' + t + '" requested through environment variable is unavailable.'), r;
686
- }
687
- }, e._registeredPropagators = /* @__PURE__ */ new Map([
688
- ["tracecontext", function() {
689
- return new mt();
690
- }],
691
- ["baggage", function() {
692
- return new vt();
693
- }]
694
- ]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
695
- })()
696
- ), Qt = function(e) {
697
- var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
698
- if (r) return r.call(e);
699
- if (e && typeof e.length == "number") return {
700
- next: function() {
701
- return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
702
- }
703
- };
704
- throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
705
- }, ee = (
706
- /** @class */
707
- (function() {
708
- function e() {
709
- }
710
- return e.prototype.export = function(t, r) {
711
- return this._sendSpans(t, r);
712
- }, e.prototype.shutdown = function() {
713
- return this._sendSpans([]), this.forceFlush();
714
- }, e.prototype.forceFlush = function() {
715
- return Promise.resolve();
716
- }, e.prototype._exportInfo = function(t) {
717
- var r;
718
- return {
719
- resource: {
720
- attributes: t.resource.attributes
721
- },
722
- instrumentationScope: t.instrumentationLibrary,
723
- traceId: t.spanContext().traceId,
724
- parentId: t.parentSpanId,
725
- traceState: (r = t.spanContext().traceState) === null || r === void 0 ? void 0 : r.serialize(),
726
- name: t.name,
727
- id: t.spanContext().spanId,
728
- kind: t.kind,
729
- timestamp: j(t.startTime),
730
- duration: j(t.duration),
731
- attributes: t.attributes,
732
- status: t.status,
733
- events: t.events,
734
- links: t.links
735
- };
736
- }, e.prototype._sendSpans = function(t, r) {
737
- var n, i;
738
- try {
739
- for (var o = Qt(t), s = o.next(); !s.done; s = o.next()) {
740
- var a = s.value;
741
- console.dir(this._exportInfo(a), { depth: 3 });
742
- }
743
- } catch (c) {
744
- n = { error: c };
745
- } finally {
746
- try {
747
- s && !s.done && (i = o.return) && i.call(o);
748
- } finally {
749
- if (n) throw n.error;
750
- }
751
- }
752
- if (r)
753
- return r({ code: U.SUCCESS });
754
- }, e;
755
- })()
756
- ), Ht = function(e, t, r, n) {
757
- function i(o) {
758
- return o instanceof r ? o : new r(function(s) {
759
- s(o);
760
- });
761
- }
762
- return new (r || (r = Promise))(function(o, s) {
763
- function a(p) {
764
- try {
765
- u(n.next(p));
766
- } catch (h) {
767
- s(h);
768
- }
769
- }
770
- function c(p) {
771
- try {
772
- u(n.throw(p));
773
- } catch (h) {
774
- s(h);
775
- }
776
- }
777
- function u(p) {
778
- p.done ? o(p.value) : i(p.value).then(a, c);
779
- }
780
- u((n = n.apply(e, [])).next());
781
- });
782
- }, Xt = function(e, t) {
783
- var r = { label: 0, sent: function() {
784
- if (o[0] & 1) throw o[1];
785
- return o[1];
786
- }, trys: [], ops: [] }, n, i, o, s;
787
- return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
788
- return this;
789
- }), s;
790
- function a(u) {
791
- return function(p) {
792
- return c([u, p]);
793
- };
794
- }
795
- function c(u) {
796
- if (n) throw new TypeError("Generator is already executing.");
797
- for (; r; ) try {
798
- if (n = 1, i && (o = u[0] & 2 ? i.return : u[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o;
799
- switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
800
- case 0:
801
- case 1:
802
- o = u;
803
- break;
804
- case 4:
805
- return r.label++, { value: u[1], done: !1 };
806
- case 5:
807
- r.label++, i = u[1], u = [0];
808
- continue;
809
- case 7:
810
- u = r.ops.pop(), r.trys.pop();
811
- continue;
812
- default:
813
- if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
814
- r = 0;
815
- continue;
816
- }
817
- if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
818
- r.label = u[1];
819
- break;
820
- }
821
- if (u[0] === 6 && r.label < o[1]) {
822
- r.label = o[1], o = u;
823
- break;
824
- }
825
- if (o && r.label < o[2]) {
826
- r.label = o[2], r.ops.push(u);
827
- break;
828
- }
829
- o[2] && r.ops.pop(), r.trys.pop();
830
- continue;
831
- }
832
- u = t.call(e, r);
833
- } catch (p) {
834
- u = [6, p], i = 0;
835
- } finally {
836
- n = o = 0;
837
- }
838
- if (u[0] & 5) throw u[1];
839
- return { value: u[0] ? u[1] : void 0, done: !0 };
840
- }
841
- }, re = (
842
- /** @class */
843
- (function() {
844
- function e(t) {
845
- this._exporter = t, this._shutdownOnce = new W(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
846
- }
847
- return e.prototype.forceFlush = function() {
848
- return Ht(this, void 0, void 0, function() {
849
- return Xt(this, function(t) {
850
- switch (t.label) {
851
- case 0:
852
- return [4, Promise.all(Array.from(this._unresolvedExports))];
853
- case 1:
854
- return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
855
- case 2:
856
- t.sent(), t.label = 3;
857
- case 3:
858
- return [
859
- 2
860
- /*return*/
861
- ];
862
- }
863
- });
864
- });
865
- }, e.prototype.onStart = function(t, r) {
866
- }, e.prototype.onEnd = function(t) {
867
- var r = this, n, i;
868
- if (!this._shutdownOnce.isCalled && (t.spanContext().traceFlags & b.SAMPLED) !== 0) {
869
- var o = function() {
870
- return Lt._export(r._exporter, [t]).then(function(a) {
871
- var c;
872
- a.code !== U.SUCCESS && f((c = a.error) !== null && c !== void 0 ? c : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
873
- }).catch(function(a) {
874
- f(a);
875
- });
876
- };
877
- if (t.resource.asyncAttributesPending) {
878
- var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
879
- return s != null && r._unresolvedExports.delete(s), o();
880
- }, function(a) {
881
- return f(a);
882
- });
883
- s != null && this._unresolvedExports.add(s);
884
- } else
885
- o();
886
- }
887
- }, e.prototype.shutdown = function() {
888
- return this._shutdownOnce.call();
889
- }, e.prototype._shutdown = function() {
890
- return this._exporter.shutdown();
891
- }, e;
892
- })()
893
- );
894
- export {
895
- D as B,
896
- Bt as D,
897
- kt as G,
898
- L as P,
899
- R,
900
- S,
901
- q as W,
902
- ee as e,
903
- T as g,
904
- Gt as j,
905
- re as r,
906
- te as t,
907
- Ct as x,
908
- zt as z
909
- };
910
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1DWGtIeHZaSy0hfnswMDR9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgWSBhcyBZdCwgeCBhcyB4ZSwgVCBhcyBUZSwgcCBhcyBwcywgciBhcyBydCwgYyBhcyB2ZSQxLCBQIGFzIFBuLCBnIGFzIGdzIH0gZnJvbSAnLi9pbmRleC0hfnswMDd9fi5qcyc7XG5pbXBvcnQgeyByIH0gZnJvbSAnLi9kaWFnLWFwaS1DanBVYXAwSC0hfnswMGF9fi5qcyc7XG5pbXBvcnQgeyBkRCBhcyBqZSwgeSBhcyB5XywgZEUgYXMgcWUsIGRGIGFzIFhlLCBkRyBhcyBSJDIsIHAgYXMgcF8sIE8gYXMgTyQxLCBkSCBhcyBOXywgZEkgYXMgYl8sIGF0IGFzIE5BLCBhdiBhcyBNQSwgZEogYXMgcl8sIGF1IGFzIGVBIH0gZnJvbSAnLi91cmwtQzYySnI2NVktIX57MDBifX4uanMnO1xuaW1wb3J0IHsgRSBhcyBFciwgTyBhcyBPZSwgdiBhcyB2ZSwgViBhcyBWZSwgWiBhcyBaciwgZiBhcyBmdCwgUyBhcyBTZSwgbiBhcyBudCwgUSBhcyBRciwgbCwgYyBhcyBjZSwgZCwgcCwgYSBhcyBhciwgYiBhcyB2LCBlIGFzIE90JDEgfSBmcm9tICcuL2luZGV4LUJCUE5ObmVNLSF+ezAwaX1+LmpzJztcbmltcG9ydCB7IHUsIGEgYXMgYSQxIH0gZnJvbSAnLi9zdXBwcmVzcy10cmFjaW5nLUJpaUVGcjhGLSF+ezAwbn1+LmpzJztcbmltcG9ydCB7IFIgYXMgUiQxIH0gZnJvbSAnLi9SZXNvdXJjZS1IRnI3aWtLZS0hfnswMDJ9fi5qcyc7XG5pbXBvcnQgeyBhIH0gZnJvbSAnLi9FeHBvcnRSZXN1bHQtQmFjc3F3S0EtIX57MDBsfX4uanMnO1xuXG52YXIgd3QgPSBcImV4Y2VwdGlvblwiLCBEID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBEID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgdCwgZSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBlIDwgbjsgZSsrKSB7XG4gICAgICB0ID0gYXJndW1lbnRzW2VdO1xuICAgICAgZm9yICh2YXIgbyBpbiB0KSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgKHJbb10gPSB0W29dKTtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0sIEQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0sIEN0ID0gZnVuY3Rpb24ocikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHQgJiYgclt0XSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHIpO1xuICBpZiAociAmJiB0eXBlb2Ygci5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByICYmIG4gPj0gci5sZW5ndGggJiYgKHIgPSB2b2lkIDApLCB7IHZhbHVlOiByICYmIHJbbisrXSwgZG9uZTogIXIgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIFggPSBmdW5jdGlvbihyLCB0KSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgcltTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiByO1xuICB2YXIgbiA9IGUuY2FsbChyKSwgbywgaSA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGEgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIE90ID0gZnVuY3Rpb24ociwgdCwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiByLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIHh0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByJDEodCwgZSwgbiwgbywgaSwgYSwgcywgbCwgdSwgcCkge1xuICAgICAgcyA9PT0gdm9pZCAwICYmIChzID0gW10pLCB0aGlzLmF0dHJpYnV0ZXMgPSB7fSwgdGhpcy5saW5rcyA9IFtdLCB0aGlzLmV2ZW50cyA9IFtdLCB0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZExpbmtzQ291bnQgPSAwLCB0aGlzLnN0YXR1cyA9IHtcbiAgICAgICAgY29kZTogdmUkMS5VTlNFVFxuICAgICAgfSwgdGhpcy5lbmRUaW1lID0gWzAsIDBdLCB0aGlzLl9lbmRlZCA9IGZhbHNlLCB0aGlzLl9kdXJhdGlvbiA9IFstMSwgLTFdLCB0aGlzLm5hbWUgPSBuLCB0aGlzLl9zcGFuQ29udGV4dCA9IG8sIHRoaXMucGFyZW50U3BhbklkID0gYSwgdGhpcy5raW5kID0gaSwgdGhpcy5saW5rcyA9IHM7XG4gICAgICB2YXIgYyA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLl9wZXJmb3JtYW5jZVN0YXJ0VGltZSA9IFIkMi5ub3coKSwgdGhpcy5fcGVyZm9ybWFuY2VPZmZzZXQgPSBjIC0gKHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lICsgcl8oKSksIHRoaXMuX3N0YXJ0VGltZVByb3ZpZGVkID0gbCAhPSBudWxsLCB0aGlzLnN0YXJ0VGltZSA9IHRoaXMuX2dldFRpbWUobCA/PyBjKSwgdGhpcy5yZXNvdXJjZSA9IHQucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSwgdGhpcy5fc3BhbkxpbWl0cyA9IHQuZ2V0U3BhbkxpbWl0cygpLCB0aGlzLl9hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gdGhpcy5fc3BhbkxpbWl0cy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0IHx8IDAsIHAgIT0gbnVsbCAmJiB0aGlzLnNldEF0dHJpYnV0ZXMocCksIHRoaXMuX3NwYW5Qcm9jZXNzb3IgPSB0LmdldEFjdGl2ZVNwYW5Qcm9jZXNzb3IoKSwgdGhpcy5fc3BhblByb2Nlc3Nvci5vblN0YXJ0KHRoaXMsIGUpO1xuICAgIH1cbiAgICByZXR1cm4gciQxLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIGUgPT0gbnVsbCB8fCB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6IHQubGVuZ3RoID09PSAwID8gKHIud2FybihcIkludmFsaWQgYXR0cmlidXRlIGtleTogXCIgKyB0KSwgdGhpcykgOiBhcihlKSA/IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID49IHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgdCkgPyAodGhpcy5fZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCsrLCB0aGlzKSA6ICh0aGlzLmF0dHJpYnV0ZXNbdF0gPSB0aGlzLl90cnVuY2F0ZVRvU2l6ZShlKSwgdGhpcykgOiAoci53YXJuKFwiSW52YWxpZCBhdHRyaWJ1dGUgdmFsdWUgc2V0IGZvciBrZXk6IFwiICsgdCksIHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IEN0KE9iamVjdC5lbnRyaWVzKHQpKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IFgoaS52YWx1ZSwgMiksIHMgPSBhWzBdLCBsID0gYVsxXTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShzLCBsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlID0geyBlcnJvcjogdSB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCByJDEucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgZSwgbikge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgaWYgKHRoaXMuX3NwYW5MaW1pdHMuZXZlbnRDb3VudExpbWl0ID09PSAwKVxuICAgICAgICByZXR1cm4gci53YXJuKFwiTm8gZXZlbnRzIGFsbG93ZWQuXCIpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKywgdGhpcztcbiAgICAgIHRoaXMuZXZlbnRzLmxlbmd0aCA+PSB0aGlzLl9zcGFuTGltaXRzLmV2ZW50Q291bnRMaW1pdCAmJiAodGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID09PSAwICYmIHIuZGVidWcoXCJEcm9wcGluZyBleHRyYSBldmVudHMuXCIpLCB0aGlzLmV2ZW50cy5zaGlmdCgpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKyksIHFlKGUpICYmIChxZShuKSB8fCAobiA9IGUpLCBlID0gdm9pZCAwKTtcbiAgICAgIHZhciBvID0gUXIoZSk7XG4gICAgICByZXR1cm4gdGhpcy5ldmVudHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IG8sXG4gICAgICAgIHRpbWU6IHRoaXMuX2dldFRpbWUobiksXG4gICAgICAgIGRyb3BwZWRBdHRyaWJ1dGVzQ291bnQ6IDBcbiAgICAgIH0pLCB0aGlzO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtzLnB1c2godCksIHRoaXM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIChlID0gdGhpcy5saW5rcykucHVzaC5hcHBseShlLCBPdChbXSwgWCh0KSwgZmFsc2UpKSwgdGhpcztcbiAgICB9LCByJDEucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1NwYW5FbmRlZCgpID8gdGhpcyA6ICh0aGlzLnN0YXR1cyA9IEQoe30sIHQpLCB0aGlzLnN0YXR1cy5tZXNzYWdlICE9IG51bGwgJiYgdHlwZW9mIHQubWVzc2FnZSAhPSBcInN0cmluZ1wiICYmIChyLndhcm4oXCJEcm9wcGluZyBpbnZhbGlkIHN0YXR1cy5tZXNzYWdlIG9mIHR5cGUgJ1wiICsgdHlwZW9mIHQubWVzc2FnZSArIFwiJywgZXhwZWN0ZWQgJ3N0cmluZydcIiksIGRlbGV0ZSB0aGlzLnN0YXR1cy5tZXNzYWdlKSwgdGhpcyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU3BhbkVuZGVkKCkgPyB0aGlzIDogKHRoaXMubmFtZSA9IHQsIHRoaXMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpIHtcbiAgICAgICAgci5lcnJvcih0aGlzLm5hbWUgKyBcIiBcIiArIHRoaXMuX3NwYW5Db250ZXh0LnRyYWNlSWQgKyBcIi1cIiArIHRoaXMuX3NwYW5Db250ZXh0LnNwYW5JZCArIFwiIC0gWW91IGNhbiBvbmx5IGNhbGwgZW5kKCkgb24gYSBzcGFuIG9uY2UuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9lbmRlZCA9IHRydWUsIHRoaXMuZW5kVGltZSA9IHRoaXMuX2dldFRpbWUodCksIHRoaXMuX2R1cmF0aW9uID0gWGUodGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuX2R1cmF0aW9uWzBdIDwgMCAmJiAoci53YXJuKFwiSW5jb25zaXN0ZW50IHN0YXJ0IGFuZCBlbmQgdGltZSwgc3RhcnRUaW1lID4gZW5kVGltZS4gU2V0dGluZyBzcGFuIGR1cmF0aW9uIHRvIDBtcy5cIiwgdGhpcy5zdGFydFRpbWUsIHRoaXMuZW5kVGltZSksIHRoaXMuZW5kVGltZSA9IHRoaXMuc3RhcnRUaW1lLnNsaWNlKCksIHRoaXMuX2R1cmF0aW9uID0gWzAsIDBdKSwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID4gMCAmJiByLndhcm4oXCJEcm9wcGVkIFwiICsgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ICsgXCIgZXZlbnRzIGJlY2F1c2UgZXZlbnRDb3VudExpbWl0IHJlYWNoZWRcIiksIHRoaXMuX3NwYW5Qcm9jZXNzb3Iub25FbmQodGhpcyk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZ2V0VGltZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiICYmIHQgPD0gUiQyLm5vdygpKVxuICAgICAgICByZXR1cm4gcF8odCArIHRoaXMuX3BlcmZvcm1hbmNlT2Zmc2V0KTtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm4gTyQxKHQpO1xuICAgICAgaWYgKHQgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gTyQxKHQuZ2V0VGltZSgpKTtcbiAgICAgIGlmIChOXyh0KSlcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICBpZiAodGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQpXG4gICAgICAgIHJldHVybiBPJDEoRGF0ZS5ub3coKSk7XG4gICAgICB2YXIgZSA9IFIkMi5ub3coKSAtIHRoaXMuX3BlcmZvcm1hbmNlU3RhcnRUaW1lO1xuICAgICAgcmV0dXJuIGJfKHRoaXMuc3RhcnRUaW1lLCBPJDEoZSkpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmRlZCA9PT0gZmFsc2U7XG4gICAgfSwgciQxLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICB2YXIgbiA9IHt9O1xuICAgICAgdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IG5bTUFdID0gdCA6IHQgJiYgKHQuY29kZSA/IG5bTkFdID0gdC5jb2RlLnRvU3RyaW5nKCkgOiB0Lm5hbWUgJiYgKG5bTkFdID0gdC5uYW1lKSwgdC5tZXNzYWdlICYmIChuW01BXSA9IHQubWVzc2FnZSksIHQuc3RhY2sgJiYgKG5bZUFdID0gdC5zdGFjaykpLCBuW05BXSB8fCBuW01BXSA/IHRoaXMuYWRkRXZlbnQod3QsIG4sIGUpIDogci53YXJuKFwiRmFpbGVkIHRvIHJlY29yZCBhbiBleGNlcHRpb24gXCIgKyB0KTtcbiAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkociQxLnByb3RvdHlwZSwgXCJkdXJhdGlvblwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZW5kZWRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyJDEucHJvdG90eXBlLCBcImRyb3BwZWRBdHRyaWJ1dGVzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRBdHRyaWJ1dGVzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZHJvcHBlZEV2ZW50c0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIkMS5wcm90b3R5cGUsIFwiZHJvcHBlZExpbmtzQ291bnRcIiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Ryb3BwZWRMaW5rc0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSksIHIkMS5wcm90b3R5cGUuX2lzU3BhbkVuZGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5kZWQgJiYgci53YXJuKFwiQ2FuIG5vdCBleGVjdXRlIHRoZSBvcGVyYXRpb24gb24gZW5kZWQgU3BhbiB7dHJhY2VJZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkICsgXCIsIHNwYW5JZDogXCIgKyB0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWQgKyBcIn1cIiksIHRoaXMuX2VuZGVkO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX3RydW5jYXRlVG9MaW1pdFV0aWwgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgICByZXR1cm4gdC5sZW5ndGggPD0gZSA/IHQgOiB0LnN1YnN0cmluZygwLCBlKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl90cnVuY2F0ZVRvU2l6ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IHRoaXMuX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQ7XG4gICAgICByZXR1cm4gbiA8PSAwID8gKHIud2FybihcIkF0dHJpYnV0ZSB2YWx1ZSBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBnb3QgXCIgKyBuKSwgdCkgOiB0eXBlb2YgdCA9PSBcInN0cmluZ1wiID8gdGhpcy5fdHJ1bmNhdGVUb0xpbWl0VXRpbCh0LCBuKSA6IEFycmF5LmlzQXJyYXkodCkgPyB0Lm1hcChmdW5jdGlvbihvKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbyA9PSBcInN0cmluZ1wiID8gZS5fdHJ1bmNhdGVUb0xpbWl0VXRpbChvLCBuKSA6IG87XG4gICAgICB9KSA6IHQ7XG4gICAgfSwgciQxO1xuICB9KSgpXG4pLCBQO1xuKGZ1bmN0aW9uKHIpIHtcbiAgcltyLk5PVF9SRUNPUkQgPSAwXSA9IFwiTk9UX1JFQ09SRFwiLCByW3IuUkVDT1JEID0gMV0gPSBcIlJFQ09SRFwiLCByW3IuUkVDT1JEX0FORF9TQU1QTEVEID0gMl0gPSBcIlJFQ09SRF9BTkRfU0FNUExFRFwiO1xufSkoUCB8fCAoUCA9IHt9KSk7XG52YXIgUiA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaXNpb246IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCByLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiQWx3YXlzT2ZmU2FtcGxlclwiO1xuICAgIH0sIHI7XG4gIH0pKClcbiksIGcgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgfVxuICAgIHJldHVybiByLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2lzaW9uOiBQLlJFQ09SRF9BTkRfU0FNUExFRFxuICAgICAgfTtcbiAgICB9LCByLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiQWx3YXlzT25TYW1wbGVyXCI7XG4gICAgfSwgcjtcbiAgfSkoKVxuKSwgQiA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcih0KSB7XG4gICAgICB2YXIgZSwgbiwgbywgaTtcbiAgICAgIHRoaXMuX3Jvb3QgPSB0LnJvb3QsIHRoaXMuX3Jvb3QgfHwgKEVyKG5ldyBFcnJvcihcIlBhcmVudEJhc2VkU2FtcGxlciBtdXN0IGhhdmUgYSByb290IHNhbXBsZXIgY29uZmlndXJlZFwiKSksIHRoaXMuX3Jvb3QgPSBuZXcgZygpKSwgdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZCA9IChlID0gdC5yZW1vdGVQYXJlbnRTYW1wbGVkKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogbmV3IGcoKSwgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZCA9IChuID0gdC5yZW1vdGVQYXJlbnROb3RTYW1wbGVkKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogbmV3IFIoKSwgdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkID0gKG8gPSB0LmxvY2FsUGFyZW50U2FtcGxlZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IG5ldyBnKCksIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZCA9IChpID0gdC5sb2NhbFBhcmVudE5vdFNhbXBsZWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBuZXcgUigpO1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24odCwgZSwgbiwgbywgaSwgYSkge1xuICAgICAgdmFyIHMgPSB4ZS5nZXRTcGFuQ29udGV4dCh0KTtcbiAgICAgIHJldHVybiAhcyB8fCAhUG4ocykgPyB0aGlzLl9yb290LnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHMuaXNSZW1vdGUgPyBzLnRyYWNlRmxhZ3MgJiBZdC5TQU1QTEVEID8gdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgZSwgbiwgbywgaSwgYSkgOiB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKSA6IHMudHJhY2VGbGFncyAmIFl0LlNBTVBMRUQgPyB0aGlzLl9sb2NhbFBhcmVudFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIGUsIG4sIG8sIGksIGEpIDogdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCBlLCBuLCBvLCBpLCBhKTtcbiAgICB9LCByLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiUGFyZW50QmFzZWR7cm9vdD1cIiArIHRoaXMuX3Jvb3QudG9TdHJpbmcoKSArIFwiLCByZW1vdGVQYXJlbnRTYW1wbGVkPVwiICsgdGhpcy5fcmVtb3RlUGFyZW50U2FtcGxlZC50b1N0cmluZygpICsgXCIsIHJlbW90ZVBhcmVudE5vdFNhbXBsZWQ9XCIgKyB0aGlzLl9yZW1vdGVQYXJlbnROb3RTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIiwgbG9jYWxQYXJlbnRTYW1wbGVkPVwiICsgdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIiwgbG9jYWxQYXJlbnROb3RTYW1wbGVkPVwiICsgdGhpcy5fbG9jYWxQYXJlbnROb3RTYW1wbGVkLnRvU3RyaW5nKCkgKyBcIn1cIjtcbiAgICB9LCByO1xuICB9KSgpXG4pLCBXID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IDApLCB0aGlzLl9yYXRpbyA9IHQsIHRoaXMuX3JhdGlvID0gdGhpcy5fbm9ybWFsaXplKHQpLCB0aGlzLl91cHBlckJvdW5kID0gTWF0aC5mbG9vcih0aGlzLl9yYXRpbyAqIDQyOTQ5NjcyOTUpO1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaXNpb246IGdzKGUpICYmIHRoaXMuX2FjY3VtdWxhdGUoZSkgPCB0aGlzLl91cHBlckJvdW5kID8gUC5SRUNPUkRfQU5EX1NBTVBMRUQgOiBQLk5PVF9SRUNPUkRcbiAgICAgIH07XG4gICAgfSwgci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlRyYWNlSWRSYXRpb0Jhc2Vke1wiICsgdGhpcy5fcmF0aW8gKyBcIn1cIjtcbiAgICB9LCByLnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0ICE9IFwibnVtYmVyXCIgfHwgaXNOYU4odCkgPyAwIDogdCA+PSAxID8gMSA6IHQgPD0gMCA/IDAgOiB0O1xuICAgIH0sIHIucHJvdG90eXBlLl9hY2N1bXVsYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgZm9yICh2YXIgZSA9IDAsIG4gPSAwOyBuIDwgdC5sZW5ndGggLyA4OyBuKyspIHtcbiAgICAgICAgdmFyIG8gPSBuICogOCwgaSA9IHBhcnNlSW50KHQuc2xpY2UobywgbyArIDgpLCAxNik7XG4gICAgICAgIGUgPSAoZSBeIGkpID4+PiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGU7XG4gICAgfSwgcjtcbiAgfSkoKVxuKSwgUnQgPSB2LkFsd2F5c09uLCBFID0gMTtcbmZ1bmN0aW9uIEooKSB7XG4gIHZhciByID0gT2UoKTtcbiAgcmV0dXJuIHtcbiAgICBzYW1wbGVyOiAkKHIpLFxuICAgIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzOiAzZTQsXG4gICAgZ2VuZXJhbExpbWl0czoge1xuICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogci5PVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiByLk9URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUXG4gICAgfSxcbiAgICBzcGFuTGltaXRzOiB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiByLk9URUxfU1BBTl9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlULFxuICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogci5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlULFxuICAgICAgbGlua0NvdW50TGltaXQ6IHIuT1RFTF9TUEFOX0xJTktfQ09VTlRfTElNSVQsXG4gICAgICBldmVudENvdW50TGltaXQ6IHIuT1RFTF9TUEFOX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyRXZlbnRDb3VudExpbWl0OiByLk9URUxfU1BBTl9BVFRSSUJVVEVfUEVSX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyTGlua0NvdW50TGltaXQ6IHIuT1RFTF9TUEFOX0FUVFJJQlVURV9QRVJfTElOS19DT1VOVF9MSU1JVFxuICAgIH0sXG4gICAgbWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0czogdHJ1ZVxuICB9O1xufVxuZnVuY3Rpb24gJChyJDEpIHtcbiAgc3dpdGNoIChyJDEgPT09IHZvaWQgMCAmJiAociQxID0gT2UoKSksIHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSKSB7XG4gICAgY2FzZSB2LkFsd2F5c09uOlxuICAgICAgcmV0dXJuIG5ldyBnKCk7XG4gICAgY2FzZSB2LkFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgUigpO1xuICAgIGNhc2Ugdi5QYXJlbnRCYXNlZEFsd2F5c09uOlxuICAgICAgcmV0dXJuIG5ldyBCKHtcbiAgICAgICAgcm9vdDogbmV3IGcoKVxuICAgICAgfSk7XG4gICAgY2FzZSB2LlBhcmVudEJhc2VkQWx3YXlzT2ZmOlxuICAgICAgcmV0dXJuIG5ldyBCKHtcbiAgICAgICAgcm9vdDogbmV3IFIoKVxuICAgICAgfSk7XG4gICAgY2FzZSB2LlRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgVyhZKHIkMSkpO1xuICAgIGNhc2Ugdi5QYXJlbnRCYXNlZFRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgQih7XG4gICAgICAgIHJvb3Q6IG5ldyBXKFkociQxKSlcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gci5lcnJvcignT1RFTF9UUkFDRVNfU0FNUExFUiB2YWx1ZSBcIicgKyByJDEuT1RFTF9UUkFDRVNfU0FNUExFUiArIFwiIGludmFsaWQsIGRlZmF1bHRpbmcgdG8gXCIgKyBSdCArICdcIi4nKSwgbmV3IGcoKTtcbiAgfVxufVxuZnVuY3Rpb24gWShyJDEpIHtcbiAgaWYgKHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyA9PT0gdm9pZCAwIHx8IHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyA9PT0gXCJcIilcbiAgICByZXR1cm4gci5lcnJvcihcIk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHIGlzIGJsYW5rLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRTtcbiAgdmFyIHQgPSBOdW1iZXIociQxLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHKTtcbiAgcmV0dXJuIGlzTmFOKHQpID8gKHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRz1cIiArIHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyArIFwiIHdhcyBnaXZlbiwgYnV0IGl0IGlzIGludmFsaWQsIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFKSA6IHQgPCAwIHx8IHQgPiAxID8gKHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRz1cIiArIHIkMS5PVEVMX1RSQUNFU19TQU1QTEVSX0FSRyArIFwiIHdhcyBnaXZlbiwgYnV0IGl0IGlzIG91dCBvZiByYW5nZSAoWzAuLjFdKSwgZGVmYXVsdGluZyB0byBcIiArIEUgKyBcIi5cIiksIEUpIDogdDtcbn1cbmZ1bmN0aW9uIEl0KHIpIHtcbiAgdmFyIHQgPSB7XG4gICAgc2FtcGxlcjogJCgpXG4gIH0sIGUgPSBKKCksIG4gPSBPYmplY3QuYXNzaWduKHt9LCBlLCB0LCByKTtcbiAgcmV0dXJuIG4uZ2VuZXJhbExpbWl0cyA9IE9iamVjdC5hc3NpZ24oe30sIGUuZ2VuZXJhbExpbWl0cywgci5nZW5lcmFsTGltaXRzIHx8IHt9KSwgbi5zcGFuTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgZS5zcGFuTGltaXRzLCByLnNwYW5MaW1pdHMgfHwge30pLCBuO1xufVxuZnVuY3Rpb24gTnQocikge1xuICB2YXIgdCwgZSwgbiwgbywgaSwgYSwgcywgbCwgdSwgcCQxLCBjLCBmLCB5ID0gT2JqZWN0LmFzc2lnbih7fSwgci5zcGFuTGltaXRzKSwgbSA9IGNlKCk7XG4gIHJldHVybiB5LmF0dHJpYnV0ZUNvdW50TGltaXQgPSAoYSA9IChpID0gKG8gPSAoZSA9ICh0ID0gci5zcGFuTGltaXRzKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmF0dHJpYnV0ZUNvdW50TGltaXQpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiAobiA9IHIuZ2VuZXJhbExpbWl0cykgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5hdHRyaWJ1dGVDb3VudExpbWl0KSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbS5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlUKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbS5PVEVMX0FUVFJJQlVURV9DT1VOVF9MSU1JVCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IGQsIHkuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCA9IChmID0gKGMgPSAocCQxID0gKGwgPSAocyA9IHIuc3BhbkxpbWl0cykgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogKHUgPSByLmdlbmVyYWxMaW1pdHMpID09PSBudWxsIHx8IHUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHUuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCkgIT09IG51bGwgJiYgcCQxICE9PSB2b2lkIDAgPyBwJDEgOiBtLk9URUxfU1BBTl9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlUKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogbS5PVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBwLCBPYmplY3QuYXNzaWduKHt9LCByLCB7IHNwYW5MaW1pdHM6IHkgfSk7XG59XG52YXIgTXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIkMSh0LCBlKSB7XG4gICAgICB0aGlzLl9leHBvcnRlciA9IHQsIHRoaXMuX2lzRXhwb3J0aW5nID0gZmFsc2UsIHRoaXMuX2ZpbmlzaGVkU3BhbnMgPSBbXSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwO1xuICAgICAgdmFyIG4gPSBPZSgpO1xuICAgICAgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdHlwZW9mIGU/Lm1heEV4cG9ydEJhdGNoU2l6ZSA9PSBcIm51bWJlclwiID8gZS5tYXhFeHBvcnRCYXRjaFNpemUgOiBuLk9URUxfQlNQX01BWF9FWFBPUlRfQkFUQ0hfU0laRSwgdGhpcy5fbWF4UXVldWVTaXplID0gdHlwZW9mIGU/Lm1heFF1ZXVlU2l6ZSA9PSBcIm51bWJlclwiID8gZS5tYXhRdWV1ZVNpemUgOiBuLk9URUxfQlNQX01BWF9RVUVVRV9TSVpFLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9IHR5cGVvZiBlPy5zY2hlZHVsZWREZWxheU1pbGxpcyA9PSBcIm51bWJlclwiID8gZS5zY2hlZHVsZWREZWxheU1pbGxpcyA6IG4uT1RFTF9CU1BfU0NIRURVTEVfREVMQVksIHRoaXMuX2V4cG9ydFRpbWVvdXRNaWxsaXMgPSB0eXBlb2YgZT8uZXhwb3J0VGltZW91dE1pbGxpcyA9PSBcIm51bWJlclwiID8gZS5leHBvcnRUaW1lb3V0TWlsbGlzIDogbi5PVEVMX0JTUF9FWFBPUlRfVElNRU9VVCwgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGZ0KHRoaXMuX3NodXRkb3duLCB0aGlzKSwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID4gdGhpcy5fbWF4UXVldWVTaXplICYmIChyLndhcm4oXCJCYXRjaFNwYW5Qcm9jZXNzb3I6IG1heEV4cG9ydEJhdGNoU2l6ZSBtdXN0IGJlIHNtYWxsZXIgb3IgZXF1YWwgdG8gbWF4UXVldWVTaXplLCBzZXR0aW5nIG1heEV4cG9ydEJhdGNoU2l6ZSB0byBtYXRjaCBtYXhRdWV1ZVNpemVcIiksIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHRoaXMuX21heFF1ZXVlU2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiByJDEucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgPyB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZSA6IHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5vblN0YXJ0ID0gZnVuY3Rpb24odCwgZSkge1xuICAgIH0sIHIkMS5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgfHwgKHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgWXQuU0FNUExFRCkgIT09IDAgJiYgdGhpcy5fYWRkVG9CdWZmZXIodCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NodXRkb3duT25jZS5jYWxsKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5vblNodXRkb3duKCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdC5fZmx1c2hBbGwoKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Ll9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgICAgfSk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fYWRkVG9CdWZmZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID09PSAwICYmIHIuZGVidWcoXCJtYXhRdWV1ZVNpemUgcmVhY2hlZCwgZHJvcHBpbmcgc3BhbnNcIiksIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50Kys7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID4gMCAmJiAoci53YXJuKFwiRHJvcHBlZCBcIiArIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ICsgXCIgc3BhbnMgYmVjYXVzZSBtYXhRdWV1ZVNpemUgcmVhY2hlZFwiKSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwKSwgdGhpcy5fZmluaXNoZWRTcGFucy5wdXNoKHQpLCB0aGlzLl9tYXliZVN0YXJ0VGltZXIoKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9mbHVzaEFsbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gTWF0aC5jZWlsKHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIC8gdC5fbWF4RXhwb3J0QmF0Y2hTaXplKSwgYSA9IDAsIHMgPSBpOyBhIDwgczsgYSsrKVxuICAgICAgICAgIG8ucHVzaCh0Ll9mbHVzaE9uZUJhdGNoKCkpO1xuICAgICAgICBQcm9taXNlLmFsbChvKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGUoKTtcbiAgICAgICAgfSkuY2F0Y2gobik7XG4gICAgICB9KTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9mbHVzaE9uZUJhdGNoID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICByZXR1cm4gdGhpcy5fY2xlYXJUaW1lcigpLCB0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA9PT0gMCA/IFByb21pc2UucmVzb2x2ZSgpIDogbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgICAgICB2YXIgbyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbihuZXcgRXJyb3IoXCJUaW1lb3V0XCIpKTtcbiAgICAgICAgfSwgdC5fZXhwb3J0VGltZW91dE1pbGxpcyk7XG4gICAgICAgIFRlLndpdGgodShUZS5hY3RpdmUoKSksIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpO1xuICAgICAgICAgIHQuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoIDw9IHQuX21heEV4cG9ydEJhdGNoU2l6ZSA/IChpID0gdC5fZmluaXNoZWRTcGFucywgdC5fZmluaXNoZWRTcGFucyA9IFtdKSA6IGkgPSB0Ll9maW5pc2hlZFNwYW5zLnNwbGljZSgwLCB0Ll9tYXhFeHBvcnRCYXRjaFNpemUpO1xuICAgICAgICAgIGZvciAodmFyIGEkMSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHQuX2V4cG9ydGVyLmV4cG9ydChpLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgIHZhciBmO1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQobyksIGMuY29kZSA9PT0gYS5TVUNDRVNTID8gZSgpIDogbigoZiA9IGMuZXJyb3IpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBuZXcgRXJyb3IoXCJCYXRjaFNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZFwiKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBzID0gbnVsbCwgbCA9IDAsIHUgPSBpLmxlbmd0aDsgbCA8IHU7IGwrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBpW2xdO1xuICAgICAgICAgICAgcC5yZXNvdXJjZS5hc3luY0F0dHJpYnV0ZXNQZW5kaW5nICYmIHAucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcyAmJiAocyA/PyAocyA9IFtdKSwgcy5wdXNoKHAucmVzb3VyY2Uud2FpdEZvckFzeW5jQXR0cmlidXRlcygpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPT09IG51bGwgPyBhJDEoKSA6IFByb21pc2UuYWxsKHMpLnRoZW4oYSQxLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICBFcihjKSwgbihjKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9tYXliZVN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIGlmICghdGhpcy5faXNFeHBvcnRpbmcpIHtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9IHRydWUsIHQuX2ZsdXNoT25lQmF0Y2goKS5maW5hbGx5KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSBmYWxzZSwgdC5fZmluaXNoZWRTcGFucy5sZW5ndGggPiAwICYmICh0Ll9jbGVhclRpbWVyKCksIHQuX21heWJlU3RhcnRUaW1lcigpKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihuKSB7XG4gICAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9IGZhbHNlLCBFcihuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID49IHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSlcbiAgICAgICAgICByZXR1cm4gZSgpO1xuICAgICAgICB0aGlzLl90aW1lciA9PT0gdm9pZCAwICYmICh0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGUoKTtcbiAgICAgICAgfSwgdGhpcy5fc2NoZWR1bGVkRGVsYXlNaWxsaXMpLCBTZSh0aGlzLl90aW1lcikpO1xuICAgICAgfVxuICAgIH0sIHIkMS5wcm90b3R5cGUuX2NsZWFyVGltZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX3RpbWVyICE9PSB2b2lkIDAgJiYgKGNsZWFyVGltZW91dCh0aGlzLl90aW1lciksIHRoaXMuX3RpbWVyID0gdm9pZCAwKTtcbiAgICB9LCByJDE7XG4gIH0pKClcbiksIEJ0ID0gLyogQF9fUFVSRV9fICovIChmdW5jdGlvbigpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgcmV0dXJuIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBuLl9fcHJvdG9fXyA9IG87XG4gICAgfSB8fCBmdW5jdGlvbihuLCBvKSB7XG4gICAgICBmb3IgKHZhciBpIGluIG8pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBpKSAmJiAobltpXSA9IG9baV0pO1xuICAgIH0sIHIodCwgZSk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIHIodCwgZSk7XG4gICAgZnVuY3Rpb24gbigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICAgIH1cbiAgICB0LnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKG4ucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyBuKCkpO1xuICB9O1xufSkoKSwgRHQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKHIpIHtcbiAgICBCdCh0LCByKTtcbiAgICBmdW5jdGlvbiB0KGUsIG4pIHtcbiAgICAgIHZhciBvID0gci5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgICByZXR1cm4gby5vbkluaXQobiksIG87XG4gICAgfVxuICAgIHJldHVybiB0LnByb3RvdHlwZS5vbkluaXQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgbiA9IHRoaXM7XG4gICAgICBlPy5kaXNhYmxlQXV0b0ZsdXNoT25Eb2N1bWVudEhpZGUgIT09IHRydWUgJiYgdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIgJiYgKHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09IFwiaGlkZGVuXCIgJiYgbi5mb3JjZUZsdXNoKCkuY2F0Y2goZnVuY3Rpb24obykge1xuICAgICAgICAgIEVyKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRoaXMuX3BhZ2VIaWRlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbi5mb3JjZUZsdXNoKCkuY2F0Y2goZnVuY3Rpb24obykge1xuICAgICAgICAgIEVyKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciksIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyKSk7XG4gICAgfSwgdC5wcm90b3R5cGUub25TaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdHlwZW9mIGRvY3VtZW50IDwgXCJ1XCIgJiYgKHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciAmJiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLCB0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIpLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLl9wYWdlSGlkZUxpc3RlbmVyKSk7XG4gICAgfSwgdDtcbiAgfSkoTXQpXG4pLCBVdCA9IDgsIEZ0ID0gMTYsIEd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVUcmFjZUlkID0gcShGdCksIHRoaXMuZ2VuZXJhdGVTcGFuSWQgPSBxKFV0KTtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0pKClcbiksIEMgPSBBcnJheSgzMik7XG5mdW5jdGlvbiBxKHIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgciAqIDI7IGUrKylcbiAgICAgIENbZV0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNikgKyA0OCwgQ1tlXSA+PSA1OCAmJiAoQ1tlXSArPSAzOSk7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgQy5zbGljZSgwLCByICogMikpO1xuICB9O1xufVxudmFyIHp0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByJDEodCwgZSwgbikge1xuICAgICAgdGhpcy5fdHJhY2VyUHJvdmlkZXIgPSBuO1xuICAgICAgdmFyIG8gPSBJdChlKTtcbiAgICAgIHRoaXMuX3NhbXBsZXIgPSBvLnNhbXBsZXIsIHRoaXMuX2dlbmVyYWxMaW1pdHMgPSBvLmdlbmVyYWxMaW1pdHMsIHRoaXMuX3NwYW5MaW1pdHMgPSBvLnNwYW5MaW1pdHMsIHRoaXMuX2lkR2VuZXJhdG9yID0gZS5pZEdlbmVyYXRvciB8fCBuZXcgR3QoKSwgdGhpcy5yZXNvdXJjZSA9IG4ucmVzb3VyY2UsIHRoaXMuaW5zdHJ1bWVudGF0aW9uTGlicmFyeSA9IHQ7XG4gICAgfVxuICAgIHJldHVybiByJDEucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIGUsIG4pIHtcbiAgICAgIHZhciBvLCBpLCBhO1xuICAgICAgZSA9PT0gdm9pZCAwICYmIChlID0ge30pLCBuID09PSB2b2lkIDAgJiYgKG4gPSBUZS5hY3RpdmUoKSksIGUucm9vdCAmJiAobiA9IHhlLmRlbGV0ZVNwYW4obikpO1xuICAgICAgdmFyIHMgPSB4ZS5nZXRTcGFuKG4pO1xuICAgICAgaWYgKGEkMShuKSkge1xuICAgICAgICByLmRlYnVnKFwiSW5zdHJ1bWVudGF0aW9uIHN1cHByZXNzZWQsIHJldHVybmluZyBOb29wIFNwYW5cIik7XG4gICAgICAgIHZhciBsJDEgPSB4ZS53cmFwU3BhbkNvbnRleHQocHMpO1xuICAgICAgICByZXR1cm4gbCQxO1xuICAgICAgfVxuICAgICAgdmFyIHUgPSBzPy5zcGFuQ29udGV4dCgpLCBwID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVTcGFuSWQoKSwgYywgZiwgeTtcbiAgICAgICF1IHx8ICF4ZS5pc1NwYW5Db250ZXh0VmFsaWQodSkgPyBjID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVUcmFjZUlkKCkgOiAoYyA9IHUudHJhY2VJZCwgZiA9IHUudHJhY2VTdGF0ZSwgeSA9IHUuc3BhbklkKTtcbiAgICAgIHZhciBtID0gKG8gPSBlLmtpbmQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBydC5JTlRFUk5BTCwgRiA9ICgoaSA9IGUubGlua3MpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBbXSkubWFwKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZXh0OiBqLmNvbnRleHQsXG4gICAgICAgICAgYXR0cmlidXRlczogUXIoai5hdHRyaWJ1dGVzKVxuICAgICAgICB9O1xuICAgICAgfSksIEcgPSBRcihlLmF0dHJpYnV0ZXMpLCBiID0gdGhpcy5fc2FtcGxlci5zaG91bGRTYW1wbGUobiwgYywgdCwgbSwgRywgRik7XG4gICAgICBmID0gKGEgPSBiLnRyYWNlU3RhdGUpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBmO1xuICAgICAgdmFyIHR0ID0gYi5kZWNpc2lvbiA9PT0gbC5SRUNPUkRfQU5EX1NBTVBMRUQgPyBZdC5TQU1QTEVEIDogWXQuTk9ORSwgeiA9IHsgdHJhY2VJZDogYywgc3BhbklkOiBwLCB0cmFjZUZsYWdzOiB0dCwgdHJhY2VTdGF0ZTogZiB9O1xuICAgICAgaWYgKGIuZGVjaXNpb24gPT09IGwuTk9UX1JFQ09SRCkge1xuICAgICAgICByLmRlYnVnKFwiUmVjb3JkaW5nIGlzIG9mZiwgcHJvcGFnYXRpbmcgY29udGV4dCBpbiBhIG5vbi1yZWNvcmRpbmcgc3BhblwiKTtcbiAgICAgICAgdmFyIGwkMSA9IHhlLndyYXBTcGFuQ29udGV4dCh6KTtcbiAgICAgICAgcmV0dXJuIGwkMTtcbiAgICAgIH1cbiAgICAgIHZhciBldCA9IFFyKE9iamVjdC5hc3NpZ24oRywgYi5hdHRyaWJ1dGVzKSksIHJ0JDEgPSBuZXcgeHQodGhpcywgbiwgdCwgeiwgbSwgeSwgRiwgZS5zdGFydFRpbWUsIHZvaWQgMCwgZXQpO1xuICAgICAgcmV0dXJuIHJ0JDE7XG4gICAgfSwgciQxLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCBlLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgYSwgcztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gcyA9IGUgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSBlLCBzID0gbikgOiAoaSA9IGUsIGEgPSBuLCBzID0gbyk7XG4gICAgICAgIHZhciBsID0gYSA/PyBUZS5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBwID0geGUuc2V0U3BhbihsLCB1KTtcbiAgICAgICAgcmV0dXJuIFRlLndpdGgocCwgcywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCByJDEucHJvdG90eXBlLmdldEdlbmVyYWxMaW1pdHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZW5lcmFsTGltaXRzO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZ2V0U3BhbkxpbWl0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5MaW1pdHM7XG4gICAgfSwgciQxLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2VyUHJvdmlkZXIuZ2V0QWN0aXZlU3BhblByb2Nlc3NvcigpO1xuICAgIH0sIHIkMTtcbiAgfSkoKVxuKSwgTyA9IGZ1bmN0aW9uKHIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSB0ICYmIHJbdF0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbChyKTtcbiAgaWYgKHIgJiYgdHlwZW9mIHIubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gciAmJiBuID49IHIubGVuZ3RoICYmIChyID0gdm9pZCAwKSwgeyB2YWx1ZTogciAmJiByW24rK10sIGRvbmU6ICFyIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBLID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKHQpIHtcbiAgICAgIHRoaXMuX3NwYW5Qcm9jZXNzb3JzID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0LCBlLCBuID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBvID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBpLnZhbHVlO1xuICAgICAgICAgIG4ucHVzaChhLmZvcmNlRmx1c2goKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdCA9IHsgZXJyb3I6IHMgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChlID0gby5yZXR1cm4pICYmIGUuY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBzKCk7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICBFcihsIHx8IG5ldyBFcnJvcihcIk11bHRpU3BhblByb2Nlc3NvcjogZm9yY2VGbHVzaCBmYWlsZWRcIikpLCBzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgci5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICAgIHZhciBuLCBvO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgaSA9IE8odGhpcy5fc3BhblByb2Nlc3NvcnMpLCBhID0gaS5uZXh0KCk7ICFhLmRvbmU7IGEgPSBpLm5leHQoKSkge1xuICAgICAgICAgIHZhciBzID0gYS52YWx1ZTtcbiAgICAgICAgICBzLm9uU3RhcnQodCwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgbiA9IHsgZXJyb3I6IGwgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYSAmJiAhYS5kb25lICYmIChvID0gaS5yZXR1cm4pICYmIG8uY2FsbChpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHIucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGUsIG47XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBvID0gTyh0aGlzLl9zcGFuUHJvY2Vzc29ycyksIGkgPSBvLm5leHQoKTsgIWkuZG9uZTsgaSA9IG8ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGEgPSBpLnZhbHVlO1xuICAgICAgICAgIGEub25FbmQodCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgZSA9IHsgZXJyb3I6IHMgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gby5yZXR1cm4pICYmIG4uY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHIucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCwgZSwgbiA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IE8odGhpcy5fc3BhblByb2Nlc3NvcnMpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICAgIHZhciBhID0gaS52YWx1ZTtcbiAgICAgICAgICBuLnB1c2goYS5zaHV0ZG93bigpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBvLnJldHVybikgJiYgZS5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocywgbCkge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSwgbCk7XG4gICAgICB9KTtcbiAgICB9LCByO1xuICB9KSgpXG4pLCBqdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCByLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSwgcjtcbiAgfSkoKVxuKSwga3QgPSBmdW5jdGlvbihyLCB0KSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgcltTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiByO1xuICB2YXIgbiA9IGUuY2FsbChyKSwgbywgaSA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGEgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIFZ0ID0gZnVuY3Rpb24ociwgdCwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiByLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFM7XG4oZnVuY3Rpb24ocikge1xuICByW3IucmVzb2x2ZWQgPSAwXSA9IFwicmVzb2x2ZWRcIiwgcltyLnRpbWVvdXQgPSAxXSA9IFwidGltZW91dFwiLCByW3IuZXJyb3IgPSAyXSA9IFwiZXJyb3JcIiwgcltyLnVucmVzb2x2ZWQgPSAzXSA9IFwidW5yZXNvbHZlZFwiO1xufSkoUyB8fCAoUyA9IHt9KSk7XG52YXIgdGUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIHIkMSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSB7fSk7XG4gICAgICB2YXIgZSwgbjtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyA9IFtdLCB0aGlzLl90cmFjZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIHZhciBvID0gbnQoe30sIEooKSwgTnQodCkpO1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UgPSAoZSA9IG8ucmVzb3VyY2UpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBSJDEuZW1wdHkoKSwgby5tZXJnZVJlc291cmNlV2l0aERlZmF1bHRzICYmICh0aGlzLnJlc291cmNlID0gUiQxLmRlZmF1bHQoKS5tZXJnZSh0aGlzLnJlc291cmNlKSksIHRoaXMuX2NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG8sIHtcbiAgICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pLCAhKChuID0gdC5zcGFuUHJvY2Vzc29ycykgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwKSAmJiBuLmxlbmd0aClcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzID0gVnQoW10sIGt0KHQuc3BhblByb2Nlc3NvcnMpLCBmYWxzZSksIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBLKHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9idWlsZEV4cG9ydGVyRnJvbUVudigpO1xuICAgICAgICBpZiAoaSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgdmFyIGEgPSBuZXcgRHQoaSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gYTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IGp0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByJDEucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIGUsIG4pIHtcbiAgICAgIHZhciBvID0gdCArIFwiQFwiICsgKGUgfHwgXCJcIikgKyBcIjpcIiArIChuPy5zY2hlbWFVcmwgfHwgXCJcIik7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2Vycy5oYXMobykgfHwgdGhpcy5fdHJhY2Vycy5zZXQobywgbmV3IHp0KHsgbmFtZTogdCwgdmVyc2lvbjogZSwgc2NoZW1hVXJsOiBuPy5zY2hlbWFVcmwgfSwgdGhpcy5fY29uZmlnLCB0aGlzKSksIHRoaXMuX3RyYWNlcnMuZ2V0KG8pO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuYWRkU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5sZW5ndGggPT09IDAgJiYgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yLnNodXRkb3duKCkuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gci5lcnJvcihcIkVycm9yIHdoaWxlIHRyeWluZyB0byBzaHV0ZG93biBjdXJyZW50IHNwYW4gcHJvY2Vzc29yXCIsIGUpO1xuICAgICAgfSksIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5wdXNoKHQpLCB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcgSyh0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuZ2V0QWN0aXZlU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvcjtcbiAgICB9LCByJDEucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pLCB4ZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlcih0aGlzKSwgdC5wcm9wYWdhdG9yID09PSB2b2lkIDAgJiYgKHQucHJvcGFnYXRvciA9IHRoaXMuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYoKSksIHQuY29udGV4dE1hbmFnZXIgJiYgVGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIodC5jb250ZXh0TWFuYWdlciksIHQucHJvcGFnYXRvciAmJiB5Xy5zZXRHbG9iYWxQcm9wYWdhdG9yKHQucHJvcGFnYXRvcik7XG4gICAgfSwgciQxLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXMuX2NvbmZpZy5mb3JjZUZsdXNoVGltZW91dE1pbGxpcywgZSA9IHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5tYXAoZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obykge1xuICAgICAgICAgIHZhciBpLCBhID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG8obmV3IEVycm9yKFwiU3BhbiBwcm9jZXNzb3IgZGlkIG5vdCBjb21wbGV0ZWQgd2l0aGluIHRpbWVvdXQgcGVyaW9kIG9mIFwiICsgdCArIFwiIG1zXCIpKSwgaSA9IFMudGltZW91dDtcbiAgICAgICAgICB9LCB0KTtcbiAgICAgICAgICBuLmZvcmNlRmx1c2goKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBpICE9PSBTLnRpbWVvdXQgJiYgKGkgPSBTLnJlc29sdmVkLCBvKGkpKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoYSksIGkgPSBTLmVycm9yLCBvKHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbihpKSB7XG4gICAgICAgICAgdmFyIGEgPSBpLmZpbHRlcihmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICByZXR1cm4gcyAhPT0gUy5yZXNvbHZlZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhLmxlbmd0aCA+IDAgPyBvKGEpIDogbigpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihpKSB7XG4gICAgICAgICAgcmV0dXJuIG8oW2ldKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCByJDEucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yLnNodXRkb3duKCk7XG4gICAgfSwgciQxLnByb3RvdHlwZS5fZ2V0UHJvcGFnYXRvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIChlID0gdGhpcy5jb25zdHJ1Y3Rvci5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzLmdldCh0KSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZSgpO1xuICAgIH0sIHIkMS5wcm90b3R5cGUuX2dldFNwYW5FeHBvcnRlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuIChlID0gdGhpcy5jb25zdHJ1Y3Rvci5fcmVnaXN0ZXJlZEV4cG9ydGVycy5nZXQodCkpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUoKTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9idWlsZFByb3BhZ2F0b3JGcm9tRW52ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXMsIGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoT2UoKS5PVEVMX1BST1BBR0FUT1JTKSksIG4gPSBlLm1hcChmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gdC5fZ2V0UHJvcGFnYXRvcihpKTtcbiAgICAgICAgcmV0dXJuIGEgfHwgci53YXJuKCdQcm9wYWdhdG9yIFwiJyArIGkgKyAnXCIgcmVxdWVzdGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5hdmFpbGFibGUuJyksIGE7XG4gICAgICB9KSwgbyA9IG4ucmVkdWNlKGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgICAgcmV0dXJuIGEgJiYgaS5wdXNoKGEpLCBpO1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKG8ubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm4gZS5sZW5ndGggPT09IDEgPyBvWzBdIDogbmV3IHZlKHtcbiAgICAgICAgICBwcm9wYWdhdG9yczogb1xuICAgICAgICB9KTtcbiAgICB9LCByJDEucHJvdG90eXBlLl9idWlsZEV4cG9ydGVyRnJvbUVudiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSBPZSgpLk9URUxfVFJBQ0VTX0VYUE9SVEVSO1xuICAgICAgaWYgKCEodCA9PT0gXCJub25lXCIgfHwgdCA9PT0gXCJcIikpIHtcbiAgICAgICAgdmFyIGUgPSB0aGlzLl9nZXRTcGFuRXhwb3J0ZXIodCk7XG4gICAgICAgIHJldHVybiBlIHx8IHIuZXJyb3IoJ0V4cG9ydGVyIFwiJyArIHQgKyAnXCIgcmVxdWVzdGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5hdmFpbGFibGUuJyksIGU7XG4gICAgICB9XG4gICAgfSwgciQxLl9yZWdpc3RlcmVkUHJvcGFnYXRvcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcChbXG4gICAgICBbXCJ0cmFjZWNvbnRleHRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmUoKTtcbiAgICAgIH1dLFxuICAgICAgW1wiYmFnZ2FnZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBacigpO1xuICAgICAgfV1cbiAgICBdKSwgciQxLl9yZWdpc3RlcmVkRXhwb3J0ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgciQxO1xuICB9KSgpXG4pLCBIdCA9IGZ1bmN0aW9uKHIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSB0ICYmIHJbdF0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbChyKTtcbiAgaWYgKHIgJiYgdHlwZW9mIHIubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gciAmJiBuID49IHIubGVuZ3RoICYmIChyID0gdm9pZCAwKSwgeyB2YWx1ZTogciAmJiByW24rK10sIGRvbmU6ICFyIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBlZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICB9XG4gICAgcmV0dXJuIHIucHJvdG90eXBlLmV4cG9ydCA9IGZ1bmN0aW9uKHQsIGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZW5kU3BhbnModCwgZSk7XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZW5kU3BhbnMoW10pLCB0aGlzLmZvcmNlRmx1c2goKTtcbiAgICB9LCByLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSwgci5wcm90b3R5cGUuX2V4cG9ydEluZm8gPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgYXR0cmlidXRlczogdC5yZXNvdXJjZS5hdHRyaWJ1dGVzXG4gICAgICAgIH0sXG4gICAgICAgIGluc3RydW1lbnRhdGlvblNjb3BlOiB0Lmluc3RydW1lbnRhdGlvbkxpYnJhcnksXG4gICAgICAgIHRyYWNlSWQ6IHQuc3BhbkNvbnRleHQoKS50cmFjZUlkLFxuICAgICAgICBwYXJlbnRJZDogdC5wYXJlbnRTcGFuSWQsXG4gICAgICAgIHRyYWNlU3RhdGU6IChlID0gdC5zcGFuQ29udGV4dCgpLnRyYWNlU3RhdGUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc2VyaWFsaXplKCksXG4gICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgaWQ6IHQuc3BhbkNvbnRleHQoKS5zcGFuSWQsXG4gICAgICAgIGtpbmQ6IHQua2luZCxcbiAgICAgICAgdGltZXN0YW1wOiBqZSh0LnN0YXJ0VGltZSksXG4gICAgICAgIGR1cmF0aW9uOiBqZSh0LmR1cmF0aW9uKSxcbiAgICAgICAgYXR0cmlidXRlczogdC5hdHRyaWJ1dGVzLFxuICAgICAgICBzdGF0dXM6IHQuc3RhdHVzLFxuICAgICAgICBldmVudHM6IHQuZXZlbnRzLFxuICAgICAgICBsaW5rczogdC5saW5rc1xuICAgICAgfTtcbiAgICB9LCByLnByb3RvdHlwZS5fc2VuZFNwYW5zID0gZnVuY3Rpb24odCwgZSkge1xuICAgICAgdmFyIG4sIG87XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKHZhciBpID0gSHQodCksIGEkMSA9IGkubmV4dCgpOyAhYSQxLmRvbmU7IGEkMSA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIHMgPSBhJDEudmFsdWU7XG4gICAgICAgICAgY29uc29sZS5kaXIodGhpcy5fZXhwb3J0SW5mbyhzKSwgeyBkZXB0aDogMyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBuID0geyBlcnJvcjogbCB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhJDEgJiYgIWEkMS5kb25lICYmIChvID0gaS5yZXR1cm4pICYmIG8uY2FsbChpKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGUpXG4gICAgICAgIHJldHVybiBlKHsgY29kZTogYS5TVUNDRVNTIH0pO1xuICAgIH0sIHI7XG4gIH0pKClcbiksIFF0ID0gZnVuY3Rpb24ociwgdCwgZSwgbikge1xuICBmdW5jdGlvbiBvKGkpIHtcbiAgICByZXR1cm4gaSBpbnN0YW5jZW9mIGUgPyBpIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKGksIGEpIHtcbiAgICBmdW5jdGlvbiBzKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KHApKTtcbiAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgYShjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3cocCkpO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICBhKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KHApIHtcbiAgICAgIHAuZG9uZSA/IGkocC52YWx1ZSkgOiBvKHAudmFsdWUpLnRoZW4ocywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KHIsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59LCBYdCA9IGZ1bmN0aW9uKHIsIHQpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoaVswXSAmIDEpIHRocm93IGlbMV07XG4gICAgcmV0dXJuIGlbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIG8sIGksIGE7XG4gIHJldHVybiBhID0geyBuZXh0OiBzKDApLCB0aHJvdzogcygxKSwgcmV0dXJuOiBzKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIHModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gbChbdSwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIG8gJiYgKGkgPSB1WzBdICYgMiA/IG8ucmV0dXJuIDogdVswXSA/IG8udGhyb3cgfHwgKChpID0gby5yZXR1cm4pICYmIGkuY2FsbChvKSwgMCkgOiBvLm5leHQpICYmICEoaSA9IGkuY2FsbChvLCB1WzFdKSkuZG9uZSkgcmV0dXJuIGk7XG4gICAgICBzd2l0Y2ggKG8gPSAwLCBpICYmICh1ID0gW3VbMF0gJiAyLCBpLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBvID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpID0gZS50cnlzLCAhKGkgPSBpLmxlbmd0aCA+IDAgJiYgaVtpLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFpIHx8IHVbMV0gPiBpWzBdICYmIHVbMV0gPCBpWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IGlbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzFdLCBpID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAmJiBlLmxhYmVsIDwgaVsyXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGlbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaVsyXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHQuY2FsbChyLCBlKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICB1ID0gWzYsIHBdLCBvID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IGkgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn0sIHJlID0gKFxuICAvKiogQGNsYXNzICovXG4gIChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiByKHQpIHtcbiAgICAgIHRoaXMuX2V4cG9ydGVyID0gdCwgdGhpcy5fc2h1dGRvd25PbmNlID0gbmV3IGZ0KHRoaXMuX3NodXRkb3duLCB0aGlzKSwgdGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIH1cbiAgICByZXR1cm4gci5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFF0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFh0KHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBzd2l0Y2ggKHQubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIFs0LCBQcm9taXNlLmFsbChBcnJheS5mcm9tKHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzKSldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gdC5zZW50KCksIHRoaXMuX2V4cG9ydGVyLmZvcmNlRmx1c2ggPyBbNCwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCgpXSA6IFszLCAzXTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgdC5zZW50KCksIHQubGFiZWwgPSAzO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAvKnJldHVybiovXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIHIucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCBlKSB7XG4gICAgfSwgci5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4sIG87XG4gICAgICBpZiAoIXRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCAmJiAodC5zcGFuQ29udGV4dCgpLnRyYWNlRmxhZ3MgJiBZdC5TQU1QTEVEKSAhPT0gMCkge1xuICAgICAgICB2YXIgaSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBPdCQxLl9leHBvcnQoZS5fZXhwb3J0ZXIsIFt0XSkudGhlbihmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICB2YXIgbDtcbiAgICAgICAgICAgIHMuY29kZSAhPT0gYS5TVUNDRVNTICYmIEVyKChsID0gcy5lcnJvcikgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IG5ldyBFcnJvcihcIlNpbXBsZVNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCAoc3RhdHVzIFwiICsgcyArIFwiKVwiKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgRXIocyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0LnJlc291cmNlLmFzeW5jQXR0cmlidXRlc1BlbmRpbmcpIHtcbiAgICAgICAgICB2YXIgYSQxID0gKG8gPSAobiA9IHQucmVzb3VyY2UpLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uY2FsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGEkMSAhPSBudWxsICYmIGUuX3VucmVzb2x2ZWRFeHBvcnRzLmRlbGV0ZShhJDEpLCBpKCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIEVyKHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGEkMSAhPSBudWxsICYmIHRoaXMuX3VucmVzb2x2ZWRFeHBvcnRzLmFkZChhJDEpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBpKCk7XG4gICAgICB9XG4gICAgfSwgci5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH0sIHIucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgfSwgcjtcbiAgfSkoKVxuKTtcblxuZXhwb3J0IHsgQiwgRHQgYXMgRCwgR3QgYXMgRywgUCwgUiwgUywgVywgZWUgYXMgZSwgZywganQgYXMgaiwgcmUgYXMgciwgdGUgYXMgdCwgeHQgYXMgeCwgenQgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsR0FBSSxLQUFLQyxHQUFJLEtBQUtDLEdBQUksS0FBS0MsSUFBSSxLQUFLQyxJQUFJLEtBQUtDLElBQU0sS0FBS0MsSUFBSSxLQUFLQyxVQUFVO0FBQ3pGLFNBQVMsS0FBQUMsU0FBUztBQUNsQixTQUFTLE1BQU1DLEdBQUksS0FBS0Ms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R0FBSyxRQUFRTyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVNJLEdBQUc7QUFDckQsZ0JBQUloQjtBQUNKLFlBQUFnQixFQUFFLFNBQVNQLEVBQUUsV0FBV2xCLEdBQUlTLElBQUlnQixFQUFFLFdBQVcsUUFBUWhCLE1BQU0sU0FBU0EsSUFBSSxJQUFJLE1BQU0scURBQXFEZ0IsSUFBSSxHQUFHLENBQUM7QUFBQSxVQUNqSixDQUFDLEVBQUUsTUFBTSxTQUFTQSxHQUFHO0FBQ25CLFlBQUF6QixFQUFHeUIsQ0FBQztBQUFBLFVBQ04sQ0FBQztBQUFBLFFBQ0g7QUFDQSxZQUFJLEVBQUUsU0FBUyx3QkFBd0I7QUFDckMsY0FBSVQsS0FBT00sS0FBSyxJQUFJLEVBQUUsVUFBVSw0QkFBNEIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxXQUFXO0FBQ3BILG1CQUFPTixLQUFPLFFBQVFLLEVBQUUsbUJBQW1CLE9BQU9MLENBQUcsR0FBR1EsRUFBRTtBQUFBLFVBQzVELEdBQUcsU0FBU0MsR0FBRztBQUNiLG1CQUFPekIsRUFBR3lCLENBQUM7QUFBQSxVQUNiLENBQUM7QUFDRCxVQUFBVCxLQUFPLFFBQVEsS0FBSyxtQkFBbUIsSUFBSUEsQ0FBRztBQUFBLFFBQ2hEO0FBQ0UsVUFBQVEsRUFBRTtBQUFBLE1BQ047QUFBQSxJQUNGLEdBQUd0QyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLGFBQU8sS0FBSyxjQUFjLEtBQUs7QUFBQSxJQUNqQyxHQUFHQSxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLGFBQU8sS0FBSyxVQUFVLFNBQVM7QUFBQSxJQUNqQyxHQUFHQTtBQUFBLEVBQ0wsR0FBRztBQUFBOyIsCiAgIm5hbWVzIjogWyJZdCIsICJ4ZSIsICJUZSIsICJwcyIsICJydCIsICJ2ZSQxIiwgIlBuIiwgImdzIiwgInIiLCAiamUiLCAieV8iLCAicWUiLCAiWGUiLCAiUiQyIiwgInBfIiwgIk8kMSIsICJOXyIsICJiXyIsICJOQSIsICJNQSIsICJyXyIsICJlQSIsICJFciIsICJPZSIsICJ2ZSIsICJWZSIsICJaciIsICJmdCIsICJTZSIsICJudCIsICJRciIsICJsIiwgImNlIiwgImQiLCAicCIsICJhciIsICJPdCQxIiwgInUiLCAiYSQxIiwgIlIkMSIsICJhIiwgInd0IiwgIkQiLCAiZSIsICJvIiwgIkN0IiwgImkiLCAicyIsICJ4dCIsICJyJDEiLCAiYyIsICJQIiwgImciLCAiQiIsICJXIiwgIkUiLCAicCQxIiwgImYiLCAiQnQiLCAiRHQiLCAiR3QiLCAicSIsICJDIiwgImwkMSIsICJqIiwgIkciLCAiYiIsICJydCQxIiwgImp0IiwgImt0IiwgIkh0IiwgIlF0Il0KfQo=