@everymatrix/player-rglimits 1.53.0 → 1.53.10

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.
@@ -0,0 +1,655 @@
1
+ function a() {
2
+ }
3
+ function O(t) {
4
+ return t();
5
+ }
6
+ function j() {
7
+ return /* @__PURE__ */ Object.create(null);
8
+ }
9
+ function b(t) {
10
+ t.forEach(O);
11
+ }
12
+ function P(t) {
13
+ return typeof t == "function";
14
+ }
15
+ function z(t, e) {
16
+ return t != t ? e == e : t !== e || t && typeof t == "object" || typeof t == "function";
17
+ }
18
+ function I(t) {
19
+ return Object.keys(t).length === 0;
20
+ }
21
+ function D(t, ...e) {
22
+ if (t == null) {
23
+ for (const s of e)
24
+ s(void 0);
25
+ return a;
26
+ }
27
+ const n = t.subscribe(...e);
28
+ return n.unsubscribe ? () => n.unsubscribe() : n;
29
+ }
30
+ function dt(t, e, n) {
31
+ t.$$.on_destroy.push(D(e, n));
32
+ }
33
+ function G(t, e) {
34
+ t.appendChild(e);
35
+ }
36
+ function U(t, e, n) {
37
+ const s = q(t);
38
+ if (!s.getElementById(e)) {
39
+ const i = w("style");
40
+ i.id = e, i.textContent = n, F(s, i);
41
+ }
42
+ }
43
+ function q(t) {
44
+ if (!t) return document;
45
+ const e = t.getRootNode ? t.getRootNode() : t.ownerDocument;
46
+ return e && /** @type {ShadowRoot} */
47
+ e.host ? (
48
+ /** @type {ShadowRoot} */
49
+ e
50
+ ) : t.ownerDocument;
51
+ }
52
+ function F(t, e) {
53
+ return G(
54
+ /** @type {Document} */
55
+ t.head || t,
56
+ e
57
+ ), e.sheet;
58
+ }
59
+ function C(t, e, n) {
60
+ t.insertBefore(e, n || null);
61
+ }
62
+ function x(t) {
63
+ t.parentNode && t.parentNode.removeChild(t);
64
+ }
65
+ function ht(t, e) {
66
+ for (let n = 0; n < t.length; n += 1)
67
+ t[n] && t[n].d(e);
68
+ }
69
+ function w(t) {
70
+ return document.createElement(t);
71
+ }
72
+ function J(t) {
73
+ return document.createElementNS("http://www.w3.org/2000/svg", t);
74
+ }
75
+ function M(t) {
76
+ return document.createTextNode(t);
77
+ }
78
+ function $t() {
79
+ return M(" ");
80
+ }
81
+ function _t() {
82
+ return M("");
83
+ }
84
+ function pt(t, e, n, s) {
85
+ return t.addEventListener(e, n, s), () => t.removeEventListener(e, n, s);
86
+ }
87
+ function mt(t) {
88
+ return function(e) {
89
+ return e.stopPropagation(), t.call(this, e);
90
+ };
91
+ }
92
+ function H(t, e, n) {
93
+ n == null ? t.removeAttribute(e) : t.getAttribute(e) !== n && t.setAttribute(e, n);
94
+ }
95
+ function gt(t, e, n) {
96
+ const s = e.toLowerCase();
97
+ s in t ? t[s] = typeof t[s] == "boolean" && n === "" ? !0 : n : e in t ? t[e] = typeof t[e] == "boolean" && n === "" ? !0 : n : H(t, e, n);
98
+ }
99
+ function V(t) {
100
+ return Array.from(t.childNodes);
101
+ }
102
+ function yt(t, e) {
103
+ e = "" + e, t.data !== e && (t.data = /** @type {string} */
104
+ e);
105
+ }
106
+ function bt(t, e) {
107
+ t.value = e ?? "";
108
+ }
109
+ function xt(t, e, n, s) {
110
+ n == null ? t.style.removeProperty(e) : t.style.setProperty(e, n, "");
111
+ }
112
+ function wt(t, e, n) {
113
+ for (let s = 0; s < t.options.length; s += 1) {
114
+ const i = t.options[s];
115
+ if (i.__value === e) {
116
+ i.selected = !0;
117
+ return;
118
+ }
119
+ }
120
+ (!n || e !== void 0) && (t.selectedIndex = -1);
121
+ }
122
+ function Et(t) {
123
+ const e = t.querySelector(":checked");
124
+ return e && e.__value;
125
+ }
126
+ class vt {
127
+ /**
128
+ * @private
129
+ * @default false
130
+ */
131
+ is_svg = !1;
132
+ /** parent for creating node */
133
+ e = void 0;
134
+ /** html tag nodes */
135
+ n = void 0;
136
+ /** target */
137
+ t = void 0;
138
+ /** anchor */
139
+ a = void 0;
140
+ constructor(e = !1) {
141
+ this.is_svg = e, this.e = this.n = null;
142
+ }
143
+ /**
144
+ * @param {string} html
145
+ * @returns {void}
146
+ */
147
+ c(e) {
148
+ this.h(e);
149
+ }
150
+ /**
151
+ * @param {string} html
152
+ * @param {HTMLElement | SVGElement} target
153
+ * @param {HTMLElement | SVGElement} anchor
154
+ * @returns {void}
155
+ */
156
+ m(e, n, s = null) {
157
+ this.e || (this.is_svg ? this.e = J(
158
+ /** @type {keyof SVGElementTagNameMap} */
159
+ n.nodeName
160
+ ) : this.e = w(
161
+ /** @type {keyof HTMLElementTagNameMap} */
162
+ n.nodeType === 11 ? "TEMPLATE" : n.nodeName
163
+ ), this.t = n.tagName !== "TEMPLATE" ? n : (
164
+ /** @type {HTMLTemplateElement} */
165
+ n.content
166
+ ), this.c(e)), this.i(s);
167
+ }
168
+ /**
169
+ * @param {string} html
170
+ * @returns {void}
171
+ */
172
+ h(e) {
173
+ this.e.innerHTML = e, this.n = Array.from(
174
+ this.e.nodeName === "TEMPLATE" ? this.e.content.childNodes : this.e.childNodes
175
+ );
176
+ }
177
+ /**
178
+ * @returns {void} */
179
+ i(e) {
180
+ for (let n = 0; n < this.n.length; n += 1)
181
+ C(this.t, this.n[n], e);
182
+ }
183
+ /**
184
+ * @param {string} html
185
+ * @returns {void}
186
+ */
187
+ p(e) {
188
+ this.d(), this.h(e), this.i(this.a);
189
+ }
190
+ /**
191
+ * @returns {void} */
192
+ d() {
193
+ this.n.forEach(x);
194
+ }
195
+ }
196
+ function K(t) {
197
+ const e = {};
198
+ return t.childNodes.forEach(
199
+ /** @param {Element} node */
200
+ (n) => {
201
+ e[n.slot || "default"] = !0;
202
+ }
203
+ ), e;
204
+ }
205
+ let m;
206
+ function p(t) {
207
+ m = t;
208
+ }
209
+ function Q() {
210
+ if (!m) throw new Error("Function called outside component initialization");
211
+ return m;
212
+ }
213
+ function Lt(t) {
214
+ Q().$$.on_mount.push(t);
215
+ }
216
+ const h = [], v = [];
217
+ let $ = [];
218
+ const S = [], W = /* @__PURE__ */ Promise.resolve();
219
+ let L = !1;
220
+ function X() {
221
+ L || (L = !0, W.then(y));
222
+ }
223
+ function k(t) {
224
+ $.push(t);
225
+ }
226
+ const E = /* @__PURE__ */ new Set();
227
+ let d = 0;
228
+ function y() {
229
+ if (d !== 0)
230
+ return;
231
+ const t = m;
232
+ do {
233
+ try {
234
+ for (; d < h.length; ) {
235
+ const e = h[d];
236
+ d++, p(e), Y(e.$$);
237
+ }
238
+ } catch (e) {
239
+ throw h.length = 0, d = 0, e;
240
+ }
241
+ for (p(null), h.length = 0, d = 0; v.length; ) v.pop()();
242
+ for (let e = 0; e < $.length; e += 1) {
243
+ const n = $[e];
244
+ E.has(n) || (E.add(n), n());
245
+ }
246
+ $.length = 0;
247
+ } while (h.length);
248
+ for (; S.length; )
249
+ S.pop()();
250
+ L = !1, E.clear(), p(t);
251
+ }
252
+ function Y(t) {
253
+ if (t.fragment !== null) {
254
+ t.update(), b(t.before_update);
255
+ const e = t.dirty;
256
+ t.dirty = [-1], t.fragment && t.fragment.p(t.ctx, e), t.after_update.forEach(k);
257
+ }
258
+ }
259
+ function Z(t) {
260
+ const e = [], n = [];
261
+ $.forEach((s) => t.indexOf(s) === -1 ? e.push(s) : n.push(s)), n.forEach((s) => s()), $ = e;
262
+ }
263
+ const tt = /* @__PURE__ */ new Set();
264
+ function et(t, e) {
265
+ t && t.i && (tt.delete(t), t.i(e));
266
+ }
267
+ function kt(t) {
268
+ return t?.length !== void 0 ? t : Array.from(t);
269
+ }
270
+ function nt(t, e, n) {
271
+ const { fragment: s, after_update: i } = t.$$;
272
+ s && s.m(e, n), k(() => {
273
+ const o = t.$$.on_mount.map(O).filter(P);
274
+ t.$$.on_destroy ? t.$$.on_destroy.push(...o) : b(o), t.$$.on_mount = [];
275
+ }), i.forEach(k);
276
+ }
277
+ function st(t, e) {
278
+ const n = t.$$;
279
+ n.fragment !== null && (Z(n.after_update), b(n.on_destroy), n.fragment && n.fragment.d(e), n.on_destroy = n.fragment = null, n.ctx = []);
280
+ }
281
+ function it(t, e) {
282
+ t.$$.dirty[0] === -1 && (h.push(t), X(), t.$$.dirty.fill(0)), t.$$.dirty[e / 31 | 0] |= 1 << e % 31;
283
+ }
284
+ function rt(t, e, n, s, i, o, u = null, c = [-1]) {
285
+ const l = m;
286
+ p(t);
287
+ const r = t.$$ = {
288
+ fragment: null,
289
+ ctx: [],
290
+ // state
291
+ props: o,
292
+ update: a,
293
+ not_equal: i,
294
+ bound: j(),
295
+ // lifecycle
296
+ on_mount: [],
297
+ on_destroy: [],
298
+ on_disconnect: [],
299
+ before_update: [],
300
+ after_update: [],
301
+ context: new Map(e.context || (l ? l.$$.context : [])),
302
+ // everything else
303
+ callbacks: j(),
304
+ dirty: c,
305
+ skip_bound: !1,
306
+ root: e.target || l.$$.root
307
+ };
308
+ u && u(r.root);
309
+ let _ = !1;
310
+ if (r.ctx = n ? n(t, e.props || {}, (f, A, ...N) => {
311
+ const T = N.length ? N[0] : A;
312
+ return r.ctx && i(r.ctx[f], r.ctx[f] = T) && (!r.skip_bound && r.bound[f] && r.bound[f](T), _ && it(t, f)), A;
313
+ }) : [], r.update(), _ = !0, b(r.before_update), r.fragment = s ? s(r.ctx) : !1, e.target) {
314
+ if (e.hydrate) {
315
+ const f = V(e.target);
316
+ r.fragment && r.fragment.l(f), f.forEach(x);
317
+ } else
318
+ r.fragment && r.fragment.c();
319
+ e.intro && et(t.$$.fragment), nt(t, e.target, e.anchor), y();
320
+ }
321
+ p(l);
322
+ }
323
+ let B;
324
+ typeof HTMLElement == "function" && (B = class extends HTMLElement {
325
+ /** The Svelte component constructor */
326
+ $$ctor;
327
+ /** Slots */
328
+ $$s;
329
+ /** The Svelte component instance */
330
+ $$c;
331
+ /** Whether or not the custom element is connected */
332
+ $$cn = !1;
333
+ /** Component props data */
334
+ $$d = {};
335
+ /** `true` if currently in the process of reflecting component props back to attributes */
336
+ $$r = !1;
337
+ /** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */
338
+ $$p_d = {};
339
+ /** @type {Record<string, Function[]>} Event listeners */
340
+ $$l = {};
341
+ /** @type {Map<Function, Function>} Event listener unsubscribe functions */
342
+ $$l_u = /* @__PURE__ */ new Map();
343
+ constructor(t, e, n) {
344
+ super(), this.$$ctor = t, this.$$s = e, n && this.attachShadow({ mode: "open" });
345
+ }
346
+ addEventListener(t, e, n) {
347
+ if (this.$$l[t] = this.$$l[t] || [], this.$$l[t].push(e), this.$$c) {
348
+ const s = this.$$c.$on(t, e);
349
+ this.$$l_u.set(e, s);
350
+ }
351
+ super.addEventListener(t, e, n);
352
+ }
353
+ removeEventListener(t, e, n) {
354
+ if (super.removeEventListener(t, e, n), this.$$c) {
355
+ const s = this.$$l_u.get(e);
356
+ s && (s(), this.$$l_u.delete(e));
357
+ }
358
+ }
359
+ async connectedCallback() {
360
+ if (this.$$cn = !0, !this.$$c) {
361
+ let t = function(i) {
362
+ return () => {
363
+ let o;
364
+ return {
365
+ c: function() {
366
+ o = w("slot"), i !== "default" && H(o, "name", i);
367
+ },
368
+ /**
369
+ * @param {HTMLElement} target
370
+ * @param {HTMLElement} [anchor]
371
+ */
372
+ m: function(l, r) {
373
+ C(l, o, r);
374
+ },
375
+ d: function(l) {
376
+ l && x(o);
377
+ }
378
+ };
379
+ };
380
+ };
381
+ if (await Promise.resolve(), !this.$$cn || this.$$c)
382
+ return;
383
+ const e = {}, n = K(this);
384
+ for (const i of this.$$s)
385
+ i in n && (e[i] = [t(i)]);
386
+ for (const i of this.attributes) {
387
+ const o = this.$$g_p(i.name);
388
+ o in this.$$d || (this.$$d[o] = g(o, i.value, this.$$p_d, "toProp"));
389
+ }
390
+ for (const i in this.$$p_d)
391
+ !(i in this.$$d) && this[i] !== void 0 && (this.$$d[i] = this[i], delete this[i]);
392
+ this.$$c = new this.$$ctor({
393
+ target: this.shadowRoot || this,
394
+ props: {
395
+ ...this.$$d,
396
+ $$slots: e,
397
+ $$scope: {
398
+ ctx: []
399
+ }
400
+ }
401
+ });
402
+ const s = () => {
403
+ this.$$r = !0;
404
+ for (const i in this.$$p_d)
405
+ if (this.$$d[i] = this.$$c.$$.ctx[this.$$c.$$.props[i]], this.$$p_d[i].reflect) {
406
+ const o = g(
407
+ i,
408
+ this.$$d[i],
409
+ this.$$p_d,
410
+ "toAttribute"
411
+ );
412
+ o == null ? this.removeAttribute(this.$$p_d[i].attribute || i) : this.setAttribute(this.$$p_d[i].attribute || i, o);
413
+ }
414
+ this.$$r = !1;
415
+ };
416
+ this.$$c.$$.after_update.push(s), s();
417
+ for (const i in this.$$l)
418
+ for (const o of this.$$l[i]) {
419
+ const u = this.$$c.$on(i, o);
420
+ this.$$l_u.set(o, u);
421
+ }
422
+ this.$$l = {};
423
+ }
424
+ }
425
+ // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte
426
+ // and setting attributes through setAttribute etc, this is helpful
427
+ attributeChangedCallback(t, e, n) {
428
+ this.$$r || (t = this.$$g_p(t), this.$$d[t] = g(t, n, this.$$p_d, "toProp"), this.$$c?.$set({ [t]: this.$$d[t] }));
429
+ }
430
+ disconnectedCallback() {
431
+ this.$$cn = !1, Promise.resolve().then(() => {
432
+ !this.$$cn && this.$$c && (this.$$c.$destroy(), this.$$c = void 0);
433
+ });
434
+ }
435
+ $$g_p(t) {
436
+ return Object.keys(this.$$p_d).find(
437
+ (e) => this.$$p_d[e].attribute === t || !this.$$p_d[e].attribute && e.toLowerCase() === t
438
+ ) || t;
439
+ }
440
+ });
441
+ function g(t, e, n, s) {
442
+ const i = n[t]?.type;
443
+ if (e = i === "Boolean" && typeof e != "boolean" ? e != null : e, !s || !n[t])
444
+ return e;
445
+ if (s === "toAttribute")
446
+ switch (i) {
447
+ case "Object":
448
+ case "Array":
449
+ return e == null ? null : JSON.stringify(e);
450
+ case "Boolean":
451
+ return e ? "" : null;
452
+ case "Number":
453
+ return e ?? null;
454
+ default:
455
+ return e;
456
+ }
457
+ else
458
+ switch (i) {
459
+ case "Object":
460
+ case "Array":
461
+ return e && JSON.parse(e);
462
+ case "Boolean":
463
+ return e;
464
+ case "Number":
465
+ return e != null ? +e : e;
466
+ default:
467
+ return e;
468
+ }
469
+ }
470
+ function ot(t, e, n, s, i, o) {
471
+ let u = class extends B {
472
+ constructor() {
473
+ super(t, n, i), this.$$p_d = e;
474
+ }
475
+ static get observedAttributes() {
476
+ return Object.keys(e).map(
477
+ (c) => (e[c].attribute || c).toLowerCase()
478
+ );
479
+ }
480
+ };
481
+ return Object.keys(e).forEach((c) => {
482
+ Object.defineProperty(u.prototype, c, {
483
+ get() {
484
+ return this.$$c && c in this.$$c ? this.$$c[c] : this.$$d[c];
485
+ },
486
+ set(l) {
487
+ l = g(c, l, e), this.$$d[c] = l, this.$$c?.$set({ [c]: l });
488
+ }
489
+ });
490
+ }), s.forEach((c) => {
491
+ Object.defineProperty(u.prototype, c, {
492
+ get() {
493
+ return this.$$c?.[c];
494
+ }
495
+ });
496
+ }), t.element = /** @type {any} */
497
+ u, u;
498
+ }
499
+ class ct {
500
+ /**
501
+ * ### PRIVATE API
502
+ *
503
+ * Do not use, may change at any time
504
+ *
505
+ * @type {any}
506
+ */
507
+ $$ = void 0;
508
+ /**
509
+ * ### PRIVATE API
510
+ *
511
+ * Do not use, may change at any time
512
+ *
513
+ * @type {any}
514
+ */
515
+ $$set = void 0;
516
+ /** @returns {void} */
517
+ $destroy() {
518
+ st(this, 1), this.$destroy = a;
519
+ }
520
+ /**
521
+ * @template {Extract<keyof Events, string>} K
522
+ * @param {K} type
523
+ * @param {((e: Events[K]) => void) | null | undefined} callback
524
+ * @returns {() => void}
525
+ */
526
+ $on(e, n) {
527
+ if (!P(n))
528
+ return a;
529
+ const s = this.$$.callbacks[e] || (this.$$.callbacks[e] = []);
530
+ return s.push(n), () => {
531
+ const i = s.indexOf(n);
532
+ i !== -1 && s.splice(i, 1);
533
+ };
534
+ }
535
+ /**
536
+ * @param {Partial<Props>} props
537
+ * @returns {void}
538
+ */
539
+ $set(e) {
540
+ this.$$set && !I(e) && (this.$$.skip_bound = !0, this.$$set(e), this.$$.skip_bound = !1);
541
+ }
542
+ }
543
+ const lt = "4";
544
+ typeof window < "u" && (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(lt);
545
+ function ut(t) {
546
+ U(t, "svelte-gnt082", ".LoaderContainer{display:flex;justify-content:center}.lds-ellipsis{display:inline-block;position:relative;width:80px;height:80px}.lds-ellipsis div{position:absolute;top:33px;width:13px;height:13px;border-radius:50%;background:#d1d1d1;animation-timing-function:cubic-bezier(0, 1, 1, 0)}.lds-ellipsis div:nth-child(1){left:8px;animation:lds-ellipsis1 0.6s infinite}.lds-ellipsis div:nth-child(2){left:8px;animation:lds-ellipsis2 0.6s infinite}.lds-ellipsis div:nth-child(3){left:32px;animation:lds-ellipsis2 0.6s infinite}.lds-ellipsis div:nth-child(4){left:56px;animation:lds-ellipsis3 0.6s infinite}@keyframes lds-ellipsis1{0%{transform:scale(0)}100%{transform:scale(1)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}100%{transform:scale(0)}}@keyframes lds-ellipsis2{0%{transform:translate(0, 0)}100%{transform:translate(24px, 0)}}");
547
+ }
548
+ function ft(t) {
549
+ let e;
550
+ return {
551
+ c() {
552
+ e = w("div"), e.innerHTML = '<section class="LoaderContainer" part="LoaderContainer"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></section>';
553
+ },
554
+ m(n, s) {
555
+ C(n, e, s), t[3](e);
556
+ },
557
+ p: a,
558
+ i: a,
559
+ o: a,
560
+ d(n) {
561
+ n && x(e), t[3](null);
562
+ }
563
+ };
564
+ }
565
+ function at(t, e, n) {
566
+ let { clientstyling: s = "" } = e, { clientstylingurl: i = "" } = e, o;
567
+ const u = () => {
568
+ let r = document.createElement("style");
569
+ r.innerHTML = s, o.appendChild(r);
570
+ }, c = () => {
571
+ let r = new URL(i), _ = document.createElement("style");
572
+ fetch(r.href).then((f) => f.text()).then((f) => {
573
+ _.innerHTML = f, setTimeout(
574
+ () => {
575
+ o.appendChild(_);
576
+ },
577
+ 1
578
+ ), setTimeout(
579
+ () => {
580
+ },
581
+ 500
582
+ );
583
+ });
584
+ };
585
+ function l(r) {
586
+ v[r ? "unshift" : "push"](() => {
587
+ o = r, n(0, o);
588
+ });
589
+ }
590
+ return t.$$set = (r) => {
591
+ "clientstyling" in r && n(1, s = r.clientstyling), "clientstylingurl" in r && n(2, i = r.clientstylingurl);
592
+ }, t.$$.update = () => {
593
+ t.$$.dirty & /*clientstyling, customStylingContainer*/
594
+ 3 && s && o && u(), t.$$.dirty & /*clientstylingurl, customStylingContainer*/
595
+ 5 && i && o && c();
596
+ }, [o, s, i, l];
597
+ }
598
+ class R extends ct {
599
+ constructor(e) {
600
+ super(), rt(this, e, at, ft, z, { clientstyling: 1, clientstylingurl: 2 }, ut);
601
+ }
602
+ get clientstyling() {
603
+ return this.$$.ctx[1];
604
+ }
605
+ set clientstyling(e) {
606
+ this.$$set({ clientstyling: e }), y();
607
+ }
608
+ get clientstylingurl() {
609
+ return this.$$.ctx[2];
610
+ }
611
+ set clientstylingurl(e) {
612
+ this.$$set({ clientstylingurl: e }), y();
613
+ }
614
+ }
615
+ ot(R, { clientstyling: {}, clientstylingurl: {} }, [], [], !0);
616
+ const Ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
617
+ __proto__: null,
618
+ default: R
619
+ }, Symbol.toStringTag, { value: "Module" }));
620
+ export {
621
+ bt as A,
622
+ mt as B,
623
+ _t as C,
624
+ gt as D,
625
+ xt as E,
626
+ Ct as G,
627
+ vt as H,
628
+ ct as S,
629
+ z as a,
630
+ rt as b,
631
+ ot as c,
632
+ U as d,
633
+ w as e,
634
+ y as f,
635
+ H as g,
636
+ C as h,
637
+ P as i,
638
+ G as j,
639
+ x as k,
640
+ dt as l,
641
+ Et as m,
642
+ a as n,
643
+ Lt as o,
644
+ v as p,
645
+ $t as q,
646
+ b as r,
647
+ D as s,
648
+ M as t,
649
+ yt as u,
650
+ kt as v,
651
+ k as w,
652
+ wt as x,
653
+ pt as y,
654
+ ht as z
655
+ };