@yorkie-js/sdk 0.7.3 → 0.7.5

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.
@@ -104,7 +104,7 @@
104
104
  }
105
105
  bytes.push(hi >>> 31 & 1);
106
106
  }
107
- const TWO_PWR_32_DBL$1 = 4294967296;
107
+ const TWO_PWR_32_DBL = 4294967296;
108
108
  function int64FromString(dec) {
109
109
  const minus = dec[0] === "-";
110
110
  if (minus) {
@@ -117,9 +117,9 @@
117
117
  const digit1e6 = Number(dec.slice(begin, end));
118
118
  highBits *= base;
119
119
  lowBits = lowBits * base + digit1e6;
120
- if (lowBits >= TWO_PWR_32_DBL$1) {
121
- highBits = highBits + (lowBits / TWO_PWR_32_DBL$1 | 0);
122
- lowBits = lowBits % TWO_PWR_32_DBL$1;
120
+ if (lowBits >= TWO_PWR_32_DBL) {
121
+ highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
122
+ lowBits = lowBits % TWO_PWR_32_DBL;
123
123
  }
124
124
  }
125
125
  add1e6digit(-24, -18);
@@ -140,7 +140,7 @@
140
140
  function uInt64ToString(lo, hi) {
141
141
  ({ lo, hi } = toUnsigned(lo, hi));
142
142
  if (hi <= 2097151) {
143
- return String(TWO_PWR_32_DBL$1 * hi + lo);
143
+ return String(TWO_PWR_32_DBL * hi + lo);
144
144
  }
145
145
  const low = lo & 16777215;
146
146
  const mid = (lo >>> 24 | hi << 8) & 16777215;
@@ -4387,6 +4387,19 @@
4387
4387
  }
4388
4388
  return name2[0].toLowerCase() + name2.substring(1).replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
4389
4389
  }
4390
+ let stringToCode;
4391
+ function codeFromString(value) {
4392
+ if (!stringToCode) {
4393
+ stringToCode = {};
4394
+ for (const value2 of Object.values(Code$1)) {
4395
+ if (typeof value2 == "string") {
4396
+ continue;
4397
+ }
4398
+ stringToCode[codeToString(value2)] = value2;
4399
+ }
4400
+ }
4401
+ return stringToCode[value];
4402
+ }
4390
4403
  class ConnectError extends Error {
4391
4404
  /**
4392
4405
  * Create a new ConnectError.
@@ -4475,6 +4488,15 @@
4475
4488
  throw ConnectError.from(e, Code$1.DataLoss);
4476
4489
  }
4477
4490
  }
4491
+ function appendHeaders(...headers) {
4492
+ const h = new Headers();
4493
+ for (const e of headers) {
4494
+ e.forEach((value, key) => {
4495
+ h.append(key, value);
4496
+ });
4497
+ }
4498
+ return h;
4499
+ }
4478
4500
  function makeAnyClient(service, createMethod) {
4479
4501
  const client = {};
4480
4502
  for (const desc of service.methods) {
@@ -4622,10 +4644,10 @@
4622
4644
  }, reject);
4623
4645
  }
4624
4646
  };
4625
- var __await$2 = function(v) {
4626
- return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4647
+ var __await$3 = function(v) {
4648
+ return this instanceof __await$3 ? (this.v = v, this) : new __await$3(v);
4627
4649
  };
4628
- var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4650
+ var __asyncGenerator$3 = function(thisArg, _arguments, generator) {
4629
4651
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4630
4652
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4631
4653
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4654,7 +4676,7 @@
4654
4676
  }
4655
4677
  }
4656
4678
  function step(r) {
4657
- r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4679
+ r.value instanceof __await$3 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4658
4680
  }
4659
4681
  function fulfill(value) {
4660
4682
  resume("next", value);
@@ -4675,13 +4697,13 @@
4675
4697
  }, i;
4676
4698
  function verb(n, f) {
4677
4699
  i[n] = o[n] ? function(v) {
4678
- return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4700
+ return (p = !p) ? { value: __await$3(o[n](v)), done: false } : f ? f(v) : v;
4679
4701
  } : f;
4680
4702
  }
4681
4703
  };
4682
4704
  function createAsyncIterable(items) {
4683
- return __asyncGenerator$2(this, arguments, function* createAsyncIterable_1() {
4684
- yield __await$2(yield* __asyncDelegator$1(__asyncValues$1(items)));
4705
+ return __asyncGenerator$3(this, arguments, function* createAsyncIterable_1() {
4706
+ yield __await$3(yield* __asyncDelegator$1(__asyncValues$1(items)));
4685
4707
  });
4686
4708
  }
4687
4709
  var __asyncValues = function(o) {
@@ -4703,8 +4725,8 @@
4703
4725
  }, reject);
4704
4726
  }
4705
4727
  };
4706
- var __await$1 = function(v) {
4707
- return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
4728
+ var __await$2 = function(v) {
4729
+ return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4708
4730
  };
4709
4731
  var __asyncDelegator = function(o) {
4710
4732
  var i, p;
@@ -4715,11 +4737,11 @@
4715
4737
  }, i;
4716
4738
  function verb(n, f) {
4717
4739
  i[n] = o[n] ? function(v) {
4718
- return (p = !p) ? { value: __await$1(o[n](v)), done: false } : f ? f(v) : v;
4740
+ return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4719
4741
  } : f;
4720
4742
  }
4721
4743
  };
4722
- var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4744
+ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4723
4745
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4724
4746
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4725
4747
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4748,7 +4770,7 @@
4748
4770
  }
4749
4771
  }
4750
4772
  function step(r) {
4751
- r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4773
+ r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4752
4774
  }
4753
4775
  function fulfill(value) {
4754
4776
  resume("next", value);
@@ -4828,11 +4850,11 @@
4828
4850
  }
4829
4851
  function handleStreamResponse(stream, options) {
4830
4852
  const it = (function() {
4831
- return __asyncGenerator$1(this, arguments, function* () {
4853
+ return __asyncGenerator$2(this, arguments, function* () {
4832
4854
  var _a, _b;
4833
- const response = yield __await$1(stream);
4855
+ const response = yield __await$2(stream);
4834
4856
  (_a = options === null || options === void 0 ? void 0 : options.onHeader) === null || _a === void 0 ? void 0 : _a.call(options, response.header);
4835
- yield __await$1(yield* __asyncDelegator(__asyncValues(response.message)));
4857
+ yield __await$2(yield* __asyncDelegator(__asyncValues(response.message)));
4836
4858
  (_b = options === null || options === void 0 ? void 0 : options.onTrailer) === null || _b === void 0 ? void 0 : _b.call(options, response.trailer);
4837
4859
  });
4838
4860
  })()[Symbol.asyncIterator]();
@@ -4922,12 +4944,12 @@
4922
4944
  }
4923
4945
  return headers;
4924
4946
  }
4925
- const headerContentType = "Content-Type";
4926
- const headerTimeout = "Grpc-Timeout";
4947
+ const headerContentType$1 = "Content-Type";
4948
+ const headerTimeout$1 = "Grpc-Timeout";
4927
4949
  const headerGrpcStatus = "Grpc-Status";
4928
4950
  const headerGrpcMessage = "Grpc-Message";
4929
4951
  const headerStatusDetailsBin = "Grpc-Status-Details-Bin";
4930
- const headerUserAgent = "User-Agent";
4952
+ const headerUserAgent$1 = "User-Agent";
4931
4953
  const headerXUserAgent = "X-User-Agent";
4932
4954
  const headerXGrpcWeb = "X-Grpc-Web";
4933
4955
  const contentTypeProto = "application/grpc-web+proto";
@@ -5065,6 +5087,204 @@
5065
5087
  }
5066
5088
  };
5067
5089
  }
5090
+ const contentTypeRegExp = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
5091
+ const contentTypeUnaryProto = "application/proto";
5092
+ const contentTypeUnaryJson = "application/json";
5093
+ const contentTypeStreamProto = "application/connect+proto";
5094
+ const contentTypeStreamJson = "application/connect+json";
5095
+ function parseContentType(contentType) {
5096
+ const match = contentType === null || contentType === void 0 ? void 0 : contentType.match(contentTypeRegExp);
5097
+ if (!match) {
5098
+ return void 0;
5099
+ }
5100
+ const stream = !!match[1];
5101
+ const binary = !!match[3];
5102
+ return { stream, binary };
5103
+ }
5104
+ (function(s, e) {
5105
+ var t = {};
5106
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5107
+ t[p] = s[p];
5108
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
5109
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5110
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
5111
+ t[p[i]] = s[p[i]];
5112
+ }
5113
+ return t;
5114
+ });
5115
+ function errorFromJson(jsonValue, metadata, fallback) {
5116
+ var _a;
5117
+ if (metadata) {
5118
+ new Headers(metadata).forEach((value, key) => fallback.metadata.append(key, value));
5119
+ }
5120
+ if (typeof jsonValue !== "object" || jsonValue == null || Array.isArray(jsonValue)) {
5121
+ throw fallback;
5122
+ }
5123
+ let code = fallback.code;
5124
+ if ("code" in jsonValue && typeof jsonValue.code === "string") {
5125
+ code = (_a = codeFromString(jsonValue.code)) !== null && _a !== void 0 ? _a : code;
5126
+ }
5127
+ const message = jsonValue.message;
5128
+ if (message != null && typeof message !== "string") {
5129
+ throw fallback;
5130
+ }
5131
+ const error = new ConnectError(message !== null && message !== void 0 ? message : "", code, metadata);
5132
+ if ("details" in jsonValue && Array.isArray(jsonValue.details)) {
5133
+ for (const detail of jsonValue.details) {
5134
+ if (detail === null || typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || typeof detail.value != "string") {
5135
+ throw fallback;
5136
+ }
5137
+ try {
5138
+ error.details.push({
5139
+ type: detail.type,
5140
+ value: base64Decode(detail.value),
5141
+ debug: detail.debug
5142
+ });
5143
+ } catch (e) {
5144
+ throw fallback;
5145
+ }
5146
+ }
5147
+ }
5148
+ return error;
5149
+ }
5150
+ const endStreamFlag = 2;
5151
+ function endStreamFromJson(data) {
5152
+ const parseErr = new ConnectError("invalid end stream", Code$1.Unknown);
5153
+ let jsonValue;
5154
+ try {
5155
+ jsonValue = JSON.parse(typeof data == "string" ? data : new TextDecoder().decode(data));
5156
+ } catch (e) {
5157
+ throw parseErr;
5158
+ }
5159
+ if (typeof jsonValue != "object" || jsonValue == null || Array.isArray(jsonValue)) {
5160
+ throw parseErr;
5161
+ }
5162
+ const metadata = new Headers();
5163
+ if ("metadata" in jsonValue) {
5164
+ if (typeof jsonValue.metadata != "object" || jsonValue.metadata == null || Array.isArray(jsonValue.metadata)) {
5165
+ throw parseErr;
5166
+ }
5167
+ for (const [key, values] of Object.entries(jsonValue.metadata)) {
5168
+ if (!Array.isArray(values) || values.some((value) => typeof value != "string")) {
5169
+ throw parseErr;
5170
+ }
5171
+ for (const value of values) {
5172
+ metadata.append(key, value);
5173
+ }
5174
+ }
5175
+ }
5176
+ const error = "error" in jsonValue && jsonValue.error != null ? errorFromJson(jsonValue.error, metadata, parseErr) : void 0;
5177
+ return { metadata, error };
5178
+ }
5179
+ const headerContentType = "Content-Type";
5180
+ const headerUnaryContentLength = "Content-Length";
5181
+ const headerUnaryEncoding = "Content-Encoding";
5182
+ const headerUnaryAcceptEncoding = "Accept-Encoding";
5183
+ const headerTimeout = "Connect-Timeout-Ms";
5184
+ const headerProtocolVersion = "Connect-Protocol-Version";
5185
+ const headerUserAgent = "User-Agent";
5186
+ function codeFromHttpStatus$1(httpStatus) {
5187
+ switch (httpStatus) {
5188
+ case 400:
5189
+ return Code$1.Internal;
5190
+ case 401:
5191
+ return Code$1.Unauthenticated;
5192
+ case 403:
5193
+ return Code$1.PermissionDenied;
5194
+ case 404:
5195
+ return Code$1.Unimplemented;
5196
+ case 429:
5197
+ return Code$1.Unavailable;
5198
+ case 502:
5199
+ return Code$1.Unavailable;
5200
+ case 503:
5201
+ return Code$1.Unavailable;
5202
+ case 504:
5203
+ return Code$1.Unavailable;
5204
+ default:
5205
+ return Code$1.Unknown;
5206
+ }
5207
+ }
5208
+ function trailerDemux(header) {
5209
+ const h = new Headers(), t = new Headers();
5210
+ header.forEach((value, key) => {
5211
+ if (key.toLowerCase().startsWith("trailer-")) {
5212
+ t.append(key.substring(8), value);
5213
+ } else {
5214
+ h.append(key, value);
5215
+ }
5216
+ });
5217
+ return [h, t];
5218
+ }
5219
+ const protocolVersion = "1";
5220
+ function requestHeader$1(methodKind, useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5221
+ const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5222
+ if (timeoutMs !== void 0) {
5223
+ result.set(headerTimeout, `${timeoutMs}`);
5224
+ }
5225
+ result.set(headerContentType, methodKind == "unary" ? useBinaryFormat ? contentTypeUnaryProto : contentTypeUnaryJson : useBinaryFormat ? contentTypeStreamProto : contentTypeStreamJson);
5226
+ result.set(headerProtocolVersion, protocolVersion);
5227
+ if (!result.has(headerUserAgent) && setUserAgent) ;
5228
+ return result;
5229
+ }
5230
+ function validateResponse$1(methodKind, useBinaryFormat, status, headers) {
5231
+ const mimeType = headers.get(headerContentType);
5232
+ const parsedType = parseContentType(mimeType);
5233
+ if (status !== 200) {
5234
+ const errorFromStatus = new ConnectError(`HTTP ${status}`, codeFromHttpStatus$1(status), headers);
5235
+ if (methodKind == "unary" && parsedType && !parsedType.binary) {
5236
+ return { isUnaryError: true, unaryError: errorFromStatus };
5237
+ }
5238
+ throw errorFromStatus;
5239
+ }
5240
+ const allowedContentType = {
5241
+ binary: useBinaryFormat,
5242
+ stream: methodKind !== "unary"
5243
+ };
5244
+ if ((parsedType === null || parsedType === void 0 ? void 0 : parsedType.binary) !== allowedContentType.binary || parsedType.stream !== allowedContentType.stream) {
5245
+ throw new ConnectError(`unsupported content type ${mimeType}`, parsedType === void 0 ? Code$1.Unknown : Code$1.Internal, headers);
5246
+ }
5247
+ return { isUnaryError: false };
5248
+ }
5249
+ const contentTypePrefix = "application/";
5250
+ function encodeMessageForUrl(message, useBase64) {
5251
+ if (useBase64) {
5252
+ return base64Encode(message, "url");
5253
+ }
5254
+ return encodeURIComponent(new TextDecoder().decode(message));
5255
+ }
5256
+ function transformConnectPostToGetRequest(request, message, useBase64) {
5257
+ let query = `?connect=v${protocolVersion}`;
5258
+ const contentType = request.header.get(headerContentType);
5259
+ if ((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(contentTypePrefix)) === 0) {
5260
+ query += "&encoding=" + encodeURIComponent(contentType.slice(contentTypePrefix.length));
5261
+ }
5262
+ const compression = request.header.get(headerUnaryEncoding);
5263
+ if (compression !== null && compression !== "identity") {
5264
+ query += "&compression=" + encodeURIComponent(compression);
5265
+ useBase64 = true;
5266
+ }
5267
+ if (useBase64) {
5268
+ query += "&base64=1";
5269
+ }
5270
+ query += "&message=" + encodeMessageForUrl(message, useBase64);
5271
+ const url = request.url + query;
5272
+ const header = new Headers(request.header);
5273
+ for (const h of [
5274
+ headerProtocolVersion,
5275
+ headerContentType,
5276
+ headerUnaryContentLength,
5277
+ headerUnaryEncoding,
5278
+ headerUnaryAcceptEncoding
5279
+ ]) {
5280
+ header.delete(h);
5281
+ }
5282
+ return Object.assign(Object.assign({}, request), {
5283
+ requestMethod: "GET",
5284
+ url,
5285
+ header
5286
+ });
5287
+ }
5068
5288
  function runUnaryCall(opt) {
5069
5289
  const next = applyInterceptors(opt.next, opt.interceptors);
5070
5290
  const [signal, abort, done] = setupSignal(opt);
@@ -5133,6 +5353,181 @@
5133
5353
  throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.");
5134
5354
  }
5135
5355
  }
5356
+ var __await$1 = function(v) {
5357
+ return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
5358
+ };
5359
+ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
5360
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5361
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
5362
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
5363
+ return this;
5364
+ }, i;
5365
+ function awaitReturn(f) {
5366
+ return function(v) {
5367
+ return Promise.resolve(v).then(f, reject);
5368
+ };
5369
+ }
5370
+ function verb(n, f) {
5371
+ if (g[n]) {
5372
+ i[n] = function(v) {
5373
+ return new Promise(function(a, b) {
5374
+ q.push([n, v, a, b]) > 1 || resume(n, v);
5375
+ });
5376
+ };
5377
+ if (f) i[n] = f(i[n]);
5378
+ }
5379
+ }
5380
+ function resume(n, v) {
5381
+ try {
5382
+ step(g[n](v));
5383
+ } catch (e) {
5384
+ settle(q[0][3], e);
5385
+ }
5386
+ }
5387
+ function step(r) {
5388
+ r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
5389
+ }
5390
+ function fulfill(value) {
5391
+ resume("next", value);
5392
+ }
5393
+ function reject(value) {
5394
+ resume("throw", value);
5395
+ }
5396
+ function settle(f, v) {
5397
+ if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
5398
+ }
5399
+ };
5400
+ const fetchOptions$1 = {
5401
+ redirect: "error"
5402
+ };
5403
+ function createConnectTransport(options) {
5404
+ var _a;
5405
+ assertFetchApi();
5406
+ const useBinaryFormat = (_a = options.useBinaryFormat) !== null && _a !== void 0 ? _a : false;
5407
+ return {
5408
+ async unary(method, signal, timeoutMs, header, message, contextValues) {
5409
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5410
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5411
+ return await runUnaryCall({
5412
+ interceptors: options.interceptors,
5413
+ signal,
5414
+ timeoutMs,
5415
+ req: {
5416
+ stream: false,
5417
+ service: method.parent,
5418
+ method,
5419
+ requestMethod: "POST",
5420
+ url: createMethodUrl(options.baseUrl, method),
5421
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5422
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5423
+ message
5424
+ },
5425
+ next: async (req) => {
5426
+ var _a2;
5427
+ const useGet = options.useHttpGet === true && method.idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
5428
+ let body = null;
5429
+ if (useGet) {
5430
+ req = transformConnectPostToGetRequest(req, serialize(req.message), useBinaryFormat);
5431
+ } else {
5432
+ body = serialize(req.message);
5433
+ }
5434
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5435
+ const response = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body }));
5436
+ const { isUnaryError, unaryError } = validateResponse$1(method.methodKind, useBinaryFormat, response.status, response.headers);
5437
+ if (isUnaryError) {
5438
+ throw errorFromJson(await response.json(), appendHeaders(...trailerDemux(response.headers)), unaryError);
5439
+ }
5440
+ const [demuxedHeader, demuxedTrailer] = trailerDemux(response.headers);
5441
+ return {
5442
+ stream: false,
5443
+ service: method.parent,
5444
+ method,
5445
+ header: demuxedHeader,
5446
+ message: useBinaryFormat ? parse2(new Uint8Array(await response.arrayBuffer())) : fromJson(method.output, await response.json(), getJsonOptions(options.jsonOptions)),
5447
+ trailer: demuxedTrailer
5448
+ };
5449
+ }
5450
+ });
5451
+ },
5452
+ async stream(method, signal, timeoutMs, header, input, contextValues) {
5453
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5454
+ function parseResponseBody(body, trailerTarget, header2, signal2) {
5455
+ return __asyncGenerator$1(this, arguments, function* parseResponseBody_1() {
5456
+ const reader = createEnvelopeReadableStream(body).getReader();
5457
+ let endStreamReceived = false;
5458
+ for (; ; ) {
5459
+ const result = yield __await$1(reader.read());
5460
+ if (result.done) {
5461
+ break;
5462
+ }
5463
+ const { flags, data } = result.value;
5464
+ if ((flags & compressedFlag) === compressedFlag) {
5465
+ throw new ConnectError(`protocol error: received unsupported compressed output`, Code$1.Internal);
5466
+ }
5467
+ if ((flags & endStreamFlag) === endStreamFlag) {
5468
+ endStreamReceived = true;
5469
+ const endStream = endStreamFromJson(data);
5470
+ if (endStream.error) {
5471
+ const error = endStream.error;
5472
+ header2.forEach((value, key) => {
5473
+ error.metadata.append(key, value);
5474
+ });
5475
+ throw error;
5476
+ }
5477
+ endStream.metadata.forEach((value, key) => trailerTarget.set(key, value));
5478
+ continue;
5479
+ }
5480
+ yield yield __await$1(parse2(data));
5481
+ }
5482
+ if ("throwIfAborted" in signal2) {
5483
+ signal2.throwIfAborted();
5484
+ }
5485
+ if (!endStreamReceived) {
5486
+ throw "missing EndStreamResponse";
5487
+ }
5488
+ });
5489
+ }
5490
+ async function createRequestBody(input2) {
5491
+ if (method.methodKind != "server_streaming") {
5492
+ throw "The fetch API does not support streaming request bodies";
5493
+ }
5494
+ const r = await input2[Symbol.asyncIterator]().next();
5495
+ if (r.done == true) {
5496
+ throw "missing request message";
5497
+ }
5498
+ return encodeEnvelope(0, serialize(r.value));
5499
+ }
5500
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5501
+ return await runStreamingCall({
5502
+ interceptors: options.interceptors,
5503
+ timeoutMs,
5504
+ signal,
5505
+ req: {
5506
+ stream: true,
5507
+ service: method.parent,
5508
+ method,
5509
+ requestMethod: "POST",
5510
+ url: createMethodUrl(options.baseUrl, method),
5511
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5512
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5513
+ message: input
5514
+ },
5515
+ next: async (req) => {
5516
+ var _a2;
5517
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5518
+ const fRes = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body: await createRequestBody(req.message) }));
5519
+ validateResponse$1(method.methodKind, useBinaryFormat, fRes.status, fRes.headers);
5520
+ if (fRes.body === null) {
5521
+ throw "missing response body";
5522
+ }
5523
+ const trailer = new Headers();
5524
+ const res = Object.assign(Object.assign({}, req), { header: fRes.headers, trailer, message: parseResponseBody(fRes.body, trailer, fRes.headers, req.signal) });
5525
+ return res;
5526
+ }
5527
+ });
5528
+ }
5529
+ };
5530
+ }
5136
5531
  function validateTrailer(trailer, header) {
5137
5532
  const err = findTrailerError(trailer);
5138
5533
  if (err) {
@@ -5148,12 +5543,12 @@
5148
5543
  function requestHeader(useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5149
5544
  var _a, _b;
5150
5545
  const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5151
- result.set(headerContentType, useBinaryFormat ? contentTypeProto : contentTypeJson);
5546
+ result.set(headerContentType$1, useBinaryFormat ? contentTypeProto : contentTypeJson);
5152
5547
  result.set(headerXGrpcWeb, "1");
5153
- const userAgent = (_b = (_a = result.get(headerUserAgent)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5548
+ const userAgent = (_b = (_a = result.get(headerUserAgent$1)) !== null && _a !== void 0 ? _a : result.get(headerXUserAgent)) !== null && _b !== void 0 ? _b : "connect-es/2.1.1";
5154
5549
  result.set(headerXUserAgent, userAgent);
5155
5550
  if (timeoutMs !== void 0) {
5156
- result.set(headerTimeout, `${timeoutMs}m`);
5551
+ result.set(headerTimeout$1, `${timeoutMs}m`);
5157
5552
  }
5158
5553
  return result;
5159
5554
  }
@@ -5397,7 +5792,7 @@
5397
5792
  }
5398
5793
  };
5399
5794
  }
5400
- const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBIsoaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGpUBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwiggsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq7AQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCJUCgdSR0FOb2RlEiAKBG5leHQYASABKAsyEi55b3JraWUudjEuUkdBTm9kZRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlgKCE5vZGVBdHRyEg0KBXZhbHVlGAEgASgJEikKCnVwZGF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBISCgppc19yZW1vdmVkGAMgASgIIpQCCghUZXh0Tm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEg0KBXZhbHVlGAIgASgJEikKCnJlbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgEIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEjcKCmF0dHJpYnV0ZXMYBSADKAsyIy55b3JraWUudjEuVGV4dE5vZGUuQXR0cmlidXRlc0VudHJ5GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIkcKClRleHROb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSLdAgoIVHJlZU5vZGUSIQoCaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIMCgR0eXBlGAIgASgJEg0KBXZhbHVlGAMgASgJEikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgFIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEioKC2luc19uZXh0X2lkGAYgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSDQoFZGVwdGgYByABKAUSNwoKYXR0cmlidXRlcxgIIAMoCzIjLnlvcmtpZS52MS5UcmVlTm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiMQoJVHJlZU5vZGVzEiQKB2NvbnRlbnQYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUiRwoKVHJlZU5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFImMKB1RyZWVQb3MSKAoJcGFyZW50X2lkGAEgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSLgoPbGVmdF9zaWJsaW5nX2lkGAIgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQiawoEVXNlchIKCgJpZBgBIAEoCRIVCg1hdXRoX3Byb3ZpZGVyGAIgASgJEhAKCHVzZXJuYW1lGAMgASgJEi4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIokBCgZNZW1iZXISCgoCaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIPCgd1c2VyX2lkGAMgASgJEhAKCHVzZXJuYW1lGAQgASgJEgwKBHJvbGUYBSABKAkSLgoKaW52aXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi6QYKB1Byb2plY3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRISCgpwdWJsaWNfa2V5GAMgASgJEhIKCnNlY3JldF9rZXkYBCABKAkSGAoQYXV0aF93ZWJob29rX3VybBgFIAEoCRIcChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgGIAMoCRIgChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYESABKAQSJgoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBIgASgJEiYKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgTIAEoCRIkChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBQgASgJEhkKEWV2ZW50X3dlYmhvb2tfdXJsGAcgASgJEhwKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAggAygJEiEKGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYFSABKAQSJwofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgWIAEoCRInCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBcgASgJEiUKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBggASgJEiMKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgJIAEoCRIaChJzbmFwc2hvdF90aHJlc2hvbGQYGSABKAMSGQoRc25hcHNob3RfaW50ZXJ2YWwYGiABKAMSJAocbWF4X3N1YnNjcmliZXJzX3Blcl9kb2N1bWVudBgKIAEoBRIkChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAsgASgFEh0KFW1heF9zaXplX3Blcl9kb2N1bWVudBgPIAEoBRIYChByZW1vdmVfb25fZGV0YWNoGBAgASgIEh0KFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgbIAEoCBIXCg9hbGxvd2VkX29yaWdpbnMYDiADKAkSLgoKY3JlYXRlZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiLwoLTWV0cmljUG9pbnQSEQoJdGltZXN0YW1wGAEgASgDEg0KBXZhbHVlGAIgASgFIqMMChZVcGRhdGFibGVQcm9qZWN0RmllbGRzEioKBG5hbWUYASABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNgoQYXV0aF93ZWJob29rX3VybBgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRhdXRoX3dlYmhvb2tfbWV0aG9kcxgDIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkF1dGhXZWJob29rTWV0aG9kcxI+ChhhdXRoX3dlYmhvb2tfbWF4X3JldHJpZXMYDCABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRAoeYXV0aF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkQKHmF1dGhfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgOIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJCChxhdXRoX3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEWV2ZW50X3dlYmhvb2tfdXJsGAQgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlElIKFGV2ZW50X3dlYmhvb2tfZXZlbnRzGAUgASgLMjQueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuRXZlbnRXZWJob29rRXZlbnRzEj8KGWV2ZW50X3dlYmhvb2tfbWF4X3JldHJpZXMYECABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWUSRQofZXZlbnRfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgRIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJFCh9ldmVudF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkMKHWV2ZW50X3dlYmhvb2tfcmVxdWVzdF90aW1lb3V0GBMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjcKEnNuYXBzaG90X3RocmVzaG9sZBgUIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEjYKEXNuYXBzaG90X2ludGVydmFsGBUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSQQobY2xpZW50X2RlYWN0aXZhdGVfdGhyZXNob2xkGAYgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkEKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYByABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRJBChxtYXhfYXR0YWNobWVudHNfcGVyX2RvY3VtZW50GAggASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSOgoVbWF4X3NpemVfcGVyX2RvY3VtZW50GAogASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSNAoQcmVtb3ZlX29uX2RldGFjaBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSOQoVYXV0b19yZXZpc2lvbl9lbmFibGVkGBYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRJJCg9hbGxvd2VkX29yaWdpbnMYCSABKAsyMC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BbGxvd2VkT3JpZ2lucxolChJBdXRoV2ViaG9va01ldGhvZHMSDwoHbWV0aG9kcxgBIAMoCRokChJFdmVudFdlYmhvb2tFdmVudHMSDgoGZXZlbnRzGAEgAygJGiEKDkFsbG93ZWRPcmlnaW5zEg8KB29yaWdpbnMYASADKAkipwMKD0RvY3VtZW50U3VtbWFyeRIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEcm9vdBgDIAEoCRIYChBhdHRhY2hlZF9jbGllbnRzGAcgASgFEikKDWRvY3VtZW50X3NpemUYCCABKAsyEi55b3JraWUudjEuRG9jU2l6ZRISCgpzY2hlbWFfa2V5GAkgASgJEjwKCXByZXNlbmNlcxgKIAMoCzIpLnlvcmtpZS52MS5Eb2N1bWVudFN1bW1hcnkuUHJlc2VuY2VzRW50cnkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLYWNjZXNzZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGkUKDlByZXNlbmNlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZToCOAEi2gEKDlByZXNlbmNlQ2hhbmdlEjIKBHR5cGUYASABKA4yJC55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UuQ2hhbmdlVHlwZRIlCghwcmVzZW5jZRgCIAEoCzITLnlvcmtpZS52MS5QcmVzZW5jZSJtCgpDaGFuZ2VUeXBlEhsKF0NIQU5HRV9UWVBFX1VOU1BFQ0lGSUVEEAASEwoPQ0hBTkdFX1RZUEVfUFVUEAESFgoSQ0hBTkdFX1RZUEVfREVMRVRFEAISFQoRQ0hBTkdFX1RZUEVfQ0xFQVIQAyJkCghQcmVzZW5jZRIrCgRkYXRhGAEgAygLMh0ueW9ya2llLnYxLlByZXNlbmNlLkRhdGFFbnRyeRorCglEYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0Cg5DaGFubmVsU3VtbWFyeRILCgNrZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoBSI0CgpDaGVja3BvaW50EhIKCnNlcnZlcl9zZXEYASABKAMSEgoKY2xpZW50X3NlcRgCIAEoDSJhCgtUZXh0Tm9kZVBvcxIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFEhcKD3JlbGF0aXZlX29mZnNldBgDIAEoBSJCCgpUaW1lVGlja2V0Eg8KB2xhbXBvcnQYASABKAMSEQoJZGVsaW1pdGVyGAIgASgNEhAKCGFjdG9yX2lkGAMgASgMIi4KDERvY0V2ZW50Qm9keRINCgV0b3BpYxgBIAEoCRIPCgdwYXlsb2FkGAIgASgMImsKCERvY0V2ZW50EiUKBHR5cGUYASABKA4yFy55b3JraWUudjEuRG9jRXZlbnRUeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIlCgRib2R5GAMgASgLMhcueW9ya2llLnYxLkRvY0V2ZW50Qm9keSLWAQoMQ2hhbm5lbEV2ZW50EioKBHR5cGUYASABKA4yHC55b3JraWUudjEuQ2hhbm5lbEV2ZW50LlR5cGUSEQoJcHVibGlzaGVyGAIgASgJEhUKDXNlc3Npb25fY291bnQYAyABKAMSCwoDc2VxGAQgASgDEg0KBXRvcGljGAUgASgJEg8KB3BheWxvYWQYBiABKAwiQwoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEQoNVFlQRV9QUkVTRU5DRRABEhIKDlRZUEVfQlJPQURDQVNUEAIiJgoIRGF0YVNpemUSDAoEZGF0YRgBIAEoBRIMCgRtZXRhGAIgASgFIk0KB0RvY1NpemUSIQoEbGl2ZRgBIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZRIfCgJnYxgCIAEoCzITLnlvcmtpZS52MS5EYXRhU2l6ZSKRAQoGU2NoZW1hEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoBRIMCgRib2R5GAQgASgJEh4KBXJ1bGVzGAUgAygLMg8ueW9ya2llLnYxLlJ1bGUSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUAoMVHJlZU5vZGVSdWxlEhEKCW5vZGVfdHlwZRgBIAEoCRIPCgdjb250ZW50GAIgASgJEg0KBW1hcmtzGAMgASgJEg0KBWdyb3VwGAQgASgJIk8KBFJ1bGUSDAoEcGF0aBgBIAEoCRIMCgR0eXBlGAIgASgJEisKCnRyZWVfbm9kZXMYAyADKAsyFy55b3JraWUudjEuVHJlZU5vZGVSdWxlIoMBCg9SZXZpc2lvblN1bW1hcnkSCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSEAoIc25hcHNob3QYBCABKAkSLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAq1AIKCVZhbHVlVHlwZRITCg9WQUxVRV9UWVBFX05VTEwQABIWChJWQUxVRV9UWVBFX0JPT0xFQU4QARIWChJWQUxVRV9UWVBFX0lOVEVHRVIQAhITCg9WQUxVRV9UWVBFX0xPTkcQAxIVChFWQUxVRV9UWVBFX0RPVUJMRRAEEhUKEVZBTFVFX1RZUEVfU1RSSU5HEAUSFAoQVkFMVUVfVFlQRV9CWVRFUxAGEhMKD1ZBTFVFX1RZUEVfREFURRAHEhoKFlZBTFVFX1RZUEVfSlNPTl9PQkpFQ1QQCBIZChVWQUxVRV9UWVBFX0pTT05fQVJSQVkQCRITCg9WQUxVRV9UWVBFX1RFWFQQChIaChZWQUxVRV9UWVBFX0lOVEVHRVJfQ05UEAsSFwoTVkFMVUVfVFlQRV9MT05HX0NOVBAMEhMKD1ZBTFVFX1RZUEVfVFJFRRANKqYBCgxEb2NFdmVudFR5cGUSIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfQ0hBTkdFRBAAEiMKH0RPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1dBVENIRUQQARIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9VTldBVENIRUQQAhIlCiFET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9CUk9BRENBU1QQA0JFChFkZXYueW9ya2llLmFwaS52MVABWi5naXRodWIuY29tL3lvcmtpZS10ZWFtL3lvcmtpZS9hcGkveW9ya2llL3YxO3YxYgZwcm90bzM", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5795
+ const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItkaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGqQBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDQoFYWN0b3IYBCABKAkakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwinwsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrYAQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSFQoNaGxsX3JlZ2lzdGVycxgHIAEoDEoECAYQBxqpAQoEVHJlZRIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSI/CgdSSFROb2RlEgsKA2tleRgBIAEoCRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlQKB1JHQU5vZGUSIAoEbmV4dBgBIAEoCzISLnlvcmtpZS52MS5SR0FOb2RlEicKB2VsZW1lbnQYAiABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5401
5796
  const SnapshotSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 0);
5402
5797
  const ChangePackSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 1);
5403
5798
  const ChangeSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 2);
@@ -5464,6 +5859,7 @@
5464
5859
  ValueType2[ValueType2["INTEGER_CNT"] = 11] = "INTEGER_CNT";
5465
5860
  ValueType2[ValueType2["LONG_CNT"] = 12] = "LONG_CNT";
5466
5861
  ValueType2[ValueType2["TREE"] = 13] = "TREE";
5862
+ ValueType2[ValueType2["INTEGER_DEDUP_CNT"] = 14] = "INTEGER_DEDUP_CNT";
5467
5863
  return ValueType2;
5468
5864
  })(ValueType || {});
5469
5865
  var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
@@ -5473,7 +5869,7 @@
5473
5869
  DocEventType2[DocEventType2["DOCUMENT_BROADCAST"] = 3] = "DOCUMENT_BROADCAST";
5474
5870
  return DocEventType2;
5475
5871
  })(DocEventType$1 || {});
5476
- const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCJrChVSZW1vdmVEb2N1bWVudFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siRAoWUmVtb3ZlRG9jdW1lbnRSZXNwb25zZRIqCgtjaGFuZ2VfcGFjaxgBIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrIn8KFlB1c2hQdWxsQ2hhbmdlc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEioKC2NoYW5nZV9wYWNrGAMgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sSEQoJcHVzaF9vbmx5GAQgASgIIkUKF1B1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2siYwoVQ3JlYXRlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRINCgVsYWJlbBgDIAEoCRITCgtkZXNjcmlwdGlvbhgEIAEoCSJGChZDcmVhdGVSZXZpc2lvblJlc3BvbnNlEiwKCHJldmlzaW9uGAEgASgLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJRChJHZXRSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhMKC3JldmlzaW9uX2lkGAMgASgJIkMKE0dldFJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5InUKFExpc3RSZXZpc2lvbnNSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRIRCglwYWdlX3NpemUYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhIKCmlzX2ZvcndhcmQYBSABKAgiRgoVTGlzdFJldmlzaW9uc1Jlc3BvbnNlEi0KCXJldmlzaW9ucxgBIAMoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkiVQoWUmVzdG9yZVJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYBCABKAkiGQoXUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiPgoUQXR0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJIkIKFUF0dGFjaENoYW5uZWxSZXNwb25zZRISCgpzZXNzaW9uX2lkGAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAMiUgoURGV0YWNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLgoVRGV0YWNoQ2hhbm5lbFJlc3BvbnNlEhUKDXNlc3Npb25fY291bnQYASABKAMiUwoVUmVmcmVzaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRISCgpzZXNzaW9uX2lkGAMgASgJIi8KFlJlZnJlc2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJaChBCcm9hZGNhc3RSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCRINCgV0b3BpYxgDIAEoCRIPCgdwYXlsb2FkGAQgASgMIhMKEUJyb2FkY2FzdFJlc3BvbnNlMpgKCg1Zb3JraWVTZXJ2aWNlElcKDkFjdGl2YXRlQ2xpZW50EiAueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVxdWVzdBohLnlvcmtpZS52MS5BY3RpdmF0ZUNsaWVudFJlc3BvbnNlIgASXQoQRGVhY3RpdmF0ZUNsaWVudBIiLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVxdWVzdBojLnlvcmtpZS52MS5EZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJXCg5BdHRhY2hEb2N1bWVudBIgLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuQXR0YWNoRG9jdW1lbnRSZXNwb25zZSIAElcKDkRldGFjaERvY3VtZW50EiAueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5EZXRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoOUmVtb3ZlRG9jdW1lbnQSIC55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLlJlbW92ZURvY3VtZW50UmVzcG9uc2UiABJaCg9QdXNoUHVsbENoYW5nZXMSIS55b3JraWUudjEuUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBoiLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXNwb25zZSIAEj4KBVdhdGNoEhcueW9ya2llLnYxLldhdGNoUmVxdWVzdBoYLnlvcmtpZS52MS5XYXRjaFJlc3BvbnNlIgAwARJXCg5DcmVhdGVSZXZpc2lvbhIgLnlvcmtpZS52MS5DcmVhdGVSZXZpc2lvblJlcXVlc3QaIS55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXNwb25zZSIAEk4KC0dldFJldmlzaW9uEh0ueW9ya2llLnYxLkdldFJldmlzaW9uUmVxdWVzdBoeLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlc3BvbnNlIgASVAoNTGlzdFJldmlzaW9ucxIfLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVxdWVzdBogLnlvcmtpZS52MS5MaXN0UmV2aXNpb25zUmVzcG9uc2UiABJaCg9SZXN0b3JlUmV2aXNpb24SIS55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVxdWVzdBoiLnlvcmtpZS52MS5SZXN0b3JlUmV2aXNpb25SZXNwb25zZSIAElQKDUF0dGFjaENoYW5uZWwSHy55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuQXR0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVAoNRGV0YWNoQ2hhbm5lbBIfLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVxdWVzdBogLnlvcmtpZS52MS5EZXRhY2hDaGFubmVsUmVzcG9uc2UiABJXCg5SZWZyZXNoQ2hhbm5lbBIgLnlvcmtpZS52MS5SZWZyZXNoQ2hhbm5lbFJlcXVlc3QaIS55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXNwb25zZSIAEkgKCUJyb2FkY2FzdBIbLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXF1ZXN0GhwueW9ya2llLnYxLkJyb2FkY2FzdFJlc3BvbnNlIgBCRQoRZGV2LnlvcmtpZS5hcGkudjFQAVouZ2l0aHViLmNvbS95b3JraWUtdGVhbS95b3JraWUvYXBpL3lvcmtpZS92MTt2MWIGcHJvdG8z", [file_src_api_yorkie_v1_resources]);
5872
+ const file_src_api_yorkie_v1_yorkie = /* @__PURE__ */ fileDesc("Ch5zcmMvYXBpL3lvcmtpZS92MS95b3JraWUucHJvdG8SCXlvcmtpZS52MSKeAQoVQWN0aXZhdGVDbGllbnRSZXF1ZXN0EhIKCmNsaWVudF9rZXkYASABKAkSQAoIbWV0YWRhdGEYAiADKAsyLi55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIisKFkFjdGl2YXRlQ2xpZW50UmVzcG9uc2USEQoJY2xpZW50X2lkGAEgASgJIkEKF0RlYWN0aXZhdGVDbGllbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtzeW5jaHJvbm91cxgCIAEoCCIaChhEZWFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiagoVQXR0YWNoRG9jdW1lbnRSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRIqCgtjaGFuZ2VfcGFjaxgCIAEoCzIVLnlvcmtpZS52MS5DaGFuZ2VQYWNrEhIKCnNjaGVtYV9rZXkYAyABKAkinwEKFkF0dGFjaERvY3VtZW50UmVzcG9uc2USEwoLZG9jdW1lbnRfaWQYASABKAkSKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYAyABKAUSJQoMc2NoZW1hX3J1bGVzGAQgAygLMg8ueW9ya2llLnYxLlJ1bGUiiwEKFURldGFjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIeChZyZW1vdmVfaWZfbm90X2F0dGFjaGVkGAQgASgIIkQKFkRldGFjaERvY3VtZW50UmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYAiABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJTCgxXYXRjaFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEjAKCXJlc291cmNlcxgCIAMoCzIdLnlvcmtpZS52MS5SZXNvdXJjZURlc2NyaXB0b3IihAEKElJlc291cmNlRGVzY3JpcHRvchIxCghkb2N1bWVudBgBIAEoCzIdLnlvcmtpZS52MS5Eb2N1bWVudERlc2NyaXB0b3JIABIvCgdjaGFubmVsGAIgASgLMhwueW9ya2llLnYxLkNoYW5uZWxEZXNjcmlwdG9ySABCCgoIcmVzb3VyY2UiKQoSRG9jdW1lbnREZXNjcmlwdG9yEhMKC2RvY3VtZW50X2lkGAEgASgJIigKEUNoYW5uZWxEZXNjcmlwdG9yEhMKC2NoYW5uZWxfa2V5GAEgASgJInkKDVdhdGNoUmVzcG9uc2USOAoOaW5pdGlhbGl6YXRpb24YASABKAsyHi55b3JraWUudjEuV2F0Y2hJbml0aWFsaXphdGlvbkgAEiYKBWV2ZW50GAIgASgLMhUueW9ya2llLnYxLldhdGNoRXZlbnRIAEIGCgRib2R5IkYKE1dhdGNoSW5pdGlhbGl6YXRpb24SLwoOcmVzb3VyY2VfaW5pdHMYASADKAsyFy55b3JraWUudjEuUmVzb3VyY2VJbml0IngKDFJlc291cmNlSW5pdBIwCg1kb2N1bWVudF9pbml0GAEgASgLMhcueW9ya2llLnYxLkRvY3VtZW50SW5pdEgAEi4KDGNoYW5uZWxfaW5pdBgCIAEoCzIWLnlvcmtpZS52MS5DaGFubmVsSW5pdEgAQgYKBGluaXQiNwoMRG9jdW1lbnRJbml0EhMKC2RvY3VtZW50X2lkGAEgASgJEhIKCmNsaWVudF9pZHMYAiADKAkiRgoLQ2hhbm5lbEluaXQSEwoLY2hhbm5lbF9rZXkYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAxILCgNzZXEYAyABKAMiewoKV2F0Y2hFdmVudBItCglkb2NfZXZlbnQYASABKAsyGC55b3JraWUudjEuRG9jV2F0Y2hFdmVudEgAEjUKDWNoYW5uZWxfZXZlbnQYAiABKAsyHC55b3JraWUudjEuQ2hhbm5lbFdhdGNoRXZlbnRIAEIHCgVldmVudCJICg1Eb2NXYXRjaEV2ZW50EhMKC2RvY3VtZW50X2lkGAEgASgJEiIKBWV2ZW50GAIgASgLMhMueW9ya2llLnYxLkRvY0V2ZW50IlAKEUNoYW5uZWxXYXRjaEV2ZW50EhMKC2NoYW5uZWxfa2V5GAEgASgJEiYKBWV2ZW50GAIgASgLMhcueW9ya2llLnYxLkNoYW5uZWxFdmVudCI+ChRXYXRjaERvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkitgEKFVdhdGNoRG9jdW1lbnRSZXNwb25zZRJJCg5pbml0aWFsaXphdGlvbhgBIAEoCzIvLnlvcmtpZS52MS5XYXRjaERvY3VtZW50UmVzcG9uc2UuSW5pdGlhbGl6YXRpb25IABIkCgVldmVudBgCIAEoCzITLnlvcmtpZS52MS5Eb2NFdmVudEgAGiQKDkluaXRpYWxpemF0aW9uEhIKCmNsaWVudF9pZHMYASADKAlCBgoEYm9keSI9ChNXYXRjaENoYW5uZWxSZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtjaGFubmVsX2tleRgCIAEoCSKDAQoUV2F0Y2hDaGFubmVsUmVzcG9uc2USOQoLaW5pdGlhbGl6ZWQYASABKAsyIi55b3JraWUudjEuV2F0Y2hDaGFubmVsSW5pdGlhbGl6ZWRIABIoCgVldmVudBgCIAEoCzIXLnlvcmtpZS52MS5DaGFubmVsRXZlbnRIAEIGCgRib2R5Ij0KF1dhdGNoQ2hhbm5lbEluaXRpYWxpemVkEhUKDXNlc3Npb25fY291bnQYASABKAMSCwoDc2VxGAIgASgDImsKFVJlbW92ZURvY3VtZW50UmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJEChZSZW1vdmVEb2N1bWVudFJlc3BvbnNlEioKC2NoYW5nZV9wYWNrGAEgASgLMhUueW9ya2llLnYxLkNoYW5nZVBhY2sifwoWUHVzaFB1bGxDaGFuZ2VzUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSKgoLY2hhbmdlX3BhY2sYAyABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjaxIRCglwdXNoX29ubHkYBCABKAgiRQoXUHVzaFB1bGxDaGFuZ2VzUmVzcG9uc2USKgoLY2hhbmdlX3BhY2sYASABKAsyFS55b3JraWUudjEuQ2hhbmdlUGFjayJjChVDcmVhdGVSZXZpc2lvblJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJIkYKFkNyZWF0ZVJldmlzaW9uUmVzcG9uc2USLAoIcmV2aXNpb24YASABKAsyGi55b3JraWUudjEuUmV2aXNpb25TdW1tYXJ5IlEKEkdldFJldmlzaW9uUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLZG9jdW1lbnRfaWQYAiABKAkSEwoLcmV2aXNpb25faWQYAyABKAkiQwoTR2V0UmV2aXNpb25SZXNwb25zZRIsCghyZXZpc2lvbhgBIAEoCzIaLnlvcmtpZS52MS5SZXZpc2lvblN1bW1hcnkidQoUTGlzdFJldmlzaW9uc1JlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2RvY3VtZW50X2lkGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRIOCgZvZmZzZXQYBCABKAUSEgoKaXNfZm9yd2FyZBgFIAEoCCJGChVMaXN0UmV2aXNpb25zUmVzcG9uc2USLQoJcmV2aXNpb25zGAEgAygLMhoueW9ya2llLnYxLlJldmlzaW9uU3VtbWFyeSJVChZSZXN0b3JlUmV2aXNpb25SZXF1ZXN0EhEKCWNsaWVudF9pZBgBIAEoCRITCgtkb2N1bWVudF9pZBgCIAEoCRITCgtyZXZpc2lvbl9pZBgEIAEoCSIZChdSZXN0b3JlUmV2aXNpb25SZXNwb25zZSI+ChRBdHRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkiQgoVQXR0YWNoQ2hhbm5lbFJlc3BvbnNlEhIKCnNlc3Npb25faWQYASABKAkSFQoNc2Vzc2lvbl9jb3VudBgCIAEoAyJSChREZXRhY2hDaGFubmVsUmVxdWVzdBIRCgljbGllbnRfaWQYASABKAkSEwoLY2hhbm5lbF9rZXkYAiABKAkSEgoKc2Vzc2lvbl9pZBgDIAEoCSIuChVEZXRhY2hDaGFubmVsUmVzcG9uc2USFQoNc2Vzc2lvbl9jb3VudBgBIAEoAyJTChVSZWZyZXNoQ2hhbm5lbFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEhIKCnNlc3Npb25faWQYAyABKAkiLwoWUmVmcmVzaENoYW5uZWxSZXNwb25zZRIVCg1zZXNzaW9uX2NvdW50GAEgASgDIloKEEJyb2FkY2FzdFJlcXVlc3QSEQoJY2xpZW50X2lkGAEgASgJEhMKC2NoYW5uZWxfa2V5GAIgASgJEg0KBXRvcGljGAMgASgJEg8KB3BheWxvYWQYBCABKAwiEwoRQnJvYWRjYXN0UmVzcG9uc2UyxQsKDVlvcmtpZVNlcnZpY2USVwoOQWN0aXZhdGVDbGllbnQSIC55b3JraWUudjEuQWN0aXZhdGVDbGllbnRSZXF1ZXN0GiEueW9ya2llLnYxLkFjdGl2YXRlQ2xpZW50UmVzcG9uc2UiABJdChBEZWFjdGl2YXRlQ2xpZW50EiIueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXF1ZXN0GiMueW9ya2llLnYxLkRlYWN0aXZhdGVDbGllbnRSZXNwb25zZSIAElcKDkF0dGFjaERvY3VtZW50EiAueW9ya2llLnYxLkF0dGFjaERvY3VtZW50UmVxdWVzdBohLnlvcmtpZS52MS5BdHRhY2hEb2N1bWVudFJlc3BvbnNlIgASVwoORGV0YWNoRG9jdW1lbnQSIC55b3JraWUudjEuRGV0YWNoRG9jdW1lbnRSZXF1ZXN0GiEueW9ya2llLnYxLkRldGFjaERvY3VtZW50UmVzcG9uc2UiABJXCg5SZW1vdmVEb2N1bWVudBIgLnlvcmtpZS52MS5SZW1vdmVEb2N1bWVudFJlcXVlc3QaIS55b3JraWUudjEuUmVtb3ZlRG9jdW1lbnRSZXNwb25zZSIAEloKD1B1c2hQdWxsQ2hhbmdlcxIhLnlvcmtpZS52MS5QdXNoUHVsbENoYW5nZXNSZXF1ZXN0GiIueW9ya2llLnYxLlB1c2hQdWxsQ2hhbmdlc1Jlc3BvbnNlIgASPgoFV2F0Y2gSFy55b3JraWUudjEuV2F0Y2hSZXF1ZXN0GhgueW9ya2llLnYxLldhdGNoUmVzcG9uc2UiADABElYKDVdhdGNoRG9jdW1lbnQSHy55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlcXVlc3QaIC55b3JraWUudjEuV2F0Y2hEb2N1bWVudFJlc3BvbnNlIgAwARJTCgxXYXRjaENoYW5uZWwSHi55b3JraWUudjEuV2F0Y2hDaGFubmVsUmVxdWVzdBofLnlvcmtpZS52MS5XYXRjaENoYW5uZWxSZXNwb25zZSIAMAESVwoOQ3JlYXRlUmV2aXNpb24SIC55b3JraWUudjEuQ3JlYXRlUmV2aXNpb25SZXF1ZXN0GiEueW9ya2llLnYxLkNyZWF0ZVJldmlzaW9uUmVzcG9uc2UiABJOCgtHZXRSZXZpc2lvbhIdLnlvcmtpZS52MS5HZXRSZXZpc2lvblJlcXVlc3QaHi55b3JraWUudjEuR2V0UmV2aXNpb25SZXNwb25zZSIAElQKDUxpc3RSZXZpc2lvbnMSHy55b3JraWUudjEuTGlzdFJldmlzaW9uc1JlcXVlc3QaIC55b3JraWUudjEuTGlzdFJldmlzaW9uc1Jlc3BvbnNlIgASWgoPUmVzdG9yZVJldmlzaW9uEiEueW9ya2llLnYxLlJlc3RvcmVSZXZpc2lvblJlcXVlc3QaIi55b3JraWUudjEuUmVzdG9yZVJldmlzaW9uUmVzcG9uc2UiABJUCg1BdHRhY2hDaGFubmVsEh8ueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXF1ZXN0GiAueW9ya2llLnYxLkF0dGFjaENoYW5uZWxSZXNwb25zZSIAElQKDURldGFjaENoYW5uZWwSHy55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlcXVlc3QaIC55b3JraWUudjEuRGV0YWNoQ2hhbm5lbFJlc3BvbnNlIgASVwoOUmVmcmVzaENoYW5uZWwSIC55b3JraWUudjEuUmVmcmVzaENoYW5uZWxSZXF1ZXN0GiEueW9ya2llLnYxLlJlZnJlc2hDaGFubmVsUmVzcG9uc2UiABJICglCcm9hZGNhc3QSGy55b3JraWUudjEuQnJvYWRjYXN0UmVxdWVzdBocLnlvcmtpZS52MS5Ccm9hZGNhc3RSZXNwb25zZSIAQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_src_api_yorkie_v1_resources]);
5477
5873
  const YorkieService = /* @__PURE__ */ serviceDesc(file_src_api_yorkie_v1_yorkie, 0);
5478
5874
  const file_google_rpc_error_details = /* @__PURE__ */ fileDesc("Ch5nb29nbGUvcnBjL2Vycm9yX2RldGFpbHMucHJvdG8SCmdvb2dsZS5ycGMikwEKCUVycm9ySW5mbxIOCgZyZWFzb24YASABKAkSDgoGZG9tYWluGAIgASgJEjUKCG1ldGFkYXRhGAMgAygLMiMuZ29vZ2xlLnJwYy5FcnJvckluZm8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiOwoJUmV0cnlJbmZvEi4KC3JldHJ5X2RlbGF5GAEgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uIjIKCURlYnVnSW5mbxIVCg1zdGFja19lbnRyaWVzGAEgAygJEg4KBmRldGFpbBgCIAEoCSKPAwoMUXVvdGFGYWlsdXJlEjYKCnZpb2xhdGlvbnMYASADKAsyIi5nb29nbGUucnBjLlF1b3RhRmFpbHVyZS5WaW9sYXRpb24axgIKCVZpb2xhdGlvbhIPCgdzdWJqZWN0GAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2FwaV9zZXJ2aWNlGAMgASgJEhQKDHF1b3RhX21ldHJpYxgEIAEoCRIQCghxdW90YV9pZBgFIAEoCRJRChBxdW90YV9kaW1lbnNpb25zGAYgAygLMjcuZ29vZ2xlLnJwYy5RdW90YUZhaWx1cmUuVmlvbGF0aW9uLlF1b3RhRGltZW5zaW9uc0VudHJ5EhMKC3F1b3RhX3ZhbHVlGAcgASgDEh8KEmZ1dHVyZV9xdW90YV92YWx1ZRgIIAEoA0gAiAEBGjYKFFF1b3RhRGltZW5zaW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCFQoTX2Z1dHVyZV9xdW90YV92YWx1ZSKVAQoTUHJlY29uZGl0aW9uRmFpbHVyZRI9Cgp2aW9sYXRpb25zGAEgAygLMikuZ29vZ2xlLnJwYy5QcmVjb25kaXRpb25GYWlsdXJlLlZpb2xhdGlvbho/CglWaW9sYXRpb24SDAoEdHlwZRgBIAEoCRIPCgdzdWJqZWN0GAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJIswBCgpCYWRSZXF1ZXN0Ej8KEGZpZWxkX3Zpb2xhdGlvbnMYASADKAsyJS5nb29nbGUucnBjLkJhZFJlcXVlc3QuRmllbGRWaW9sYXRpb24afQoORmllbGRWaW9sYXRpb24SDQoFZmllbGQYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDgoGcmVhc29uGAMgASgJEjcKEWxvY2FsaXplZF9tZXNzYWdlGAQgASgLMhwuZ29vZ2xlLnJwYy5Mb2NhbGl6ZWRNZXNzYWdlIjcKC1JlcXVlc3RJbmZvEhIKCnJlcXVlc3RfaWQYASABKAkSFAoMc2VydmluZ19kYXRhGAIgASgJImAKDFJlc291cmNlSW5mbxIVCg1yZXNvdXJjZV90eXBlGAEgASgJEhUKDXJlc291cmNlX25hbWUYAiABKAkSDQoFb3duZXIYAyABKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiVgoESGVscBIkCgVsaW5rcxgBIAMoCzIVLmdvb2dsZS5ycGMuSGVscC5MaW5rGigKBExpbmsSEwoLZGVzY3JpcHRpb24YASABKAkSCwoDdXJsGAIgASgJIjMKEExvY2FsaXplZE1lc3NhZ2USDgoGbG9jYWxlGAEgASgJEg8KB21lc3NhZ2UYAiABKAlCbAoOY29tLmdvb2dsZS5ycGNCEUVycm9yRGV0YWlsc1Byb3RvUAFaP2dvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvcnBjL2VycmRldGFpbHM7ZXJyZGV0YWlsc6ICA1JQQ2IGcHJvdG8z", [file_google_protobuf_duration]);
5479
5875
  const ErrorInfoSchema = /* @__PURE__ */ messageDesc(file_google_rpc_error_details, 0);
@@ -6615,923 +7011,32 @@
6615
7011
  return false;
6616
7012
  }
6617
7013
  }
6618
- var wasm = null;
6619
- try {
6620
- wasm = new WebAssembly.Instance(
6621
- new WebAssembly.Module(
6622
- new Uint8Array([
6623
- // \0asm
6624
- 0,
6625
- 97,
6626
- 115,
6627
- 109,
6628
- // version 1
6629
- 1,
6630
- 0,
6631
- 0,
6632
- 0,
6633
- // section "type"
6634
- 1,
6635
- 13,
6636
- 2,
6637
- // 0, () => i32
6638
- 96,
6639
- 0,
6640
- 1,
6641
- 127,
6642
- // 1, (i32, i32, i32, i32) => i32
6643
- 96,
6644
- 4,
6645
- 127,
6646
- 127,
6647
- 127,
6648
- 127,
6649
- 1,
6650
- 127,
6651
- // section "function"
6652
- 3,
6653
- 7,
6654
- 6,
6655
- // 0, type 0
6656
- 0,
6657
- // 1, type 1
6658
- 1,
6659
- // 2, type 1
6660
- 1,
6661
- // 3, type 1
6662
- 1,
6663
- // 4, type 1
6664
- 1,
6665
- // 5, type 1
6666
- 1,
6667
- // section "global"
6668
- 6,
6669
- 6,
6670
- 1,
6671
- // 0, "high", mutable i32
6672
- 127,
6673
- 1,
6674
- 65,
6675
- 0,
6676
- 11,
6677
- // section "export"
6678
- 7,
6679
- 50,
6680
- 6,
6681
- // 0, "mul"
6682
- 3,
6683
- 109,
6684
- 117,
6685
- 108,
6686
- 0,
6687
- 1,
6688
- // 1, "div_s"
6689
- 5,
6690
- 100,
6691
- 105,
6692
- 118,
6693
- 95,
6694
- 115,
6695
- 0,
6696
- 2,
6697
- // 2, "div_u"
6698
- 5,
6699
- 100,
6700
- 105,
6701
- 118,
6702
- 95,
6703
- 117,
6704
- 0,
6705
- 3,
6706
- // 3, "rem_s"
6707
- 5,
6708
- 114,
6709
- 101,
6710
- 109,
6711
- 95,
6712
- 115,
6713
- 0,
6714
- 4,
6715
- // 4, "rem_u"
6716
- 5,
6717
- 114,
6718
- 101,
6719
- 109,
6720
- 95,
6721
- 117,
6722
- 0,
6723
- 5,
6724
- // 5, "get_high"
6725
- 8,
6726
- 103,
6727
- 101,
6728
- 116,
6729
- 95,
6730
- 104,
6731
- 105,
6732
- 103,
6733
- 104,
6734
- 0,
6735
- 0,
6736
- // section "code"
6737
- 10,
6738
- 191,
6739
- 1,
6740
- 6,
6741
- // 0, "get_high"
6742
- 4,
6743
- 0,
6744
- 35,
6745
- 0,
6746
- 11,
6747
- // 1, "mul"
6748
- 36,
6749
- 1,
6750
- 1,
6751
- 126,
6752
- 32,
6753
- 0,
6754
- 173,
6755
- 32,
6756
- 1,
6757
- 173,
6758
- 66,
6759
- 32,
6760
- 134,
6761
- 132,
6762
- 32,
6763
- 2,
6764
- 173,
6765
- 32,
6766
- 3,
6767
- 173,
6768
- 66,
6769
- 32,
6770
- 134,
6771
- 132,
6772
- 126,
6773
- 34,
6774
- 4,
6775
- 66,
6776
- 32,
6777
- 135,
6778
- 167,
6779
- 36,
6780
- 0,
6781
- 32,
6782
- 4,
6783
- 167,
6784
- 11,
6785
- // 2, "div_s"
6786
- 36,
6787
- 1,
6788
- 1,
6789
- 126,
6790
- 32,
6791
- 0,
6792
- 173,
6793
- 32,
6794
- 1,
6795
- 173,
6796
- 66,
6797
- 32,
6798
- 134,
6799
- 132,
6800
- 32,
6801
- 2,
6802
- 173,
6803
- 32,
6804
- 3,
6805
- 173,
6806
- 66,
6807
- 32,
6808
- 134,
6809
- 132,
6810
- 127,
6811
- 34,
6812
- 4,
6813
- 66,
6814
- 32,
6815
- 135,
6816
- 167,
6817
- 36,
6818
- 0,
6819
- 32,
6820
- 4,
6821
- 167,
6822
- 11,
6823
- // 3, "div_u"
6824
- 36,
6825
- 1,
6826
- 1,
6827
- 126,
6828
- 32,
6829
- 0,
6830
- 173,
6831
- 32,
6832
- 1,
6833
- 173,
6834
- 66,
6835
- 32,
6836
- 134,
6837
- 132,
6838
- 32,
6839
- 2,
6840
- 173,
6841
- 32,
6842
- 3,
6843
- 173,
6844
- 66,
6845
- 32,
6846
- 134,
6847
- 132,
6848
- 128,
6849
- 34,
6850
- 4,
6851
- 66,
6852
- 32,
6853
- 135,
6854
- 167,
6855
- 36,
6856
- 0,
6857
- 32,
6858
- 4,
6859
- 167,
6860
- 11,
6861
- // 4, "rem_s"
6862
- 36,
6863
- 1,
6864
- 1,
6865
- 126,
6866
- 32,
6867
- 0,
6868
- 173,
6869
- 32,
6870
- 1,
6871
- 173,
6872
- 66,
6873
- 32,
6874
- 134,
6875
- 132,
6876
- 32,
6877
- 2,
6878
- 173,
6879
- 32,
6880
- 3,
6881
- 173,
6882
- 66,
6883
- 32,
6884
- 134,
6885
- 132,
6886
- 129,
6887
- 34,
6888
- 4,
6889
- 66,
6890
- 32,
6891
- 135,
6892
- 167,
6893
- 36,
6894
- 0,
6895
- 32,
6896
- 4,
6897
- 167,
6898
- 11,
6899
- // 5, "rem_u"
6900
- 36,
6901
- 1,
6902
- 1,
6903
- 126,
6904
- 32,
6905
- 0,
6906
- 173,
6907
- 32,
6908
- 1,
6909
- 173,
6910
- 66,
6911
- 32,
6912
- 134,
6913
- 132,
6914
- 32,
6915
- 2,
6916
- 173,
6917
- 32,
6918
- 3,
6919
- 173,
6920
- 66,
6921
- 32,
6922
- 134,
6923
- 132,
6924
- 130,
6925
- 34,
6926
- 4,
6927
- 66,
6928
- 32,
6929
- 135,
6930
- 167,
6931
- 36,
6932
- 0,
6933
- 32,
6934
- 4,
6935
- 167,
6936
- 11
6937
- ])
6938
- ),
6939
- {}
6940
- ).exports;
6941
- } catch {
6942
- }
6943
- function Long(low, high, unsigned) {
6944
- this.low = low | 0;
6945
- this.high = high | 0;
6946
- this.unsigned = !!unsigned;
6947
- }
6948
- Long.prototype.__isLong__;
6949
- Object.defineProperty(Long.prototype, "__isLong__", { value: true });
6950
- function isLong$1(obj) {
6951
- return (obj && obj["__isLong__"]) === true;
6952
- }
6953
- function ctz32(value) {
6954
- var c = Math.clz32(value & -value);
6955
- return value ? 31 - c : c;
6956
- }
6957
- Long.isLong = isLong$1;
6958
- var INT_CACHE = {};
6959
- var UINT_CACHE = {};
6960
- function fromInt(value, unsigned) {
6961
- var obj, cachedObj, cache;
6962
- if (unsigned) {
6963
- value >>>= 0;
6964
- if (cache = 0 <= value && value < 256) {
6965
- cachedObj = UINT_CACHE[value];
6966
- if (cachedObj) return cachedObj;
6967
- }
6968
- obj = fromBits(value, 0, true);
6969
- if (cache) UINT_CACHE[value] = obj;
6970
- return obj;
6971
- } else {
6972
- value |= 0;
6973
- if (cache = -128 <= value && value < 128) {
6974
- cachedObj = INT_CACHE[value];
6975
- if (cachedObj) return cachedObj;
6976
- }
6977
- obj = fromBits(value, value < 0 ? -1 : 0, false);
6978
- if (cache) INT_CACHE[value] = obj;
6979
- return obj;
7014
+ const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
7015
+ function bigintToBytesLE(value) {
7016
+ const buf = new Uint8Array(8);
7017
+ let v = BigInt.asUintN(64, value);
7018
+ for (let i = 0; i < 8; i++) {
7019
+ buf[i] = Number(v & 0xffn);
7020
+ v >>= 8n;
6980
7021
  }
7022
+ return buf;
6981
7023
  }
6982
- Long.fromInt = fromInt;
6983
- function fromNumber(value, unsigned) {
6984
- if (isNaN(value)) return unsigned ? UZERO : ZERO;
6985
- if (unsigned) {
6986
- if (value < 0) return UZERO;
6987
- if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
6988
- } else {
6989
- if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
6990
- if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
6991
- }
6992
- if (value < 0) return fromNumber(-value, unsigned).neg();
6993
- return fromBits(
6994
- value % TWO_PWR_32_DBL | 0,
6995
- value / TWO_PWR_32_DBL | 0,
6996
- unsigned
6997
- );
6998
- }
6999
- Long.fromNumber = fromNumber;
7000
- function fromBits(lowBits, highBits, unsigned) {
7001
- return new Long(lowBits, highBits, unsigned);
7002
- }
7003
- Long.fromBits = fromBits;
7004
- var pow_dbl = Math.pow;
7005
- function fromString(str, unsigned, radix) {
7006
- if (str.length === 0) throw Error("empty string");
7007
- if (typeof unsigned === "number") {
7008
- radix = unsigned;
7009
- unsigned = false;
7010
- } else {
7011
- unsigned = !!unsigned;
7012
- }
7013
- if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
7014
- return unsigned ? UZERO : ZERO;
7015
- radix = radix || 10;
7016
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7017
- var p;
7018
- if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen");
7019
- else if (p === 0) {
7020
- return fromString(str.substring(1), unsigned, radix).neg();
7021
- }
7022
- var radixToPower = fromNumber(pow_dbl(radix, 8));
7023
- var result = ZERO;
7024
- for (var i = 0; i < str.length; i += 8) {
7025
- var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);
7026
- if (size < 8) {
7027
- var power = fromNumber(pow_dbl(radix, size));
7028
- result = result.mul(power).add(fromNumber(value));
7029
- } else {
7030
- result = result.mul(radixToPower);
7031
- result = result.add(fromNumber(value));
7032
- }
7024
+ function bigintFromBytesLE(bytes) {
7025
+ let v = 0n;
7026
+ for (let i = 7; i >= 0; i--) {
7027
+ v = v << 8n | BigInt(bytes[i]);
7033
7028
  }
7034
- result.unsigned = unsigned;
7035
- return result;
7029
+ return BigInt.asIntN(64, v);
7036
7030
  }
7037
- Long.fromString = fromString;
7038
- function fromValue(val, unsigned) {
7039
- if (typeof val === "number") return fromNumber(val, unsigned);
7040
- if (typeof val === "string") return fromString(val, unsigned);
7041
- return fromBits(
7042
- val.low,
7043
- val.high,
7044
- typeof unsigned === "boolean" ? unsigned : val.unsigned
7045
- );
7046
- }
7047
- Long.fromValue = fromValue;
7048
- var TWO_PWR_16_DBL = 1 << 16;
7049
- var TWO_PWR_24_DBL = 1 << 24;
7050
- var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
7051
- var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
7052
- var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
7053
- var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
7054
- var ZERO = fromInt(0);
7055
- Long.ZERO = ZERO;
7056
- var UZERO = fromInt(0, true);
7057
- Long.UZERO = UZERO;
7058
- var ONE = fromInt(1);
7059
- Long.ONE = ONE;
7060
- var UONE = fromInt(1, true);
7061
- Long.UONE = UONE;
7062
- var NEG_ONE = fromInt(-1);
7063
- Long.NEG_ONE = NEG_ONE;
7064
- var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false);
7065
- Long.MAX_VALUE = MAX_VALUE;
7066
- var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true);
7067
- Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
7068
- var MIN_VALUE = fromBits(0, 2147483648 | 0, false);
7069
- Long.MIN_VALUE = MIN_VALUE;
7070
- var LongPrototype = Long.prototype;
7071
- LongPrototype.toInt = function toInt() {
7072
- return this.unsigned ? this.low >>> 0 : this.low;
7073
- };
7074
- LongPrototype.toNumber = function toNumber() {
7075
- if (this.unsigned)
7076
- return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
7077
- return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
7078
- };
7079
- LongPrototype.toString = function toString(radix) {
7080
- radix = radix || 10;
7081
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7082
- if (this.isZero()) return "0";
7083
- if (this.isNegative()) {
7084
- if (this.eq(MIN_VALUE)) {
7085
- var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this);
7086
- return div.toString(radix) + rem1.toInt().toString(radix);
7087
- } else return "-" + this.neg().toString(radix);
7088
- }
7089
- var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this;
7090
- var result = "";
7091
- while (true) {
7092
- var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix);
7093
- rem = remDiv;
7094
- if (rem.isZero()) return digits + result;
7095
- else {
7096
- while (digits.length < 6) digits = "0" + digits;
7097
- result = "" + digits + result;
7098
- }
7099
- }
7100
- };
7101
- LongPrototype.getHighBits = function getHighBits() {
7102
- return this.high;
7103
- };
7104
- LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
7105
- return this.high >>> 0;
7106
- };
7107
- LongPrototype.getLowBits = function getLowBits() {
7108
- return this.low;
7109
- };
7110
- LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
7111
- return this.low >>> 0;
7112
- };
7113
- LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
7114
- if (this.isNegative())
7115
- return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
7116
- var val = this.high != 0 ? this.high : this.low;
7117
- for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
7118
- return this.high != 0 ? bit + 33 : bit + 1;
7119
- };
7120
- LongPrototype.isSafeInteger = function isSafeInteger() {
7121
- var top11Bits = this.high >> 21;
7122
- if (!top11Bits) return true;
7123
- if (this.unsigned) return false;
7124
- return top11Bits === -1 && !(this.low === 0 && this.high === -2097152);
7125
- };
7126
- LongPrototype.isZero = function isZero() {
7127
- return this.high === 0 && this.low === 0;
7128
- };
7129
- LongPrototype.eqz = LongPrototype.isZero;
7130
- LongPrototype.isNegative = function isNegative() {
7131
- return !this.unsigned && this.high < 0;
7132
- };
7133
- LongPrototype.isPositive = function isPositive() {
7134
- return this.unsigned || this.high >= 0;
7135
- };
7136
- LongPrototype.isOdd = function isOdd() {
7137
- return (this.low & 1) === 1;
7138
- };
7139
- LongPrototype.isEven = function isEven() {
7140
- return (this.low & 1) === 0;
7141
- };
7142
- LongPrototype.equals = function equals(other) {
7143
- if (!isLong$1(other)) other = fromValue(other);
7144
- if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1)
7145
- return false;
7146
- return this.high === other.high && this.low === other.low;
7147
- };
7148
- LongPrototype.eq = LongPrototype.equals;
7149
- LongPrototype.notEquals = function notEquals(other) {
7150
- return !this.eq(
7151
- /* validates */
7152
- other
7153
- );
7154
- };
7155
- LongPrototype.neq = LongPrototype.notEquals;
7156
- LongPrototype.ne = LongPrototype.notEquals;
7157
- LongPrototype.lessThan = function lessThan(other) {
7158
- return this.comp(
7159
- /* validates */
7160
- other
7161
- ) < 0;
7162
- };
7163
- LongPrototype.lt = LongPrototype.lessThan;
7164
- LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
7165
- return this.comp(
7166
- /* validates */
7167
- other
7168
- ) <= 0;
7169
- };
7170
- LongPrototype.lte = LongPrototype.lessThanOrEqual;
7171
- LongPrototype.le = LongPrototype.lessThanOrEqual;
7172
- LongPrototype.greaterThan = function greaterThan(other) {
7173
- return this.comp(
7174
- /* validates */
7175
- other
7176
- ) > 0;
7177
- };
7178
- LongPrototype.gt = LongPrototype.greaterThan;
7179
- LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
7180
- return this.comp(
7181
- /* validates */
7182
- other
7183
- ) >= 0;
7184
- };
7185
- LongPrototype.gte = LongPrototype.greaterThanOrEqual;
7186
- LongPrototype.ge = LongPrototype.greaterThanOrEqual;
7187
- LongPrototype.compare = function compare(other) {
7188
- if (!isLong$1(other)) other = fromValue(other);
7189
- if (this.eq(other)) return 0;
7190
- var thisNeg = this.isNegative(), otherNeg = other.isNegative();
7191
- if (thisNeg && !otherNeg) return -1;
7192
- if (!thisNeg && otherNeg) return 1;
7193
- if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
7194
- return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
7195
- };
7196
- LongPrototype.comp = LongPrototype.compare;
7197
- LongPrototype.negate = function negate2() {
7198
- if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
7199
- return this.not().add(ONE);
7200
- };
7201
- LongPrototype.neg = LongPrototype.negate;
7202
- LongPrototype.add = function add(addend) {
7203
- if (!isLong$1(addend)) addend = fromValue(addend);
7204
- var a48 = this.high >>> 16;
7205
- var a32 = this.high & 65535;
7206
- var a16 = this.low >>> 16;
7207
- var a00 = this.low & 65535;
7208
- var b48 = addend.high >>> 16;
7209
- var b32 = addend.high & 65535;
7210
- var b16 = addend.low >>> 16;
7211
- var b00 = addend.low & 65535;
7212
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7213
- c00 += a00 + b00;
7214
- c16 += c00 >>> 16;
7215
- c00 &= 65535;
7216
- c16 += a16 + b16;
7217
- c32 += c16 >>> 16;
7218
- c16 &= 65535;
7219
- c32 += a32 + b32;
7220
- c48 += c32 >>> 16;
7221
- c32 &= 65535;
7222
- c48 += a48 + b48;
7223
- c48 &= 65535;
7224
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7225
- };
7226
- LongPrototype.subtract = function subtract(subtrahend) {
7227
- if (!isLong$1(subtrahend)) subtrahend = fromValue(subtrahend);
7228
- return this.add(subtrahend.neg());
7229
- };
7230
- LongPrototype.sub = LongPrototype.subtract;
7231
- LongPrototype.multiply = function multiply(multiplier) {
7232
- if (this.isZero()) return this;
7233
- if (!isLong$1(multiplier)) multiplier = fromValue(multiplier);
7234
- if (wasm) {
7235
- var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
7236
- return fromBits(low, wasm["get_high"](), this.unsigned);
7237
- }
7238
- if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
7239
- if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
7240
- if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
7241
- if (this.isNegative()) {
7242
- if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());
7243
- else return this.neg().mul(multiplier).neg();
7244
- } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
7245
- if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
7246
- return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
7247
- var a48 = this.high >>> 16;
7248
- var a32 = this.high & 65535;
7249
- var a16 = this.low >>> 16;
7250
- var a00 = this.low & 65535;
7251
- var b48 = multiplier.high >>> 16;
7252
- var b32 = multiplier.high & 65535;
7253
- var b16 = multiplier.low >>> 16;
7254
- var b00 = multiplier.low & 65535;
7255
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7256
- c00 += a00 * b00;
7257
- c16 += c00 >>> 16;
7258
- c00 &= 65535;
7259
- c16 += a16 * b00;
7260
- c32 += c16 >>> 16;
7261
- c16 &= 65535;
7262
- c16 += a00 * b16;
7263
- c32 += c16 >>> 16;
7264
- c16 &= 65535;
7265
- c32 += a32 * b00;
7266
- c48 += c32 >>> 16;
7267
- c32 &= 65535;
7268
- c32 += a16 * b16;
7269
- c48 += c32 >>> 16;
7270
- c32 &= 65535;
7271
- c32 += a00 * b32;
7272
- c48 += c32 >>> 16;
7273
- c32 &= 65535;
7274
- c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
7275
- c48 &= 65535;
7276
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7277
- };
7278
- LongPrototype.mul = LongPrototype.multiply;
7279
- LongPrototype.divide = function divide(divisor) {
7280
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7281
- if (divisor.isZero()) throw Error("division by zero");
7282
- if (wasm) {
7283
- if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) {
7284
- return this;
7285
- }
7286
- var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(
7287
- this.low,
7288
- this.high,
7289
- divisor.low,
7290
- divisor.high
7291
- );
7292
- return fromBits(low, wasm["get_high"](), this.unsigned);
7293
- }
7294
- if (this.isZero()) return this.unsigned ? UZERO : ZERO;
7295
- var approx, rem, res;
7296
- if (!this.unsigned) {
7297
- if (this.eq(MIN_VALUE)) {
7298
- if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
7299
- return MIN_VALUE;
7300
- else if (divisor.eq(MIN_VALUE)) return ONE;
7301
- else {
7302
- var halfThis = this.shr(1);
7303
- approx = halfThis.div(divisor).shl(1);
7304
- if (approx.eq(ZERO)) {
7305
- return divisor.isNegative() ? ONE : NEG_ONE;
7306
- } else {
7307
- rem = this.sub(divisor.mul(approx));
7308
- res = approx.add(rem.div(divisor));
7309
- return res;
7310
- }
7311
- }
7312
- } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
7313
- if (this.isNegative()) {
7314
- if (divisor.isNegative()) return this.neg().div(divisor.neg());
7315
- return this.neg().div(divisor).neg();
7316
- } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
7317
- res = ZERO;
7318
- } else {
7319
- if (!divisor.unsigned) divisor = divisor.toUnsigned();
7320
- if (divisor.gt(this)) return UZERO;
7321
- if (divisor.gt(this.shru(1)))
7322
- return UONE;
7323
- res = UZERO;
7324
- }
7325
- rem = this;
7326
- while (rem.gte(divisor)) {
7327
- approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
7328
- var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), approxRes = fromNumber(approx), approxRem = approxRes.mul(divisor);
7329
- while (approxRem.isNegative() || approxRem.gt(rem)) {
7330
- approx -= delta;
7331
- approxRes = fromNumber(approx, this.unsigned);
7332
- approxRem = approxRes.mul(divisor);
7333
- }
7334
- if (approxRes.isZero()) approxRes = ONE;
7335
- res = res.add(approxRes);
7336
- rem = rem.sub(approxRem);
7337
- }
7338
- return res;
7339
- };
7340
- LongPrototype.div = LongPrototype.divide;
7341
- LongPrototype.modulo = function modulo(divisor) {
7342
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7343
- if (wasm) {
7344
- var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(
7345
- this.low,
7346
- this.high,
7347
- divisor.low,
7348
- divisor.high
7349
- );
7350
- return fromBits(low, wasm["get_high"](), this.unsigned);
7351
- }
7352
- return this.sub(this.div(divisor).mul(divisor));
7353
- };
7354
- LongPrototype.mod = LongPrototype.modulo;
7355
- LongPrototype.rem = LongPrototype.modulo;
7356
- LongPrototype.not = function not() {
7357
- return fromBits(~this.low, ~this.high, this.unsigned);
7358
- };
7359
- LongPrototype.countLeadingZeros = function countLeadingZeros() {
7360
- return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
7361
- };
7362
- LongPrototype.clz = LongPrototype.countLeadingZeros;
7363
- LongPrototype.countTrailingZeros = function countTrailingZeros() {
7364
- return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
7365
- };
7366
- LongPrototype.ctz = LongPrototype.countTrailingZeros;
7367
- LongPrototype.and = function and(other) {
7368
- if (!isLong$1(other)) other = fromValue(other);
7369
- return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
7370
- };
7371
- LongPrototype.or = function or(other) {
7372
- if (!isLong$1(other)) other = fromValue(other);
7373
- return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
7374
- };
7375
- LongPrototype.xor = function xor(other) {
7376
- if (!isLong$1(other)) other = fromValue(other);
7377
- return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
7378
- };
7379
- LongPrototype.shiftLeft = function shiftLeft(numBits) {
7380
- if (isLong$1(numBits)) numBits = numBits.toInt();
7381
- if ((numBits &= 63) === 0) return this;
7382
- else if (numBits < 32)
7383
- return fromBits(
7384
- this.low << numBits,
7385
- this.high << numBits | this.low >>> 32 - numBits,
7386
- this.unsigned
7387
- );
7388
- else return fromBits(0, this.low << numBits - 32, this.unsigned);
7389
- };
7390
- LongPrototype.shl = LongPrototype.shiftLeft;
7391
- LongPrototype.shiftRight = function shiftRight(numBits) {
7392
- if (isLong$1(numBits)) numBits = numBits.toInt();
7393
- if ((numBits &= 63) === 0) return this;
7394
- else if (numBits < 32)
7395
- return fromBits(
7396
- this.low >>> numBits | this.high << 32 - numBits,
7397
- this.high >> numBits,
7398
- this.unsigned
7399
- );
7400
- else
7401
- return fromBits(
7402
- this.high >> numBits - 32,
7403
- this.high >= 0 ? 0 : -1,
7404
- this.unsigned
7405
- );
7406
- };
7407
- LongPrototype.shr = LongPrototype.shiftRight;
7408
- LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
7409
- if (isLong$1(numBits)) numBits = numBits.toInt();
7410
- if ((numBits &= 63) === 0) return this;
7411
- if (numBits < 32)
7412
- return fromBits(
7413
- this.low >>> numBits | this.high << 32 - numBits,
7414
- this.high >>> numBits,
7415
- this.unsigned
7416
- );
7417
- if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
7418
- return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
7419
- };
7420
- LongPrototype.shru = LongPrototype.shiftRightUnsigned;
7421
- LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
7422
- LongPrototype.rotateLeft = function rotateLeft(numBits) {
7423
- var b;
7424
- if (isLong$1(numBits)) numBits = numBits.toInt();
7425
- if ((numBits &= 63) === 0) return this;
7426
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7427
- if (numBits < 32) {
7428
- b = 32 - numBits;
7429
- return fromBits(
7430
- this.low << numBits | this.high >>> b,
7431
- this.high << numBits | this.low >>> b,
7432
- this.unsigned
7433
- );
7434
- }
7435
- numBits -= 32;
7436
- b = 32 - numBits;
7437
- return fromBits(
7438
- this.high << numBits | this.low >>> b,
7439
- this.low << numBits | this.high >>> b,
7440
- this.unsigned
7441
- );
7442
- };
7443
- LongPrototype.rotl = LongPrototype.rotateLeft;
7444
- LongPrototype.rotateRight = function rotateRight(numBits) {
7445
- var b;
7446
- if (isLong$1(numBits)) numBits = numBits.toInt();
7447
- if ((numBits &= 63) === 0) return this;
7448
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7449
- if (numBits < 32) {
7450
- b = 32 - numBits;
7451
- return fromBits(
7452
- this.high << b | this.low >>> numBits,
7453
- this.low << b | this.high >>> numBits,
7454
- this.unsigned
7455
- );
7031
+ function bigintFromBytesLEUnsigned(bytes) {
7032
+ let v = 0n;
7033
+ for (let i = 7; i >= 0; i--) {
7034
+ v = v << 8n | BigInt(bytes[i]);
7456
7035
  }
7457
- numBits -= 32;
7458
- b = 32 - numBits;
7459
- return fromBits(
7460
- this.low << b | this.high >>> numBits,
7461
- this.high << b | this.low >>> numBits,
7462
- this.unsigned
7463
- );
7464
- };
7465
- LongPrototype.rotr = LongPrototype.rotateRight;
7466
- LongPrototype.toSigned = function toSigned() {
7467
- if (!this.unsigned) return this;
7468
- return fromBits(this.low, this.high, false);
7469
- };
7470
- LongPrototype.toUnsigned = function toUnsigned2() {
7471
- if (this.unsigned) return this;
7472
- return fromBits(this.low, this.high, true);
7473
- };
7474
- LongPrototype.toBytes = function toBytes(le) {
7475
- return le ? this.toBytesLE() : this.toBytesBE();
7476
- };
7477
- LongPrototype.toBytesLE = function toBytesLE() {
7478
- var hi = this.high, lo = this.low;
7479
- return [
7480
- lo & 255,
7481
- lo >>> 8 & 255,
7482
- lo >>> 16 & 255,
7483
- lo >>> 24,
7484
- hi & 255,
7485
- hi >>> 8 & 255,
7486
- hi >>> 16 & 255,
7487
- hi >>> 24
7488
- ];
7489
- };
7490
- LongPrototype.toBytesBE = function toBytesBE() {
7491
- var hi = this.high, lo = this.low;
7492
- return [
7493
- hi >>> 24,
7494
- hi >>> 16 & 255,
7495
- hi >>> 8 & 255,
7496
- hi & 255,
7497
- lo >>> 24,
7498
- lo >>> 16 & 255,
7499
- lo >>> 8 & 255,
7500
- lo & 255
7501
- ];
7502
- };
7503
- Long.fromBytes = function fromBytes(bytes, unsigned, le) {
7504
- return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
7505
- };
7506
- Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
7507
- return new Long(
7508
- bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24,
7509
- bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24,
7510
- unsigned
7511
- );
7512
- };
7513
- Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
7514
- return new Long(
7515
- bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7],
7516
- bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3],
7517
- unsigned
7518
- );
7519
- };
7520
- if (typeof BigInt === "function") {
7521
- Long.fromBigInt = function fromBigInt(value, unsigned) {
7522
- var lowBits = Number(BigInt.asIntN(32, value));
7523
- var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));
7524
- return fromBits(lowBits, highBits, unsigned);
7525
- };
7526
- Long.fromValue = function fromValueWithBigInt(value, unsigned) {
7527
- if (typeof value === "bigint") return Long.fromBigInt(value, unsigned);
7528
- return fromValue(value, unsigned);
7529
- };
7530
- LongPrototype.toBigInt = function toBigInt() {
7531
- var lowBigInt = BigInt(this.low >>> 0);
7532
- var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);
7533
- return highBigInt << BigInt(32) | lowBigInt;
7534
- };
7036
+ return v;
7037
+ }
7038
+ function bigintToInt32(value) {
7039
+ return Number(BigInt.asIntN(32, value));
7535
7040
  }
