tigerbeetle-node 0.16.53 → 0.16.54
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/README.md +1 -1
- package/dist/bin/aarch64-linux-gnu/client.node +0 -0
- package/dist/bin/aarch64-linux-musl/client.node +0 -0
- package/dist/bin/aarch64-macos/client.node +0 -0
- package/dist/bin/x86_64-linux-gnu/client.node +0 -0
- package/dist/bin/x86_64-linux-musl/client.node +0 -0
- package/dist/bin/x86_64-macos/client.node +0 -0
- package/dist/bin/x86_64-windows/client.node +0 -0
- package/dist/index.js.map +1 -1
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/test.ts +1 -1
package/README.md
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './bindings'\nimport {\n Account,\n Transfer,\n CreateAccountsError,\n CreateTransfersError,\n Operation,\n AccountFilter,\n AccountBalance,\n QueryFilter,\n} from './bindings'\nimport { randomFillSync } from 'node:crypto'\n\nconst binding: Binding = (() => {\n const { arch, platform } = process\n\n const archMap = {\n \"arm64\": \"aarch64\",\n \"x64\": \"x86_64\"\n }\n\n const platformMap = {\n \"linux\": \"linux\",\n \"darwin\": \"macos\",\n \"win32\" : \"windows\",\n }\n\n if (! (arch in archMap)) {\n throw new Error(`Unsupported arch: ${arch}`)\n }\n\n if (! (platform in platformMap)) {\n throw new Error(`Unsupported platform: ${platform}`)\n }\n\n let extra = ''\n\n /**\n * We need to detect during runtime which libc we're running on to load the correct NAPI.\n * binary.\n *\n * Rationale: The /proc/self/map_files/ subdirectory contains entries corresponding to\n * memory-mapped files loaded by Node.\n * https://man7.org/linux/man-pages/man5/proc.5.html: We detect a musl-based distro by\n * checking if any library contains the name \"musl\".\n *\n * Prior art: https://github.com/xerial/sqlite-jdbc/issues/623\n */\n\n const fs = require('fs')\n const path = require('path')\n\n if (platform === 'linux') {\n extra = '-gnu'\n\n for (const file of fs.readdirSync(\"/proc/self/map_files/\")) {\n const realPath = fs.readlinkSync(path.join(\"/proc/self/map_files/\", file))\n if (realPath.includes('musl')) {\n extra = '-musl'\n break\n }\n }\n }\n\n const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`\n return require(filename)\n})()\n\nexport type Context = object // tb_client\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\nexport type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance\nexport type ResultCallback = (error: Error | null, results: Result[] | null) => void\n\nexport const amount_max: bigint = (2n ** 128n) - 1n\n\ninterface BindingInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Buffer,\n}\n\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n submit: (context: Context, operation: Operation, batch: Event[], callback: ResultCallback) => void\n deinit: (context: Context) => void,\n}\n\nexport interface ClientInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Array<string | number>,\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n getAccountTransfers: (filter: AccountFilter) => Promise<Transfer[]>\n getAccountBalances: (filter: AccountFilter) => Promise<AccountBalance[]>\n queryAccounts: (filter: QueryFilter) => Promise<Account[]>\n queryTransfers: (filter: QueryFilter) => Promise<Transfer[]>\n destroy: () => void\n}\n\nexport function createClient (args: ClientInitArgs): Client {\n // Context becomes null when `destroy` is called. After that point, further `request` Promises\n // throw a shutdown Error. This prevents tb_client calls from happening after tb_client_deinit().\n let context: Context | null = binding.init({\n cluster_id: args.cluster_id,\n replica_addresses: Buffer.from(args.replica_addresses.join(',')),\n })\n\n const destroy = () => {\n if (context) binding.deinit(context)\n context = null;\n }\n\n const request = <T extends Result>(operation: Operation, batch: Event[]): Promise<T[]> => {\n return new Promise((resolve, reject) => {\n try {\n if (!context) throw new Error('Client was shutdown.');\n binding.submit(context, operation, batch, (error, result) => {\n if (error) {\n reject(error)\n } else if (result) {\n resolve(result as T[])\n } else {\n throw new Error(\"UB: Binding invoked callback without error or result\")\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n }\n\n return {\n createAccounts(batch) { return request(Operation.create_accounts, batch) },\n createTransfers(batch) { return request(Operation.create_transfers, batch) },\n lookupAccounts(batch) { return request(Operation.lookup_accounts, batch) },\n lookupTransfers(batch) { return request(Operation.lookup_transfers, batch) },\n getAccountTransfers(filter) { return request(Operation.get_account_transfers, [filter]) },\n getAccountBalances(filter) { return request(Operation.get_account_balances, [filter]) },\n queryAccounts(filter) { return request(Operation.query_accounts, [filter]) },\n queryTransfers(filter) { return request(Operation.query_transfers, [filter]) },\n destroy,\n }\n}\n\nlet idLastTimestamp = 0;\n\n// These are two references to the same buffer.\n// We only need the `Uint8Array` because in Node 24, but not earlier, `crypto.randomFillSync`\n// rejects `DataView` typed arguments.\nconst idLastBuffer = new DataView(new ArrayBuffer(16));\nconst idLastBufferArray = new Uint8Array(\n idLastBuffer.buffer, idLastBuffer.byteOffset, idLastBuffer.byteLength\n);\n\n/**\n * Generates a Universally Unique and Sortable Identifier as a u128 bigint.\n *\n * @remarks\n * Based on {@link https://github.com/ulid/spec}, IDs returned are guaranteed to be monotonically\n * increasing.\n */\nexport function id(): bigint {\n // Ensure timestamp monotonically increases and generate a new random on each new timestamp.\n let timestamp = Date.now()\n if (timestamp <= idLastTimestamp) {\n timestamp = idLastTimestamp\n } else {\n idLastTimestamp = timestamp\n randomFillSync(idLastBufferArray)\n }\n\n // Increment the u80 in idLastBuffer using carry arithmetic on u32s (as JS doesn't have fast u64).\n const littleEndian = true\n const randomLo32 = idLastBuffer.getUint32(0, littleEndian) + 1\n const randomHi32 = idLastBuffer.getUint32(4, littleEndian) + (randomLo32 > 0xFFFFFFFF ? 1 : 0)\n const randomHi16 = idLastBuffer.getUint16(8, littleEndian) + (randomHi32 > 0xFFFFFFFF ? 1 : 0)\n if (randomHi16 > 0xFFFF) {\n throw new Error('random bits overflow on monotonic increment')\n }\n\n // Store the incremented random monotonic and the timestamp into the buffer.\n idLastBuffer.setUint32(0, randomLo32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint32(4, randomHi32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint16(8, randomHi16, littleEndian) // No need to mask since checked above.\n idLastBuffer.setUint16(10, timestamp & 0xFFFF, littleEndian) // timestamp lo.\n idLastBuffer.setUint32(12, (timestamp >>> 16) & 0xFFFFFFFF, littleEndian) // timestamp hi.\n\n // Then return the buffer's contents as a little-endian u128 bigint.\n const lo = idLastBuffer.getBigUint64(0, littleEndian)\n const hi = idLastBuffer.getBigUint64(8, littleEndian)\n return (hi << 64n) | lo\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './bindings'\nimport {\n Account,\n Transfer,\n CreateAccountsError,\n CreateTransfersError,\n Operation,\n AccountFilter,\n AccountBalance,\n QueryFilter,\n} from './bindings'\nimport { randomFillSync } from 'node:crypto'\n\nconst binding: Binding = (() => {\n const { arch, platform } = process\n\n const archMap = {\n \"arm64\": \"aarch64\",\n \"x64\": \"x86_64\"\n }\n\n const platformMap = {\n \"linux\": \"linux\",\n \"darwin\": \"macos\",\n \"win32\" : \"windows\",\n }\n\n if (! (arch in archMap)) {\n throw new Error(`Unsupported arch: ${arch}`)\n }\n\n if (! (platform in platformMap)) {\n throw new Error(`Unsupported platform: ${platform}`)\n }\n\n let extra = ''\n\n /**\n * We need to detect during runtime which libc we're running on to load the correct NAPI.\n * binary.\n *\n * Rationale: The /proc/self/map_files/ subdirectory contains entries corresponding to\n * memory-mapped files loaded by Node.\n * https://man7.org/linux/man-pages/man5/proc.5.html: We detect a musl-based distro by\n * checking if any library contains the name \"musl\".\n *\n * Prior art: https://github.com/xerial/sqlite-jdbc/issues/623\n */\n\n const fs = require('fs')\n const path = require('path')\n\n if (platform === 'linux') {\n extra = '-gnu'\n\n for (const file of fs.readdirSync(\"/proc/self/map_files/\")) {\n const realPath = fs.readlinkSync(path.join(\"/proc/self/map_files/\", file))\n if (realPath.includes('musl')) {\n extra = '-musl'\n break\n }\n }\n }\n\n const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`\n return require(filename)\n})()\n\nexport type Context = object // tb_client\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\nexport type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance\nexport type ResultCallback = (error: Error | null, results: Result[] | null) => void\n\nexport const amount_max: bigint = (2n ** 128n) - 1n\n\ninterface BindingInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Buffer,\n}\n\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n submit: (context: Context, operation: Operation, batch: Event[], callback: ResultCallback) => void\n deinit: (context: Context) => void,\n}\n\nexport interface ClientInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Array<string | number>,\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n getAccountTransfers: (filter: AccountFilter) => Promise<Transfer[]>\n getAccountBalances: (filter: AccountFilter) => Promise<AccountBalance[]>\n queryAccounts: (filter: QueryFilter) => Promise<Account[]>\n queryTransfers: (filter: QueryFilter) => Promise<Transfer[]>\n destroy: () => void\n}\n\nexport function createClient (args: ClientInitArgs): Client {\n // Context becomes null when `destroy` is called. After that point, further `request` Promises\n // throw a shutdown Error. This prevents tb_client calls from happening after tb_client_deinit().\n let context: Context | null = binding.init({\n cluster_id: args.cluster_id,\n replica_addresses: Buffer.from(args.replica_addresses.join(',')),\n })\n\n const destroy = () => {\n if (context) binding.deinit(context)\n context = null;\n }\n\n const request = <T extends Result>(operation: Operation, batch: Event[]): Promise<T[]> => {\n return new Promise((resolve, reject) => {\n try {\n if (!context) throw new Error('Client was shutdown.');\n binding.submit(context, operation, batch, (error, result) => {\n if (error) {\n reject(error)\n } else if (result) {\n resolve(result as T[])\n } else {\n throw new Error(\"UB: Binding invoked callback without error or result\")\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n }\n\n return {\n createAccounts(batch) { return request(Operation.create_accounts, batch) },\n createTransfers(batch) { return request(Operation.create_transfers, batch) },\n lookupAccounts(batch) { return request(Operation.lookup_accounts, batch) },\n lookupTransfers(batch) { return request(Operation.lookup_transfers, batch) },\n getAccountTransfers(filter) { return request(Operation.get_account_transfers, [filter]) },\n getAccountBalances(filter) { return request(Operation.get_account_balances, [filter]) },\n queryAccounts(filter) { return request(Operation.query_accounts, [filter]) },\n queryTransfers(filter) { return request(Operation.query_transfers, [filter]) },\n destroy,\n }\n}\n\nlet idLastTimestamp = 0;\n\n// These are two references to the same buffer.\n// We only need the `Uint8Array` because in Node.js 24, but not earlier, `crypto.randomFillSync`\n// rejects `DataView` typed arguments.\nconst idLastBuffer = new DataView(new ArrayBuffer(16));\nconst idLastBufferArray = new Uint8Array(\n idLastBuffer.buffer, idLastBuffer.byteOffset, idLastBuffer.byteLength\n);\n\n/**\n * Generates a Universally Unique and Sortable Identifier as a u128 bigint.\n *\n * @remarks\n * Based on {@link https://github.com/ulid/spec}, IDs returned are guaranteed to be monotonically\n * increasing.\n */\nexport function id(): bigint {\n // Ensure timestamp monotonically increases and generate a new random on each new timestamp.\n let timestamp = Date.now()\n if (timestamp <= idLastTimestamp) {\n timestamp = idLastTimestamp\n } else {\n idLastTimestamp = timestamp\n randomFillSync(idLastBufferArray)\n }\n\n // Increment the u80 in idLastBuffer using carry arithmetic on u32s (as JS doesn't have fast u64).\n const littleEndian = true\n const randomLo32 = idLastBuffer.getUint32(0, littleEndian) + 1\n const randomHi32 = idLastBuffer.getUint32(4, littleEndian) + (randomLo32 > 0xFFFFFFFF ? 1 : 0)\n const randomHi16 = idLastBuffer.getUint16(8, littleEndian) + (randomHi32 > 0xFFFFFFFF ? 1 : 0)\n if (randomHi16 > 0xFFFF) {\n throw new Error('random bits overflow on monotonic increment')\n }\n\n // Store the incremented random monotonic and the timestamp into the buffer.\n idLastBuffer.setUint32(0, randomLo32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint32(4, randomHi32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint16(8, randomHi16, littleEndian) // No need to mask since checked above.\n idLastBuffer.setUint16(10, timestamp & 0xFFFF, littleEndian) // timestamp lo.\n idLastBuffer.setUint32(12, (timestamp >>> 16) & 0xFFFFFFFF, littleEndian) // timestamp hi.\n\n // Then return the buffer's contents as a little-endian u128 bigint.\n const lo = idLastBuffer.getBigUint64(0, littleEndian)\n const hi = idLastBuffer.getBigUint64(8, littleEndian)\n return (hi << 64n) | lo\n}\n"]}
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA+C;AAC/C,wBAcU;AAEV,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC;IAC1B,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;CACtD,CAAC,CAAA;AAGF,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AACD,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,KAAK,GAAqD,EAAE,CAAA;AAClE,SAAS,IAAI,CAAC,IAAY,EAAE,EAAuB;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AACD,IAAI,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,EAAuB,EAAE,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAU,EAAE,CAAC,EAAE,EAAE;QAEnC,IAAI,CAAC,GAAG,KAAM,IAAI,CAAC,EAAE;YACnB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;SACrD;QAED,MAAM,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;QACjB,gBAAM,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,yDAAyD,CAAC,CAAC;QAChF,GAAG,GAAG,GAAG,CAAC;KACX;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAmB,EAAE;IACxE,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IAEvC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAC9E,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAmB,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEhE,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAkB,CAAC,MAAM,EAAE,CAAC,CAAA;AACpF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAmB,EAAE;IAC/E,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAErD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAkB,CAAC,sBAAsB,EAAE,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAmB,EAAE;IAC/C,MAAM,UAAU,GAAG,KAAM,CAAC;IAC1B,IAAI,SAAS,GAAe,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,UAAU,EAAC,CAAC,EAAE,EAAE;QAC9B,SAAS,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,EAAE;YACN,gBAAgB,EAAE,EAAE;YACpB,iBAAiB,EAAE,EAAE;YACrB,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;KACJ;IAED,IAAI;QACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QACxD,gBAAM,CAAC,IAAI,EAAE,CAAC;KACf;IAAC,OAAO,KAAK,EAAE;QACd,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;KAC5E;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAExE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAmB,EAAE;IACtD,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAChE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,OAAO,CAAA;IAC9B,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK;QACL,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAGnD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACzC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,qBAAqB,CAAA;IAE5C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,aAAU;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAG1C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,MAAM;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QAGP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IACnE,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAChG,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,2BAA2B,EAAE,CAAC,CAAA;IAExG,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE1C,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACtE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAMnD,MAAM,eAAe,GAAG,GAAG,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAGnF,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAGlD,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,wBAAwB,EAAE,CAAC,CAAA;AACvG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,gBAAgB,GAAa;QACjC,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,aAAa,GAAG,gBAAa,CAAC,cAAc,GAAG,gBAAa,CAAC,OAAO;QACzF,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACtE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,MAAM,gBAAgB,GAAa;QACjC,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,UAAU,EAAE,gBAAgB,CAAC,EAAE;QAC/B,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACrD,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACrD,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAmB,EAAE;IAC1D,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,GAAG;QACP,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,OAAO;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9D,gBAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE1C,IAAI,iBAAiB,GAAgB,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE;QACtB,iBAAiB,CAAC,IAAI,CAAC;YACrB,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACxD,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACzD,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;KACJ;IAED,MAAM,wBAAwB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;IAChF,gBAAM,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAA;IAGpD,IAAI,MAAM,GAAkB;QAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxD,IAAI,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,MAAM,GAAI,qBAAkB,CAAC,QAAQ;KAChE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAI,qBAAkB,CAAC,QAAQ;KACjE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,CAAC;IACf,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrC,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAG7D,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrC,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAG7D,MAAM,GAAG;QACP,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,IAAI;KAC/B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM;KACd,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAEvE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD;QACE,IAAI,QAAQ,GAAe,EAAE,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE;YACtB,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,IAAA,KAAE,GAAE;gBACR,cAAc,EAAE,EAAE;gBAClB,aAAa,EAAE,EAAE;gBACjB,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,EAAE;gBAClB,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBACzC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACtC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAClC,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,eAAY,CAAC,IAAI;gBACxB,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;SACH;QAED,MAAM,sBAAsB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACpE,gBAAM,CAAC,eAAe,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;KACnD;IAED;QAIE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;YACzB,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAChE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/C;KACF;IAED;QAIE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QACD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;YACzB,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAChE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/C;KACF;IAED;QAGE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;YACzB,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/C;KACF;IAED;QAGE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QAGD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;YACzB,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/C;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;YACzB,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAC/C;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KACpC;IAED;QAEE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KACpC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD;QACE,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,IAAA,KAAE,GAAE;YACR,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,eAAY,CAAC,IAAI;YACxB,SAAS,EAAE,EAAE;SACd,CAAA;QACD,MAAM,sBAAsB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QACrE,gBAAM,CAAC,eAAe,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;QAElD,IAAI,iBAAiB,GAAgB,EAAE,CAAC;QAExC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE;YACtB,iBAAiB,CAAC,IAAI,CAAC;gBACrB,EAAE,EAAE,IAAA,KAAE,GAAE;gBACR,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACvD,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBACxD,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBACzC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACtC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAClC,UAAU,EAAE,EAAE;gBACd,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;SACH;QAED,MAAM,uBAAuB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;QAC/E,gBAAM,CAAC,eAAe,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;KACpD;IAED;QAIE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC1B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAChD;KACF;IAED;QAIE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QACD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC1B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAChD;KACF;IAED;QAGE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC1B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAChD;KACF;IAED;QAGE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QAGD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC1B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAChD;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;YAC1B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;SAChD;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KACpC;IAED;QAEE,IAAI,MAAM,GAAgB;YACxB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;KACpC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAmB,EAAE;IAE1D,IAAI,MAAM,GAAgB;QACxB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,MAAM;KACd,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAmB,EAAE;IAClE,MAAM,UAAU,GAAY;QAC1B,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC9D,gBAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE1C,IAAI,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAChE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAI/C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,QAAQ;QAC5B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IACD,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,QAAQ;QAC5B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IACD,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAE1C,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACvE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAElE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,QAAQ;QAC7B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAElC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,GAAG,EAAE,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAmB,EAAE;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAmB,EAAE;IACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAmB,EAAE;IACnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAmB,EAAE;IACpE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAmB,EAAE;IAEzD,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5E,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI;QACF,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnC;IAAC,OAAO,KAAK,EAAE;QACd,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAC1D,OAAO;KACR;IACD,MAAM,mBAAmB,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;YACzC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;gBACvC,MAAM,KAAK,CAAA;YACb,CAAC,CAAC,CAAA;SACH;QACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAC,IAAI,CAAC,CAAA;KACnD;YAAS;QACR,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;KACvB;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAqB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAA","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await new Promise(resolve => setTimeout(resolve, 1))\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero })\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n var transfers: Transfer[] = [];\n for (var i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n try {\n const results = await client.createTransfers(transfers);\n assert.fail();\n } catch (error) {\n assert.strictEqual(error.message, \"Too much data provided on this batch.\");\n }\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n var accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node > 15.\n const extra_wait_time = 250;\n await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired })\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let errors = await client.createTransfers([closing_transfer])\n assert.strictEqual(errors.length, 0)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n errors = await client.createTransfers([voiding_transfer])\n assert.strictEqual(errors.length, 0)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_errors, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_created_result, [])\n\n // Query all transfers for accountC:\n var filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n var account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n var timestamp = 0n;\n var i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n var accounts : Account[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const create_accounts_result = await client.createAccounts(accounts)\n assert.deepStrictEqual(create_accounts_result, [])\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const create_accounts_result = await client.createAccounts([account])\n assert.deepStrictEqual(create_accounts_result, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const create_transfers_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(create_transfers_result, [])\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let accountsErrors = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(accountsErrors, [])\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await new Promise(_ => setTimeout(_, 10));\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n accountsErrors = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(accountsErrors, [])\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const errors = await client.createTransfers([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n // Non-existing cluster.\n const client = createClient({ cluster_id: 92n, replica_addresses: [\"99\"] });\n setTimeout(() => client.destroy(), 30);\n try {\n await client.lookupAccounts([0n]);\n } catch (error) {\n assert.strictEqual(error.message, \"Client was shutdown.\");\n return;\n }\n throw \"expected an error\";\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await new Promise(resolve => setTimeout(resolve, 1))\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero })\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n var transfers: Transfer[] = [];\n for (var i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n try {\n const results = await client.createTransfers(transfers);\n assert.fail();\n } catch (error) {\n assert.strictEqual(error.message, \"Too much data provided on this batch.\");\n }\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n var accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node.js > 15.\n const extra_wait_time = 250;\n await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired })\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let errors = await client.createTransfers([closing_transfer])\n assert.strictEqual(errors.length, 0)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n errors = await client.createTransfers([voiding_transfer])\n assert.strictEqual(errors.length, 0)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_errors, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_created_result, [])\n\n // Query all transfers for accountC:\n var filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n var account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n var timestamp = 0n;\n var i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n var accounts : Account[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const create_accounts_result = await client.createAccounts(accounts)\n assert.deepStrictEqual(create_accounts_result, [])\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const create_accounts_result = await client.createAccounts([account])\n assert.deepStrictEqual(create_accounts_result, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const create_transfers_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(create_transfers_result, [])\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let accountsErrors = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(accountsErrors, [])\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await new Promise(_ => setTimeout(_, 10));\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n accountsErrors = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(accountsErrors, [])\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const errors = await client.createTransfers([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n // Non-existing cluster.\n const client = createClient({ cluster_id: 92n, replica_addresses: [\"99\"] });\n setTimeout(() => client.destroy(), 30);\n try {\n await client.lookupAccounts([0n]);\n } catch (error) {\n assert.strictEqual(error.message, \"Client was shutdown.\");\n return;\n }\n throw \"expected an error\";\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -151,7 +151,7 @@ export function createClient (args: ClientInitArgs): Client {
|
|
|
151
151
|
let idLastTimestamp = 0;
|
|
152
152
|
|
|
153
153
|
// These are two references to the same buffer.
|
|
154
|
-
// We only need the `Uint8Array` because in Node 24, but not earlier, `crypto.randomFillSync`
|
|
154
|
+
// We only need the `Uint8Array` because in Node.js 24, but not earlier, `crypto.randomFillSync`
|
|
155
155
|
// rejects `DataView` typed arguments.
|
|
156
156
|
const idLastBuffer = new DataView(new ArrayBuffer(16));
|
|
157
157
|
const idLastBufferArray = new Uint8Array(
|
package/src/test.ts
CHANGED
|
@@ -428,7 +428,7 @@ test('cannot void an expired transfer', async (): Promise<void> => {
|
|
|
428
428
|
// We need to wait 1s for the server to expire the transfer, however the
|
|
429
429
|
// server can pulse the expiry operation anytime after the timeout,
|
|
430
430
|
// so adding an extra delay to avoid flaky tests.
|
|
431
|
-
// TODO: Use `await setTimeout(1000)` when upgrade to Node > 15.
|
|
431
|
+
// TODO: Use `await setTimeout(1000)` when upgrade to Node.js > 15.
|
|
432
432
|
const extra_wait_time = 250;
|
|
433
433
|
await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));
|
|
434
434
|
|