@e280/stz 0.1.3 → 0.2.0-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/s/map-g.ts +28 -0
- package/s/pubsub.ts +41 -28
- package/x/map-g.d.ts +7 -0
- package/x/map-g.js +24 -0
- package/x/map-g.js.map +1 -1
- package/x/pubsub.d.ts +11 -6
- package/x/pubsub.js +29 -21
- package/x/pubsub.js.map +1 -1
package/package.json
CHANGED
package/s/map-g.ts
CHANGED
|
@@ -31,6 +31,34 @@ export class MapG<K, V> extends Map<K, V> {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/** extended weak map with handy methods like `require` and `guarantee` */
|
|
35
|
+
export class WeakMapG<K extends WeakKey, V> extends WeakMap<K, V> {
|
|
36
|
+
static require<K extends WeakKey, V>(map: WeakMap<K, V>, key: K) {
|
|
37
|
+
if (map.has(key))
|
|
38
|
+
return map.get(key)!
|
|
39
|
+
else
|
|
40
|
+
throw new Error(`required key not found`)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static guarantee<K extends WeakKey, V>(map: WeakMap<K, V>, key: K, make: () => V) {
|
|
44
|
+
if (map.has(key))
|
|
45
|
+
return map.get(key)!
|
|
46
|
+
else {
|
|
47
|
+
const value = make()
|
|
48
|
+
map.set(key, value)
|
|
49
|
+
return value
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
require(key: K) {
|
|
54
|
+
return WeakMapG.require(this, key)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
guarantee(key: K, make: () => V) {
|
|
58
|
+
return WeakMapG.guarantee(this, key, make)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
34
62
|
export type Identifiable<Id = any> = {id: Id}
|
|
35
63
|
|
|
36
64
|
/** js map but for things that have an `id` field */
|
package/s/pubsub.ts
CHANGED
|
@@ -6,14 +6,20 @@ export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>)
|
|
|
6
6
|
export interface Xub<A extends any[] = []> {
|
|
7
7
|
|
|
8
8
|
/** publish to all subscribed listeners. */
|
|
9
|
-
|
|
9
|
+
publish(...a: A): Promise<void>
|
|
10
10
|
|
|
11
11
|
/** subscribe a listener function. */
|
|
12
|
-
|
|
12
|
+
subscribe(fn: Listener<A>): () => void
|
|
13
|
+
|
|
14
|
+
/** publish to all subscribed listeners, with pubsub facilities. */
|
|
15
|
+
pub: Pub<A>
|
|
16
|
+
|
|
17
|
+
/** subscribe a listener function, with pubsub facilities. */
|
|
18
|
+
sub: Sub<A>
|
|
13
19
|
|
|
14
20
|
/**
|
|
15
21
|
* subscribe a listener function.
|
|
16
|
-
* @alias
|
|
22
|
+
* @alias subscribe
|
|
17
23
|
*/
|
|
18
24
|
on(fn: Listener<A>): () => void
|
|
19
25
|
|
|
@@ -34,16 +40,25 @@ export interface Pub<A extends any[] = []> extends Xub<A> {
|
|
|
34
40
|
(...a: A): Promise<void>
|
|
35
41
|
}
|
|
36
42
|
|
|
43
|
+
/** make pubsub facilities */
|
|
37
44
|
export function xub<A extends any[] = []>() {
|
|
38
45
|
const set = new Set<Listener<A>>()
|
|
39
46
|
|
|
40
|
-
function
|
|
47
|
+
async function publish(...a: A) {
|
|
48
|
+
await Promise.all([...set].map(fn => fn(...a)))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function subscribe(fn: Listener<A>) {
|
|
41
52
|
set.add(fn)
|
|
42
53
|
return () => { set.delete(fn) }
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
async function pub(...a: A) {
|
|
46
|
-
|
|
57
|
+
return publish(...a)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function sub(fn: Listener<A>) {
|
|
61
|
+
return subscribe(fn)
|
|
47
62
|
}
|
|
48
63
|
|
|
49
64
|
async function next() {
|
|
@@ -59,34 +74,32 @@ export function xub<A extends any[] = []>() {
|
|
|
59
74
|
set.clear()
|
|
60
75
|
}
|
|
61
76
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return
|
|
77
|
+
const x = {
|
|
78
|
+
pub,
|
|
79
|
+
sub,
|
|
80
|
+
publish,
|
|
81
|
+
subscribe,
|
|
82
|
+
on: subscribe,
|
|
83
|
+
next,
|
|
84
|
+
clear,
|
|
85
|
+
} as Xub<A>
|
|
86
|
+
|
|
87
|
+
Object.assign(sub, x)
|
|
88
|
+
Object.assign(pub, x)
|
|
89
|
+
return x
|
|
75
90
|
}
|
|
76
91
|
|
|
77
|
-
/** create a subscriber fn that
|
|
92
|
+
/** create a subscriber fn that also has pubsub facilities */
|
|
78
93
|
export function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A> {
|
|
79
|
-
const
|
|
80
|
-
if (listener)
|
|
81
|
-
|
|
82
|
-
return fn
|
|
94
|
+
const x = xub<A>()
|
|
95
|
+
if (listener) x.sub(listener)
|
|
96
|
+
return x.sub
|
|
83
97
|
}
|
|
84
98
|
|
|
85
|
-
/** create a publisher fn that
|
|
99
|
+
/** create a publisher fn that also has pubsub facilities */
|
|
86
100
|
export function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A> {
|
|
87
|
-
const
|
|
88
|
-
if (listener)
|
|
89
|
-
|
|
90
|
-
return fn
|
|
101
|
+
const x = xub<A>()
|
|
102
|
+
if (listener) x.sub(listener)
|
|
103
|
+
return x.pub
|
|
91
104
|
}
|
|
92
105
|
|
package/x/map-g.d.ts
CHANGED
|
@@ -6,6 +6,13 @@ export declare class MapG<K, V> extends Map<K, V> {
|
|
|
6
6
|
require(key: K): NonNullable<V>;
|
|
7
7
|
guarantee(key: K, make: () => V): V;
|
|
8
8
|
}
|
|
9
|
+
/** extended weak map with handy methods like `require` and `guarantee` */
|
|
10
|
+
export declare class WeakMapG<K extends WeakKey, V> extends WeakMap<K, V> {
|
|
11
|
+
static require<K extends WeakKey, V>(map: WeakMap<K, V>, key: K): NonNullable<V>;
|
|
12
|
+
static guarantee<K extends WeakKey, V>(map: WeakMap<K, V>, key: K, make: () => V): V;
|
|
13
|
+
require(key: K): NonNullable<V>;
|
|
14
|
+
guarantee(key: K, make: () => V): V;
|
|
15
|
+
}
|
|
9
16
|
export type Identifiable<Id = any> = {
|
|
10
17
|
id: Id;
|
|
11
18
|
};
|
package/x/map-g.js
CHANGED
|
@@ -25,6 +25,30 @@ export class MapG extends Map {
|
|
|
25
25
|
return MapG.guarantee(this, key, make);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/** extended weak map with handy methods like `require` and `guarantee` */
|
|
29
|
+
export class WeakMapG extends WeakMap {
|
|
30
|
+
static require(map, key) {
|
|
31
|
+
if (map.has(key))
|
|
32
|
+
return map.get(key);
|
|
33
|
+
else
|
|
34
|
+
throw new Error(`required key not found`);
|
|
35
|
+
}
|
|
36
|
+
static guarantee(map, key, make) {
|
|
37
|
+
if (map.has(key))
|
|
38
|
+
return map.get(key);
|
|
39
|
+
else {
|
|
40
|
+
const value = make();
|
|
41
|
+
map.set(key, value);
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
require(key) {
|
|
46
|
+
return WeakMapG.require(this, key);
|
|
47
|
+
}
|
|
48
|
+
guarantee(key, make) {
|
|
49
|
+
return WeakMapG.guarantee(this, key, make);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
28
52
|
/** js map but for things that have an `id` field */
|
|
29
53
|
export class PoolG extends MapG {
|
|
30
54
|
got(value) {
|
package/x/map-g.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,wEAAwE;AACxE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"map-g.js","sourceRoot":"","sources":["../s/map-g.ts"],"names":[],"mappings":"AACA,wEAAwE;AACxE,MAAM,OAAO,IAAW,SAAQ,GAAS;IACxC,MAAM,CAAC,OAAO,CAAO,GAAc,EAAE,GAAM;QAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,CAAA;IACrD,CAAC;IAED,MAAM,CAAC,SAAS,CAAO,GAAc,EAAE,GAAM,EAAE,IAAa;QAC3D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,KAAK;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACvC,CAAC;CACD;AAED,0EAA0E;AAC1E,MAAM,OAAO,QAA+B,SAAQ,OAAa;IAChE,MAAM,CAAC,OAAO,CAAuB,GAAkB,EAAE,GAAM;QAC9D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;;YAEpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,SAAS,CAAuB,GAAkB,EAAE,GAAM,EAAE,IAAa;QAC/E,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACf,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAA;aAChB,CAAC;YACL,MAAM,KAAK,GAAG,IAAI,EAAE,CAAA;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACnB,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAM;QACb,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,SAAS,CAAC,GAAM,EAAE,IAAa;QAC9B,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;CACD;AAID,oDAAoD;AACpD,MAAM,OAAO,KAA8B,SAAQ,IAAgB;IAClE,GAAG,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,KAAQ;QACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,CAAC,KAAQ;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;CACD"}
|
package/x/pubsub.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
export type Listener<A extends any[]> = (...a: A) => (void | Promise<void>);
|
|
2
2
|
export interface Xub<A extends any[] = []> {
|
|
3
3
|
/** publish to all subscribed listeners. */
|
|
4
|
-
|
|
4
|
+
publish(...a: A): Promise<void>;
|
|
5
5
|
/** subscribe a listener function. */
|
|
6
|
-
|
|
6
|
+
subscribe(fn: Listener<A>): () => void;
|
|
7
|
+
/** publish to all subscribed listeners, with pubsub facilities. */
|
|
8
|
+
pub: Pub<A>;
|
|
9
|
+
/** subscribe a listener function, with pubsub facilities. */
|
|
10
|
+
sub: Sub<A>;
|
|
7
11
|
/**
|
|
8
12
|
* subscribe a listener function.
|
|
9
|
-
* @alias
|
|
13
|
+
* @alias subscribe
|
|
10
14
|
*/
|
|
11
15
|
on(fn: Listener<A>): () => void;
|
|
12
16
|
/** wait for the next published value */
|
|
@@ -22,8 +26,9 @@ export interface Sub<A extends any[] = []> extends Xub<A> {
|
|
|
22
26
|
export interface Pub<A extends any[] = []> extends Xub<A> {
|
|
23
27
|
(...a: A): Promise<void>;
|
|
24
28
|
}
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
/** make pubsub facilities */
|
|
30
|
+
export declare function xub<A extends any[] = []>(): Xub<A>;
|
|
31
|
+
/** create a subscriber fn that also has pubsub facilities */
|
|
27
32
|
export declare function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A>;
|
|
28
|
-
/** create a publisher fn that
|
|
33
|
+
/** create a publisher fn that also has pubsub facilities */
|
|
29
34
|
export declare function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A>;
|
package/x/pubsub.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { defer } from "./defer.js";
|
|
2
|
+
/** make pubsub facilities */
|
|
2
3
|
export function xub() {
|
|
3
4
|
const set = new Set();
|
|
4
|
-
function
|
|
5
|
+
async function publish(...a) {
|
|
6
|
+
await Promise.all([...set].map(fn => fn(...a)));
|
|
7
|
+
}
|
|
8
|
+
function subscribe(fn) {
|
|
5
9
|
set.add(fn);
|
|
6
10
|
return () => { set.delete(fn); };
|
|
7
11
|
}
|
|
8
12
|
async function pub(...a) {
|
|
9
|
-
|
|
13
|
+
return publish(...a);
|
|
14
|
+
}
|
|
15
|
+
function sub(fn) {
|
|
16
|
+
return subscribe(fn);
|
|
10
17
|
}
|
|
11
18
|
async function next() {
|
|
12
19
|
const { promise, resolve } = defer();
|
|
@@ -19,30 +26,31 @@ export function xub() {
|
|
|
19
26
|
function clear() {
|
|
20
27
|
set.clear();
|
|
21
28
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
const x = {
|
|
30
|
+
pub,
|
|
31
|
+
sub,
|
|
32
|
+
publish,
|
|
33
|
+
subscribe,
|
|
34
|
+
on: subscribe,
|
|
35
|
+
next,
|
|
36
|
+
clear,
|
|
37
|
+
};
|
|
38
|
+
Object.assign(sub, x);
|
|
39
|
+
Object.assign(pub, x);
|
|
40
|
+
return x;
|
|
33
41
|
}
|
|
34
|
-
/** create a subscriber fn that
|
|
42
|
+
/** create a subscriber fn that also has pubsub facilities */
|
|
35
43
|
export function sub(listener) {
|
|
36
|
-
const
|
|
44
|
+
const x = xub();
|
|
37
45
|
if (listener)
|
|
38
|
-
|
|
39
|
-
return
|
|
46
|
+
x.sub(listener);
|
|
47
|
+
return x.sub;
|
|
40
48
|
}
|
|
41
|
-
/** create a publisher fn that
|
|
49
|
+
/** create a publisher fn that also has pubsub facilities */
|
|
42
50
|
export function pub(listener) {
|
|
43
|
-
const
|
|
51
|
+
const x = xub();
|
|
44
52
|
if (listener)
|
|
45
|
-
|
|
46
|
-
return
|
|
53
|
+
x.sub(listener);
|
|
54
|
+
return x.pub;
|
|
47
55
|
}
|
|
48
56
|
//# sourceMappingURL=pubsub.js.map
|
package/x/pubsub.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../s/pubsub.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAyChC,6BAA6B;AAC7B,MAAM,UAAU,GAAG;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAe,CAAA;IAElC,KAAK,UAAU,OAAO,CAAC,GAAG,CAAI;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,SAAS,SAAS,CAAC,EAAe;QACjC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACX,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,GAAG,CAAI;QACzB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IACrB,CAAC;IAED,SAAS,GAAG,CAAC,EAAe;QAC3B,OAAO,SAAS,CAAC,EAAE,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,UAAU,IAAI;QAClB,MAAM,EAAC,OAAO,EAAE,OAAO,EAAC,GAAG,KAAK,EAAK,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YAChC,OAAO,CAAC,CAAC,CAAC,CAAA;YACV,WAAW,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IACf,CAAC;IAED,SAAS,KAAK;QACb,GAAG,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,GAAG;QACT,GAAG;QACH,GAAG;QACH,OAAO;QACP,SAAS;QACT,EAAE,EAAE,SAAS;QACb,IAAI;QACJ,KAAK;KACK,CAAA;IAEX,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrB,OAAO,CAAC,CAAA;AACT,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,CAAC,GAAG,GAAG,EAAK,CAAA;IAClB,IAAI,QAAQ;QAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,CAAA;AACb,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,GAAG,CAAuB,QAAsB;IAC/D,MAAM,CAAC,GAAG,GAAG,EAAK,CAAA;IAClB,IAAI,QAAQ;QAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,CAAA;AACb,CAAC"}
|