7536
7041
  var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
7537
7042
  PrimitiveType2[PrimitiveType2["Null"] = 0] = "Null";
@@ -7579,11 +7084,11 @@
7579
7084
  case 5:
7580
7085
  return new TextDecoder("utf-8").decode(bytes);
7581
7086
  case 3:
7582
- return Long.fromBytesLE(Array.from(bytes));
7087
+ return bigintFromBytesLE(bytes);
7583
7088
  case 6:
7584
7089
  return bytes;
7585
7090
  case 7:
7586
- return new Date(Long.fromBytesLE(Array.from(bytes), true).toNumber());
7091
+ return new Date(Number(bigintFromBytesLEUnsigned(bytes)));
7587
7092
  default:
7588
7093
  throw new YorkieError(
7589
7094
  Code.ErrUnimplemented,
@@ -7684,13 +7189,13 @@
7684
7189
  } else {
7685
7190
  return 4;
7686
7191
  }
7192
+ case "bigint":
7193
+ return 3;
7687
7194
  case "string":
7688
7195
  return 5;
7689
7196
  case "object":
7690
7197
  if (value === null) {
7691
7198
  return 0;
7692
- } else if (value instanceof Long) {
7693
- return 3;
7694
7199
  } else if (value instanceof Uint8Array) {
7695
7200
  return 6;
7696
7201
  } else if (value instanceof Date) {
@@ -7760,9 +7265,7 @@
7760
7265
  return new TextEncoder().encode(this.value);
7761
7266
  }
