on-zero 0.6.0 → 0.6.2
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/dist/cjs/createZeroClient.cjs +27 -1
- package/dist/cjs/createZeroClient.native.js +29 -3
- package/dist/cjs/createZeroClient.native.js.map +1 -1
- package/dist/cjs/createZeroClient.recovery.test.cjs +96 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js +130 -0
- package/dist/cjs/createZeroClient.recovery.test.native.js.map +1 -0
- package/dist/cjs/httpPull/transport.test.cjs +17 -0
- package/dist/cjs/httpPull/transport.test.native.js +21 -0
- package/dist/cjs/httpPull/transport.test.native.js.map +1 -1
- package/dist/cjs/httpPullTransport.cjs +19 -3
- package/dist/cjs/httpPullTransport.native.js +19 -3
- package/dist/cjs/httpPullTransport.native.js.map +1 -1
- package/dist/esm/createZeroClient.mjs +27 -1
- package/dist/esm/createZeroClient.mjs.map +1 -1
- package/dist/esm/createZeroClient.native.js +29 -3
- package/dist/esm/createZeroClient.native.js.map +1 -1
- package/dist/esm/createZeroClient.recovery.test.mjs +97 -0
- package/dist/esm/createZeroClient.recovery.test.mjs.map +1 -0
- package/dist/esm/createZeroClient.recovery.test.native.js +128 -0
- package/dist/esm/createZeroClient.recovery.test.native.js.map +1 -0
- package/dist/esm/httpPull/transport.test.mjs +17 -0
- package/dist/esm/httpPull/transport.test.mjs.map +1 -1
- package/dist/esm/httpPull/transport.test.native.js +21 -0
- package/dist/esm/httpPull/transport.test.native.js.map +1 -1
- package/dist/esm/httpPullTransport.mjs +19 -3
- package/dist/esm/httpPullTransport.mjs.map +1 -1
- package/dist/esm/httpPullTransport.native.js +19 -3
- package/dist/esm/httpPullTransport.native.js.map +1 -1
- package/dist/esm/zeroRunner.mjs.map +1 -1
- package/dist/esm/zeroRunner.native.js.map +1 -1
- package/package.json +2 -2
- package/src/createZeroClient.recovery.test.tsx +104 -0
- package/src/createZeroClient.tsx +34 -1
- package/src/httpPull/transport.test.ts +19 -0
- package/src/httpPullTransport.ts +30 -2
- package/src/zeroRunner.ts +1 -1
- package/types/createZeroClient.d.ts.map +1 -1
- package/types/createZeroClient.recovery.test.d.ts +5 -0
- package/types/createZeroClient.recovery.test.d.ts.map +1 -0
- package/types/httpPullTransport.d.ts.map +1 -1
- package/types/zeroRunner.d.ts +1 -1
- package/types/zeroRunner.d.ts.map +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { createSchema, string, table } from '@rocicorp/zero'
|
|
4
|
+
import { act } from 'react'
|
|
5
|
+
import { createRoot, type Root } from 'react-dom/client'
|
|
6
|
+
import { afterEach, beforeEach, expect, test, vi } from 'vitest'
|
|
7
|
+
|
|
8
|
+
const fakeZero = vi.hoisted(() => {
|
|
9
|
+
class FakeZero {
|
|
10
|
+
readonly context = {}
|
|
11
|
+
readonly connection = {
|
|
12
|
+
state: {
|
|
13
|
+
current: { name: 'closed' },
|
|
14
|
+
subscribe: () => () => {},
|
|
15
|
+
},
|
|
16
|
+
connect: vi.fn(),
|
|
17
|
+
}
|
|
18
|
+
readonly delete = vi.fn(async () => ({ errors: [] }))
|
|
19
|
+
readonly close = vi.fn()
|
|
20
|
+
readonly run = vi.fn(async () => [])
|
|
21
|
+
readonly preload = vi.fn(() => ({
|
|
22
|
+
cleanup: () => {},
|
|
23
|
+
complete: Promise.resolve(),
|
|
24
|
+
}))
|
|
25
|
+
|
|
26
|
+
constructor() {
|
|
27
|
+
instances.push(this)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const instances: FakeZero[] = []
|
|
32
|
+
return { FakeZero, instances }
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
vi.mock('@rocicorp/zero', async (importOriginal) => {
|
|
36
|
+
const actual = await importOriginal<typeof import('@rocicorp/zero')>()
|
|
37
|
+
return {
|
|
38
|
+
...actual,
|
|
39
|
+
Zero: fakeZero.FakeZero,
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
import { createZeroClient } from './createZeroClient'
|
|
44
|
+
|
|
45
|
+
declare global {
|
|
46
|
+
// eslint-disable-next-line no-var
|
|
47
|
+
var IS_REACT_ACT_ENVIRONMENT: boolean | undefined
|
|
48
|
+
}
|
|
49
|
+
globalThis.IS_REACT_ACT_ENVIRONMENT = true
|
|
50
|
+
|
|
51
|
+
const noteTable = table('note').columns({ id: string(), body: string() }).primaryKey('id')
|
|
52
|
+
const schema = createSchema({ tables: [noteTable] })
|
|
53
|
+
|
|
54
|
+
const client = createZeroClient({
|
|
55
|
+
schema,
|
|
56
|
+
models: {},
|
|
57
|
+
groupedQueries: {},
|
|
58
|
+
instanceName: 'recovery-cache-test',
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
let container: HTMLDivElement
|
|
62
|
+
let root: Root | null
|
|
63
|
+
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
fakeZero.instances.length = 0
|
|
66
|
+
container = document.createElement('div')
|
|
67
|
+
root = null
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
afterEach(() => {
|
|
71
|
+
if (root) act(() => root?.unmount())
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
async function mount() {
|
|
75
|
+
root = createRoot(container)
|
|
76
|
+
await act(async () => {
|
|
77
|
+
root?.render(
|
|
78
|
+
<client.ProvideZero cacheURL="http://127.0.0.1:7777/zero" userID="agentbus">
|
|
79
|
+
<span>ok</span>
|
|
80
|
+
</client.ProvideZero>,
|
|
81
|
+
)
|
|
82
|
+
await Promise.resolve()
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
test('zero.delete invalidates cached instance before a remount recovery', async () => {
|
|
87
|
+
await mount()
|
|
88
|
+
const first = fakeZero.instances[0]
|
|
89
|
+
expect(first).toBeDefined()
|
|
90
|
+
|
|
91
|
+
const deleteZero = client.zero.delete
|
|
92
|
+
await act(async () => {
|
|
93
|
+
await deleteZero()
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
expect(first?.delete).toHaveBeenCalledTimes(1)
|
|
97
|
+
expect(first?.close).toHaveBeenCalledTimes(1)
|
|
98
|
+
|
|
99
|
+
act(() => root?.unmount())
|
|
100
|
+
await mount()
|
|
101
|
+
|
|
102
|
+
expect(fakeZero.instances).toHaveLength(2)
|
|
103
|
+
expect(fakeZero.instances[1]).not.toBe(first)
|
|
104
|
+
})
|
package/src/createZeroClient.tsx
CHANGED
|
@@ -264,6 +264,10 @@ export function createZeroClientInternal<
|
|
|
264
264
|
`Zero instance not initialized. Ensure ZeroProvider is mounted before accessing 'zero'.`,
|
|
265
265
|
)
|
|
266
266
|
}
|
|
267
|
+
if (key === 'delete') {
|
|
268
|
+
const instanceToDelete = latestZeroInstance
|
|
269
|
+
return () => deleteZeroInstance(instanceToDelete)
|
|
270
|
+
}
|
|
267
271
|
return getZeroProxyValue(latestZeroInstance, key)
|
|
268
272
|
},
|
|
269
273
|
})
|
|
@@ -373,6 +377,35 @@ export function createZeroClientInternal<
|
|
|
373
377
|
// with different identities would thrash this slot.
|
|
374
378
|
let cachedZero: { key: string; instance: ZeroInstance } | null = null
|
|
375
379
|
|
|
380
|
+
function invalidateZeroInstance(instanceToInvalidate: ZeroInstance | null): void {
|
|
381
|
+
if (!instanceToInvalidate) return
|
|
382
|
+
|
|
383
|
+
if (cachedZero?.instance === instanceToInvalidate) {
|
|
384
|
+
cachedZero = null
|
|
385
|
+
}
|
|
386
|
+
if (latestZeroInstance === instanceToInvalidate) {
|
|
387
|
+
latestZeroInstance = null
|
|
388
|
+
instance.runner = null
|
|
389
|
+
setRunner(null)
|
|
390
|
+
zeroInstanceVersion?.emit(zeroInstanceVersion.value + 1)
|
|
391
|
+
}
|
|
392
|
+
try {
|
|
393
|
+
instanceToInvalidate.close()
|
|
394
|
+
} catch {
|
|
395
|
+
// a deleted client is already unusable; close is best-effort cleanup.
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
async function deleteZeroInstance(
|
|
400
|
+
instanceToDelete: ZeroInstance | null,
|
|
401
|
+
): Promise<unknown> {
|
|
402
|
+
try {
|
|
403
|
+
return await instanceToDelete?.delete()
|
|
404
|
+
} finally {
|
|
405
|
+
invalidateZeroInstance(instanceToDelete)
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
|
|
376
409
|
// when ProvideZero is rendered without a real Zero instance (SSG, disable=true,
|
|
377
410
|
// or transiently while the active path is still creating its first instance),
|
|
378
411
|
// we want descendants' useZero() / useConnectionState() / on-zero useQuery to
|
|
@@ -553,7 +586,7 @@ export function createZeroClientInternal<
|
|
|
553
586
|
// the handlers only fire post-mount).
|
|
554
587
|
const instanceRef: { current: ZeroInstance | null } = { current: null }
|
|
555
588
|
const recoveryDeps: ZeroRecoveryDeps = {
|
|
556
|
-
deleteLocalState: () => instanceRef.current
|
|
589
|
+
deleteLocalState: () => deleteZeroInstance(instanceRef.current),
|
|
557
590
|
zeroEvents,
|
|
558
591
|
beforeReload,
|
|
559
592
|
}
|
|
@@ -382,6 +382,25 @@ describe('zero-http transport', () => {
|
|
|
382
382
|
view.destroy()
|
|
383
383
|
})
|
|
384
384
|
|
|
385
|
+
test('transient pull failures back off reconnect attempts', async () => {
|
|
386
|
+
const requests: RequestRecord[] = []
|
|
387
|
+
const fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
388
|
+
const request = recordRequest(input, init)
|
|
389
|
+
requests.push(request)
|
|
390
|
+
expect(request.path).toBe('/pull')
|
|
391
|
+
throw new TypeError('Failed to fetch')
|
|
392
|
+
})
|
|
393
|
+
install(fetch)
|
|
394
|
+
createZero()
|
|
395
|
+
|
|
396
|
+
await eventually(() => expect(requests.length).toBe(1))
|
|
397
|
+
await sleep(150)
|
|
398
|
+
expect(requests.length).toBe(1)
|
|
399
|
+
await eventually(() => expect(requests.length).toBe(2), 1_500)
|
|
400
|
+
await sleep(150)
|
|
401
|
+
expect(requests.length).toBe(2)
|
|
402
|
+
})
|
|
403
|
+
|
|
385
404
|
test('non-origin WebSockets pass through to the native implementation', () => {
|
|
386
405
|
const previous = globalThis.WebSocket
|
|
387
406
|
class NativeWebSocket {
|
package/src/httpPullTransport.ts
CHANGED
|
@@ -45,9 +45,12 @@ type TransportState = {
|
|
|
45
45
|
readonly sockets: Set<ZeroHttpSocket>
|
|
46
46
|
readonly pullIntervalMs: number | undefined
|
|
47
47
|
nextPokeID: number
|
|
48
|
+
transientFailureCount: number
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
const COOKIE_WIDTH = 20
|
|
52
|
+
const TRANSIENT_RECONNECT_BACKOFF_BASE_MS = 1_000
|
|
53
|
+
const TRANSIENT_RECONNECT_BACKOFF_MAX_MS = 30_000
|
|
51
54
|
|
|
52
55
|
export type HttpPullTransport = {
|
|
53
56
|
pull(): Promise<void>
|
|
@@ -83,6 +86,7 @@ export function installHttpPullTransport(
|
|
|
83
86
|
sockets: new Set(),
|
|
84
87
|
pullIntervalMs: opts.pullIntervalMs,
|
|
85
88
|
nextPokeID: 0,
|
|
89
|
+
transientFailureCount: 0,
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
const Shim = class {
|
|
@@ -190,7 +194,7 @@ class ZeroHttpSocket {
|
|
|
190
194
|
this.queueDesiredQueries(decoded.initConnectionMessage?.[1])
|
|
191
195
|
|
|
192
196
|
this.state.sockets.add(this)
|
|
193
|
-
this.openTimer = setTimeout(() => this.open(),
|
|
197
|
+
this.openTimer = setTimeout(() => this.open(), reconnectDelayMs(this.state))
|
|
194
198
|
}
|
|
195
199
|
|
|
196
200
|
addEventListener(type: SocketEventType, listener: SocketListener | null) {
|
|
@@ -247,7 +251,7 @@ class ZeroHttpSocket {
|
|
|
247
251
|
}
|
|
248
252
|
|
|
249
253
|
pull(): Promise<void> {
|
|
250
|
-
if (this.readyState
|
|
254
|
+
if (this.readyState !== this.OPEN) return Promise.resolve()
|
|
251
255
|
if (this.pullInFlight) return this.pullInFlight
|
|
252
256
|
this.pullInFlight = this.fetchPull(this.clientGroupID, this.cookie)
|
|
253
257
|
.then((response) => {
|
|
@@ -361,6 +365,7 @@ class ZeroHttpSocket {
|
|
|
361
365
|
if (!response.ok) {
|
|
362
366
|
throw new ZeroHttpResponseError(path, response.status)
|
|
363
367
|
}
|
|
368
|
+
resetTransientFailures(this.state)
|
|
364
369
|
return response.json()
|
|
365
370
|
}
|
|
366
371
|
|
|
@@ -399,6 +404,7 @@ class ZeroHttpSocket {
|
|
|
399
404
|
if (this.readyState !== this.CLOSED) this.close(1000, error.message)
|
|
400
405
|
return
|
|
401
406
|
}
|
|
407
|
+
recordTransientFailure(this.state)
|
|
402
408
|
this.emit('error', { error })
|
|
403
409
|
this.close(1011, errorMessage(error))
|
|
404
410
|
}
|
|
@@ -618,3 +624,25 @@ function isStaleClientCookieError(error: unknown): error is ZeroHttpResponseErro
|
|
|
618
624
|
error.status === 409
|
|
619
625
|
)
|
|
620
626
|
}
|
|
627
|
+
|
|
628
|
+
function reconnectDelayMs(state: TransportState) {
|
|
629
|
+
if (state.transientFailureCount === 0) return 0
|
|
630
|
+
return Math.min(
|
|
631
|
+
TRANSIENT_RECONNECT_BACKOFF_BASE_MS * 2 ** (state.transientFailureCount - 1),
|
|
632
|
+
TRANSIENT_RECONNECT_BACKOFF_MAX_MS,
|
|
633
|
+
)
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
function recordTransientFailure(state: TransportState) {
|
|
637
|
+
const maxExponent = Math.log2(
|
|
638
|
+
TRANSIENT_RECONNECT_BACKOFF_MAX_MS / TRANSIENT_RECONNECT_BACKOFF_BASE_MS,
|
|
639
|
+
)
|
|
640
|
+
state.transientFailureCount = Math.min(
|
|
641
|
+
state.transientFailureCount + 1,
|
|
642
|
+
Math.ceil(maxExponent) + 1,
|
|
643
|
+
)
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
function resetTransientFailures(state: TransportState) {
|
|
647
|
+
state.transientFailureCount = 0
|
|
648
|
+
}
|
package/src/zeroRunner.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8B,IAAI,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAO/E,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAQL,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAId,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAA;AAWzB,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAOhE,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,KAAK,EACV,gBAAgB,EAChB,KAAK,EACL,GAAG,EAEH,WAAW,EACX,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAEvB,KAAK,cAAc,GAAG;IAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEvE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AAMpF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAEtF,MAAM,MAAM,uBAAuB,CACjC,MAAM,SAAS,UAAU,EACzB,MAAM,SAAS,aAAa,IAC1B;IACF,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,cAAc,CAAA;IAC9B,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IAIvC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,MAAM,SAAS,UAAU,IAAI,CAAC,KAAK,EAAE;IAClE,eAAe,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,aAAa,EAAE,gBAAgB,CAAA;IAC/B,OAAO,EAAE,MAAM,GAAG,CAAA;IAClB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAK,YAAY,CAAC,MAAM,CAAC,CAAA;AA+B1B,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,UAAU,EAAE,MAAM,SAAS,aAAa,EACtF,OAAO,EAAE,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createZeroClient.recovery.test.d.ts","sourceRoot":"","sources":["../src/createZeroClient.recovery.test.tsx"],"names":[],"mappings":"AA4CA,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,OAAO,GAAG,SAAS,CAAA;CAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpPullTransport.d.ts","sourceRoot":"","sources":["../src/httpPullTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"httpPullTransport.d.ts","sourceRoot":"","sources":["../src/httpPullTransport.ts"],"names":[],"mappings":"AAsDA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,SAAS,IAAI,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,wBAAwB,GAC7B,iBAAiB,CAqDnB;AAOD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,iBAAiB,CAOnB"}
|
package/types/zeroRunner.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { HumanReadable, Query, RunOptions, Schema as ZeroSchema } from '@rocicorp/zero';
|
|
2
2
|
export type { RunOptions };
|
|
3
3
|
export type ZeroRunner = <TReturn>(query: Query<any, ZeroSchema, TReturn>, options?: RunOptions) => Promise<HumanReadable<TReturn>>;
|
|
4
|
-
export declare function setRunner(r: ZeroRunner): void;
|
|
4
|
+
export declare function setRunner(r: ZeroRunner | null): void;
|
|
5
5
|
export declare function getRunner(instance?: {
|
|
6
6
|
runner: ZeroRunner | null;
|
|
7
7
|
}): ZeroRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zeroRunner.d.ts","sourceRoot":"","sources":["../src/zeroRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,UAAU,EACV,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,UAAU,KACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AAIpC,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"zeroRunner.d.ts","sourceRoot":"","sources":["../src/zeroRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,UAAU,EACV,MAAM,IAAI,UAAU,EACrB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EAAE,UAAU,EAAE,CAAA;AAE1B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,UAAU,KACjB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;AAIpC,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,QAE7C;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE;IAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG,UAAU,CAM9E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE;IAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG,UAAU,CAcrF"}
|