7762
7267
  case 3: {
7763
- const longVal = this.value;
7764
- const longToBytes = longVal.toBytesLE();
7765
- return Uint8Array.from(longToBytes);
7268
+ return bigintToBytesLE(this.value);
7766
7269
  }
7767
7270
  case 6: {
7768
7271
  const bytesVal = this.value;
@@ -7770,11 +7273,7 @@
7770
7273
  }
7771
7274
  case 7: {
7772
7275
  const dateVal = this.value;
7773
- const dateToBytes = Long.fromNumber(
7774
- dateVal.getTime(),
7775
- true
7776
- ).toBytesLE();
7777
- return Uint8Array.from(dateToBytes);
7276
+ return bigintToBytesLE(BigInt(dateVal.getTime()));
7778
7277
  }
7779
7278
  default:
7780
7279
  throw new YorkieError(
@@ -11255,6 +10754,24 @@
11255
10754
  * In this method, the child is physically removed from the tree.
11256
10755
  */
11257
10756
  removeChild(child) {
10757
+ if (this.isText) {
10758
+ throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
10759
+ }
10760
+ const offset = this._children.indexOf(child);
10761
+ if (offset === -1) {
10762
+ return;
10763
+ }
10764
+ this._children.splice(offset, 1);
10765
+ child.updateAncestorsSize(-child.paddedSize(true), true);
10766
+ child.parent = void 0;
10767
+ }
10768
+ /**
10769
+ * `detachChild` removes the given child from this node's children list
10770
+ * and updates both visibleSize and totalSize. Unlike `removeChild` which
10771
+ * is used for GC purge of tombstoned nodes, `detachChild` is used for
10772
+ * moving alive nodes between parents.
10773
+ */
10774
+ detachChild(child) {
11258
10775
  if (this.isText) {
11259
10776
  throw new YorkieError(Code.ErrRefused, "Text node cannot have children");
11260
10777
  }
@@ -11263,25 +10780,46 @@
11263
10780
  throw new YorkieError(Code.ErrInvalidArgument, "child not found");
11264
10781
  }
11265
10782
  this._children.splice(offset, 1);
10783
+ child.updateAncestorsSize(-child.paddedSize());
11266
10784
  child.updateAncestorsSize(-child.paddedSize(true), true);
11267
10785
  child.parent = void 0;
11268
10786
  }
11269
10787
  /**
11270
10788
  * `splitElement` splits the given element at the given offset.
11271
10789
  */
11272
- splitElement(offset, issueTimeTicket) {
10790
+ splitElement(offset, issueTimeTicket, versionVector) {
11273
10791
  const diff = { data: 0, meta: 0 };
11274
10792
  const prvSize = this.getDataSize();
11275
10793
  const clone = this.cloneElement(issueTimeTicket);
11276
10794
  this.parent.insertAfterInternal(clone, this);
11277
10795
  clone.updateAncestorsSize(clone.paddedSize());
11278
10796
  clone.updateAncestorsSize(clone.paddedSize(true), true);
11279
- const leftChildren = this.children.slice(0, offset);
11280
- const rightChildren = this.children.slice(offset);
11281
- this._children = leftChildren;
11282
- clone._children = rightChildren;
10797
+ const left = this._children.slice(0, offset);
10798
+ const right = this._children.slice(offset);
10799
+ const allChildren = [...left, ...right];
10800
+ const actualRight = [];
10801
+ for (const child of right) {
10802
+ if ("mergedFrom" in child && child.mergedFrom != null && "mergedAt" in child && child.mergedAt != null) {
10803
+ if (versionVector) {
10804
+ const mergedAt = child.mergedAt;
10805
+ if (!versionVector.afterOrEqual(mergedAt)) {
10806
+ const mergedFrom = child.mergedFrom;
10807
+ const sourceIsChild = allChildren.some(
10808
+ (sibling) => "id" in sibling && sibling.id.equals(mergedFrom)
10809
+ );
10810
+ if (sourceIsChild) {
10811
+ left.push(child);
10812
+ continue;
10813
+ }
10814
+ }
10815
+ }
10816
+ }
10817
+ actualRight.push(child);
10818
+ }
10819
+ this._children = left;
10820
+ clone._children = actualRight;
11283
10821
  this.visibleSize = this._children.reduce(
11284
- (acc, child) => acc + child.paddedSize(),
10822
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11285
10823
  0
11286
10824
  );
11287
10825
  this.totalSize = this._children.reduce(
@@ -11289,7 +10827,7 @@
11289
10827
  0
11290
10828
  );
11291
10829
  clone.visibleSize = clone._children.reduce(
11292
- (acc, child) => acc + child.paddedSize(true),
10830
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11293
10831
  0
11294
10832
  );
11295
10833
  clone.totalSize = clone._children.reduce(
@@ -11895,6 +11433,29 @@
11895
11433
  * `insNextID` is the previous node id of this node after the node is split.
11896
11434
  */
11897
11435
  insNextID;
11436
+ /**
11437
+ * `mergedFrom` records the source parent's ID when this node was moved
11438
+ * by a concurrent merge. Persisted in the snapshot encoding as the
11439
+ * witness of the merge relationship.
11440
+ */
11441
+ mergedFrom;
11442
+ /**
11443
+ * `mergedAt` records the immutable ticket of the merge operation.
11444
+ * Persisted alongside `mergedFrom` because the source parent's
11445
+ * `removedAt` may be overwritten by later LWW tombstones and thus
11446
+ * cannot serve as the merge-time causal boundary for splitElement's
11447
+ * Fix 8 version-vector check.
11448
+ */
11449
+ mergedAt;
11450
+ /**
11451
+ * `mergedInto` is a runtime cache set on the source parent pointing
11452
+ * at the merge target. Set locally during merge execution and rebuilt
11453
+ * from `mergedFrom` on snapshot load. Used for the fast
11454
+ * "is this tombstoned parent a merge source?" check in
11455
+ * `FindTreeNodesWithSplitText`; the alternative (scanning
11456
+ * `nodeMapByID` on every position resolution) would be too expensive.
11457
+ */
11458
+ mergedInto;
11898
11459
  _value = "";
11899
11460
  constructor(id, type, opts, attributes, removedAt) {
11900
11461
  super(type);
@@ -11944,6 +11505,9 @@
11944
11505
  });
11945
11506
  clone.insPrevID = this.insPrevID;
11946
11507
  clone.insNextID = this.insNextID;
11508
+ clone.mergedFrom = this.mergedFrom;
11509
+ clone.mergedAt = this.mergedAt;
11510
+ clone.mergedInto = this.mergedInto;
11947
11511
  return clone;
11948
11512
  }
11949
11513
  /**
@@ -11996,13 +11560,16 @@
11996
11560
  * `cloneText` clones this text node with the given offset.
11997
11561
  */
11998
11562
  cloneText(offset) {
11999
- return new CRDTTreeNode(
11563
+ const clone = new CRDTTreeNode(
12000
11564
  CRDTTreeNodeID.of(this.id.getCreatedAt(), offset),
12001
11565
  this.type,
12002
11566
  void 0,
12003
11567
  void 0,
12004
11568
  this.removedAt
12005
11569
  );
11570
+ clone.mergedFrom = this.mergedFrom;
11571
+ clone.mergedAt = this.mergedAt;
11572
+ return clone;
12006
11573
  }
12007
11574
  /**
12008
11575
  * `cloneElement` clones this element node with the given issueTimeTicket function.
@@ -12019,8 +11586,8 @@
12019
11586
  /**
12020
11587
  * `split` splits the given offset of this node.
12021
11588
  */
12022
- split(tree, offset, issueTimeTicket) {
12023
- const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket);
11589
+ split(tree, offset, issueTimeTicket, versionVector) {
11590
+ const [split, diff] = this.isText ? this.splitText(offset, this.id.getOffset()) : this.splitElement(offset, issueTimeTicket, versionVector);
12024
11591
  if (split) {
12025
11592
  split.insPrevID = this.id;
12026
11593
  if (this.insNextID) {
@@ -12133,6 +11700,13 @@
12133
11700
  return pairs;
12134
11701
  }
12135
11702
  }
11703
+ function ticketKnown(vv, ticket) {
11704
+ if (vv === void 0) {
11705
+ return true;
11706
+ }
11707
+ const l = vv.get(ticket.getActorID());
11708
+ return l !== void 0 && l >= ticket.getLamport();
11709
+ }
12136
11710
  function toTreeNode$1(node) {
12137
11711
  if (node.isText) {
12138
11712
  const currentNode = node;
@@ -12194,6 +11768,33 @@
12194
11768
  this.indexTree.traverseAll((node) => {
12195
11769
  this.nodeMapByID.put(node.id, node);
12196
11770
  });
11771
+ this.rebuildMergeState();
11772
+ }
11773
+ /**
11774
+ * `rebuildMergeState` reconstructs the `mergedInto` cache on source
11775
+ * parents from the persisted `mergedFrom` field on moved children.
11776
+ * For snapshots written before `mergedAt` was added to the proto,
11777
+ * it also falls back to the source's `removedAt` — an approximation
11778
+ * that may be wrong if the source was later overwritten by a
11779
+ * concurrent delete, but this is the best we can do without the
11780
+ * persisted merge ticket.
11781
+ */
11782
+ rebuildMergeState() {
11783
+ this.indexTree.traverseAll((node) => {
11784
+ if (!node.mergedFrom || !node.parent) {
11785
+ return;
11786
+ }
11787
+ const src = this.findFloorNode(node.mergedFrom);
11788
+ if (!src) {
11789
+ return;
11790
+ }
11791
+ if (!node.mergedAt && src.removedAt) {
11792
+ node.mergedAt = src.removedAt;
11793
+ }
11794
+ if (!src.mergedInto) {
11795
+ src.mergedInto = node.parent.id;
11796
+ }
11797
+ });
12197
11798
  }
12198
11799
  /**
12199
11800
  * `create` creates a new instance of `CRDTTree`.
@@ -12211,6 +11812,51 @@
12211
11812
  }
12212
11813
  return entry.value;
12213
11814
  }
11815
+ /**
11816
+ * `advancePastUnknownSplitSiblings` follows the insNextID chain of the
11817
+ * given node, advancing past element-type split siblings that the editing
11818
+ * client did not know about (not in versionVector).
11819
+ */
11820
+ advancePastUnknownSplitSiblings(node, versionVector) {
11821
+ if (!versionVector || !node) {
11822
+ return node;
11823
+ }
11824
+ let current = node;
11825
+ while (current.insNextID) {
11826
+ const next = this.findFloorNode(current.insNextID);
11827
+ if (!next || next.isText) {
11828
+ break;
11829
+ }
11830
+ if (next.parent !== current.parent) {
11831
+ break;
11832
+ }
11833
+ const actorID = next.id.getCreatedAt().getActorID();
11834
+ const knownLamport = versionVector.get(actorID);
11835
+ if (knownLamport !== void 0 && knownLamport >= next.id.getCreatedAt().getLamport()) {
11836
+ break;
11837
+ }
11838
+ current = next;
11839
+ }
11840
+ return current;
11841
+ }
11842
+ /**
11843
+ * `hasUnknownSplitSibling` checks whether the given element node has a
11844
+ * split sibling (via insNextID) whose creation the editor did not know
11845
+ * about. Used to prevent styling via End tokens when a concurrent split
11846
+ * extended the range into the split sibling.
11847
+ */
11848
+ hasUnknownSplitSibling(node, versionVector) {
11849
+ if (!node.insNextID) {
11850
+ return false;
11851
+ }
11852
+ const next = this.findFloorNode(node.insNextID);
11853
+ if (!next || next.isText) {
11854
+ return false;
11855
+ }
11856
+ const actorID = next.id.getCreatedAt().getActorID();
11857
+ const knownLamport = versionVector.get(actorID);
11858
+ return knownLamport === void 0 || knownLamport < next.id.getCreatedAt().getLamport();
11859
+ }
12214
11860
  /**
12215
11861
  * `registerNode` registers the given node to the tree.
12216
11862
  */
@@ -12234,6 +11880,23 @@
12234
11880
  let leftNode = leftSibling;
12235
11881
  const isLeftMost = parent === leftNode;
12236
11882
  const realParent = leftNode.parent && !isLeftMost ? leftNode.parent : parent;
11883
+ if (realParent.isRemoved && isLeftMost && realParent.mergedInto) {
11884
+ const mergeTarget = this.findFloorNode(realParent.mergedInto);
11885
+ if (mergeTarget && !mergeTarget.isRemoved) {
11886
+ const allCh = mergeTarget.allChildren;
11887
+ for (let i = 0; i < allCh.length; i++) {
11888
+ const targetChild = allCh[i];
11889
+ if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(realParent.id)) {
11890
+ continue;
11891
+ }
11892
+ if (i === 0) {
11893
+ return [[mergeTarget, mergeTarget], diff];
11894
+ }
11895
+ return [[mergeTarget, allCh[i - 1]], diff];
11896
+ }
11897
+ return [[mergeTarget, mergeTarget], diff];
11898
+ }
11899
+ }
12237
11900
  if (leftNode.isText) {
12238
11901
  const [, splitedDiff] = leftNode.split(
12239
11902
  this,
@@ -12259,18 +11922,23 @@
12259
11922
  */
12260
11923
  style(range, attributes, editedAt, versionVector) {
12261
11924
  const diff = { data: 0, meta: 0 };
12262
- const [[fromParent, fromLeft], diffFrom] = this.findNodesAndSplitText(
11925
+ const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
12263
11926
  range[0],
12264
11927
  editedAt
12265
11928
  );
12266
- const [[toParent, toLeft], diffTo] = this.findNodesAndSplitText(
11929
+ const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
12267
11930
  range[1],
12268
11931
  editedAt
12269
11932
  );
12270
11933
  addDataSizes(diff, diffTo, diffFrom);
11934
+ const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
11935
+ const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
12271
11936
  const changes = [];
12272
11937
  const attrs = attributes ? parseObjectValues(attributes) : {};
12273
11938
  const pairs = [];
11939
+ const prevAttributes = /* @__PURE__ */ new Map();
11940
+ const newAttrKeys = [];
11941
+ let capturedPrev = false;
12274
11942
  this.traverseInPosRange(
12275
11943
  fromParent,
12276
11944
  fromLeft,
@@ -12283,6 +11951,19 @@
12283
11951
  clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
12284
11952
  }
12285
11953
  if (node.canStyle(editedAt, clientLamportAtChange) && attributes) {
11954
+ if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
11955
+ return;
11956
+ }
11957
+ if (!capturedPrev) {
11958
+ for (const key of Object.keys(attributes)) {
11959
+ if (node.attrs?.has(key)) {
11960
+ prevAttributes.set(key, node.attrs.get(key));
11961
+ } else {
11962
+ newAttrKeys.push(key);
11963
+ }
11964
+ }
11965
+ capturedPrev = true;
11966
+ }
12286
11967
  const updatedAttrPairs = node.setAttrs(attributes, editedAt);
12287
11968
  const affectedAttrs = updatedAttrPairs.reduce(
12288
11969
  (acc, [, curr]) => {
@@ -12321,7 +12002,7 @@
12321
12002
  }
12322
12003
  }
12323
12004
  );
12324
- return [pairs, changes, diff];
12005
+ return [pairs, changes, diff, prevAttributes, newAttrKeys];
12325
12006
  }
12326
12007
  /**
12327
12008
  * `removeStyle` removes the given attributes of the given range.
@@ -12339,21 +12020,34 @@
12339
12020
  addDataSizes(diff, diffTo, diffFrom);
12340
12021
  const changes = [];
12341
12022
  const pairs = [];
12023
+ const prevAttributes = /* @__PURE__ */ new Map();
12024
+ let capturedPrev = false;
12342
12025
  this.traverseInPosRange(
12343
12026
  fromParent,
12344
12027
  fromLeft,
12345
12028
  toParent,
12346
12029
  toLeft,
12347
- ([node]) => {
12030
+ ([node, tokenType]) => {
12348
12031
  const actorID = node.getCreatedAt().getActorID();
12349
12032
  let clientLamportAtChange = MaxLamport;
12350
12033
  if (versionVector != void 0) {
12351
12034
  clientLamportAtChange = versionVector.get(actorID) ? versionVector.get(actorID) : 0n;
12352
12035
  }
12353
12036
  if (node.canStyle(editedAt, clientLamportAtChange) && attributesToRemove) {
12037
+ if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
12038
+ return;
12039
+ }
12354
12040
  if (!node.attrs) {
12355
12041
  node.attrs = new RHT();
12356
12042
  }
12043
+ if (!capturedPrev) {
12044
+ for (const key of attributesToRemove) {
12045
+ if (node.attrs.has(key)) {
12046
+ prevAttributes.set(key, node.attrs.get(key));
12047
+ }
12048
+ }
12049
+ capturedPrev = true;
12050
+ }
12357
12051
  for (const value of attributesToRemove) {
12358
12052
  const nodesTobeRemoved = node.attrs.remove(value, editedAt);
12359
12053
  for (const rhtNode of nodesTobeRemoved) {
@@ -12374,7 +12068,7 @@
12374
12068
  }
12375
12069
  }
12376
12070
  );
12377
- return [pairs, changes, diff];
12071
+ return [pairs, changes, diff, prevAttributes];
12378
12072
  }
12379
12073
  /**
12380
12074
  * `edit` edits the tree with the given range and content.
@@ -12382,20 +12076,24 @@
12382
12076
  */
12383
12077
  edit(range, contents, splitLevel, editedAt, issueTimeTicket, versionVector) {
12384
12078
  const diff = { data: 0, meta: 0 };
12385
- const [[fromParent, fromLeft], diffFrom] = this.findNodesAndSplitText(
12079
+ const [[fromParent, fromLeftRaw], diffFrom] = this.findNodesAndSplitText(
12386
12080
  range[0],
12387
12081
  editedAt
12388
12082
  );
12389
- const [[toParent, toLeft], diffTo] = this.findNodesAndSplitText(
12083
+ const [[toParent, toLeftRaw], diffTo] = this.findNodesAndSplitText(
12390
12084
  range[1],
12391
12085
  editedAt
12392
12086
  );
12393
12087
  addDataSizes(diff, diffTo, diffFrom);
12088
+ const fromLeft = fromLeftRaw !== fromParent ? this.advancePastUnknownSplitSiblings(fromLeftRaw, versionVector) : fromLeftRaw;
12089
+ const toLeft = toLeftRaw !== toParent ? this.advancePastUnknownSplitSiblings(toLeftRaw, versionVector) : toLeftRaw;
12394
12090
  const fromIdx = this.toIndex(fromParent, fromLeft);
12395
12091
  const fromPath = this.toPath(fromParent, fromLeft);
12396
12092
  const nodesToBeRemoved = [];
12397
12093
  const tokensToBeRemoved = [];
12398
12094
  const toBeMovedToFromParents = [];
12095
+ const toBeMergedNodes = [];
12096
+ const preTombstoned = /* @__PURE__ */ new Set();
12399
12097
  this.traverseInPosRange(
12400
12098
  fromParent,
12401
12099
  fromLeft,
@@ -12403,24 +12101,39 @@
12403
12101
  toLeft,
12404
12102
  ([node, tokenType], ended) => {
12405
12103
  if (tokenType === TokenType.Start && !ended) {
12406
- for (const child of node.children) {
12407
- toBeMovedToFromParents.push(child);
12104
+ if (ticketKnown(versionVector, node.id.getCreatedAt())) {
12105
+ toBeMergedNodes.push(node);
12106
+ for (const child of node.children) {
12107
+ toBeMovedToFromParents.push(child);
12108
+ }
12408
12109
  }
12409
12110
  }
12410
- const isLocal = versionVector === void 0;
12411
- let creationKnown = false;
12412
- const createdAtVV = versionVector?.get(
12413
- node.id.getCreatedAt().getActorID()
12111
+ const creationKnown = ticketKnown(
12112
+ versionVector,
12113
+ node.id.getCreatedAt()
12414
12114
  );
12415
- creationKnown = isLocal || createdAtVV !== void 0 && createdAtVV >= node.id.getCreatedAt().getLamport();
12416
- let tombstoneKnown = false;
12417
- if (node.removedAt) {
12418
- const removedAtVV = versionVector?.get(node.removedAt.getActorID());
12419
- tombstoneKnown = isLocal || removedAtVV !== void 0 && removedAtVV >= node.removedAt.getLamport();
12420
- }
12421
- if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent)) {
12115
+ const tombstoneKnown = !!node.removedAt && ticketKnown(versionVector, node.removedAt);
12116
+ if (node.canDelete(editedAt, creationKnown, tombstoneKnown) || nodesToBeRemoved.includes(node.parent) && !toBeMergedNodes.includes(node.parent)) {
12422
12117
  if (tokenType === TokenType.Text || tokenType === TokenType.Start) {
12118
+ if (node.isRemoved) {
12119
+ preTombstoned.add(node.id.toIDString());
12120
+ }
12423
12121
  nodesToBeRemoved.push(node);
12122
+ if (!node.isText && node.insNextID && !toBeMergedNodes.includes(node)) {
12123
+ let next = this.findFloorNode(node.insNextID);
12124
+ while (next) {
12125
+ if (!ticketKnown(versionVector, next.id.getCreatedAt())) {
12126
+ nodesToBeRemoved.push(next);
12127
+ traverseAll(next, (n) => {
12128
+ if (n !== next) {
12129
+ nodesToBeRemoved.push(n);
12130
+ }
12131
+ });
12132
+ }
12133
+ if (!next.insNextID) break;
12134
+ next = this.findFloorNode(next.insNextID);
12135
+ }
12136
+ }
12424
12137
  }
12425
12138
  tokensToBeRemoved.push([node, tokenType]);
12426
12139
  }
@@ -12433,22 +12146,66 @@
12433
12146
  );
12434
12147
  const pairs = [];
12435
12148
  for (const node of nodesToBeRemoved) {
12436
- node.remove(editedAt);
12437
- if (node.isRemoved) {
12149
+ if (node.remove(editedAt)) {
12438
12150
  pairs.push({ parent: this, child: node });
12439
12151
  }
12440
12152
  }
12441
12153
  for (const node of toBeMovedToFromParents) {
12442
12154
  if (!node.removedAt) {
12155
+ if (node.parent) {
12156
+ node.mergedFrom = node.parent.id;
12157
+ node.mergedAt = editedAt;
12158
+ }
12159
+ if (node.parent) {
12160
+ try {
12161
+ node.parent.detachChild(node);
12162
+ } catch {
12163
+ }
12164
+ }
12443
12165
  fromParent.append(node);
12444
12166
  }
12445
12167
  }
12168
+ for (const src of toBeMergedNodes) {
12169
+ src.mergedInto = fromParent.id;
12170
+ }
12171
+ for (const node of nodesToBeRemoved) {
12172
+ if (!node.mergedInto || toBeMergedNodes.includes(node) || node.mergedInto.equals(fromParent.id)) {
12173
+ continue;
12174
+ }
12175
+ const mergeTarget = this.findFloorNode(node.mergedInto);
12176
+ if (!mergeTarget) {
12177
+ continue;
12178
+ }
12179
+ for (const targetChild of mergeTarget.allChildren) {
12180
+ if (!targetChild.mergedFrom || !targetChild.mergedFrom.equals(node.id)) {
12181
+ continue;
12182
+ }
12183
+ if (targetChild.removedAt) {
12184
+ continue;
12185
+ }
12186
+ if (targetChild.remove(editedAt)) {
12187
+ pairs.push({ parent: this, child: targetChild });
12188
+ }
12189
+ traverseAll(targetChild, (n) => {
12190
+ if (n !== targetChild && !n.removedAt) {
12191
+ if (n.remove(editedAt)) {
12192
+ pairs.push({ parent: this, child: n });
12193
+ }
12194
+ }
12195
+ });
12196
+ }
12197
+ }
12446
12198
  if (splitLevel > 0) {
12447
12199
  let splitCount = 0;
12448
12200
  let parent = fromParent;
12449
12201
  let left = fromLeft;
12450
12202
  while (splitCount < splitLevel) {
12451
- parent.split(this, parent.findOffset(left) + 1, issueTimeTicket);
12203
+ parent.split(
12204
+ this,
12205
+ parent.findOffset(left, true) + 1,
12206
+ issueTimeTicket,
12207
+ versionVector
12208
+ );
12452
12209
  left = parent;
12453
12210
  parent = parent.parent;
12454
12211
  splitCount++;
@@ -12798,6 +12555,9 @@
12798
12555
  traverseInPosRange(fromParent, fromLeft, toParent, toLeft, callback, includeRemoved = false) {
12799
12556
  const fromIdx = this.toIndex(fromParent, fromLeft, includeRemoved);
12800
12557
  const toIdx = this.toIndex(toParent, toLeft, includeRemoved);
12558
+ if (fromIdx > toIdx) {
12559
+ return;
12560
+ }
12801
12561
  this.indexTree.tokensBetween(fromIdx, toIdx, callback, includeRemoved);
12802
12562
  }
12803
12563
  /**
@@ -12956,6 +12716,13 @@
12956
12716
  toIdx;
12957
12717
  lastFromIdx;
12958
12718
  lastToIdx;
12719
+ /**
12720
+ * `redoSplitLevel` is set on boundary-deletion undo ops that were generated
12721
+ * to reverse a split. When this op executes (as undo), `toReverseOperation`
12722
+ * uses this value to generate a proper split op for redo, rather than
12723
+ * re-inserting the raw tombstoned boundary nodes as content.
12724
+ */
12725
+ redoSplitLevel;
12959
12726
  constructor(parentCreatedAt, fromPos, toPos, contents, splitLevel, executedAt, isUndoOp, fromIdx, toIdx) {
12960
12727
  super(parentCreatedAt, executedAt);
12961
12728
  this.fromPos = fromPos;
@@ -13041,7 +12808,13 @@
13041
12808
  0
13042
12809
  );
13043
12810
  this.lastToIdx = preEditFromIdx + removedSize;
13044
- const reverseOp = this.splitLevel === 0 ? this.toReverseOperation(tree, removedNodes, preEditFromIdx) : void 0;
12811
+ let reverseOp;
12812
+ const isPureL1Split = this.splitLevel === 1 && !this.contents?.length && removedNodes.length === 0;
12813
+ if (this.splitLevel === 0) {
12814
+ reverseOp = this.toReverseOperation(tree, removedNodes, preEditFromIdx);
12815
+ } else if (isPureL1Split) {
12816
+ reverseOp = this.toSplitReverseOperation(tree, preEditFromIdx);
12817
+ }
13045
12818
  root.acc(diff);
13046
12819
  for (const pair of pairs) {
13047
12820
  root.registerGCPair(pair);
@@ -13077,6 +12850,24 @@
13077
12850
  * @param preEditFromIdx - The from index captured BEFORE the edit
13078
12851
  */
13079
12852
  toReverseOperation(tree, removedNodes, preEditFromIdx) {
12853
+ if (this.redoSplitLevel !== void 0 && this.redoSplitLevel > 0) {
12854
+ const splitRedoFromPos = tree.findPos(preEditFromIdx);
12855
+ const splitRedoOp = TreeEditOperation.create(
12856
+ this.getParentCreatedAt(),
12857
+ splitRedoFromPos,
12858
+ splitRedoFromPos,
12859
+ void 0,
12860
+ // no inserted content
12861
+ this.redoSplitLevel,
12862
+ void 0,
12863
+ // executedAt assigned at redo time
12864
+ true,
12865
+ // isUndoOp (treated as undo/redo op)
12866
+ preEditFromIdx,
12867
+ preEditFromIdx
12868
+ );
12869
+ return splitRedoOp;
12870
+ }
13080
12871
  const insertedContentSize = this.contents ? this.contents.reduce((sum, node) => sum + node.paddedSize(), 0) : 0;
13081
12872
  const maxNeededIdx = preEditFromIdx + insertedContentSize;
13082
12873
  if (maxNeededIdx > tree.getSize()) {
@@ -13114,6 +12905,45 @@
13114
12905
  reverseToIdx
13115
12906
  );
13116
12907
  }
12908
+ /**
12909
+ * `toSplitReverseOperation` creates the reverse operation for a split edit.
12910
+ *
12911
+ * A split creates element boundaries (close + open tags). The reverse
12912
+ * is a boundary deletion: a splitLevel=0 edit that removes those tokens,
12913
+ * merging the split elements back together.
12914
+ *
12915
+ * boundarySize = 2 * splitLevel (each level creates 1 close + 1 open tag)
12916
+ *
12917
+ * @param tree - The CRDTTree after the split has been applied
12918
+ * @param preEditFromIdx - The from index captured BEFORE the split
12919
+ */
12920
+ toSplitReverseOperation(tree, preEditFromIdx) {
12921
+ const boundarySize = 2 * this.splitLevel;
12922
+ const reverseFromIdx = preEditFromIdx;
12923
+ const reverseToIdx = preEditFromIdx + boundarySize;
12924
+ if (reverseToIdx > tree.getSize()) {
12925
+ return void 0;
12926
+ }
12927
+ const reverseFromPos = tree.findPos(reverseFromIdx);
12928
+ const reverseToPos = tree.findPos(reverseToIdx);
12929
+ const boundaryDeletionOp = TreeEditOperation.create(
12930
+ this.getParentCreatedAt(),
12931
+ reverseFromPos,
12932
+ reverseToPos,
12933
+ void 0,
12934
+ // no content — this is a deletion
12935
+ 0,
12936
+ // splitLevel=0: boundary deletion
12937
+ void 0,
12938
+ // executedAt assigned at undo time
12939
+ true,
12940
+ // isUndoOp
12941
+ reverseFromIdx,
12942
+ reverseToIdx
12943
+ );
12944
+ boundaryDeletionOp.redoSplitLevel = this.splitLevel;
12945
+ return boundaryDeletionOp;
12946
+ }
13117
12947
  /**
13118
12948
  * `normalizePos` returns the visible-index range of this operation.
13119
12949
  * For undo ops, returns the stored (possibly reconciled) indices.
@@ -13819,35 +13649,196 @@
13819
13649
  }
13820
13650
  }
13821
13651
  const InitialCheckpoint = new Checkpoint(0n, 0);
13822
- const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
13652
+ const hllPrecision = 14;
13653
+ const hllRegisterCount = 1 << hllPrecision;
13654
+ const prime64x1 = 0x9e3779b185ebca87n;
13655
+ const prime64x2 = 0xc2b2ae3d27d4eb4fn;
13656
+ const prime64x3 = 0x165667b19e3779f9n;
13657
+ const prime64x4 = 0x85ebca77c2b2ae63n;
13658
+ const prime64x5 = 0x27d4eb2f165667c5n;
13659
+ const mask64 = 0xffffffffffffffffn;
13660
+ class HLL {
13661
+ registers;
13662
+ constructor() {
13663
+ this.registers = new Uint8Array(hllRegisterCount);
13664
+ }
13665
+ /**
13666
+ * `add` adds a value to the HLL and returns true if the register was updated.
13667
+ */
13668
+ add(value) {
13669
+ const hash = xxhash64(value);
13670
+ const idx = Number(hash >> BigInt(64 - hllPrecision));
13671
+ const remaining = hash << BigInt(hllPrecision) & mask64 | 1n << BigInt(hllPrecision - 1);
13672
+ const rho = countLeadingZeros64(remaining) + 1;
13673
+ if (rho > this.registers[idx]) {
13674
+ this.registers[idx] = rho;
13675
+ return true;
13676
+ }
13677
+ return false;
13678
+ }
13679
+ /**
13680
+ * `count` returns the approximate cardinality estimate.
13681
+ */
13682
+ count() {
13683
+ const m = hllRegisterCount;
13684
+ const alpha = 0.7213 / (1 + 1.079 / m);
13685
+ let sum = 0;
13686
+ let zeros = 0;
13687
+ for (let i = 0; i < m; i++) {
13688
+ sum += Math.pow(2, -this.registers[i]);
13689
+ if (this.registers[i] === 0) zeros++;
13690
+ }
13691
+ let estimate = alpha * m * m / sum;
13692
+ if (estimate <= 2.5 * m && zeros > 0) {
13693
+ estimate = m * Math.log(m / zeros);
13694
+ }
13695
+ return Math.round(estimate);
13696
+ }
13697
+ /**
13698
+ * `merge` merges another HLL into this one by taking the max of each register.
13699
+ * This operation is commutative, associative, and idempotent.
13700
+ */
13701
+ merge(other) {
13702
+ for (let i = 0; i < hllRegisterCount; i++) {
13703
+ if (other.registers[i] > this.registers[i]) {
13704
+ this.registers[i] = other.registers[i];
13705
+ }
13706
+ }
13707
+ }
13708
+ /**
13709
+ * `toBytes` serializes the HLL registers to a byte array.
13710
+ */
13711
+ toBytes() {
13712
+ return new Uint8Array(this.registers);
13713
+ }
13714
+ /**
13715
+ * `restore` restores the HLL registers from a byte array.
13716
+ * Throws if the data length does not match the register count.
13717
+ */
13718
+ restore(data) {
13719
+ if (data.length !== hllRegisterCount) {
13720
+ throw new Error(
13721
+ `invalid HLL register payload: got ${data.length} bytes, want ${hllRegisterCount}`
13722
+ );
13723
+ }
13724
+ this.registers.set(data);
13725
+ }
13726
+ }
13727
+ function xxhash64(input) {
13728
+ const buf = new TextEncoder().encode(input);
13729
+ const len = buf.length;
13730
+ let h64;
13731
+ let offset = 0;
13732
+ const seed = 0n;
13733
+ if (len >= 32) {
13734
+ let v1 = seed + prime64x1 + prime64x2 & mask64;
13735
+ let v2 = seed + prime64x2 & mask64;
13736
+ let v3 = seed;
13737
+ let v4 = seed - prime64x1 & mask64;
13738
+ while (offset <= len - 32) {
13739
+ v1 = xxRound(v1, readU64LE(buf, offset));
13740
+ offset += 8;
13741
+ v2 = xxRound(v2, readU64LE(buf, offset));
13742
+ offset += 8;
13743
+ v3 = xxRound(v3, readU64LE(buf, offset));
13744
+ offset += 8;
13745
+ v4 = xxRound(v4, readU64LE(buf, offset));
13746
+ offset += 8;
13747
+ }
13748
+ h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & mask64;
13749
+ h64 = xxMergeRound(h64, v1);
13750
+ h64 = xxMergeRound(h64, v2);
13751
+ h64 = xxMergeRound(h64, v3);
13752
+ h64 = xxMergeRound(h64, v4);
13753
+ } else {
13754
+ h64 = seed + prime64x5 & mask64;
13755
+ }
13756
+ h64 = h64 + BigInt(len) & mask64;
13757
+ while (offset + 8 <= len) {
13758
+ const k1 = xxRound(0n, readU64LE(buf, offset));
13759
+ h64 = rotl64(h64 ^ k1, 27n) * prime64x1 + prime64x4 & mask64;
13760
+ offset += 8;
13761
+ }
13762
+ if (offset + 4 <= len) {
13763
+ h64 = h64 ^ readU32LE(buf, offset) * prime64x1 & mask64;
13764
+ h64 = rotl64(h64, 23n) * prime64x2 + prime64x3 & mask64;
13765
+ offset += 4;
13766
+ }
13767
+ while (offset < len) {
13768
+ h64 = h64 ^ BigInt(buf[offset]) * prime64x5 & mask64;
13769
+ h64 = rotl64(h64, 11n) * prime64x1 & mask64;
13770
+ offset++;
13771
+ }
13772
+ h64 = (h64 ^ h64 >> 33n) * prime64x2 & mask64;
13773
+ h64 = (h64 ^ h64 >> 29n) * prime64x3 & mask64;
13774
+ h64 = (h64 ^ h64 >> 32n) & mask64;
13775
+ return h64;
13776
+ }
13777
+ function rotl64(x, r) {
13778
+ return (x << r | x >> 64n - r) & mask64;
13779
+ }
13780
+ function xxRound(acc, input) {
13781
+ acc = acc + input * prime64x2 & mask64;
13782
+ acc = rotl64(acc, 31n);
13783
+ return acc * prime64x1 & mask64;
13784
+ }
13785
+ function xxMergeRound(acc, val) {
13786
+ val = xxRound(0n, val);
13787
+ acc = (acc ^ val) & mask64;
13788
+ return acc * prime64x1 + prime64x4 & mask64;
13789
+ }
13790
+ function readU64LE(buf, offset) {
13791
+ let val = 0n;
13792
+ for (let i = 7; i >= 0; i--) {
13793
+ val = val << 8n | BigInt(buf[offset + i]);
13794
+ }
13795
+ return val;
13796
+ }
13797
+ function readU32LE(buf, offset) {
13798
+ return BigInt(buf[offset]) | BigInt(buf[offset + 1]) << 8n | BigInt(buf[offset + 2]) << 16n | BigInt(buf[offset + 3]) << 24n;
13799
+ }
13800
+ function countLeadingZeros64(x) {
13801
+ if (x === 0n) return 64;
13802
+ let n = 0;
13803
+ while ((x & 1n << 63n) === 0n) {
13804
+ n++;
13805
+ x <<= 1n;
13806
+ }
13807
+ return n;
13808
+ }
13823
13809
  var CounterType = /* @__PURE__ */ ((CounterType2) => {
13824
13810
  CounterType2[CounterType2["Int"] = 0] = "Int";
13825
13811
  CounterType2[CounterType2["Long"] = 1] = "Long";
13812
+ CounterType2[CounterType2["IntDedup"] = 2] = "IntDedup";
13826
13813
  return CounterType2;
13827
13814
  })(CounterType || {});
13828
13815
  class CRDTCounter extends CRDTElement {
13829
13816
  valueType;
13830
13817
  value;
13818
+ hll;
13831
13819
  constructor(valueType, value, createdAt) {
13832
13820
  super(createdAt);
13833
13821
  this.valueType = valueType;
13834
13822
  switch (valueType) {
13823
+ case 2:
13824
+ this.value = 0;
13825
+ break;
13835
13826
  case 0:
13836
13827
  if (typeof value === "number") {
13837
13828
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
13838
- this.value = Long.fromNumber(value).toInt();
13829
+ this.value = bigintToInt32(BigInt(value));
13839
13830
  } else {
13840
13831
  this.value = removeDecimal(value);
13841
13832
  }
13842
13833
  } else {
13843
- this.value = value.toInt();
13834
+ this.value = bigintToInt32(value);
13844
13835
  }
13845
13836
  break;
13846
13837
  case 1:
13847
13838
  if (typeof value === "number") {
13848
- this.value = Long.fromNumber(value);
13839
+ this.value = BigInt.asIntN(64, BigInt(Math.trunc(value)));
13849
13840
  } else {
13850
- this.value = value;
13841
+ this.value = BigInt.asIntN(64, value);
13851
13842
  }
13852
13843
  break;
13853
13844
  default:
@@ -13856,6 +13847,9 @@
13856
13847
  `unimplemented type: ${valueType}`
13857
13848
  );
13858
13849
  }
13850
+ if (this.isDedup()) {
13851
+ this.hll ??= new HLL();
13852
+ }
13859
13853
  }
13860
13854
  /**
13861
13855
  * `of` creates a new instance of Counter.
@@ -13869,9 +13863,10 @@
13869
13863
  static valueFromBytes(counterType, bytes) {
13870
13864
  switch (counterType) {
13871
13865
  case 0:
13866
+ case 2:
13872
13867
  return bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
13873
13868
  case 1:
13874
- return Long.fromBytesLE(Array.from(bytes));
13869
+ return bigintFromBytesLE(bytes);
13875
13870
  default:
13876
13871
  throw new YorkieError(
13877
13872
  Code.ErrUnimplemented,
@@ -13883,7 +13878,10 @@
13883
13878
  * `getDataSize` returns the data usage of this element.
13884
13879
  */
13885
13880
  getDataSize() {
13886
- const data = this.valueType === 0 ? 4 : 8;
13881
+ let data = this.valueType === 0 || this.valueType === 2 ? 4 : 8;
13882
+ if (this.isDedup() && this.hll) {
13883
+ data += this.hll.toBytes().length;
13884
+ }
13887
13885
  return {
13888
13886
  data,
13889
13887
  meta: this.getMetaUsage()
@@ -13922,6 +13920,9 @@
13922
13920
  );
13923
13921
  clone.setRemovedAt(this.getRemovedAt());
13924
13922
  clone.setMovedAt(this.getMovedAt());
13923
+ if (this.isDedup() && this.hll) {
13924
+ clone.restoreHLL(this.hll.toBytes());
13925
+ }
13925
13926
  return clone;
13926
13927
  }
13927
13928
  /**
@@ -13935,12 +13936,8 @@
13935
13936
  */
13936
13937
  static getCounterType(value) {
13937
13938
  switch (typeof value) {
13938
- case "object":
13939
- if (value instanceof Long) {
13940
- return 1;
13941
- } else {
13942
- return;
13943
- }
13939
+ case "bigint":
13940
+ return 1;
13944
13941
  case "number":
13945
13942
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
13946
13943
  return 1;
@@ -13968,7 +13965,7 @@
13968
13965
  */
13969
13966
  isNumericType() {
13970
13967
  const t = this.valueType;
13971
- return t === 0 || t === 1;
13968
+ return t === 0 || t === 1 || t === 2;
13972
13969
  }
13973
13970
  /**
13974
13971
  * `getValueType` get counter value type.
@@ -13987,7 +13984,8 @@
13987
13984
  */
13988
13985
  toBytes() {
13989
13986
  switch (this.valueType) {
13990
- case 0: {
13987
+ case 0:
13988
+ case 2: {
13991
13989
  const intVal = this.value;
13992
13990
  return new Uint8Array([
13993
13991
  intVal & 255,
@@ -13997,9 +13995,7 @@
13997
13995
  ]);
13998
13996
  }
13999
13997
  case 1: {
14000
- const longVal = this.value;
14001
- const longToBytes = longVal.toBytesLE();
14002
- return Uint8Array.from(longToBytes);
13998
+ return bigintToBytesLE(this.value);
14003
13999
  }
14004
14000
  default:
14005
14001
  throw new YorkieError(
@@ -14008,10 +14004,76 @@
14008
14004
  );
14009
14005
  }
14010
14006
  }
14007
+ /**
14008
+ * `isDedup` returns whether dedup mode is enabled (derived from ValueType).
14009
+ */
14010
+ isDedup() {
14011
+ return this.valueType === 2;
14012
+ }
14013
+ /**
14014
+ * `increaseDedup` increases the counter using HLL-based dedup.
14015
+ * Only updates the value if the actor is new (not seen before).
14016
+ */
14017
+ increaseDedup(v, actor) {
14018
+ if (!this.isDedup() || !this.hll) {
14019
+ return this.increase(v);
14020
+ }
14021
+ if (!this.isNumericType() || !v.isNumericType()) {
14022
+ throw new TypeError(`Unsupported type of value: ${typeof v.getValue()}`);
14023
+ }
14024
+ if (!actor) {
14025
+ throw new YorkieError(
14026
+ Code.ErrInvalidArgument,
14027
+ "dedup counter requires actor"
14028
+ );
14029
+ }
14030
+ const val = v.getValue();
14031
+ const isUnit = v.getType() === PrimitiveType.Long ? val === 1n : val === 1;
14032
+ if (!isUnit) {
14033
+ throw new YorkieError(
14034
+ Code.ErrInvalidArgument,
14035
+ "dedup counter only supports increment by 1"
14036
+ );
14037
+ }
14038
+ if (this.hll.add(actor)) {
14039
+ this.recomputeValue();
14040
+ }
14041
+ return this;
14042
+ }
14043
+ /**
14044
+ * `hllBytes` returns the HLL register bytes, or undefined if not in dedup mode.
14045
+ */
14046
+ hllBytes() {
14047
+ return this.hll?.toBytes();
14048
+ }
14049
+ /**
14050
+ * `restoreHLL` restores the HLL state from serialized bytes.
14051
+ */
14052
+ restoreHLL(data) {
14053
+ if (!this.hll) {
14054
+ this.hll = new HLL();
14055
+ }
14056
+ this.hll.restore(data);
14057
+ this.recomputeValue();
14058
+ }
14059
+ /**
14060
+ * `recomputeValue` updates the counter value from the HLL cardinality estimate.
14061
+ */
14062
+ recomputeValue() {
14063
+ if (!this.hll) return;
14064
+ this.value = this.hll.count();
14065
+ }
14011
14066
  /**
14012
14067
  * `increase` increases numeric data.
14068
+ * Dedup counters must use increaseDedup() instead.
14013
14069
  */
14014
14070
  increase(v) {
14071
+ if (this.isDedup()) {
14072
+ throw new YorkieError(
14073
+ Code.ErrInvalidArgument,
14074
+ "dedup counter requires actor, use increaseDedup()"
14075
+ );
14076
+ }
14015
14077
  function checkNumericType(target) {
14016
14078
  if (!target.isNumericType()) {
14017
14079
  throw new TypeError(
@@ -14022,14 +14084,17 @@
14022
14084
  checkNumericType(this);
14023
14085
  checkNumericType(v);
14024
14086
  if (this.valueType === 1) {
14025
- this.value = this.value.add(v.getValue());
14087
+ const delta = typeof v.getValue() === "bigint" ? v.getValue() : BigInt(Math.trunc(v.getValue()));
14088
+ this.value = BigInt.asIntN(64, this.value + delta);
14026
14089
  } else {
14027
14090
  if (v.getType() === PrimitiveType.Long) {
14028
- this.value = this.value + v.getValue().toInt();
14091
+ this.value = this.value + bigintToInt32(v.getValue());
14029
14092
  } else {
14030
- this.value = Long.fromNumber(
14031
- this.value + removeDecimal(v.getValue())
14032
- ).toInt();
14093
+ this.value = bigintToInt32(
14094
+ BigInt(
14095
+ this.value + removeDecimal(v.getValue())
14096
+ )
14097
+ );
14033
14098
  }
14034
14099
  }
14035
14100
  return this;
@@ -14037,15 +14102,23 @@
14037
14102
  }
14038
14103
  class IncreaseOperation extends Operation {
14039
14104
  value;
14040
- constructor(parentCreatedAt, value, executedAt) {
14105
+ actor;
14106
+ constructor(parentCreatedAt, value, executedAt, actor) {
14041
14107
  super(parentCreatedAt, executedAt);
14042
14108
  this.value = value;
14109
+ this.actor = actor || "";
14043
14110
  }
14044
14111
  /**
14045
14112
  * `create` creates a new instance of IncreaseOperation.
14046
14113
  */
14047
- static create(parentCreatedAt, value, executedAt) {
14048
- return new IncreaseOperation(parentCreatedAt, value, executedAt);
14114
+ static create(parentCreatedAt, value, executedAt, actor) {
14115
+ return new IncreaseOperation(parentCreatedAt, value, executedAt, actor);
14116
+ }
14117
+ /**
14118
+ * `getActor` returns the actor ID associated with this operation.
14119
+ */
14120
+ getActor() {
14121
+ return this.actor;
14049
14122
  }
14050
14123
  /**
14051
14124
  * `execute` executes this operation on the given `CRDTRoot`.
@@ -14066,7 +14139,17 @@
14066
14139
  }
14067
14140
  const counter = parentObject;
14068
14141
  const value = this.value.deepcopy();
14069
- counter.increase(value);
14142
+ if (counter.isDedup()) {
14143
+ if (!this.actor) {
14144
+ throw new YorkieError(
14145
+ Code.ErrInvalidArgument,
14146
+ "dedup counter requires actor"
14147
+ );
14148
+ }
14149
+ counter.increaseDedup(value, this.actor);
14150
+ } else {
14151
+ counter.increase(value);
14152
+ }
14070
14153
  return {
14071
14154
  opInfos: [
14072
14155
  {
@@ -14075,7 +14158,9 @@
14075
14158
  value: value.getValue()
14076
14159
  }
14077
14160
  ],
14078
- reverseOp: this.toReverseOperation()
14161
+ // Dedup counters do not support undo/redo because HLL cannot
14162
+ // remove an actor once added.
14163
+ reverseOp: this.actor ? void 0 : this.toReverseOperation()
14079
14164
  };
14080
14165
  }
14081
14166
  /**
@@ -14084,7 +14169,7 @@
14084
14169
  toReverseOperation() {
14085
14170
  const primitiveValue = this.value.deepcopy();
14086
14171
  const valueType = primitiveValue.getType();
14087
- const value = valueType === PrimitiveType.Long ? primitiveValue.getValue().multiply(-1) : primitiveValue.getValue() * -1;
14172
+ const value = valueType === PrimitiveType.Long ? -primitiveValue.getValue() : primitiveValue.getValue() * -1;
14088
14173
  const reverseOp = IncreaseOperation.create(
14089
14174
  this.getParentCreatedAt(),
14090
14175
  Primitive.of(value, primitiveValue.getCreatedAt())
@@ -14169,28 +14254,67 @@
14169
14254
  let changes;
14170
14255
  let pairs;
14171
14256
  let diff = { data: 0, meta: 0 };
14257
+ const reversePrevAttributes = /* @__PURE__ */ new Map();
14258
+ const reverseAttrsToRemove = [];
14172
14259
  if (this.attributes.size) {
14173
14260
  const attributes = {};
14174
14261
  [...this.attributes].forEach(([key, value]) => attributes[key] = value);
14175
- [pairs, changes, diff] = tree.style(
14262
+ let prevAttributes;
14263
+ let newAttrKeys;
14264
+ [pairs, changes, diff, prevAttributes, newAttrKeys] = tree.style(
14176
14265
  [this.fromPos, this.toPos],
14177
14266
  attributes,
14178
14267
  this.getExecutedAt(),
14179
14268
  versionVector
14180
14269
  );
14270
+ for (const [key, value] of prevAttributes) {
14271
+ reversePrevAttributes.set(key, value);
14272
+ }
14273
+ reverseAttrsToRemove.push(...newAttrKeys);
14181
14274
  } else {
14182
14275
  const attributesToRemove = this.attributesToRemove;
14183
- [pairs, changes, diff] = tree.removeStyle(
14276
+ let prevAttributes;
14277
+ [pairs, changes, diff, prevAttributes] = tree.removeStyle(
14184
14278
  [this.fromPos, this.toPos],
14185
14279
  attributesToRemove,
14186
14280
  this.getExecutedAt(),
14187
14281
  versionVector
14188
14282
  );
14283
+ for (const [key, value] of prevAttributes) {
14284
+ reversePrevAttributes.set(key, value);
14285
+ }
14189
14286
  }
14190
14287
  root.acc(diff);
14191
14288
  for (const pair of pairs) {
14192
14289
  root.registerGCPair(pair);
14193
14290
  }
14291
+ let reverseOp;
14292
+ if (reversePrevAttributes.size > 0 && reverseAttrsToRemove.length > 0) {
14293
+ reverseOp = new TreeStyleOperation(
14294
+ this.getParentCreatedAt(),
14295
+ this.fromPos,
14296
+ this.toPos,
14297
+ reversePrevAttributes,
14298
+ reverseAttrsToRemove,
14299
+ void 0
14300
+ );
14301
+ } else if (reverseAttrsToRemove.length > 0) {
14302
+ reverseOp = TreeStyleOperation.createTreeRemoveStyleOperation(
14303
+ this.getParentCreatedAt(),
14304
+ this.fromPos,
14305
+ this.toPos,
14306
+ reverseAttrsToRemove,
14307
+ void 0
14308
+ );
14309
+ } else if (reversePrevAttributes.size > 0) {
14310
+ reverseOp = TreeStyleOperation.create(
14311
+ this.getParentCreatedAt(),
14312
+ this.fromPos,
14313
+ this.toPos,
14314
+ reversePrevAttributes,
14315
+ void 0
14316
+ );
14317
+ }
14194
14318
  return {
14195
14319
  opInfos: changes.map(({ from, to, value, fromPath, toPath }) => {
14196
14320
  return {
@@ -14202,7 +14326,8 @@
14202
14326
  toPath,
14203
14327
  path: root.createPath(this.getParentCreatedAt())
14204
14328
  };
14205
- })
14329
+ }),
14330
+ reverseOp
14206
14331
  };
14207
14332
  }
14208
14333
  /**
@@ -14423,6 +14548,8 @@
14423
14548
  return ValueType.INTEGER_CNT;
14424
14549
  case CounterType.Long:
14425
14550
  return ValueType.LONG_CNT;
14551
+ case CounterType.IntDedup:
14552
+ return ValueType.INTEGER_DEDUP_CNT;
14426
14553
  default:
14427
14554
  throw new YorkieError(
14428
14555
  Code.ErrInvalidType,
@@ -14595,6 +14722,7 @@
14595
14722
  pbIncreaseOperation.executedAt = toTimeTicket(
14596
14723
  increaseOperation.getExecutedAt()
14597
14724
  );
14725
+ pbIncreaseOperation.actor = increaseOperation.getActor();
14598
14726
  pbOperation.body.case = "increase";
14599
14727
  pbOperation.body.value = pbIncreaseOperation;
14600
14728
  } else if (operation instanceof TreeEditOperation) {
@@ -14771,6 +14899,12 @@
14771
14899
  if (n.insNextID) {
14772
14900
  pbTreeNode.insNextId = toTreeNodeID(n.insNextID);
14773
14901
  }
14902
+ if (n.mergedFrom) {
14903
+ pbTreeNode.mergedFrom = toTreeNodeID(n.mergedFrom);
14904
+ }
14905
+ if (n.mergedAt) {
14906
+ pbTreeNode.mergedAt = toTimeTicket(n.mergedAt);
14907
+ }
14774
14908
  if (n.attrs) {
14775
14909
  pbTreeNode.attributes = toRHT(n.attrs);
14776
14910
  }
@@ -14840,7 +14974,8 @@
14840
14974
  value: counter.toBytes(),
14841
14975
  createdAt: toTimeTicket(counter.getCreatedAt()),
14842
14976
  movedAt: toTimeTicket(counter.getMovedAt()),
14843
- removedAt: toTimeTicket(counter.getRemovedAt())
14977
+ removedAt: toTimeTicket(counter.getRemovedAt()),
14978
+ hllRegisters: counter.hllBytes() || new Uint8Array()
14844
14979
  })
14845
14980
  }
14846
14981
  });
@@ -15004,6 +15139,8 @@
15004
15139
  return CounterType.Int;
15005
15140
  case ValueType.LONG_CNT:
15006
15141
  return CounterType.Long;
15142
+ case ValueType.INTEGER_DEDUP_CNT:
15143
+ return CounterType.IntDedup;
15007
15144
  }
15008
15145
  throw new YorkieError(
15009
15146
  Code.ErrUnimplemented,
@@ -15046,6 +15183,7 @@
15046
15183
  );
15047
15184
  case ValueType.INTEGER_CNT:
15048
15185
  case ValueType.LONG_CNT:
15186
+ case ValueType.INTEGER_DEDUP_CNT:
15049
15187
  return CRDTCounter.create(
15050
15188
  fromCounterType(pbElementSimple.type),
15051
15189
  CRDTCounter.valueFromBytes(
@@ -15153,6 +15291,12 @@
15153
15291
  if (pbTreeNode.insNextId) {
15154
15292
  node.insNextID = fromTreeNodeID(pbTreeNode.insNextId);
15155
15293
  }
15294
+ if (pbTreeNode.mergedFrom) {
15295
+ node.mergedFrom = fromTreeNodeID(pbTreeNode.mergedFrom);
15296
+ }
15297
+ if (pbTreeNode.mergedAt) {
15298
+ node.mergedAt = fromTimeTicket(pbTreeNode.mergedAt);
15299
+ }
15156
15300
  node.removedAt = fromTimeTicket(pbTreeNode.removedAt);
15157
15301
  return node;
15158
15302
  }
@@ -15222,7 +15366,8 @@
15222
15366
  return IncreaseOperation.create(
15223
15367
  fromTimeTicket(pbIncreaseOperation.parentCreatedAt),
15224
15368
  fromElementSimple(pbIncreaseOperation.value),
15225
- fromTimeTicket(pbIncreaseOperation.executedAt)
15369
+ fromTimeTicket(pbIncreaseOperation.executedAt),
15370
+ pbIncreaseOperation.actor || void 0
15226
15371
  );
15227
15372
  } else if (pbOperation.body.case === "treeEdit") {
15228
15373
  const pbTreeEditOperation = pbOperation.body.value;
@@ -15370,6 +15515,9 @@
15370
15515
  );
15371
15516
  counter.setMovedAt(fromTimeTicket(pbCounter.movedAt));
15372
15517
  counter.setRemovedAt(fromTimeTicket(pbCounter.removedAt));
15518
+ if (counter.isDedup() && pbCounter.hllRegisters.length > 0) {
15519
+ counter.restoreHLL(pbCounter.hllRegisters);
15520
+ }
15373
15521
  return counter;
15374
15522
  }
15375
15523
  function fromTree(pbTree) {
@@ -16839,7 +16987,7 @@
16839
16987
  return this.text.indexRangeToPosRange(fromIdx, toIdx);
16840
16988
  }
16841
16989
  }
16842
- class Counter {
16990
+ class BaseCounter {
16843
16991
  valueType;
16844
16992
  value;
16845
16993
  context;
@@ -16849,7 +16997,7 @@
16849
16997
  this.value = value;
16850
16998
  }
16851
16999
  /**
16852
- * `initialize` initialize this text with context and internal text.
17000
+ * `initialize` links this proxy to a ChangeContext and CRDTCounter.
16853
17001
  */
16854
17002
  initialize(context, counter) {
16855
17003
  this.valueType = counter.getValueType();
@@ -16858,17 +17006,11 @@
16858
17006
  this.value = counter.getValue();
16859
17007
  }
16860
17008
  /**
16861
- * `getID` returns the ID of this text.
17009
+ * `getID` returns the ID of this counter.
16862
17010
  */
16863
17011
  getID() {
16864
17012
  return this.counter.getID();
16865
17013
  }
16866
- /**
16867
- * `getValue` returns the value of this counter;
16868
- */
16869
- getValue() {
16870
- return this.value;
16871
- }
16872
17014
  /**
16873
17015
  * `getValueType` returns the value type of this counter.
16874
17016
  */
@@ -16876,15 +17018,45 @@
16876
17018
  return this.valueType;
16877
17019
  }
16878
17020
  /**
16879
- * `increase` increases numeric data.
17021
+ * `toJSForTest` returns value with meta data for testing.
16880
17022
  */
16881
- increase(v) {
17023
+ toJSForTest() {
17024
+ if (!this.context || !this.counter) {
17025
+ throw new YorkieError(
17026
+ Code.ErrNotInitialized,
17027
+ "Counter is not initialized yet"
17028
+ );
17029
+ }
17030
+ return this.counter.toJSForTest();
17031
+ }
17032
+ /**
17033
+ * `ensureInitialized` throws if this counter has not been initialized.
17034
+ */
17035
+ ensureInitialized() {
16882
17036
  if (!this.context || !this.counter) {
16883
17037
  throw new YorkieError(
16884
17038
  Code.ErrNotInitialized,
16885
17039
  "Counter is not initialized yet"
16886
17040
  );
16887
17041
  }
17042
+ }
17043
+ }
17044
+ class Counter extends BaseCounter {
17045
+ constructor(value) {
17046
+ const type = typeof value === "bigint" ? CounterType.Long : CounterType.Int;
17047
+ super(type, value);
17048
+ }
17049
+ /**
17050
+ * `getValue` returns the value of this counter.
17051
+ */
17052
+ getValue() {
17053
+ return this.value;
17054
+ }
17055
+ /**
17056
+ * `increase` increases numeric data.
17057
+ */
17058
+ increase(v) {
17059
+ this.ensureInitialized();
16888
17060
  const ticket = this.context.issueTimeTicket();
16889
17061
  const value = Primitive.of(v, ticket);
16890
17062
  if (!value.isNumericType()) {
@@ -16898,19 +17070,44 @@
16898
17070
  );
16899
17071
  return this;
16900
17072
  }
17073
+ }
17074
+ class DedupCounter extends BaseCounter {
17075
+ constructor() {
17076
+ super(CounterType.IntDedup, 0);
17077
+ }
16901
17078
  /**
16902
- * `toJSForTest` returns value with meta data for testing.
17079
+ * `getValue` returns the value of this counter. Always a number since
17080
+ * DedupCounter only supports IntDedup.
16903
17081
  */
16904
- toJSForTest() {
16905
- if (!this.context || !this.counter) {
16906
- throw new YorkieError(
16907
- Code.ErrNotInitialized,
16908
- "Counter is not initialized yet"
16909
- );
17082
+ getValue() {
17083
+ return this.value;
17084
+ }
17085
+ /**
17086
+ * `add` records a unique actor in the dedup counter. If the actor has
17087
+ * already been counted, the call is ignored.
17088
+ */
17089
+ add(actor) {
17090
+ this.ensureInitialized();
17091
+ if (!actor) {
17092
+ throw new YorkieError(Code.ErrInvalidArgument, "actor is required");
16910
17093
  }
16911
- return this.counter.toJSForTest();
17094
+ const ticket = this.context.issueTimeTicket();
17095
+ const value = Primitive.of(1, ticket);
17096
+ this.counter.increaseDedup(value, actor);
17097
+ this.context.push(
17098
+ IncreaseOperation.create(
17099
+ this.counter.getCreatedAt(),
17100
+ value,
17101
+ ticket,
17102
+ actor
17103
+ )
17104
+ );
17105
+ return this;
16912
17106
  }
16913
17107
  }
17108
+ function isCounter$1(value) {
17109
+ return value instanceof Counter || value instanceof DedupCounter;
17110
+ }
16914
17111
  function toTreeNode(node) {
16915
17112
  if (node.isText) {
16916
17113
  return {
@@ -17714,7 +17911,12 @@
17714
17911
  } else if (elem instanceof CRDTText) {
17715
17912
  return new Text(context, elem);
17716
17913
  } else if (elem instanceof CRDTCounter) {
17717
- const counter = new Counter(CounterType.Int, 0);
17914
+ if (elem.isDedup()) {
17915
+ const counter2 = new DedupCounter();
17916
+ counter2.initialize(context, elem);
17917
+ return counter2;
17918
+ }
17919
+ const counter = new Counter(0);
17718
17920
  counter.initialize(context, elem);
17719
17921
  return counter;
17720
17922
  } else if (elem instanceof CRDTTree) {
@@ -17744,7 +17946,7 @@
17744
17946
  if (value instanceof Text) {
17745
17947
  element = CRDTText.create(RGATreeSplit.create(), createdAt);
17746
17948
  value.initialize(context, element);
17747
- } else if (value instanceof Counter) {
17949
+ } else if (isCounter$1(value)) {
17748
17950
  element = CRDTCounter.create(
17749
17951
  value.getValueType(),
17750
17952
  value.getValue(),
@@ -20032,7 +20234,7 @@
20032
20234
  };
20033
20235
  }
20034
20236
  const name = "@yorkie-js/sdk";
20035
- const version = "0.7.3";
20237
+ const version = "0.7.5";
20036
20238
  const pkg = {
20037
20239
  name,
20038
20240
  version
@@ -20386,21 +20588,19 @@
20386
20588
  this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
20387
20589
  const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
20388
20590
  this.setAuthToken = setToken;
20591
+ const transportOptions = {
20592
+ baseUrl: rpcAddr,
20593
+ interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
20594
+ fetch: (input, init) => {
20595
+ return fetch(input, {
20596
+ ...init,
20597
+ keepalive: this.keepalive
20598
+ });
20599
+ }
20600
+ };
20389
20601
  this.rpcClient = createClient(
20390
20602
  YorkieService,
20391
- createGrpcWebTransport({
20392
- baseUrl: rpcAddr,
20393
- interceptors: [
20394
- authInterceptor,
20395
- createMetricInterceptor(opts?.userAgent)
20396
- ],
20397
- fetch: (input, init) => {
20398
- return fetch(input, {
20399
- ...init,
20400
- keepalive: this.keepalive
20401
- });
20402
- }
20403
- })
20603
+ opts.useGrpcWebTransport ? createGrpcWebTransport(transportOptions) : createConnectTransport(transportOptions)
20404
20604
  );
20405
20605
  this.taskQueue = [];
20406
20606
  }
@@ -21904,15 +22104,14 @@
21904
22104
  Primitive,
21905
22105
  Text,
21906
22106
  Counter,
22107
+ DedupCounter,
21907
22108
  Tree,
21908
22109
  Devtools,
21909
22110
  Channel,
21910
22111
  ChannelEventType,
21911
22112
  YSON,
21912
22113
  LogLevel,
21913
- setLogLevel,
21914
- IntType: CounterType.Int,
21915
- LongType: CounterType.Long
22114
+ setLogLevel
21916
22115
  };
21917
22116
  if (typeof globalThis !== "undefined") {
21918
22117
  globalThis.yorkie = {
@@ -21921,14 +22120,13 @@
21921
22120
  Primitive,
21922
22121
  Text,
21923
22122
  Counter,
22123
+ DedupCounter,
21924
22124
  Tree,
21925
22125
  Channel,
21926
22126
  ChannelEventType,
21927
22127
  YSON,
21928
22128
  LogLevel,
21929
- setLogLevel,
21930
- IntType: CounterType.Int,
21931
- LongType: CounterType.Long
22129
+ setLogLevel
21932
22130
  };
21933
22131
  }
21934
22132
  exports2.Change = Change;
@@ -21940,6 +22138,7 @@
21940
22138
  exports2.ClientStatus = ClientStatus;
21941
22139
  exports2.Counter = Counter;
21942
22140
  exports2.CounterType = CounterType;
22141
+ exports2.DedupCounter = DedupCounter;
21943
22142
  exports2.Devtools = Devtools;
21944
22143
  exports2.DocEventType = DocEventType;
21945
22144
  exports2.DocStatus = DocStatus;