@yorkie-js/react 0.7.4 → 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.
@@ -102,7 +102,7 @@ function varint64write(lo, hi, bytes) {
102
102
  }
103
103
  bytes.push(hi >>> 31 & 1);
104
104
  }
105
- const TWO_PWR_32_DBL$1 = 4294967296;
105
+ const TWO_PWR_32_DBL = 4294967296;
106
106
  function int64FromString(dec) {
107
107
  const minus = dec[0] === "-";
108
108
  if (minus) {
@@ -115,9 +115,9 @@ function int64FromString(dec) {
115
115
  const digit1e6 = Number(dec.slice(begin, end));
116
116
  highBits *= base;
117
117
  lowBits = lowBits * base + digit1e6;
118
- if (lowBits >= TWO_PWR_32_DBL$1) {
119
- highBits = highBits + (lowBits / TWO_PWR_32_DBL$1 | 0);
120
- lowBits = lowBits % TWO_PWR_32_DBL$1;
118
+ if (lowBits >= TWO_PWR_32_DBL) {
119
+ highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);
120
+ lowBits = lowBits % TWO_PWR_32_DBL;
121
121
  }
122
122
  }
123
123
  add1e6digit(-24, -18);
@@ -138,7 +138,7 @@ function int64ToString(lo, hi) {
138
138
  function uInt64ToString(lo, hi) {
139
139
  ({ lo, hi } = toUnsigned(lo, hi));
140
140
  if (hi <= 2097151) {
141
- return String(TWO_PWR_32_DBL$1 * hi + lo);
141
+ return String(TWO_PWR_32_DBL * hi + lo);
142
142
  }
143
143
  const low = lo & 16777215;
144
144
  const mid = (lo >>> 24 | hi << 8) & 16777215;
@@ -4385,6 +4385,19 @@ function codeToString(value) {
4385
4385
  }
4386
4386
  return name2[0].toLowerCase() + name2.substring(1).replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
4387
4387
  }
4388
+ let stringToCode;
4389
+ function codeFromString(value) {
4390
+ if (!stringToCode) {
4391
+ stringToCode = {};
4392
+ for (const value2 of Object.values(Code$1)) {
4393
+ if (typeof value2 == "string") {
4394
+ continue;
4395
+ }
4396
+ stringToCode[codeToString(value2)] = value2;
4397
+ }
4398
+ }
4399
+ return stringToCode[value];
4400
+ }
4388
4401
  class ConnectError extends Error {
4389
4402
  /**
4390
4403
  * Create a new ConnectError.
@@ -4473,6 +4486,15 @@ function decodeBinaryHeader(value, desc, options) {
4473
4486
  throw ConnectError.from(e, Code$1.DataLoss);
4474
4487
  }
4475
4488
  }
4489
+ function appendHeaders(...headers) {
4490
+ const h = new Headers();
4491
+ for (const e of headers) {
4492
+ e.forEach((value, key) => {
4493
+ h.append(key, value);
4494
+ });
4495
+ }
4496
+ return h;
4497
+ }
4476
4498
  function makeAnyClient(service, createMethod) {
4477
4499
  const client = {};
4478
4500
  for (const desc of service.methods) {
@@ -4620,10 +4642,10 @@ var __asyncValues$1 = function(o) {
4620
4642
  }, reject);
4621
4643
  }
4622
4644
  };
4623
- var __await$2 = function(v) {
4624
- return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4645
+ var __await$3 = function(v) {
4646
+ return this instanceof __await$3 ? (this.v = v, this) : new __await$3(v);
4625
4647
  };
4626
- var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4648
+ var __asyncGenerator$3 = function(thisArg, _arguments, generator) {
4627
4649
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4628
4650
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4629
4651
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4652,7 +4674,7 @@ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4652
4674
  }
4653
4675
  }
4654
4676
  function step(r) {
4655
- r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4677
+ r.value instanceof __await$3 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4656
4678
  }
4657
4679
  function fulfill(value) {
4658
4680
  resume("next", value);
@@ -4673,13 +4695,13 @@ var __asyncDelegator$1 = function(o) {
4673
4695
  }, i;
4674
4696
  function verb(n, f) {
4675
4697
  i[n] = o[n] ? function(v) {
4676
- return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4698
+ return (p = !p) ? { value: __await$3(o[n](v)), done: false } : f ? f(v) : v;
4677
4699
  } : f;
4678
4700
  }
4679
4701
  };
4680
4702
  function createAsyncIterable(items) {
4681
- return __asyncGenerator$2(this, arguments, function* createAsyncIterable_1() {
4682
- yield __await$2(yield* __asyncDelegator$1(__asyncValues$1(items)));
4703
+ return __asyncGenerator$3(this, arguments, function* createAsyncIterable_1() {
4704
+ yield __await$3(yield* __asyncDelegator$1(__asyncValues$1(items)));
4683
4705
  });
4684
4706
  }
4685
4707
  var __asyncValues = function(o) {
@@ -4701,8 +4723,8 @@ var __asyncValues = function(o) {
4701
4723
  }, reject);
4702
4724
  }
4703
4725
  };
4704
- var __await$1 = function(v) {
4705
- return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
4726
+ var __await$2 = function(v) {
4727
+ return this instanceof __await$2 ? (this.v = v, this) : new __await$2(v);
4706
4728
  };
4707
4729
  var __asyncDelegator = function(o) {
4708
4730
  var i, p;
@@ -4713,11 +4735,11 @@ var __asyncDelegator = function(o) {
4713
4735
  }, i;
4714
4736
  function verb(n, f) {
4715
4737
  i[n] = o[n] ? function(v) {
4716
- return (p = !p) ? { value: __await$1(o[n](v)), done: false } : f ? f(v) : v;
4738
+ return (p = !p) ? { value: __await$2(o[n](v)), done: false } : f ? f(v) : v;
4717
4739
  } : f;
4718
4740
  }
4719
4741
  };
4720
- var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4742
+ var __asyncGenerator$2 = function(thisArg, _arguments, generator) {
4721
4743
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
4722
4744
  var g = generator.apply(thisArg, _arguments || []), i, q = [];
4723
4745
  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
@@ -4746,7 +4768,7 @@ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
4746
4768
  }
4747
4769
  }
4748
4770
  function step(r) {
4749
- r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4771
+ r.value instanceof __await$2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
4750
4772
  }
4751
4773
  function fulfill(value) {
4752
4774
  resume("next", value);
@@ -4826,11 +4848,11 @@ function createBiDiStreamingFn(transport, method) {
4826
4848
  }
4827
4849
  function handleStreamResponse(stream, options) {
4828
4850
  const it = (function() {
4829
- return __asyncGenerator$1(this, arguments, function* () {
4851
+ return __asyncGenerator$2(this, arguments, function* () {
4830
4852
  var _a, _b;
4831
- const response = yield __await$1(stream);
4853
+ const response = yield __await$2(stream);
4832
4854
  (_a = options === null || options === void 0 ? void 0 : options.onHeader) === null || _a === void 0 ? void 0 : _a.call(options, response.header);
4833
- yield __await$1(yield* __asyncDelegator(__asyncValues(response.message)));
4855
+ yield __await$2(yield* __asyncDelegator(__asyncValues(response.message)));
4834
4856
  (_b = options === null || options === void 0 ? void 0 : options.onTrailer) === null || _b === void 0 ? void 0 : _b.call(options, response.trailer);
4835
4857
  });
4836
4858
  })()[Symbol.asyncIterator]();
@@ -4920,12 +4942,12 @@ function trailerParse(data) {
4920
4942
  }
4921
4943
  return headers;
4922
4944
  }
4923
- const headerContentType = "Content-Type";
4924
- const headerTimeout = "Grpc-Timeout";
4945
+ const headerContentType$1 = "Content-Type";
4946
+ const headerTimeout$1 = "Grpc-Timeout";
4925
4947
  const headerGrpcStatus = "Grpc-Status";
4926
4948
  const headerGrpcMessage = "Grpc-Message";
4927
4949
  const headerStatusDetailsBin = "Grpc-Status-Details-Bin";
4928
- const headerUserAgent = "User-Agent";
4950
+ const headerUserAgent$1 = "User-Agent";
4929
4951
  const headerXUserAgent = "X-User-Agent";
4930
4952
  const headerXGrpcWeb = "X-Grpc-Web";
4931
4953
  const contentTypeProto = "application/grpc-web+proto";
@@ -5063,6 +5085,204 @@ function createJsonSerialization(desc, options) {
5063
5085
  }
5064
5086
  };
5065
5087
  }
5088
+ const contentTypeRegExp = /^application\/(connect\+)?(?:(json)(?:; ?charset=utf-?8)?|(proto))$/i;
5089
+ const contentTypeUnaryProto = "application/proto";
5090
+ const contentTypeUnaryJson = "application/json";
5091
+ const contentTypeStreamProto = "application/connect+proto";
5092
+ const contentTypeStreamJson = "application/connect+json";
5093
+ function parseContentType(contentType) {
5094
+ const match = contentType === null || contentType === void 0 ? void 0 : contentType.match(contentTypeRegExp);
5095
+ if (!match) {
5096
+ return void 0;
5097
+ }
5098
+ const stream = !!match[1];
5099
+ const binary = !!match[3];
5100
+ return { stream, binary };
5101
+ }
5102
+ (function(s, e) {
5103
+ var t = {};
5104
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5105
+ t[p] = s[p];
5106
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
5107
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5108
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
5109
+ t[p[i]] = s[p[i]];
5110
+ }
5111
+ return t;
5112
+ });
5113
+ function errorFromJson(jsonValue, metadata, fallback) {
5114
+ var _a;
5115
+ if (metadata) {
5116
+ new Headers(metadata).forEach((value, key) => fallback.metadata.append(key, value));
5117
+ }
5118
+ if (typeof jsonValue !== "object" || jsonValue == null || Array.isArray(jsonValue)) {
5119
+ throw fallback;
5120
+ }
5121
+ let code = fallback.code;
5122
+ if ("code" in jsonValue && typeof jsonValue.code === "string") {
5123
+ code = (_a = codeFromString(jsonValue.code)) !== null && _a !== void 0 ? _a : code;
5124
+ }
5125
+ const message = jsonValue.message;
5126
+ if (message != null && typeof message !== "string") {
5127
+ throw fallback;
5128
+ }
5129
+ const error = new ConnectError(message !== null && message !== void 0 ? message : "", code, metadata);
5130
+ if ("details" in jsonValue && Array.isArray(jsonValue.details)) {
5131
+ for (const detail of jsonValue.details) {
5132
+ if (detail === null || typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || typeof detail.value != "string") {
5133
+ throw fallback;
5134
+ }
5135
+ try {
5136
+ error.details.push({
5137
+ type: detail.type,
5138
+ value: base64Decode(detail.value),
5139
+ debug: detail.debug
5140
+ });
5141
+ } catch (e) {
5142
+ throw fallback;
5143
+ }
5144
+ }
5145
+ }
5146
+ return error;
5147
+ }
5148
+ const endStreamFlag = 2;
5149
+ function endStreamFromJson(data) {
5150
+ const parseErr = new ConnectError("invalid end stream", Code$1.Unknown);
5151
+ let jsonValue;
5152
+ try {
5153
+ jsonValue = JSON.parse(typeof data == "string" ? data : new TextDecoder().decode(data));
5154
+ } catch (e) {
5155
+ throw parseErr;
5156
+ }
5157
+ if (typeof jsonValue != "object" || jsonValue == null || Array.isArray(jsonValue)) {
5158
+ throw parseErr;
5159
+ }
5160
+ const metadata = new Headers();
5161
+ if ("metadata" in jsonValue) {
5162
+ if (typeof jsonValue.metadata != "object" || jsonValue.metadata == null || Array.isArray(jsonValue.metadata)) {
5163
+ throw parseErr;
5164
+ }
5165
+ for (const [key, values] of Object.entries(jsonValue.metadata)) {
5166
+ if (!Array.isArray(values) || values.some((value) => typeof value != "string")) {
5167
+ throw parseErr;
5168
+ }
5169
+ for (const value of values) {
5170
+ metadata.append(key, value);
5171
+ }
5172
+ }
5173
+ }
5174
+ const error = "error" in jsonValue && jsonValue.error != null ? errorFromJson(jsonValue.error, metadata, parseErr) : void 0;
5175
+ return { metadata, error };
5176
+ }
5177
+ const headerContentType = "Content-Type";
5178
+ const headerUnaryContentLength = "Content-Length";
5179
+ const headerUnaryEncoding = "Content-Encoding";
5180
+ const headerUnaryAcceptEncoding = "Accept-Encoding";
5181
+ const headerTimeout = "Connect-Timeout-Ms";
5182
+ const headerProtocolVersion = "Connect-Protocol-Version";
5183
+ const headerUserAgent = "User-Agent";
5184
+ function codeFromHttpStatus$1(httpStatus) {
5185
+ switch (httpStatus) {
5186
+ case 400:
5187
+ return Code$1.Internal;
5188
+ case 401:
5189
+ return Code$1.Unauthenticated;
5190
+ case 403:
5191
+ return Code$1.PermissionDenied;
5192
+ case 404:
5193
+ return Code$1.Unimplemented;
5194
+ case 429:
5195
+ return Code$1.Unavailable;
5196
+ case 502:
5197
+ return Code$1.Unavailable;
5198
+ case 503:
5199
+ return Code$1.Unavailable;
5200
+ case 504:
5201
+ return Code$1.Unavailable;
5202
+ default:
5203
+ return Code$1.Unknown;
5204
+ }
5205
+ }
5206
+ function trailerDemux(header) {
5207
+ const h = new Headers(), t = new Headers();
5208
+ header.forEach((value, key) => {
5209
+ if (key.toLowerCase().startsWith("trailer-")) {
5210
+ t.append(key.substring(8), value);
5211
+ } else {
5212
+ h.append(key, value);
5213
+ }
5214
+ });
5215
+ return [h, t];
5216
+ }
5217
+ const protocolVersion = "1";
5218
+ function requestHeader$1(methodKind, useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5219
+ const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5220
+ if (timeoutMs !== void 0) {
5221
+ result.set(headerTimeout, `${timeoutMs}`);
5222
+ }
5223
+ result.set(headerContentType, methodKind == "unary" ? useBinaryFormat ? contentTypeUnaryProto : contentTypeUnaryJson : useBinaryFormat ? contentTypeStreamProto : contentTypeStreamJson);
5224
+ result.set(headerProtocolVersion, protocolVersion);
5225
+ if (!result.has(headerUserAgent) && setUserAgent) ;
5226
+ return result;
5227
+ }
5228
+ function validateResponse$1(methodKind, useBinaryFormat, status, headers) {
5229
+ const mimeType = headers.get(headerContentType);
5230
+ const parsedType = parseContentType(mimeType);
5231
+ if (status !== 200) {
5232
+ const errorFromStatus = new ConnectError(`HTTP ${status}`, codeFromHttpStatus$1(status), headers);
5233
+ if (methodKind == "unary" && parsedType && !parsedType.binary) {
5234
+ return { isUnaryError: true, unaryError: errorFromStatus };
5235
+ }
5236
+ throw errorFromStatus;
5237
+ }
5238
+ const allowedContentType = {
5239
+ binary: useBinaryFormat,
5240
+ stream: methodKind !== "unary"
5241
+ };
5242
+ if ((parsedType === null || parsedType === void 0 ? void 0 : parsedType.binary) !== allowedContentType.binary || parsedType.stream !== allowedContentType.stream) {
5243
+ throw new ConnectError(`unsupported content type ${mimeType}`, parsedType === void 0 ? Code$1.Unknown : Code$1.Internal, headers);
5244
+ }
5245
+ return { isUnaryError: false };
5246
+ }
5247
+ const contentTypePrefix = "application/";
5248
+ function encodeMessageForUrl(message, useBase64) {
5249
+ if (useBase64) {
5250
+ return base64Encode(message, "url");
5251
+ }
5252
+ return encodeURIComponent(new TextDecoder().decode(message));
5253
+ }
5254
+ function transformConnectPostToGetRequest(request, message, useBase64) {
5255
+ let query = `?connect=v${protocolVersion}`;
5256
+ const contentType = request.header.get(headerContentType);
5257
+ if ((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(contentTypePrefix)) === 0) {
5258
+ query += "&encoding=" + encodeURIComponent(contentType.slice(contentTypePrefix.length));
5259
+ }
5260
+ const compression = request.header.get(headerUnaryEncoding);
5261
+ if (compression !== null && compression !== "identity") {
5262
+ query += "&compression=" + encodeURIComponent(compression);
5263
+ useBase64 = true;
5264
+ }
5265
+ if (useBase64) {
5266
+ query += "&base64=1";
5267
+ }
5268
+ query += "&message=" + encodeMessageForUrl(message, useBase64);
5269
+ const url = request.url + query;
5270
+ const header = new Headers(request.header);
5271
+ for (const h of [
5272
+ headerProtocolVersion,
5273
+ headerContentType,
5274
+ headerUnaryContentLength,
5275
+ headerUnaryEncoding,
5276
+ headerUnaryAcceptEncoding
5277
+ ]) {
5278
+ header.delete(h);
5279
+ }
5280
+ return Object.assign(Object.assign({}, request), {
5281
+ requestMethod: "GET",
5282
+ url,
5283
+ header
5284
+ });
5285
+ }
5066
5286
  function runUnaryCall(opt) {
5067
5287
  const next = applyInterceptors(opt.next, opt.interceptors);
5068
5288
  const [signal, abort, done] = setupSignal(opt);
@@ -5131,6 +5351,181 @@ function assertFetchApi() {
5131
5351
  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.");
5132
5352
  }
5133
5353
  }
5354
+ var __await$1 = function(v) {
5355
+ return this instanceof __await$1 ? (this.v = v, this) : new __await$1(v);
5356
+ };
5357
+ var __asyncGenerator$1 = function(thisArg, _arguments, generator) {
5358
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5359
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
5360
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function() {
5361
+ return this;
5362
+ }, i;
5363
+ function awaitReturn(f) {
5364
+ return function(v) {
5365
+ return Promise.resolve(v).then(f, reject);
5366
+ };
5367
+ }
5368
+ function verb(n, f) {
5369
+ if (g[n]) {
5370
+ i[n] = function(v) {
5371
+ return new Promise(function(a, b) {
5372
+ q.push([n, v, a, b]) > 1 || resume(n, v);
5373
+ });
5374
+ };
5375
+ if (f) i[n] = f(i[n]);
5376
+ }
5377
+ }
5378
+ function resume(n, v) {
5379
+ try {
5380
+ step(g[n](v));
5381
+ } catch (e) {
5382
+ settle(q[0][3], e);
5383
+ }
5384
+ }
5385
+ function step(r) {
5386
+ r.value instanceof __await$1 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
5387
+ }
5388
+ function fulfill(value) {
5389
+ resume("next", value);
5390
+ }
5391
+ function reject(value) {
5392
+ resume("throw", value);
5393
+ }
5394
+ function settle(f, v) {
5395
+ if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
5396
+ }
5397
+ };
5398
+ const fetchOptions$1 = {
5399
+ redirect: "error"
5400
+ };
5401
+ function createConnectTransport(options) {
5402
+ var _a;
5403
+ assertFetchApi();
5404
+ const useBinaryFormat = (_a = options.useBinaryFormat) !== null && _a !== void 0 ? _a : false;
5405
+ return {
5406
+ async unary(method, signal, timeoutMs, header, message, contextValues) {
5407
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5408
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5409
+ return await runUnaryCall({
5410
+ interceptors: options.interceptors,
5411
+ signal,
5412
+ timeoutMs,
5413
+ req: {
5414
+ stream: false,
5415
+ service: method.parent,
5416
+ method,
5417
+ requestMethod: "POST",
5418
+ url: createMethodUrl(options.baseUrl, method),
5419
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5420
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5421
+ message
5422
+ },
5423
+ next: async (req) => {
5424
+ var _a2;
5425
+ const useGet = options.useHttpGet === true && method.idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS;
5426
+ let body = null;
5427
+ if (useGet) {
5428
+ req = transformConnectPostToGetRequest(req, serialize(req.message), useBinaryFormat);
5429
+ } else {
5430
+ body = serialize(req.message);
5431
+ }
5432
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5433
+ const response = await fetch2(req.url, Object.assign(Object.assign({}, fetchOptions$1), { method: req.requestMethod, headers: req.header, signal: req.signal, body }));
5434
+ const { isUnaryError, unaryError } = validateResponse$1(method.methodKind, useBinaryFormat, response.status, response.headers);
5435
+ if (isUnaryError) {
5436
+ throw errorFromJson(await response.json(), appendHeaders(...trailerDemux(response.headers)), unaryError);
5437
+ }
5438
+ const [demuxedHeader, demuxedTrailer] = trailerDemux(response.headers);
5439
+ return {
5440
+ stream: false,
5441
+ service: method.parent,
5442
+ method,
5443
+ header: demuxedHeader,
5444
+ message: useBinaryFormat ? parse2(new Uint8Array(await response.arrayBuffer())) : fromJson(method.output, await response.json(), getJsonOptions(options.jsonOptions)),
5445
+ trailer: demuxedTrailer
5446
+ };
5447
+ }
5448
+ });
5449
+ },
5450
+ async stream(method, signal, timeoutMs, header, input, contextValues) {
5451
+ const { serialize, parse: parse2 } = createClientMethodSerializers(method, useBinaryFormat, options.jsonOptions, options.binaryOptions);
5452
+ function parseResponseBody(body, trailerTarget, header2, signal2) {
5453
+ return __asyncGenerator$1(this, arguments, function* parseResponseBody_1() {
5454
+ const reader = createEnvelopeReadableStream(body).getReader();
5455
+ let endStreamReceived = false;
5456
+ for (; ; ) {
5457
+ const result = yield __await$1(reader.read());
5458
+ if (result.done) {
5459
+ break;
5460
+ }
5461
+ const { flags, data } = result.value;
5462
+ if ((flags & compressedFlag) === compressedFlag) {
5463
+ throw new ConnectError(`protocol error: received unsupported compressed output`, Code$1.Internal);
5464
+ }
5465
+ if ((flags & endStreamFlag) === endStreamFlag) {
5466
+ endStreamReceived = true;
5467
+ const endStream = endStreamFromJson(data);
5468
+ if (endStream.error) {
5469
+ const error = endStream.error;
5470
+ header2.forEach((value, key) => {
5471
+ error.metadata.append(key, value);
5472
+ });
5473
+ throw error;
5474
+ }
5475
+ endStream.metadata.forEach((value, key) => trailerTarget.set(key, value));
5476
+ continue;
5477
+ }
5478
+ yield yield __await$1(parse2(data));
5479
+ }
5480
+ if ("throwIfAborted" in signal2) {
5481
+ signal2.throwIfAborted();
5482
+ }
5483
+ if (!endStreamReceived) {
5484
+ throw "missing EndStreamResponse";
5485
+ }
5486
+ });
5487
+ }
5488
+ async function createRequestBody(input2) {
5489
+ if (method.methodKind != "server_streaming") {
5490
+ throw "The fetch API does not support streaming request bodies";
5491
+ }
5492
+ const r = await input2[Symbol.asyncIterator]().next();
5493
+ if (r.done == true) {
5494
+ throw "missing request message";
5495
+ }
5496
+ return encodeEnvelope(0, serialize(r.value));
5497
+ }
5498
+ timeoutMs = timeoutMs === void 0 ? options.defaultTimeoutMs : timeoutMs <= 0 ? void 0 : timeoutMs;
5499
+ return await runStreamingCall({
5500
+ interceptors: options.interceptors,
5501
+ timeoutMs,
5502
+ signal,
5503
+ req: {
5504
+ stream: true,
5505
+ service: method.parent,
5506
+ method,
5507
+ requestMethod: "POST",
5508
+ url: createMethodUrl(options.baseUrl, method),
5509
+ header: requestHeader$1(method.methodKind, useBinaryFormat, timeoutMs, header, false),
5510
+ contextValues: contextValues !== null && contextValues !== void 0 ? contextValues : createContextValues(),
5511
+ message: input
5512
+ },
5513
+ next: async (req) => {
5514
+ var _a2;
5515
+ const fetch2 = (_a2 = options.fetch) !== null && _a2 !== void 0 ? _a2 : globalThis.fetch;
5516
+ 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) }));
5517
+ validateResponse$1(method.methodKind, useBinaryFormat, fRes.status, fRes.headers);
5518
+ if (fRes.body === null) {
5519
+ throw "missing response body";
5520
+ }
5521
+ const trailer = new Headers();
5522
+ const res = Object.assign(Object.assign({}, req), { header: fRes.headers, trailer, message: parseResponseBody(fRes.body, trailer, fRes.headers, req.signal) });
5523
+ return res;
5524
+ }
5525
+ });
5526
+ }
5527
+ };
5528
+ }
5134
5529
  function validateTrailer(trailer, header) {
5135
5530
  const err = findTrailerError(trailer);
5136
5531
  if (err) {
@@ -5146,12 +5541,12 @@ function validateTrailer(trailer, header) {
5146
5541
  function requestHeader(useBinaryFormat, timeoutMs, userProvidedHeaders, setUserAgent) {
5147
5542
  var _a, _b;
5148
5543
  const result = new Headers(userProvidedHeaders !== null && userProvidedHeaders !== void 0 ? userProvidedHeaders : {});
5149
- result.set(headerContentType, useBinaryFormat ? contentTypeProto : contentTypeJson);
5544
+ result.set(headerContentType$1, useBinaryFormat ? contentTypeProto : contentTypeJson);
5150
5545
  result.set(headerXGrpcWeb, "1");
5151
- 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";
5546
+ 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";
5152
5547
  result.set(headerXUserAgent, userAgent);
5153
5548
  if (timeoutMs !== void 0) {
5154
- result.set(headerTimeout, `${timeoutMs}m`);
5549
+ result.set(headerTimeout$1, `${timeoutMs}m`);
5155
5550
  }
5156
5551
  return result;
5157
5552
  }
@@ -5395,7 +5790,7 @@ function createGrpcWebTransport(options) {
5395
5790
  }
5396
5791
  };
5397
5792
  }
5398
- const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBIsoaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGpUBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwiggsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq7AQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQaqQEKBFRyZWUSIgoFbm9kZXMYASADKAsyEy55b3JraWUudjEuVHJlZU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0QgYKBGJvZHkiPwoHUkhUTm9kZRILCgNrZXkYASABKAkSJwoHZWxlbWVudBgCIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudCJUCgdSR0FOb2RlEiAKBG5leHQYASABKAsyEi55b3JraWUudjEuUkdBTm9kZRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlgKCE5vZGVBdHRyEg0KBXZhbHVlGAEgASgJEikKCnVwZGF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBISCgppc19yZW1vdmVkGAMgASgIIpQCCghUZXh0Tm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEg0KBXZhbHVlGAIgASgJEikKCnJlbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgEIAEoCzIVLnlvcmtpZS52MS5UZXh0Tm9kZUlEEjcKCmF0dHJpYnV0ZXMYBSADKAsyIy55b3JraWUudjEuVGV4dE5vZGUuQXR0cmlidXRlc0VudHJ5GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIkcKClRleHROb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSKzAwoIVHJlZU5vZGUSIQoCaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIMCgR0eXBlGAIgASgJEg0KBXZhbHVlGAMgASgJEikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtpbnNfcHJldl9pZBgFIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEioKC2luc19uZXh0X2lkGAYgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSDQoFZGVwdGgYByABKAUSNwoKYXR0cmlidXRlcxgIIAMoCzIjLnlvcmtpZS52MS5UcmVlTm9kZS5BdHRyaWJ1dGVzRW50cnkSKgoLbWVyZ2VkX2Zyb20YCSABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIoCgltZXJnZWRfYXQYCiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpGCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLk5vZGVBdHRyOgI4ASIxCglUcmVlTm9kZXMSJAoHY29udGVudBgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZSJHCgpUcmVlTm9kZUlEEikKCmNyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIOCgZvZmZzZXQYAiABKAUiYwoHVHJlZVBvcxIoCglwYXJlbnRfaWQYASABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBIuCg9sZWZ0X3NpYmxpbmdfaWQYAiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRCJrCgRVc2VyEgoKAmlkGAEgASgJEhUKDWF1dGhfcHJvdmlkZXIYAiABKAkSEAoIdXNlcm5hbWUYAyABKAkSLgoKY3JlYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiiQEKBk1lbWJlchIKCgJpZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEg8KB3VzZXJfaWQYAyABKAkSEAoIdXNlcm5hbWUYBCABKAkSDAoEcm9sZRgFIAEoCRIuCgppbnZpdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLpBgoHUHJvamVjdBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhIKCnB1YmxpY19rZXkYAyABKAkSEgoKc2VjcmV0X2tleRgEIAEoCRIYChBhdXRoX3dlYmhvb2tfdXJsGAUgASgJEhwKFGF1dGhfd2ViaG9va19tZXRob2RzGAYgAygJEiAKGGF1dGhfd2ViaG9va19tYXhfcmV0cmllcxgRIAEoBBImCh5hdXRoX3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYEiABKAkSJgoeYXV0aF93ZWJob29rX21heF93YWl0X2ludGVydmFsGBMgASgJEiQKHGF1dGhfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYFCABKAkSGQoRZXZlbnRfd2ViaG9va191cmwYByABKAkSHAoUZXZlbnRfd2ViaG9va19ldmVudHMYCCADKAkSIQoZZXZlbnRfd2ViaG9va19tYXhfcmV0cmllcxgVIAEoBBInCh9ldmVudF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBYgASgJEicKH2V2ZW50X3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYFyABKAkSJQodZXZlbnRfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYGCABKAkSIwobY2xpZW50X2RlYWN0aXZhdGVfdGhyZXNob2xkGAkgASgJEhoKEnNuYXBzaG90X3RocmVzaG9sZBgZIAEoAxIZChFzbmFwc2hvdF9pbnRlcnZhbBgaIAEoAxIkChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAogASgFEiQKHG1heF9hdHRhY2htZW50c19wZXJfZG9jdW1lbnQYCyABKAUSHQoVbWF4X3NpemVfcGVyX2RvY3VtZW50GA8gASgFEhgKEHJlbW92ZV9vbl9kZXRhY2gYECABKAgSHQoVYXV0b19yZXZpc2lvbl9lbmFibGVkGBsgASgIEhcKD2FsbG93ZWRfb3JpZ2lucxgOIAMoCRIuCgpjcmVhdGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIvCgtNZXRyaWNQb2ludBIRCgl0aW1lc3RhbXAYASABKAMSDQoFdmFsdWUYAiABKAUiowwKFlVwZGF0YWJsZVByb2plY3RGaWVsZHMSKgoEbmFtZRgBIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI2ChBhdXRoX3dlYmhvb2tfdXJsGAIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlElIKFGF1dGhfd2ViaG9va19tZXRob2RzGAMgASgLMjQueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQXV0aFdlYmhvb2tNZXRob2RzEj4KGGF1dGhfd2ViaG9va19tYXhfcmV0cmllcxgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYDSABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRAoeYXV0aF93ZWJob29rX21heF93YWl0X2ludGVydmFsGA4gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkIKHGF1dGhfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYDyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNwoRZXZlbnRfd2ViaG9va191cmwYBCABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUZXZlbnRfd2ViaG9va19ldmVudHMYBSABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5FdmVudFdlYmhvb2tFdmVudHMSPwoZZXZlbnRfd2ViaG9va19tYXhfcmV0cmllcxgQIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZRJFCh9ldmVudF93ZWJob29rX21pbl93YWl0X2ludGVydmFsGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQwodZXZlbnRfd2ViaG9va19yZXF1ZXN0X3RpbWVvdXQYEyABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNwoSc25hcHNob3RfdGhyZXNob2xkGBQgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWUSNgoRc25hcHNob3RfaW50ZXJ2YWwYFSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRJBChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYBiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQQocbWF4X3N1YnNjcmliZXJzX3Blcl9kb2N1bWVudBgHIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEkEKHG1heF9hdHRhY2htZW50c19wZXJfZG9jdW1lbnQYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI6ChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYCiABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI0ChByZW1vdmVfb25fZGV0YWNoGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRI5ChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEkkKD2FsbG93ZWRfb3JpZ2lucxgJIAEoCzIwLnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkFsbG93ZWRPcmlnaW5zGiUKEkF1dGhXZWJob29rTWV0aG9kcxIPCgdtZXRob2RzGAEgAygJGiQKEkV2ZW50V2ViaG9va0V2ZW50cxIOCgZldmVudHMYASADKAkaIQoOQWxsb3dlZE9yaWdpbnMSDwoHb3JpZ2lucxgBIAMoCSKnAwoPRG9jdW1lbnRTdW1tYXJ5EgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRyb290GAMgASgJEhgKEGF0dGFjaGVkX2NsaWVudHMYByABKAUSKQoNZG9jdW1lbnRfc2l6ZRgIIAEoCzISLnlvcmtpZS52MS5Eb2NTaXplEhIKCnNjaGVtYV9rZXkYCSABKAkSPAoJcHJlc2VuY2VzGAogAygLMikueW9ya2llLnYxLkRvY3VtZW50U3VtbWFyeS5QcmVzZW5jZXNFbnRyeRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgthY2Nlc3NlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASLaAQoOUHJlc2VuY2VDaGFuZ2USMgoEdHlwZRgBIAEoDjIkLnlvcmtpZS52MS5QcmVzZW5jZUNoYW5nZS5DaGFuZ2VUeXBlEiUKCHByZXNlbmNlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlIm0KCkNoYW5nZVR5cGUSGwoXQ0hBTkdFX1RZUEVfVU5TUEVDSUZJRUQQABITCg9DSEFOR0VfVFlQRV9QVVQQARIWChJDSEFOR0VfVFlQRV9ERUxFVEUQAhIVChFDSEFOR0VfVFlQRV9DTEVBUhADImQKCFByZXNlbmNlEisKBGRhdGEYASADKAsyHS55b3JraWUudjEuUHJlc2VuY2UuRGF0YUVudHJ5GisKCURhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjQKDkNoYW5uZWxTdW1tYXJ5EgsKA2tleRgBIAEoCRIVCg1zZXNzaW9uX2NvdW50GAIgASgFIjQKCkNoZWNrcG9pbnQSEgoKc2VydmVyX3NlcRgBIAEoAxISCgpjbGllbnRfc2VxGAIgASgNImEKC1RleHROb2RlUG9zEikKCmNyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIOCgZvZmZzZXQYAiABKAUSFwoPcmVsYXRpdmVfb2Zmc2V0GAMgASgFIkIKClRpbWVUaWNrZXQSDwoHbGFtcG9ydBgBIAEoAxIRCglkZWxpbWl0ZXIYAiABKA0SEAoIYWN0b3JfaWQYAyABKAwiLgoMRG9jRXZlbnRCb2R5Eg0KBXRvcGljGAEgASgJEg8KB3BheWxvYWQYAiABKAwiawoIRG9jRXZlbnQSJQoEdHlwZRgBIAEoDjIXLnlvcmtpZS52MS5Eb2NFdmVudFR5cGUSEQoJcHVibGlzaGVyGAIgASgJEiUKBGJvZHkYAyABKAsyFy55b3JraWUudjEuRG9jRXZlbnRCb2R5ItYBCgxDaGFubmVsRXZlbnQSKgoEdHlwZRgBIAEoDjIcLnlvcmtpZS52MS5DaGFubmVsRXZlbnQuVHlwZRIRCglwdWJsaXNoZXIYAiABKAkSFQoNc2Vzc2lvbl9jb3VudBgDIAEoAxILCgNzZXEYBCABKAMSDQoFdG9waWMYBSABKAkSDwoHcGF5bG9hZBgGIAEoDCJDCgRUeXBlEhQKEFRZUEVfVU5TUEVDSUZJRUQQABIRCg1UWVBFX1BSRVNFTkNFEAESEgoOVFlQRV9CUk9BRENBU1QQAiImCghEYXRhU2l6ZRIMCgRkYXRhGAEgASgFEgwKBG1ldGEYAiABKAUiTQoHRG9jU2l6ZRIhCgRsaXZlGAEgASgLMhMueW9ya2llLnYxLkRhdGFTaXplEh8KAmdjGAIgASgLMhMueW9ya2llLnYxLkRhdGFTaXplIpEBCgZTY2hlbWESCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgFEgwKBGJvZHkYBCABKAkSHgoFcnVsZXMYBSADKAsyDy55b3JraWUudjEuUnVsZRIuCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJQCgxUcmVlTm9kZVJ1bGUSEQoJbm9kZV90eXBlGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSDQoFbWFya3MYAyABKAkSDQoFZ3JvdXAYBCABKAkiTwoEUnVsZRIMCgRwYXRoGAEgASgJEgwKBHR5cGUYAiABKAkSKwoKdHJlZV9ub2RlcxgDIAMoCzIXLnlvcmtpZS52MS5UcmVlTm9kZVJ1bGUigwEKD1JldmlzaW9uU3VtbWFyeRIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIQCghzbmFwc2hvdBgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCrUAgoJVmFsdWVUeXBlEhMKD1ZBTFVFX1RZUEVfTlVMTBAAEhYKElZBTFVFX1RZUEVfQk9PTEVBThABEhYKElZBTFVFX1RZUEVfSU5URUdFUhACEhMKD1ZBTFVFX1RZUEVfTE9ORxADEhUKEVZBTFVFX1RZUEVfRE9VQkxFEAQSFQoRVkFMVUVfVFlQRV9TVFJJTkcQBRIUChBWQUxVRV9UWVBFX0JZVEVTEAYSEwoPVkFMVUVfVFlQRV9EQVRFEAcSGgoWVkFMVUVfVFlQRV9KU09OX09CSkVDVBAIEhkKFVZBTFVFX1RZUEVfSlNPTl9BUlJBWRAJEhMKD1ZBTFVFX1RZUEVfVEVYVBAKEhoKFlZBTFVFX1RZUEVfSU5URUdFUl9DTlQQCxIXChNWQUxVRV9UWVBFX0xPTkdfQ05UEAwSEwoPVkFMVUVfVFlQRV9UUkVFEA0qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5793
+ const file_src_api_yorkie_v1_resources = /* @__PURE__ */ fileDesc("CiFzcmMvYXBpL3lvcmtpZS92MS9yZXNvdXJjZXMucHJvdG8SCXlvcmtpZS52MSKuAQoIU25hcHNob3QSJAoEcm9vdBgBIAEoCzIWLnlvcmtpZS52MS5KU09ORWxlbWVudBI1CglwcmVzZW5jZXMYAiADKAsyIi55b3JraWUudjEuU25hcHNob3QuUHJlc2VuY2VzRW50cnkaRQoOUHJlc2VuY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMueW9ya2llLnYxLlByZXNlbmNlOgI4ASL7AQoKQ2hhbmdlUGFjaxIUCgxkb2N1bWVudF9rZXkYASABKAkSKQoKY2hlY2twb2ludBgCIAEoCzIVLnlvcmtpZS52MS5DaGVja3BvaW50EhAKCHNuYXBzaG90GAMgASgMEiIKB2NoYW5nZXMYBCADKAsyES55b3JraWUudjEuQ2hhbmdlEjAKEW1pbl9zeW5jZWRfdGlja2V0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSEgoKaXNfcmVtb3ZlZBgGIAEoCBIwCg52ZXJzaW9uX3ZlY3RvchgHIAEoCzIYLnlvcmtpZS52MS5WZXJzaW9uVmVjdG9yIpgBCgZDaGFuZ2USHwoCaWQYASABKAsyEy55b3JraWUudjEuQ2hhbmdlSUQSDwoHbWVzc2FnZRgCIAEoCRIoCgpvcGVyYXRpb25zGAMgAygLMhQueW9ya2llLnYxLk9wZXJhdGlvbhIyCg9wcmVzZW5jZV9jaGFuZ2UYBCABKAsyGS55b3JraWUudjEuUHJlc2VuY2VDaGFuZ2UihwEKCENoYW5nZUlEEhIKCmNsaWVudF9zZXEYASABKA0SEgoKc2VydmVyX3NlcRgCIAEoAxIPCgdsYW1wb3J0GAMgASgDEhAKCGFjdG9yX2lkGAQgASgMEjAKDnZlcnNpb25fdmVjdG9yGAUgASgLMhgueW9ya2llLnYxLlZlcnNpb25WZWN0b3IidAoNVmVyc2lvblZlY3RvchI0CgZ2ZWN0b3IYASADKAsyJC55b3JraWUudjEuVmVyc2lvblZlY3Rvci5WZWN0b3JFbnRyeRotCgtWZWN0b3JFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItkaCglPcGVyYXRpb24SJwoDc2V0GAEgASgLMhgueW9ya2llLnYxLk9wZXJhdGlvbi5TZXRIABInCgNhZGQYAiABKAsyGC55b3JraWUudjEuT3BlcmF0aW9uLkFkZEgAEikKBG1vdmUYAyABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLk1vdmVIABItCgZyZW1vdmUYBCABKAsyGy55b3JraWUudjEuT3BlcmF0aW9uLlJlbW92ZUgAEikKBGVkaXQYBSABKAsyGS55b3JraWUudjEuT3BlcmF0aW9uLkVkaXRIABIrCgVzdHlsZRgHIAEoCzIaLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGVIABIxCghpbmNyZWFzZRgIIAEoCzIdLnlvcmtpZS52MS5PcGVyYXRpb24uSW5jcmVhc2VIABIyCgl0cmVlX2VkaXQYCSABKAsyHS55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0SAASNAoKdHJlZV9zdHlsZRgKIAEoCzIeLnlvcmtpZS52MS5PcGVyYXRpb24uVHJlZVN0eWxlSAASMgoJYXJyYXlfc2V0GAsgASgLMh0ueW9ya2llLnYxLk9wZXJhdGlvbi5BcnJheVNldEgAGp0BCgNTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBILCgNrZXkYAiABKAkSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrAAQoDQWRkEjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSLgoPcHJldl9jcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBq/AQoETW92ZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Ei4KD3ByZXZfY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCmNyZWF0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIqCgtleGVjdXRlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GpEBCgZSZW1vdmUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKgoLZXhlY3V0ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrZAwoERWRpdBIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSUwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyMi55b3JraWUudjEuT3BlcmF0aW9uLkVkaXQuQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5Eg8KB2NvbnRlbnQYBSABKAkSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBI9CgphdHRyaWJ1dGVzGAcgAygLMikueW9ya2llLnYxLk9wZXJhdGlvbi5FZGl0LkF0dHJpYnV0ZXNFbnRyeRpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGjEKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGukDCgVTdHlsZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EiQKBGZyb20YAiABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSIgoCdG8YAyABKAsyFi55b3JraWUudjEuVGV4dE5vZGVQb3MSPgoKYXR0cmlidXRlcxgEIAMoCzIqLnlvcmtpZS52MS5PcGVyYXRpb24uU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSVAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBiADKAsyMy55b3JraWUudjEuT3BlcmF0aW9uLlN0eWxlLkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRIcChRhdHRyaWJ1dGVzX3RvX3JlbW92ZRgHIAMoCRoxCg9BdHRyaWJ1dGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGqQBCghJbmNyZWFzZRIwChFwYXJlbnRfY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EisKBXZhbHVlGAIgASgLMhwueW9ya2llLnYxLkpTT05FbGVtZW50U2ltcGxlEioKC2V4ZWN1dGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDQoFYWN0b3IYBCABKAkakwMKCFRyZWVFZGl0EjAKEXBhcmVudF9jcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIAoEZnJvbRgCIAEoCzISLnlvcmtpZS52MS5UcmVlUG9zEh4KAnRvGAMgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSVwoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYBCADKAsyNi55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVFZGl0LkNyZWF0ZWRBdE1hcEJ5QWN0b3JFbnRyeRImCghjb250ZW50cxgFIAMoCzIULnlvcmtpZS52MS5UcmVlTm9kZXMSEwoLc3BsaXRfbGV2ZWwYByABKAUSKgoLZXhlY3V0ZWRfYXQYBiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBpRChhDcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkSCwoDa2V5GAEgASgJEiQKBXZhbHVlGAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQ6AjgBGu0DCglUcmVlU3R5bGUSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIgCgRmcm9tGAIgASgLMhIueW9ya2llLnYxLlRyZWVQb3MSHgoCdG8YAyABKAsyEi55b3JraWUudjEuVHJlZVBvcxJCCgphdHRyaWJ1dGVzGAQgAygLMi4ueW9ya2llLnYxLk9wZXJhdGlvbi5UcmVlU3R5bGUuQXR0cmlidXRlc0VudHJ5EioKC2V4ZWN1dGVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSHAoUYXR0cmlidXRlc190b19yZW1vdmUYBiADKAkSWAoXY3JlYXRlZF9hdF9tYXBfYnlfYWN0b3IYByADKAsyNy55b3JraWUudjEuT3BlcmF0aW9uLlRyZWVTdHlsZS5DcmVhdGVkQXRNYXBCeUFjdG9yRW50cnkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEaUQoYQ3JlYXRlZEF0TWFwQnlBY3RvckVudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0OgI4ARrAAQoIQXJyYXlTZXQSMAoRcGFyZW50X2NyZWF0ZWRfYXQYASABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKwoFdmFsdWUYAyABKAsyHC55b3JraWUudjEuSlNPTkVsZW1lbnRTaW1wbGUSKgoLZXhlY3V0ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldEIGCgRib2R5IsUBChFKU09ORWxlbWVudFNpbXBsZRIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSIgoEdHlwZRgEIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYBSABKAwinwsKC0pTT05FbGVtZW50EjgKC2pzb25fb2JqZWN0GAEgASgLMiEueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05PYmplY3RIABI2Cgpqc29uX2FycmF5GAIgASgLMiAueW9ya2llLnYxLkpTT05FbGVtZW50LkpTT05BcnJheUgAEjUKCXByaW1pdGl2ZRgDIAEoCzIgLnlvcmtpZS52MS5KU09ORWxlbWVudC5QcmltaXRpdmVIABIrCgR0ZXh0GAUgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRleHRIABIxCgdjb3VudGVyGAYgASgLMh4ueW9ya2llLnYxLkpTT05FbGVtZW50LkNvdW50ZXJIABIrCgR0cmVlGAcgASgLMhsueW9ya2llLnYxLkpTT05FbGVtZW50LlRyZWVIABquAQoKSlNPTk9iamVjdBIhCgVub2RlcxgBIAMoCzISLnlvcmtpZS52MS5SSFROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBqtAQoJSlNPTkFycmF5EiEKBW5vZGVzGAEgAygLMhIueW9ya2llLnYxLlJHQU5vZGUSKQoKY3JlYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Gr0BCglQcmltaXRpdmUSIgoEdHlwZRgBIAEoDjIULnlvcmtpZS52MS5WYWx1ZVR5cGUSDQoFdmFsdWUYAiABKAwSKQoKY3JlYXRlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EicKCG1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSKQoKcmVtb3ZlZF9hdBgFIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GqkBCgRUZXh0EiIKBW5vZGVzGAEgAygLMhMueW9ya2llLnYxLlRleHROb2RlEikKCmNyZWF0ZWRfYXQYAiABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBInCghtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EikKCnJlbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBrYAQoHQ291bnRlchIiCgR0eXBlGAEgASgOMhQueW9ya2llLnYxLlZhbHVlVHlwZRINCgV2YWx1ZRgCIAEoDBIpCgpjcmVhdGVkX2F0GAMgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYBCABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAUgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSFQoNaGxsX3JlZ2lzdGVycxgHIAEoDEoECAYQBxqpAQoEVHJlZRIiCgVub2RlcxgBIAMoCzITLnlvcmtpZS52MS5UcmVlTm9kZRIpCgpjcmVhdGVkX2F0GAIgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSJwoIbW92ZWRfYXQYAyABKAsyFS55b3JraWUudjEuVGltZVRpY2tldBIpCgpyZW1vdmVkX2F0GAQgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXRCBgoEYm9keSI/CgdSSFROb2RlEgsKA2tleRgBIAEoCRInCgdlbGVtZW50GAIgASgLMhYueW9ya2llLnYxLkpTT05FbGVtZW50IlQKB1JHQU5vZGUSIAoEbmV4dBgBIAEoCzISLnlvcmtpZS52MS5SR0FOb2RlEicKB2VsZW1lbnQYAiABKAsyFi55b3JraWUudjEuSlNPTkVsZW1lbnQiWAoITm9kZUF0dHISDQoFdmFsdWUYASABKAkSKQoKdXBkYXRlZF9hdBgCIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EhIKCmlzX3JlbW92ZWQYAyABKAgilAIKCFRleHROb2RlEiEKAmlkGAEgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSDQoFdmFsdWUYAiABKAkSKQoKcmVtb3ZlZF9hdBgDIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAQgASgLMhUueW9ya2llLnYxLlRleHROb2RlSUQSNwoKYXR0cmlidXRlcxgFIAMoCzIjLnlvcmtpZS52MS5UZXh0Tm9kZS5BdHRyaWJ1dGVzRW50cnkaRgoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLnlvcmtpZS52MS5Ob2RlQXR0cjoCOAEiRwoKVGV4dE5vZGVJRBIpCgpjcmVhdGVkX2F0GAEgASgLMhUueW9ya2llLnYxLlRpbWVUaWNrZXQSDgoGb2Zmc2V0GAIgASgFIrMDCghUcmVlTm9kZRIhCgJpZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEgwKBHR5cGUYAiABKAkSDQoFdmFsdWUYAyABKAkSKQoKcmVtb3ZlZF9hdBgEIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0EioKC2luc19wcmV2X2lkGAUgASgLMhUueW9ya2llLnYxLlRyZWVOb2RlSUQSKgoLaW5zX25leHRfaWQYBiABKAsyFS55b3JraWUudjEuVHJlZU5vZGVJRBINCgVkZXB0aBgHIAEoBRI3CgphdHRyaWJ1dGVzGAggAygLMiMueW9ya2llLnYxLlRyZWVOb2RlLkF0dHJpYnV0ZXNFbnRyeRIqCgttZXJnZWRfZnJvbRgJIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEigKCW1lcmdlZF9hdBgKIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0GkYKD0F0dHJpYnV0ZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuTm9kZUF0dHI6AjgBIjEKCVRyZWVOb2RlcxIkCgdjb250ZW50GAEgAygLMhMueW9ya2llLnYxLlRyZWVOb2RlIkcKClRyZWVOb2RlSUQSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBSJjCgdUcmVlUG9zEigKCXBhcmVudF9pZBgBIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEEi4KD2xlZnRfc2libGluZ19pZBgCIAEoCzIVLnlvcmtpZS52MS5UcmVlTm9kZUlEImsKBFVzZXISCgoCaWQYASABKAkSFQoNYXV0aF9wcm92aWRlchgCIAEoCRIQCgh1c2VybmFtZRgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKJAQoGTWVtYmVyEgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIQCgh1c2VybmFtZRgEIAEoCRIMCgRyb2xlGAUgASgJEi4KCmludml0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIukGCgdQcm9qZWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEgoKcHVibGljX2tleRgDIAEoCRISCgpzZWNyZXRfa2V5GAQgASgJEhgKEGF1dGhfd2ViaG9va191cmwYBSABKAkSHAoUYXV0aF93ZWJob29rX21ldGhvZHMYBiADKAkSIAoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGBEgASgEEiYKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgSIAEoCRImCh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYEyABKAkSJAocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgUIAEoCRIZChFldmVudF93ZWJob29rX3VybBgHIAEoCRIcChRldmVudF93ZWJob29rX2V2ZW50cxgIIAMoCRIhChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBUgASgEEicKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYFiABKAkSJwofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgXIAEoCRIlCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgYIAEoCRIjChtjbGllbnRfZGVhY3RpdmF0ZV90aHJlc2hvbGQYCSABKAkSGgoSc25hcHNob3RfdGhyZXNob2xkGBkgASgDEhkKEXNuYXBzaG90X2ludGVydmFsGBogASgDEiQKHG1heF9zdWJzY3JpYmVyc19wZXJfZG9jdW1lbnQYCiABKAUSJAocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgLIAEoBRIdChVtYXhfc2l6ZV9wZXJfZG9jdW1lbnQYDyABKAUSGAoQcmVtb3ZlX29uX2RldGFjaBgQIAEoCBIdChVhdXRvX3JldmlzaW9uX2VuYWJsZWQYGyABKAgSFwoPYWxsb3dlZF9vcmlnaW5zGA4gAygJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi8KC01ldHJpY1BvaW50EhEKCXRpbWVzdGFtcBgBIAEoAxINCgV2YWx1ZRgCIAEoBSKjDAoWVXBkYXRhYmxlUHJvamVjdEZpZWxkcxIqCgRuYW1lGAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEjYKEGF1dGhfd2ViaG9va191cmwYAiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSUgoUYXV0aF93ZWJob29rX21ldGhvZHMYAyABKAsyNC55b3JraWUudjEuVXBkYXRhYmxlUHJvamVjdEZpZWxkcy5BdXRoV2ViaG9va01ldGhvZHMSPgoYYXV0aF93ZWJob29rX21heF9yZXRyaWVzGAwgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkQKHmF1dGhfd2ViaG9va19taW5fd2FpdF9pbnRlcnZhbBgNIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJECh5hdXRoX3dlYmhvb2tfbWF4X3dhaXRfaW50ZXJ2YWwYDiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSQgocYXV0aF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgPIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChFldmVudF93ZWJob29rX3VybBgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJSChRldmVudF93ZWJob29rX2V2ZW50cxgFIAEoCzI0LnlvcmtpZS52MS5VcGRhdGFibGVQcm9qZWN0RmllbGRzLkV2ZW50V2ViaG9va0V2ZW50cxI/ChlldmVudF93ZWJob29rX21heF9yZXRyaWVzGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlEkUKH2V2ZW50X3dlYmhvb2tfbWluX3dhaXRfaW50ZXJ2YWwYESABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSRQofZXZlbnRfd2ViaG9va19tYXhfd2FpdF9pbnRlcnZhbBgSIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJDCh1ldmVudF93ZWJob29rX3JlcXVlc3RfdGltZW91dBgTIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRI3ChJzbmFwc2hvdF90aHJlc2hvbGQYFCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZRI2ChFzbmFwc2hvdF9pbnRlcnZhbBgVIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlEkEKG2NsaWVudF9kZWFjdGl2YXRlX3RocmVzaG9sZBgGIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRJBChxtYXhfc3Vic2NyaWJlcnNfcGVyX2RvY3VtZW50GAcgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSQQocbWF4X2F0dGFjaG1lbnRzX3Blcl9kb2N1bWVudBgIIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjoKFW1heF9zaXplX3Blcl9kb2N1bWVudBgKIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEjQKEHJlbW92ZV9vbl9kZXRhY2gYCyABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlEjkKFWF1dG9fcmV2aXNpb25fZW5hYmxlZBgWIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSSQoPYWxsb3dlZF9vcmlnaW5zGAkgASgLMjAueW9ya2llLnYxLlVwZGF0YWJsZVByb2plY3RGaWVsZHMuQWxsb3dlZE9yaWdpbnMaJQoSQXV0aFdlYmhvb2tNZXRob2RzEg8KB21ldGhvZHMYASADKAkaJAoSRXZlbnRXZWJob29rRXZlbnRzEg4KBmV2ZW50cxgBIAMoCRohCg5BbGxvd2VkT3JpZ2lucxIPCgdvcmlnaW5zGAEgAygJIqcDCg9Eb2N1bWVudFN1bW1hcnkSCgoCaWQYASABKAkSCwoDa2V5GAIgASgJEgwKBHJvb3QYAyABKAkSGAoQYXR0YWNoZWRfY2xpZW50cxgHIAEoBRIpCg1kb2N1bWVudF9zaXplGAggASgLMhIueW9ya2llLnYxLkRvY1NpemUSEgoKc2NoZW1hX2tleRgJIAEoCRI8CglwcmVzZW5jZXMYCiADKAsyKS55b3JraWUudjEuRG9jdW1lbnRTdW1tYXJ5LlByZXNlbmNlc0VudHJ5Ei4KCmNyZWF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2FjY2Vzc2VkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpFCg5QcmVzZW5jZXNFbnRyeRILCgNrZXkYASABKAkSIgoFdmFsdWUYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2U6AjgBItoBCg5QcmVzZW5jZUNoYW5nZRIyCgR0eXBlGAEgASgOMiQueW9ya2llLnYxLlByZXNlbmNlQ2hhbmdlLkNoYW5nZVR5cGUSJQoIcHJlc2VuY2UYAiABKAsyEy55b3JraWUudjEuUHJlc2VuY2UibQoKQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0NIQU5HRV9UWVBFX1BVVBABEhYKEkNIQU5HRV9UWVBFX0RFTEVURRACEhUKEUNIQU5HRV9UWVBFX0NMRUFSEAMiZAoIUHJlc2VuY2USKwoEZGF0YRgBIAMoCzIdLnlvcmtpZS52MS5QcmVzZW5jZS5EYXRhRW50cnkaKwoJRGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoOQ2hhbm5lbFN1bW1hcnkSCwoDa2V5GAEgASgJEhUKDXNlc3Npb25fY291bnQYAiABKAUiNAoKQ2hlY2twb2ludBISCgpzZXJ2ZXJfc2VxGAEgASgDEhIKCmNsaWVudF9zZXEYAiABKA0iYQoLVGV4dE5vZGVQb3MSKQoKY3JlYXRlZF9hdBgBIAEoCzIVLnlvcmtpZS52MS5UaW1lVGlja2V0Eg4KBm9mZnNldBgCIAEoBRIXCg9yZWxhdGl2ZV9vZmZzZXQYAyABKAUiQgoKVGltZVRpY2tldBIPCgdsYW1wb3J0GAEgASgDEhEKCWRlbGltaXRlchgCIAEoDRIQCghhY3Rvcl9pZBgDIAEoDCIuCgxEb2NFdmVudEJvZHkSDQoFdG9waWMYASABKAkSDwoHcGF5bG9hZBgCIAEoDCJrCghEb2NFdmVudBIlCgR0eXBlGAEgASgOMhcueW9ya2llLnYxLkRvY0V2ZW50VHlwZRIRCglwdWJsaXNoZXIYAiABKAkSJQoEYm9keRgDIAEoCzIXLnlvcmtpZS52MS5Eb2NFdmVudEJvZHki1gEKDENoYW5uZWxFdmVudBIqCgR0eXBlGAEgASgOMhwueW9ya2llLnYxLkNoYW5uZWxFdmVudC5UeXBlEhEKCXB1Ymxpc2hlchgCIAEoCRIVCg1zZXNzaW9uX2NvdW50GAMgASgDEgsKA3NlcRgEIAEoAxINCgV0b3BpYxgFIAEoCRIPCgdwYXlsb2FkGAYgASgMIkMKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfUFJFU0VOQ0UQARISCg5UWVBFX0JST0FEQ0FTVBACIiYKCERhdGFTaXplEgwKBGRhdGEYASABKAUSDAoEbWV0YRgCIAEoBSJNCgdEb2NTaXplEiEKBGxpdmUYASABKAsyEy55b3JraWUudjEuRGF0YVNpemUSHwoCZ2MYAiABKAsyEy55b3JraWUudjEuRGF0YVNpemUikQEKBlNjaGVtYRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAUSDAoEYm9keRgEIAEoCRIeCgVydWxlcxgFIAMoCzIPLnlvcmtpZS52MS5SdWxlEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKDFRyZWVOb2RlUnVsZRIRCglub2RlX3R5cGUYASABKAkSDwoHY29udGVudBgCIAEoCRINCgVtYXJrcxgDIAEoCRINCgVncm91cBgEIAEoCSJPCgRSdWxlEgwKBHBhdGgYASABKAkSDAoEdHlwZRgCIAEoCRIrCgp0cmVlX25vZGVzGAMgAygLMhcueW9ya2llLnYxLlRyZWVOb2RlUnVsZSKDAQoPUmV2aXNpb25TdW1tYXJ5EgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKvwCCglWYWx1ZVR5cGUSEwoPVkFMVUVfVFlQRV9OVUxMEAASFgoSVkFMVUVfVFlQRV9CT09MRUFOEAESFgoSVkFMVUVfVFlQRV9JTlRFR0VSEAISEwoPVkFMVUVfVFlQRV9MT05HEAMSFQoRVkFMVUVfVFlQRV9ET1VCTEUQBBIVChFWQUxVRV9UWVBFX1NUUklORxAFEhQKEFZBTFVFX1RZUEVfQllURVMQBhITCg9WQUxVRV9UWVBFX0RBVEUQBxIaChZWQUxVRV9UWVBFX0pTT05fT0JKRUNUEAgSGQoVVkFMVUVfVFlQRV9KU09OX0FSUkFZEAkSEwoPVkFMVUVfVFlQRV9URVhUEAoSGgoWVkFMVUVfVFlQRV9JTlRFR0VSX0NOVBALEhcKE1ZBTFVFX1RZUEVfTE9OR19DTlQQDBITCg9WQUxVRV9UWVBFX1RSRUUQDRIgChxWQUxVRV9UWVBFX0lOVEVHRVJfREVEVVBfQ05UEA4iBAgPEA8qpgEKDERvY0V2ZW50VHlwZRIjCh9ET0NfRVZFTlRfVFlQRV9ET0NVTUVOVF9DSEFOR0VEEAASIwofRE9DX0VWRU5UX1RZUEVfRE9DVU1FTlRfV0FUQ0hFRBABEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX1VOV0FUQ0hFRBACEiUKIURPQ19FVkVOVF9UWVBFX0RPQ1VNRU5UX0JST0FEQ0FTVBADQkUKEWRldi55b3JraWUuYXBpLnYxUAFaLmdpdGh1Yi5jb20veW9ya2llLXRlYW0veW9ya2llL2FwaS95b3JraWUvdjE7djFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
5399
5794
  const SnapshotSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 0);
5400
5795
  const ChangePackSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 1);
5401
5796
  const ChangeSchema = /* @__PURE__ */ messageDesc(file_src_api_yorkie_v1_resources, 2);
@@ -5462,6 +5857,7 @@ var ValueType = /* @__PURE__ */ ((ValueType2) => {
5462
5857
  ValueType2[ValueType2["INTEGER_CNT"] = 11] = "INTEGER_CNT";
5463
5858
  ValueType2[ValueType2["LONG_CNT"] = 12] = "LONG_CNT";
5464
5859
  ValueType2[ValueType2["TREE"] = 13] = "TREE";
5860
+ ValueType2[ValueType2["INTEGER_DEDUP_CNT"] = 14] = "INTEGER_DEDUP_CNT";
5465
5861
  return ValueType2;
5466
5862
  })(ValueType || {});
5467
5863
  var DocEventType$1 = /* @__PURE__ */ ((DocEventType2) => {
@@ -5618,9 +6014,9 @@ class TimeTicket {
5618
6014
  } else if (other.lamport > this.lamport) {
5619
6015
  return -1;
5620
6016
  }
5621
- const compare2 = this.actorID.localeCompare(other.actorID);
5622
- if (compare2 !== 0) {
5623
- return compare2;
6017
+ const compare = this.actorID.localeCompare(other.actorID);
6018
+ if (compare !== 0) {
6019
+ return compare;
5624
6020
  }
5625
6021
  if (this.delimiter > other.delimiter) {
5626
6022
  return 1;
@@ -6608,928 +7004,37 @@ class SplayTree {
6608
7004
  }
6609
7005
  isRightChild(node) {
6610
7006
  if (node && node.hasParent()) {
6611
- return node.getParent().getRight() === node;
6612
- }
6613
- return false;
6614
- }
6615
- }
6616
- var wasm = null;
6617
- try {
6618
- wasm = new WebAssembly.Instance(
6619
- new WebAssembly.Module(
6620
- new Uint8Array([
6621
- // \0asm
6622
- 0,
6623
- 97,
6624
- 115,
6625
- 109,
6626
- // version 1
6627
- 1,
6628
- 0,
6629
- 0,
6630
- 0,
6631
- // section "type"
6632
- 1,
6633
- 13,
6634
- 2,
6635
- // 0, () => i32
6636
- 96,
6637
- 0,
6638
- 1,
6639
- 127,
6640
- // 1, (i32, i32, i32, i32) => i32
6641
- 96,
6642
- 4,
6643
- 127,
6644
- 127,
6645
- 127,
6646
- 127,
6647
- 1,
6648
- 127,
6649
- // section "function"
6650
- 3,
6651
- 7,
6652
- 6,
6653
- // 0, type 0
6654
- 0,
6655
- // 1, type 1
6656
- 1,
6657
- // 2, type 1
6658
- 1,
6659
- // 3, type 1
6660
- 1,
6661
- // 4, type 1
6662
- 1,
6663
- // 5, type 1
6664
- 1,
6665
- // section "global"
6666
- 6,
6667
- 6,
6668
- 1,
6669
- // 0, "high", mutable i32
6670
- 127,
6671
- 1,
6672
- 65,
6673
- 0,
6674
- 11,
6675
- // section "export"
6676
- 7,
6677
- 50,
6678
- 6,
6679
- // 0, "mul"
6680
- 3,
6681
- 109,
6682
- 117,
6683
- 108,
6684
- 0,
6685
- 1,
6686
- // 1, "div_s"
6687
- 5,
6688
- 100,
6689
- 105,
6690
- 118,
6691
- 95,
6692
- 115,
6693
- 0,
6694
- 2,
6695
- // 2, "div_u"
6696
- 5,
6697
- 100,
6698
- 105,
6699
- 118,
6700
- 95,
6701
- 117,
6702
- 0,
6703
- 3,
6704
- // 3, "rem_s"
6705
- 5,
6706
- 114,
6707
- 101,
6708
- 109,
6709
- 95,
6710
- 115,
6711
- 0,
6712
- 4,
6713
- // 4, "rem_u"
6714
- 5,
6715
- 114,
6716
- 101,
6717
- 109,
6718
- 95,
6719
- 117,
6720
- 0,
6721
- 5,
6722
- // 5, "get_high"
6723
- 8,
6724
- 103,
6725
- 101,
6726
- 116,
6727
- 95,
6728
- 104,
6729
- 105,
6730
- 103,
6731
- 104,
6732
- 0,
6733
- 0,
6734
- // section "code"
6735
- 10,
6736
- 191,
6737
- 1,
6738
- 6,
6739
- // 0, "get_high"
6740
- 4,
6741
- 0,
6742
- 35,
6743
- 0,
6744
- 11,
6745
- // 1, "mul"
6746
- 36,
6747
- 1,
6748
- 1,
6749
- 126,
6750
- 32,
6751
- 0,
6752
- 173,
6753
- 32,
6754
- 1,
6755
- 173,
6756
- 66,
6757
- 32,
6758
- 134,
6759
- 132,
6760
- 32,
6761
- 2,
6762
- 173,
6763
- 32,
6764
- 3,
6765
- 173,
6766
- 66,
6767
- 32,
6768
- 134,
6769
- 132,
6770
- 126,
6771
- 34,
6772
- 4,
6773
- 66,
6774
- 32,
6775
- 135,
6776
- 167,
6777
- 36,
6778
- 0,
6779
- 32,
6780
- 4,
6781
- 167,
6782
- 11,
6783
- // 2, "div_s"
6784
- 36,
6785
- 1,
6786
- 1,
6787
- 126,
6788
- 32,
6789
- 0,
6790
- 173,
6791
- 32,
6792
- 1,
6793
- 173,
6794
- 66,
6795
- 32,
6796
- 134,
6797
- 132,
6798
- 32,
6799
- 2,
6800
- 173,
6801
- 32,
6802
- 3,
6803
- 173,
6804
- 66,
6805
- 32,
6806
- 134,
6807
- 132,
6808
- 127,
6809
- 34,
6810
- 4,
6811
- 66,
6812
- 32,
6813
- 135,
6814
- 167,
6815
- 36,
6816
- 0,
6817
- 32,
6818
- 4,
6819
- 167,
6820
- 11,
6821
- // 3, "div_u"
6822
- 36,
6823
- 1,
6824
- 1,
6825
- 126,
6826
- 32,
6827
- 0,
6828
- 173,
6829
- 32,
6830
- 1,
6831
- 173,
6832
- 66,
6833
- 32,
6834
- 134,
6835
- 132,
6836
- 32,
6837
- 2,
6838
- 173,
6839
- 32,
6840
- 3,
6841
- 173,
6842
- 66,
6843
- 32,
6844
- 134,
6845
- 132,
6846
- 128,
6847
- 34,
6848
- 4,
6849
- 66,
6850
- 32,
6851
- 135,
6852
- 167,
6853
- 36,
6854
- 0,
6855
- 32,
6856
- 4,
6857
- 167,
6858
- 11,
6859
- // 4, "rem_s"
6860
- 36,
6861
- 1,
6862
- 1,
6863
- 126,
6864
- 32,
6865
- 0,
6866
- 173,
6867
- 32,
6868
- 1,
6869
- 173,
6870
- 66,
6871
- 32,
6872
- 134,
6873
- 132,
6874
- 32,
6875
- 2,
6876
- 173,
6877
- 32,
6878
- 3,
6879
- 173,
6880
- 66,
6881
- 32,
6882
- 134,
6883
- 132,
6884
- 129,
6885
- 34,
6886
- 4,
6887
- 66,
6888
- 32,
6889
- 135,
6890
- 167,
6891
- 36,
6892
- 0,
6893
- 32,
6894
- 4,
6895
- 167,
6896
- 11,
6897
- // 5, "rem_u"
6898
- 36,
6899
- 1,
6900
- 1,
6901
- 126,
6902
- 32,
6903
- 0,
6904
- 173,
6905
- 32,
6906
- 1,
6907
- 173,
6908
- 66,
6909
- 32,
6910
- 134,
6911
- 132,
6912
- 32,
6913
- 2,
6914
- 173,
6915
- 32,
6916
- 3,
6917
- 173,
6918
- 66,
6919
- 32,
6920
- 134,
6921
- 132,
6922
- 130,
6923
- 34,
6924
- 4,
6925
- 66,
6926
- 32,
6927
- 135,
6928
- 167,
6929
- 36,
6930
- 0,
6931
- 32,
6932
- 4,
6933
- 167,
6934
- 11
6935
- ])
6936
- ),
6937
- {}
6938
- ).exports;
6939
- } catch {
6940
- }
6941
- function Long(low, high, unsigned) {
6942
- this.low = low | 0;
6943
- this.high = high | 0;
6944
- this.unsigned = !!unsigned;
6945
- }
6946
- Long.prototype.__isLong__;
6947
- Object.defineProperty(Long.prototype, "__isLong__", { value: true });
6948
- function isLong$1(obj) {
6949
- return (obj && obj["__isLong__"]) === true;
6950
- }
6951
- function ctz32(value) {
6952
- var c = Math.clz32(value & -value);
6953
- return value ? 31 - c : c;
6954
- }
6955
- Long.isLong = isLong$1;
6956
- var INT_CACHE = {};
6957
- var UINT_CACHE = {};
6958
- function fromInt(value, unsigned) {
6959
- var obj, cachedObj, cache;
6960
- if (unsigned) {
6961
- value >>>= 0;
6962
- if (cache = 0 <= value && value < 256) {
6963
- cachedObj = UINT_CACHE[value];
6964
- if (cachedObj) return cachedObj;
6965
- }
6966
- obj = fromBits(value, 0, true);
6967
- if (cache) UINT_CACHE[value] = obj;
6968
- return obj;
6969
- } else {
6970
- value |= 0;
6971
- if (cache = -128 <= value && value < 128) {
6972
- cachedObj = INT_CACHE[value];
6973
- if (cachedObj) return cachedObj;
6974
- }
6975
- obj = fromBits(value, value < 0 ? -1 : 0, false);
6976
- if (cache) INT_CACHE[value] = obj;
6977
- return obj;
6978
- }
6979
- }
6980
- Long.fromInt = fromInt;
6981
- function fromNumber(value, unsigned) {
6982
- if (isNaN(value)) return unsigned ? UZERO : ZERO;
6983
- if (unsigned) {
6984
- if (value < 0) return UZERO;
6985
- if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;
6986
- } else {
6987
- if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;
6988
- if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;
6989
- }
6990
- if (value < 0) return fromNumber(-value, unsigned).neg();
6991
- return fromBits(
6992
- value % TWO_PWR_32_DBL | 0,
6993
- value / TWO_PWR_32_DBL | 0,
6994
- unsigned
6995
- );
6996
- }
6997
- Long.fromNumber = fromNumber;
6998
- function fromBits(lowBits, highBits, unsigned) {
6999
- return new Long(lowBits, highBits, unsigned);
7000
- }
7001
- Long.fromBits = fromBits;
7002
- var pow_dbl = Math.pow;
7003
- function fromString(str, unsigned, radix) {
7004
- if (str.length === 0) throw Error("empty string");
7005
- if (typeof unsigned === "number") {
7006
- radix = unsigned;
7007
- unsigned = false;
7008
- } else {
7009
- unsigned = !!unsigned;
7010
- }
7011
- if (str === "NaN" || str === "Infinity" || str === "+Infinity" || str === "-Infinity")
7012
- return unsigned ? UZERO : ZERO;
7013
- radix = radix || 10;
7014
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7015
- var p;
7016
- if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen");
7017
- else if (p === 0) {
7018
- return fromString(str.substring(1), unsigned, radix).neg();
7019
- }
7020
- var radixToPower = fromNumber(pow_dbl(radix, 8));
7021
- var result = ZERO;
7022
- for (var i = 0; i < str.length; i += 8) {
7023
- var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);
7024
- if (size < 8) {
7025
- var power = fromNumber(pow_dbl(radix, size));
7026
- result = result.mul(power).add(fromNumber(value));
7027
- } else {
7028
- result = result.mul(radixToPower);
7029
- result = result.add(fromNumber(value));
7030
- }
7031
- }
7032
- result.unsigned = unsigned;
7033
- return result;
7034
- }
7035
- Long.fromString = fromString;
7036
- function fromValue(val, unsigned) {
7037
- if (typeof val === "number") return fromNumber(val, unsigned);
7038
- if (typeof val === "string") return fromString(val, unsigned);
7039
- return fromBits(
7040
- val.low,
7041
- val.high,
7042
- typeof unsigned === "boolean" ? unsigned : val.unsigned
7043
- );
7044
- }
7045
- Long.fromValue = fromValue;
7046
- var TWO_PWR_16_DBL = 1 << 16;
7047
- var TWO_PWR_24_DBL = 1 << 24;
7048
- var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;
7049
- var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;
7050
- var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;
7051
- var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);
7052
- var ZERO = fromInt(0);
7053
- Long.ZERO = ZERO;
7054
- var UZERO = fromInt(0, true);
7055
- Long.UZERO = UZERO;
7056
- var ONE = fromInt(1);
7057
- Long.ONE = ONE;
7058
- var UONE = fromInt(1, true);
7059
- Long.UONE = UONE;
7060
- var NEG_ONE = fromInt(-1);
7061
- Long.NEG_ONE = NEG_ONE;
7062
- var MAX_VALUE = fromBits(4294967295 | 0, 2147483647 | 0, false);
7063
- Long.MAX_VALUE = MAX_VALUE;
7064
- var MAX_UNSIGNED_VALUE = fromBits(4294967295 | 0, 4294967295 | 0, true);
7065
- Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;
7066
- var MIN_VALUE = fromBits(0, 2147483648 | 0, false);
7067
- Long.MIN_VALUE = MIN_VALUE;
7068
- var LongPrototype = Long.prototype;
7069
- LongPrototype.toInt = function toInt() {
7070
- return this.unsigned ? this.low >>> 0 : this.low;
7071
- };
7072
- LongPrototype.toNumber = function toNumber() {
7073
- if (this.unsigned)
7074
- return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);
7075
- return this.high * TWO_PWR_32_DBL + (this.low >>> 0);
7076
- };
7077
- LongPrototype.toString = function toString(radix) {
7078
- radix = radix || 10;
7079
- if (radix < 2 || 36 < radix) throw RangeError("radix");
7080
- if (this.isZero()) return "0";
7081
- if (this.isNegative()) {
7082
- if (this.eq(MIN_VALUE)) {
7083
- var radixLong = fromNumber(radix), div = this.div(radixLong), rem1 = div.mul(radixLong).sub(this);
7084
- return div.toString(radix) + rem1.toInt().toString(radix);
7085
- } else return "-" + this.neg().toString(radix);
7086
- }
7087
- var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), rem = this;
7088
- var result = "";
7089
- while (true) {
7090
- var remDiv = rem.div(radixToPower), intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, digits = intval.toString(radix);
7091
- rem = remDiv;
7092
- if (rem.isZero()) return digits + result;
7093
- else {
7094
- while (digits.length < 6) digits = "0" + digits;
7095
- result = "" + digits + result;
7096
- }
7097
- }
7098
- };
7099
- LongPrototype.getHighBits = function getHighBits() {
7100
- return this.high;
7101
- };
7102
- LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {
7103
- return this.high >>> 0;
7104
- };
7105
- LongPrototype.getLowBits = function getLowBits() {
7106
- return this.low;
7107
- };
7108
- LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {
7109
- return this.low >>> 0;
7110
- };
7111
- LongPrototype.getNumBitsAbs = function getNumBitsAbs() {
7112
- if (this.isNegative())
7113
- return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();
7114
- var val = this.high != 0 ? this.high : this.low;
7115
- for (var bit = 31; bit > 0; bit--) if ((val & 1 << bit) != 0) break;
7116
- return this.high != 0 ? bit + 33 : bit + 1;
7117
- };
7118
- LongPrototype.isSafeInteger = function isSafeInteger() {
7119
- var top11Bits = this.high >> 21;
7120
- if (!top11Bits) return true;
7121
- if (this.unsigned) return false;
7122
- return top11Bits === -1 && !(this.low === 0 && this.high === -2097152);
7123
- };
7124
- LongPrototype.isZero = function isZero() {
7125
- return this.high === 0 && this.low === 0;
7126
- };
7127
- LongPrototype.eqz = LongPrototype.isZero;
7128
- LongPrototype.isNegative = function isNegative() {
7129
- return !this.unsigned && this.high < 0;
7130
- };
7131
- LongPrototype.isPositive = function isPositive() {
7132
- return this.unsigned || this.high >= 0;
7133
- };
7134
- LongPrototype.isOdd = function isOdd() {
7135
- return (this.low & 1) === 1;
7136
- };
7137
- LongPrototype.isEven = function isEven() {
7138
- return (this.low & 1) === 0;
7139
- };
7140
- LongPrototype.equals = function equals(other) {
7141
- if (!isLong$1(other)) other = fromValue(other);
7142
- if (this.unsigned !== other.unsigned && this.high >>> 31 === 1 && other.high >>> 31 === 1)
7143
- return false;
7144
- return this.high === other.high && this.low === other.low;
7145
- };
7146
- LongPrototype.eq = LongPrototype.equals;
7147
- LongPrototype.notEquals = function notEquals(other) {
7148
- return !this.eq(
7149
- /* validates */
7150
- other
7151
- );
7152
- };
7153
- LongPrototype.neq = LongPrototype.notEquals;
7154
- LongPrototype.ne = LongPrototype.notEquals;
7155
- LongPrototype.lessThan = function lessThan(other) {
7156
- return this.comp(
7157
- /* validates */
7158
- other
7159
- ) < 0;
7160
- };
7161
- LongPrototype.lt = LongPrototype.lessThan;
7162
- LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {
7163
- return this.comp(
7164
- /* validates */
7165
- other
7166
- ) <= 0;
7167
- };
7168
- LongPrototype.lte = LongPrototype.lessThanOrEqual;
7169
- LongPrototype.le = LongPrototype.lessThanOrEqual;
7170
- LongPrototype.greaterThan = function greaterThan(other) {
7171
- return this.comp(
7172
- /* validates */
7173
- other
7174
- ) > 0;
7175
- };
7176
- LongPrototype.gt = LongPrototype.greaterThan;
7177
- LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {
7178
- return this.comp(
7179
- /* validates */
7180
- other
7181
- ) >= 0;
7182
- };
7183
- LongPrototype.gte = LongPrototype.greaterThanOrEqual;
7184
- LongPrototype.ge = LongPrototype.greaterThanOrEqual;
7185
- LongPrototype.compare = function compare(other) {
7186
- if (!isLong$1(other)) other = fromValue(other);
7187
- if (this.eq(other)) return 0;
7188
- var thisNeg = this.isNegative(), otherNeg = other.isNegative();
7189
- if (thisNeg && !otherNeg) return -1;
7190
- if (!thisNeg && otherNeg) return 1;
7191
- if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;
7192
- return other.high >>> 0 > this.high >>> 0 || other.high === this.high && other.low >>> 0 > this.low >>> 0 ? -1 : 1;
7193
- };
7194
- LongPrototype.comp = LongPrototype.compare;
7195
- LongPrototype.negate = function negate2() {
7196
- if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;
7197
- return this.not().add(ONE);
7198
- };
7199
- LongPrototype.neg = LongPrototype.negate;
7200
- LongPrototype.add = function add(addend) {
7201
- if (!isLong$1(addend)) addend = fromValue(addend);
7202
- var a48 = this.high >>> 16;
7203
- var a32 = this.high & 65535;
7204
- var a16 = this.low >>> 16;
7205
- var a00 = this.low & 65535;
7206
- var b48 = addend.high >>> 16;
7207
- var b32 = addend.high & 65535;
7208
- var b16 = addend.low >>> 16;
7209
- var b00 = addend.low & 65535;
7210
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7211
- c00 += a00 + b00;
7212
- c16 += c00 >>> 16;
7213
- c00 &= 65535;
7214
- c16 += a16 + b16;
7215
- c32 += c16 >>> 16;
7216
- c16 &= 65535;
7217
- c32 += a32 + b32;
7218
- c48 += c32 >>> 16;
7219
- c32 &= 65535;
7220
- c48 += a48 + b48;
7221
- c48 &= 65535;
7222
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7223
- };
7224
- LongPrototype.subtract = function subtract(subtrahend) {
7225
- if (!isLong$1(subtrahend)) subtrahend = fromValue(subtrahend);
7226
- return this.add(subtrahend.neg());
7227
- };
7228
- LongPrototype.sub = LongPrototype.subtract;
7229
- LongPrototype.multiply = function multiply(multiplier) {
7230
- if (this.isZero()) return this;
7231
- if (!isLong$1(multiplier)) multiplier = fromValue(multiplier);
7232
- if (wasm) {
7233
- var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high);
7234
- return fromBits(low, wasm["get_high"](), this.unsigned);
7235
- }
7236
- if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;
7237
- if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;
7238
- if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;
7239
- if (this.isNegative()) {
7240
- if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());
7241
- else return this.neg().mul(multiplier).neg();
7242
- } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg();
7243
- if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))
7244
- return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);
7245
- var a48 = this.high >>> 16;
7246
- var a32 = this.high & 65535;
7247
- var a16 = this.low >>> 16;
7248
- var a00 = this.low & 65535;
7249
- var b48 = multiplier.high >>> 16;
7250
- var b32 = multiplier.high & 65535;
7251
- var b16 = multiplier.low >>> 16;
7252
- var b00 = multiplier.low & 65535;
7253
- var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
7254
- c00 += a00 * b00;
7255
- c16 += c00 >>> 16;
7256
- c00 &= 65535;
7257
- c16 += a16 * b00;
7258
- c32 += c16 >>> 16;
7259
- c16 &= 65535;
7260
- c16 += a00 * b16;
7261
- c32 += c16 >>> 16;
7262
- c16 &= 65535;
7263
- c32 += a32 * b00;
7264
- c48 += c32 >>> 16;
7265
- c32 &= 65535;
7266
- c32 += a16 * b16;
7267
- c48 += c32 >>> 16;
7268
- c32 &= 65535;
7269
- c32 += a00 * b32;
7270
- c48 += c32 >>> 16;
7271
- c32 &= 65535;
7272
- c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
7273
- c48 &= 65535;
7274
- return fromBits(c16 << 16 | c00, c48 << 16 | c32, this.unsigned);
7275
- };
7276
- LongPrototype.mul = LongPrototype.multiply;
7277
- LongPrototype.divide = function divide(divisor) {
7278
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7279
- if (divisor.isZero()) throw Error("division by zero");
7280
- if (wasm) {
7281
- if (!this.unsigned && this.high === -2147483648 && divisor.low === -1 && divisor.high === -1) {
7282
- return this;
7283
- }
7284
- var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])(
7285
- this.low,
7286
- this.high,
7287
- divisor.low,
7288
- divisor.high
7289
- );
7290
- return fromBits(low, wasm["get_high"](), this.unsigned);
7291
- }
7292
- if (this.isZero()) return this.unsigned ? UZERO : ZERO;
7293
- var approx, rem, res;
7294
- if (!this.unsigned) {
7295
- if (this.eq(MIN_VALUE)) {
7296
- if (divisor.eq(ONE) || divisor.eq(NEG_ONE))
7297
- return MIN_VALUE;
7298
- else if (divisor.eq(MIN_VALUE)) return ONE;
7299
- else {
7300
- var halfThis = this.shr(1);
7301
- approx = halfThis.div(divisor).shl(1);
7302
- if (approx.eq(ZERO)) {
7303
- return divisor.isNegative() ? ONE : NEG_ONE;
7304
- } else {
7305
- rem = this.sub(divisor.mul(approx));
7306
- res = approx.add(rem.div(divisor));
7307
- return res;
7308
- }
7309
- }
7310
- } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;
7311
- if (this.isNegative()) {
7312
- if (divisor.isNegative()) return this.neg().div(divisor.neg());
7313
- return this.neg().div(divisor).neg();
7314
- } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();
7315
- res = ZERO;
7316
- } else {
7317
- if (!divisor.unsigned) divisor = divisor.toUnsigned();
7318
- if (divisor.gt(this)) return UZERO;
7319
- if (divisor.gt(this.shru(1)))
7320
- return UONE;
7321
- res = UZERO;
7322
- }
7323
- rem = this;
7324
- while (rem.gte(divisor)) {
7325
- approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));
7326
- 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);
7327
- while (approxRem.isNegative() || approxRem.gt(rem)) {
7328
- approx -= delta;
7329
- approxRes = fromNumber(approx, this.unsigned);
7330
- approxRem = approxRes.mul(divisor);
7331
- }
7332
- if (approxRes.isZero()) approxRes = ONE;
7333
- res = res.add(approxRes);
7334
- rem = rem.sub(approxRem);
7335
- }
7336
- return res;
7337
- };
7338
- LongPrototype.div = LongPrototype.divide;
7339
- LongPrototype.modulo = function modulo(divisor) {
7340
- if (!isLong$1(divisor)) divisor = fromValue(divisor);
7341
- if (wasm) {
7342
- var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])(
7343
- this.low,
7344
- this.high,
7345
- divisor.low,
7346
- divisor.high
7347
- );
7348
- return fromBits(low, wasm["get_high"](), this.unsigned);
7349
- }
7350
- return this.sub(this.div(divisor).mul(divisor));
7351
- };
7352
- LongPrototype.mod = LongPrototype.modulo;
7353
- LongPrototype.rem = LongPrototype.modulo;
7354
- LongPrototype.not = function not() {
7355
- return fromBits(~this.low, ~this.high, this.unsigned);
7356
- };
7357
- LongPrototype.countLeadingZeros = function countLeadingZeros() {
7358
- return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;
7359
- };
7360
- LongPrototype.clz = LongPrototype.countLeadingZeros;
7361
- LongPrototype.countTrailingZeros = function countTrailingZeros() {
7362
- return this.low ? ctz32(this.low) : ctz32(this.high) + 32;
7363
- };
7364
- LongPrototype.ctz = LongPrototype.countTrailingZeros;
7365
- LongPrototype.and = function and(other) {
7366
- if (!isLong$1(other)) other = fromValue(other);
7367
- return fromBits(this.low & other.low, this.high & other.high, this.unsigned);
7368
- };
7369
- LongPrototype.or = function or(other) {
7370
- if (!isLong$1(other)) other = fromValue(other);
7371
- return fromBits(this.low | other.low, this.high | other.high, this.unsigned);
7372
- };
7373
- LongPrototype.xor = function xor(other) {
7374
- if (!isLong$1(other)) other = fromValue(other);
7375
- return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);
7376
- };
7377
- LongPrototype.shiftLeft = function shiftLeft(numBits) {
7378
- if (isLong$1(numBits)) numBits = numBits.toInt();
7379
- if ((numBits &= 63) === 0) return this;
7380
- else if (numBits < 32)
7381
- return fromBits(
7382
- this.low << numBits,
7383
- this.high << numBits | this.low >>> 32 - numBits,
7384
- this.unsigned
7385
- );
7386
- else return fromBits(0, this.low << numBits - 32, this.unsigned);
7387
- };
7388
- LongPrototype.shl = LongPrototype.shiftLeft;
7389
- LongPrototype.shiftRight = function shiftRight(numBits) {
7390
- if (isLong$1(numBits)) numBits = numBits.toInt();
7391
- if ((numBits &= 63) === 0) return this;
7392
- else if (numBits < 32)
7393
- return fromBits(
7394
- this.low >>> numBits | this.high << 32 - numBits,
7395
- this.high >> numBits,
7396
- this.unsigned
7397
- );
7398
- else
7399
- return fromBits(
7400
- this.high >> numBits - 32,
7401
- this.high >= 0 ? 0 : -1,
7402
- this.unsigned
7403
- );
7404
- };
7405
- LongPrototype.shr = LongPrototype.shiftRight;
7406
- LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {
7407
- if (isLong$1(numBits)) numBits = numBits.toInt();
7408
- if ((numBits &= 63) === 0) return this;
7409
- if (numBits < 32)
7410
- return fromBits(
7411
- this.low >>> numBits | this.high << 32 - numBits,
7412
- this.high >>> numBits,
7413
- this.unsigned
7414
- );
7415
- if (numBits === 32) return fromBits(this.high, 0, this.unsigned);
7416
- return fromBits(this.high >>> numBits - 32, 0, this.unsigned);
7417
- };
7418
- LongPrototype.shru = LongPrototype.shiftRightUnsigned;
7419
- LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;
7420
- LongPrototype.rotateLeft = function rotateLeft(numBits) {
7421
- var b;
7422
- if (isLong$1(numBits)) numBits = numBits.toInt();
7423
- if ((numBits &= 63) === 0) return this;
7424
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7425
- if (numBits < 32) {
7426
- b = 32 - numBits;
7427
- return fromBits(
7428
- this.low << numBits | this.high >>> b,
7429
- this.high << numBits | this.low >>> b,
7430
- this.unsigned
7431
- );
7007
+ return node.getParent().getRight() === node;
7008
+ }
7009
+ return false;
7432
7010
  }
7433
- numBits -= 32;
7434
- b = 32 - numBits;
7435
- return fromBits(
7436
- this.high << numBits | this.low >>> b,
7437
- this.low << numBits | this.high >>> b,
7438
- this.unsigned
7439
- );
7440
- };
7441
- LongPrototype.rotl = LongPrototype.rotateLeft;
7442
- LongPrototype.rotateRight = function rotateRight(numBits) {
7443
- var b;
7444
- if (isLong$1(numBits)) numBits = numBits.toInt();
7445
- if ((numBits &= 63) === 0) return this;
7446
- if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);
7447
- if (numBits < 32) {
7448
- b = 32 - numBits;
7449
- return fromBits(
7450
- this.high << b | this.low >>> numBits,
7451
- this.low << b | this.high >>> numBits,
7452
- this.unsigned
7453
- );
7011
+ }
7012
+ const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
7013
+ function bigintToBytesLE(value) {
7014
+ const buf = new Uint8Array(8);
7015
+ let v = BigInt.asUintN(64, value);
7016
+ for (let i = 0; i < 8; i++) {
7017
+ buf[i] = Number(v & 0xffn);
7018
+ v >>= 8n;
7454
7019
  }
7455
- numBits -= 32;
7456
- b = 32 - numBits;
7457
- return fromBits(
7458
- this.low << b | this.high >>> numBits,
7459
- this.high << b | this.low >>> numBits,
7460
- this.unsigned
7461
- );
7462
- };
7463
- LongPrototype.rotr = LongPrototype.rotateRight;
7464
- LongPrototype.toSigned = function toSigned() {
7465
- if (!this.unsigned) return this;
7466
- return fromBits(this.low, this.high, false);
7467
- };
7468
- LongPrototype.toUnsigned = function toUnsigned2() {
7469
- if (this.unsigned) return this;
7470
- return fromBits(this.low, this.high, true);
7471
- };
7472
- LongPrototype.toBytes = function toBytes(le) {
7473
- return le ? this.toBytesLE() : this.toBytesBE();
7474
- };
7475
- LongPrototype.toBytesLE = function toBytesLE() {
7476
- var hi = this.high, lo = this.low;
7477
- return [
7478
- lo & 255,
7479
- lo >>> 8 & 255,
7480
- lo >>> 16 & 255,
7481
- lo >>> 24,
7482
- hi & 255,
7483
- hi >>> 8 & 255,
7484
- hi >>> 16 & 255,
7485
- hi >>> 24
7486
- ];
7487
- };
7488
- LongPrototype.toBytesBE = function toBytesBE() {
7489
- var hi = this.high, lo = this.low;
7490
- return [
7491
- hi >>> 24,
7492
- hi >>> 16 & 255,
7493
- hi >>> 8 & 255,
7494
- hi & 255,
7495
- lo >>> 24,
7496
- lo >>> 16 & 255,
7497
- lo >>> 8 & 255,
7498
- lo & 255
7499
- ];
7500
- };
7501
- Long.fromBytes = function fromBytes(bytes, unsigned, le) {
7502
- return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);
7503
- };
7504
- Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {
7505
- return new Long(
7506
- bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24,
7507
- bytes[4] | bytes[5] << 8 | bytes[6] << 16 | bytes[7] << 24,
7508
- unsigned
7509
- );
7510
- };
7511
- Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {
7512
- return new Long(
7513
- bytes[4] << 24 | bytes[5] << 16 | bytes[6] << 8 | bytes[7],
7514
- bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3],
7515
- unsigned
7516
- );
7517
- };
7518
- if (typeof BigInt === "function") {
7519
- Long.fromBigInt = function fromBigInt(value, unsigned) {
7520
- var lowBits = Number(BigInt.asIntN(32, value));
7521
- var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));
7522
- return fromBits(lowBits, highBits, unsigned);
7523
- };
7524
- Long.fromValue = function fromValueWithBigInt(value, unsigned) {
7525
- if (typeof value === "bigint") return Long.fromBigInt(value, unsigned);
7526
- return fromValue(value, unsigned);
7527
- };
7528
- LongPrototype.toBigInt = function toBigInt() {
7529
- var lowBigInt = BigInt(this.low >>> 0);
7530
- var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);
7531
- return highBigInt << BigInt(32) | lowBigInt;
7532
- };
7020
+ return buf;
7021
+ }
7022
+ function bigintFromBytesLE(bytes) {
7023
+ let v = 0n;
7024
+ for (let i = 7; i >= 0; i--) {
7025
+ v = v << 8n | BigInt(bytes[i]);
7026
+ }
7027
+ return BigInt.asIntN(64, v);
7028
+ }
7029
+ function bigintFromBytesLEUnsigned(bytes) {
7030
+ let v = 0n;
7031
+ for (let i = 7; i >= 0; i--) {
7032
+ v = v << 8n | BigInt(bytes[i]);
7033
+ }
7034
+ return v;
7035
+ }
7036
+ function bigintToInt32(value) {
7037
+ return Number(BigInt.asIntN(32, value));
7533
7038
  }
7534
7039
  var PrimitiveType = /* @__PURE__ */ ((PrimitiveType2) => {
7535
7040
  PrimitiveType2[PrimitiveType2["Null"] = 0] = "Null";
@@ -7577,11 +7082,11 @@ class Primitive extends CRDTElement {
7577
7082
  case 5:
7578
7083
  return new TextDecoder("utf-8").decode(bytes);
7579
7084
  case 3:
7580
- return Long.fromBytesLE(Array.from(bytes));
7085
+ return bigintFromBytesLE(bytes);
7581
7086
  case 6:
7582
7087
  return bytes;
7583
7088
  case 7:
7584
- return new Date(Long.fromBytesLE(Array.from(bytes), true).toNumber());
7089
+ return new Date(Number(bigintFromBytesLEUnsigned(bytes)));
7585
7090
  default:
7586
7091
  throw new YorkieError(
7587
7092
  Code.ErrUnimplemented,
@@ -7682,13 +7187,13 @@ class Primitive extends CRDTElement {
7682
7187
  } else {
7683
7188
  return 4;
7684
7189
  }
7190
+ case "bigint":
7191
+ return 3;
7685
7192
  case "string":
7686
7193
  return 5;
7687
7194
  case "object":
7688
7195
  if (value === null) {
7689
7196
  return 0;
7690
- } else if (value instanceof Long) {
7691
- return 3;
7692
7197
  } else if (value instanceof Uint8Array) {
7693
7198
  return 6;
7694
7199
  } else if (value instanceof Date) {
@@ -7758,9 +7263,7 @@ class Primitive extends CRDTElement {
7758
7263
  return new TextEncoder().encode(this.value);
7759
7264
  }
7760
7265
  case 3: {
7761
- const longVal = this.value;
7762
- const longToBytes = longVal.toBytesLE();
7763
- return Uint8Array.from(longToBytes);
7266
+ return bigintToBytesLE(this.value);
7764
7267
  }
7765
7268
  case 6: {
7766
7269
  const bytesVal = this.value;
@@ -7768,11 +7271,7 @@ class Primitive extends CRDTElement {
7768
7271
  }
7769
7272
  case 7: {
7770
7273
  const dateVal = this.value;
7771
- const dateToBytes = Long.fromNumber(
7772
- dateVal.getTime(),
7773
- true
7774
- ).toBytesLE();
7775
- return Uint8Array.from(dateToBytes);
7274
+ return bigintToBytesLE(BigInt(dateVal.getTime()));
7776
7275
  }
7777
7276
  default:
7778
7277
  throw new YorkieError(
@@ -8845,10 +8344,10 @@ class LLRBTree {
8845
8344
  let node = this.root;
8846
8345
  let result = void 0;
8847
8346
  while (node) {
8848
- const compare2 = this.comparator(key, node.key);
8849
- if (compare2 === 0) {
8347
+ const compare = this.comparator(key, node.key);
8348
+ if (compare === 0) {
8850
8349
  return node;
8851
- } else if (compare2 < 0) {
8350
+ } else if (compare < 0) {
8852
8351
  node = node.left;
8853
8352
  } else {
8854
8353
  result = node;
@@ -8884,12 +8383,12 @@ class LLRBTree {
8884
8383
  }
8885
8384
  getInternal(key, node) {
8886
8385
  while (node) {
8887
- const compare2 = this.comparator(key, node.key);
8888
- if (compare2 === 0) {
8386
+ const compare = this.comparator(key, node.key);
8387
+ if (compare === 0) {
8889
8388
  return node;
8890
- } else if (compare2 < 0) {
8389
+ } else if (compare < 0) {
8891
8390
  node = node.left;
8892
- } else if (compare2 > 0) {
8391
+ } else if (compare > 0) {
8893
8392
  node = node.right;
8894
8393
  }
8895
8394
  }
@@ -8900,10 +8399,10 @@ class LLRBTree {
8900
8399
  this.counter += 1;
8901
8400
  return new LLRBNode(key, value, true);
8902
8401
  }
8903
- const compare2 = this.comparator(key, node.key);
8904
- if (compare2 < 0) {
8402
+ const compare = this.comparator(key, node.key);
8403
+ if (compare < 0) {
8905
8404
  node.left = this.putInternal(key, value, node.left);
8906
- } else if (compare2 > 0) {
8405
+ } else if (compare > 0) {
8907
8406
  node.right = this.putInternal(key, value, node.right);
8908
8407
  } else {
8909
8408
  node.value = value;
@@ -9202,9 +8701,9 @@ class RGATreeSplitNode extends SplayNode {
9202
8701
  */
9203
8702
  static createComparator() {
9204
8703
  return (p1, p2) => {
9205
- const compare2 = p1.getCreatedAt().compare(p2.getCreatedAt());
9206
- if (compare2 !== 0) {
9207
- return compare2;
8704
+ const compare = p1.getCreatedAt().compare(p2.getCreatedAt());
8705
+ if (compare !== 0) {
8706
+ return compare;
9208
8707
  }
9209
8708
  if (p1.getOffset() > p2.getOffset()) {
9210
8709
  return 1;
@@ -11318,7 +10817,7 @@ class IndexTreeNode {
11318
10817
  this._children = left;
11319
10818
  clone._children = actualRight;
11320
10819
  this.visibleSize = this._children.reduce(
11321
- (acc, child) => acc + child.paddedSize(),
10820
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11322
10821
  0
11323
10822
  );
11324
10823
  this.totalSize = this._children.reduce(
@@ -11326,7 +10825,7 @@ class IndexTreeNode {
11326
10825
  0
11327
10826
  );
11328
10827
  clone.visibleSize = clone._children.reduce(
11329
- (acc, child) => acc + child.paddedSize(),
10828
+ (acc, child) => acc + (child.isRemoved ? 0 : child.paddedSize()),
11330
10829
  0
11331
10830
  );
11332
10831
  clone.totalSize = clone._children.reduce(
@@ -11861,9 +11360,9 @@ class CRDTTreeNodeID {
11861
11360
  */
11862
11361
  static createComparator() {
11863
11362
  return (idA, idB) => {
11864
- const compare2 = idA.getCreatedAt().compare(idB.getCreatedAt());
11865
- if (compare2 !== 0) {
11866
- return compare2;
11363
+ const compare = idA.getCreatedAt().compare(idB.getCreatedAt());
11364
+ if (compare !== 0) {
11365
+ return compare;
11867
11366
  }
11868
11367
  if (idA.getOffset() > idB.getOffset()) {
11869
11368
  return 1;
@@ -12435,6 +11934,9 @@ class CRDTTree extends CRDTElement {
12435
11934
  const changes = [];
12436
11935
  const attrs = attributes ? parseObjectValues(attributes) : {};
12437
11936
  const pairs = [];
11937
+ const prevAttributes = /* @__PURE__ */ new Map();
11938
+ const newAttrKeys = [];
11939
+ let capturedPrev = false;
12438
11940
  this.traverseInPosRange(
12439
11941
  fromParent,
12440
11942
  fromLeft,
@@ -12450,6 +11952,16 @@ class CRDTTree extends CRDTElement {
12450
11952
  if (tokenType === TokenType.End && versionVector !== void 0 && this.hasUnknownSplitSibling(node, versionVector)) {
12451
11953
  return;
12452
11954
  }
11955
+ if (!capturedPrev) {
11956
+ for (const key of Object.keys(attributes)) {
11957
+ if (node.attrs?.has(key)) {
11958
+ prevAttributes.set(key, node.attrs.get(key));
11959
+ } else {
11960
+ newAttrKeys.push(key);
11961
+ }
11962
+ }
11963
+ capturedPrev = true;
11964
+ }
12453
11965
  const updatedAttrPairs = node.setAttrs(attributes, editedAt);
12454
11966
  const affectedAttrs = updatedAttrPairs.reduce(
12455
11967
  (acc, [, curr]) => {
@@ -12488,7 +12000,7 @@ class CRDTTree extends CRDTElement {
12488
12000
  }
12489
12001
  }
12490
12002
  );
12491
- return [pairs, changes, diff];
12003
+ return [pairs, changes, diff, prevAttributes, newAttrKeys];
12492
12004
  }
12493
12005
  /**
12494
12006
  * `removeStyle` removes the given attributes of the given range.
@@ -12506,6 +12018,8 @@ class CRDTTree extends CRDTElement {
12506
12018
  addDataSizes(diff, diffTo, diffFrom);
12507
12019
  const changes = [];
12508
12020
  const pairs = [];
12021
+ const prevAttributes = /* @__PURE__ */ new Map();
12022
+ let capturedPrev = false;
12509
12023
  this.traverseInPosRange(
12510
12024
  fromParent,
12511
12025
  fromLeft,
@@ -12524,6 +12038,14 @@ class CRDTTree extends CRDTElement {
12524
12038
  if (!node.attrs) {
12525
12039
  node.attrs = new RHT();
12526
12040
  }
12041
+ if (!capturedPrev) {
12042
+ for (const key of attributesToRemove) {
12043
+ if (node.attrs.has(key)) {
12044
+ prevAttributes.set(key, node.attrs.get(key));
12045
+ }
12046
+ }
12047
+ capturedPrev = true;
12048
+ }
12527
12049
  for (const value of attributesToRemove) {
12528
12050
  const nodesTobeRemoved = node.attrs.remove(value, editedAt);
12529
12051
  for (const rhtNode of nodesTobeRemoved) {
@@ -12544,7 +12066,7 @@ class CRDTTree extends CRDTElement {
12544
12066
  }
12545
12067
  }
12546
12068
  );
12547
- return [pairs, changes, diff];
12069
+ return [pairs, changes, diff, prevAttributes];
12548
12070
  }
12549
12071
  /**
12550
12072
  * `edit` edits the tree with the given range and content.
@@ -12678,7 +12200,7 @@ class CRDTTree extends CRDTElement {
12678
12200
  while (splitCount < splitLevel) {
12679
12201
  parent.split(
12680
12202
  this,
12681
- parent.findOffset(left) + 1,
12203
+ parent.findOffset(left, true) + 1,
12682
12204
  issueTimeTicket,
12683
12205
  versionVector
12684
12206
  );
@@ -13192,6 +12714,13 @@ class TreeEditOperation extends Operation {
13192
12714
  toIdx;
13193
12715
  lastFromIdx;
13194
12716
  lastToIdx;
12717
+ /**
12718
+ * `redoSplitLevel` is set on boundary-deletion undo ops that were generated
12719
+ * to reverse a split. When this op executes (as undo), `toReverseOperation`
12720
+ * uses this value to generate a proper split op for redo, rather than
12721
+ * re-inserting the raw tombstoned boundary nodes as content.
12722
+ */
12723
+ redoSplitLevel;
13195
12724
  constructor(parentCreatedAt, fromPos, toPos, contents, splitLevel, executedAt, isUndoOp, fromIdx, toIdx) {
13196
12725
  super(parentCreatedAt, executedAt);
13197
12726
  this.fromPos = fromPos;
@@ -13277,7 +12806,13 @@ class TreeEditOperation extends Operation {
13277
12806
  0
13278
12807
  );
13279
12808
  this.lastToIdx = preEditFromIdx + removedSize;
13280
- const reverseOp = this.splitLevel === 0 ? this.toReverseOperation(tree, removedNodes, preEditFromIdx) : void 0;
12809
+ let reverseOp;
12810
+ const isPureL1Split = this.splitLevel === 1 && !this.contents?.length && removedNodes.length === 0;
12811
+ if (this.splitLevel === 0) {
12812
+ reverseOp = this.toReverseOperation(tree, removedNodes, preEditFromIdx);
12813
+ } else if (isPureL1Split) {
12814
+ reverseOp = this.toSplitReverseOperation(tree, preEditFromIdx);
12815
+ }
13281
12816
  root.acc(diff);
13282
12817
  for (const pair of pairs) {
13283
12818
  root.registerGCPair(pair);
@@ -13313,6 +12848,24 @@ class TreeEditOperation extends Operation {
13313
12848
  * @param preEditFromIdx - The from index captured BEFORE the edit
13314
12849
  */
13315
12850
  toReverseOperation(tree, removedNodes, preEditFromIdx) {
12851
+ if (this.redoSplitLevel !== void 0 && this.redoSplitLevel > 0) {
12852
+ const splitRedoFromPos = tree.findPos(preEditFromIdx);
12853
+ const splitRedoOp = TreeEditOperation.create(
12854
+ this.getParentCreatedAt(),
12855
+ splitRedoFromPos,
12856
+ splitRedoFromPos,
12857
+ void 0,
12858
+ // no inserted content
12859
+ this.redoSplitLevel,
12860
+ void 0,
12861
+ // executedAt assigned at redo time
12862
+ true,
12863
+ // isUndoOp (treated as undo/redo op)
12864
+ preEditFromIdx,
12865
+ preEditFromIdx
12866
+ );
12867
+ return splitRedoOp;
12868
+ }
13316
12869
  const insertedContentSize = this.contents ? this.contents.reduce((sum, node) => sum + node.paddedSize(), 0) : 0;
13317
12870
  const maxNeededIdx = preEditFromIdx + insertedContentSize;
13318
12871
  if (maxNeededIdx > tree.getSize()) {
@@ -13350,6 +12903,45 @@ class TreeEditOperation extends Operation {
13350
12903
  reverseToIdx
13351
12904
  );
13352
12905
  }
12906
+ /**
12907
+ * `toSplitReverseOperation` creates the reverse operation for a split edit.
12908
+ *
12909
+ * A split creates element boundaries (close + open tags). The reverse
12910
+ * is a boundary deletion: a splitLevel=0 edit that removes those tokens,
12911
+ * merging the split elements back together.
12912
+ *
12913
+ * boundarySize = 2 * splitLevel (each level creates 1 close + 1 open tag)
12914
+ *
12915
+ * @param tree - The CRDTTree after the split has been applied
12916
+ * @param preEditFromIdx - The from index captured BEFORE the split
12917
+ */
12918
+ toSplitReverseOperation(tree, preEditFromIdx) {
12919
+ const boundarySize = 2 * this.splitLevel;
12920
+ const reverseFromIdx = preEditFromIdx;
12921
+ const reverseToIdx = preEditFromIdx + boundarySize;
12922
+ if (reverseToIdx > tree.getSize()) {
12923
+ return void 0;
12924
+ }
12925
+ const reverseFromPos = tree.findPos(reverseFromIdx);
12926
+ const reverseToPos = tree.findPos(reverseToIdx);
12927
+ const boundaryDeletionOp = TreeEditOperation.create(
12928
+ this.getParentCreatedAt(),
12929
+ reverseFromPos,
12930
+ reverseToPos,
12931
+ void 0,
12932
+ // no content — this is a deletion
12933
+ 0,
12934
+ // splitLevel=0: boundary deletion
12935
+ void 0,
12936
+ // executedAt assigned at undo time
12937
+ true,
12938
+ // isUndoOp
12939
+ reverseFromIdx,
12940
+ reverseToIdx
12941
+ );
12942
+ boundaryDeletionOp.redoSplitLevel = this.splitLevel;
12943
+ return boundaryDeletionOp;
12944
+ }
13353
12945
  /**
13354
12946
  * `normalizePos` returns the visible-index range of this operation.
13355
12947
  * For undo ops, returns the stored (possibly reconciled) indices.
@@ -14055,35 +13647,196 @@ class Checkpoint {
14055
13647
  }
14056
13648
  }
14057
13649
  const InitialCheckpoint = new Checkpoint(0n, 0);
14058
- const removeDecimal = (number) => number < 0 ? Math.ceil(number) : Math.floor(number);
13650
+ const hllPrecision = 14;
13651
+ const hllRegisterCount = 1 << hllPrecision;
13652
+ const prime64x1 = 0x9e3779b185ebca87n;
13653
+ const prime64x2 = 0xc2b2ae3d27d4eb4fn;
13654
+ const prime64x3 = 0x165667b19e3779f9n;
13655
+ const prime64x4 = 0x85ebca77c2b2ae63n;
13656
+ const prime64x5 = 0x27d4eb2f165667c5n;
13657
+ const mask64 = 0xffffffffffffffffn;
13658
+ class HLL {
13659
+ registers;
13660
+ constructor() {
13661
+ this.registers = new Uint8Array(hllRegisterCount);
13662
+ }
13663
+ /**
13664
+ * `add` adds a value to the HLL and returns true if the register was updated.
13665
+ */
13666
+ add(value) {
13667
+ const hash = xxhash64(value);
13668
+ const idx = Number(hash >> BigInt(64 - hllPrecision));
13669
+ const remaining = hash << BigInt(hllPrecision) & mask64 | 1n << BigInt(hllPrecision - 1);
13670
+ const rho = countLeadingZeros64(remaining) + 1;
13671
+ if (rho > this.registers[idx]) {
13672
+ this.registers[idx] = rho;
13673
+ return true;
13674
+ }
13675
+ return false;
13676
+ }
13677
+ /**
13678
+ * `count` returns the approximate cardinality estimate.
13679
+ */
13680
+ count() {
13681
+ const m = hllRegisterCount;
13682
+ const alpha = 0.7213 / (1 + 1.079 / m);
13683
+ let sum = 0;
13684
+ let zeros = 0;
13685
+ for (let i = 0; i < m; i++) {
13686
+ sum += Math.pow(2, -this.registers[i]);
13687
+ if (this.registers[i] === 0) zeros++;
13688
+ }
13689
+ let estimate = alpha * m * m / sum;
13690
+ if (estimate <= 2.5 * m && zeros > 0) {
13691
+ estimate = m * Math.log(m / zeros);
13692
+ }
13693
+ return Math.round(estimate);
13694
+ }
13695
+ /**
13696
+ * `merge` merges another HLL into this one by taking the max of each register.
13697
+ * This operation is commutative, associative, and idempotent.
13698
+ */
13699
+ merge(other) {
13700
+ for (let i = 0; i < hllRegisterCount; i++) {
13701
+ if (other.registers[i] > this.registers[i]) {
13702
+ this.registers[i] = other.registers[i];
13703
+ }
13704
+ }
13705
+ }
13706
+ /**
13707
+ * `toBytes` serializes the HLL registers to a byte array.
13708
+ */
13709
+ toBytes() {
13710
+ return new Uint8Array(this.registers);
13711
+ }
13712
+ /**
13713
+ * `restore` restores the HLL registers from a byte array.
13714
+ * Throws if the data length does not match the register count.
13715
+ */
13716
+ restore(data) {
13717
+ if (data.length !== hllRegisterCount) {
13718
+ throw new Error(
13719
+ `invalid HLL register payload: got ${data.length} bytes, want ${hllRegisterCount}`
13720
+ );
13721
+ }
13722
+ this.registers.set(data);
13723
+ }
13724
+ }
13725
+ function xxhash64(input) {
13726
+ const buf = new TextEncoder().encode(input);
13727
+ const len = buf.length;
13728
+ let h64;
13729
+ let offset = 0;
13730
+ const seed = 0n;
13731
+ if (len >= 32) {
13732
+ let v1 = seed + prime64x1 + prime64x2 & mask64;
13733
+ let v2 = seed + prime64x2 & mask64;
13734
+ let v3 = seed;
13735
+ let v4 = seed - prime64x1 & mask64;
13736
+ while (offset <= len - 32) {
13737
+ v1 = xxRound(v1, readU64LE(buf, offset));
13738
+ offset += 8;
13739
+ v2 = xxRound(v2, readU64LE(buf, offset));
13740
+ offset += 8;
13741
+ v3 = xxRound(v3, readU64LE(buf, offset));
13742
+ offset += 8;
13743
+ v4 = xxRound(v4, readU64LE(buf, offset));
13744
+ offset += 8;
13745
+ }
13746
+ h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & mask64;
13747
+ h64 = xxMergeRound(h64, v1);
13748
+ h64 = xxMergeRound(h64, v2);
13749
+ h64 = xxMergeRound(h64, v3);
13750
+ h64 = xxMergeRound(h64, v4);
13751
+ } else {
13752
+ h64 = seed + prime64x5 & mask64;
13753
+ }
13754
+ h64 = h64 + BigInt(len) & mask64;
13755
+ while (offset + 8 <= len) {
13756
+ const k1 = xxRound(0n, readU64LE(buf, offset));
13757
+ h64 = rotl64(h64 ^ k1, 27n) * prime64x1 + prime64x4 & mask64;
13758
+ offset += 8;
13759
+ }
13760
+ if (offset + 4 <= len) {
13761
+ h64 = h64 ^ readU32LE(buf, offset) * prime64x1 & mask64;
13762
+ h64 = rotl64(h64, 23n) * prime64x2 + prime64x3 & mask64;
13763
+ offset += 4;
13764
+ }
13765
+ while (offset < len) {
13766
+ h64 = h64 ^ BigInt(buf[offset]) * prime64x5 & mask64;
13767
+ h64 = rotl64(h64, 11n) * prime64x1 & mask64;
13768
+ offset++;
13769
+ }
13770
+ h64 = (h64 ^ h64 >> 33n) * prime64x2 & mask64;
13771
+ h64 = (h64 ^ h64 >> 29n) * prime64x3 & mask64;
13772
+ h64 = (h64 ^ h64 >> 32n) & mask64;
13773
+ return h64;
13774
+ }
13775
+ function rotl64(x, r) {
13776
+ return (x << r | x >> 64n - r) & mask64;
13777
+ }
13778
+ function xxRound(acc, input) {
13779
+ acc = acc + input * prime64x2 & mask64;
13780
+ acc = rotl64(acc, 31n);
13781
+ return acc * prime64x1 & mask64;
13782
+ }
13783
+ function xxMergeRound(acc, val) {
13784
+ val = xxRound(0n, val);
13785
+ acc = (acc ^ val) & mask64;
13786
+ return acc * prime64x1 + prime64x4 & mask64;
13787
+ }
13788
+ function readU64LE(buf, offset) {
13789
+ let val = 0n;
13790
+ for (let i = 7; i >= 0; i--) {
13791
+ val = val << 8n | BigInt(buf[offset + i]);
13792
+ }
13793
+ return val;
13794
+ }
13795
+ function readU32LE(buf, offset) {
13796
+ return BigInt(buf[offset]) | BigInt(buf[offset + 1]) << 8n | BigInt(buf[offset + 2]) << 16n | BigInt(buf[offset + 3]) << 24n;
13797
+ }
13798
+ function countLeadingZeros64(x) {
13799
+ if (x === 0n) return 64;
13800
+ let n = 0;
13801
+ while ((x & 1n << 63n) === 0n) {
13802
+ n++;
13803
+ x <<= 1n;
13804
+ }
13805
+ return n;
13806
+ }
14059
13807
  var CounterType = /* @__PURE__ */ ((CounterType2) => {
14060
13808
  CounterType2[CounterType2["Int"] = 0] = "Int";
14061
13809
  CounterType2[CounterType2["Long"] = 1] = "Long";
13810
+ CounterType2[CounterType2["IntDedup"] = 2] = "IntDedup";
14062
13811
  return CounterType2;
14063
13812
  })(CounterType || {});
14064
13813
  class CRDTCounter extends CRDTElement {
14065
13814
  valueType;
14066
13815
  value;
13816
+ hll;
14067
13817
  constructor(valueType, value, createdAt) {
14068
13818
  super(createdAt);
14069
13819
  this.valueType = valueType;
14070
13820
  switch (valueType) {
13821
+ case 2:
13822
+ this.value = 0;
13823
+ break;
14071
13824
  case 0:
14072
13825
  if (typeof value === "number") {
14073
13826
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
14074
- this.value = Long.fromNumber(value).toInt();
13827
+ this.value = bigintToInt32(BigInt(value));
14075
13828
  } else {
14076
13829
  this.value = removeDecimal(value);
14077
13830
  }
14078
13831
  } else {
14079
- this.value = value.toInt();
13832
+ this.value = bigintToInt32(value);
14080
13833
  }
14081
13834
  break;
14082
13835
  case 1:
14083
13836
  if (typeof value === "number") {
14084
- this.value = Long.fromNumber(value);
13837
+ this.value = BigInt.asIntN(64, BigInt(Math.trunc(value)));
14085
13838
  } else {
14086
- this.value = value;
13839
+ this.value = BigInt.asIntN(64, value);
14087
13840
  }
14088
13841
  break;
14089
13842
  default:
@@ -14092,6 +13845,9 @@ class CRDTCounter extends CRDTElement {
14092
13845
  `unimplemented type: ${valueType}`
14093
13846
  );
14094
13847
  }
13848
+ if (this.isDedup()) {
13849
+ this.hll ??= new HLL();
13850
+ }
14095
13851
  }
14096
13852
  /**
14097
13853
  * `of` creates a new instance of Counter.
@@ -14105,9 +13861,10 @@ class CRDTCounter extends CRDTElement {
14105
13861
  static valueFromBytes(counterType, bytes) {
14106
13862
  switch (counterType) {
14107
13863
  case 0:
13864
+ case 2:
14108
13865
  return bytes[0] | bytes[1] << 8 | bytes[2] << 16 | bytes[3] << 24;
14109
13866
  case 1:
14110
- return Long.fromBytesLE(Array.from(bytes));
13867
+ return bigintFromBytesLE(bytes);
14111
13868
  default:
14112
13869
  throw new YorkieError(
14113
13870
  Code.ErrUnimplemented,
@@ -14119,7 +13876,10 @@ class CRDTCounter extends CRDTElement {
14119
13876
  * `getDataSize` returns the data usage of this element.
14120
13877
  */
14121
13878
  getDataSize() {
14122
- const data = this.valueType === 0 ? 4 : 8;
13879
+ let data = this.valueType === 0 || this.valueType === 2 ? 4 : 8;
13880
+ if (this.isDedup() && this.hll) {
13881
+ data += this.hll.toBytes().length;
13882
+ }
14123
13883
  return {
14124
13884
  data,
14125
13885
  meta: this.getMetaUsage()
@@ -14158,6 +13918,9 @@ class CRDTCounter extends CRDTElement {
14158
13918
  );
14159
13919
  clone.setRemovedAt(this.getRemovedAt());
14160
13920
  clone.setMovedAt(this.getMovedAt());
13921
+ if (this.isDedup() && this.hll) {
13922
+ clone.restoreHLL(this.hll.toBytes());
13923
+ }
14161
13924
  return clone;
14162
13925
  }
14163
13926
  /**
@@ -14171,12 +13934,8 @@ class CRDTCounter extends CRDTElement {
14171
13934
  */
14172
13935
  static getCounterType(value) {
14173
13936
  switch (typeof value) {
14174
- case "object":
14175
- if (value instanceof Long) {
14176
- return 1;
14177
- } else {
14178
- return;
14179
- }
13937
+ case "bigint":
13938
+ return 1;
14180
13939
  case "number":
14181
13940
  if (value > Math.pow(2, 31) - 1 || value < -Math.pow(2, 31)) {
14182
13941
  return 1;
@@ -14204,7 +13963,7 @@ class CRDTCounter extends CRDTElement {
14204
13963
  */
14205
13964
  isNumericType() {
14206
13965
  const t = this.valueType;
14207
- return t === 0 || t === 1;
13966
+ return t === 0 || t === 1 || t === 2;
14208
13967
  }
14209
13968
  /**
14210
13969
  * `getValueType` get counter value type.
@@ -14223,7 +13982,8 @@ class CRDTCounter extends CRDTElement {
14223
13982
  */
14224
13983
  toBytes() {
14225
13984
  switch (this.valueType) {
14226
- case 0: {
13985
+ case 0:
13986
+ case 2: {
14227
13987
  const intVal = this.value;
14228
13988
  return new Uint8Array([
14229
13989
  intVal & 255,
@@ -14233,9 +13993,7 @@ class CRDTCounter extends CRDTElement {
14233
13993
  ]);
14234
13994
  }
14235
13995
  case 1: {
14236
- const longVal = this.value;
14237
- const longToBytes = longVal.toBytesLE();
14238
- return Uint8Array.from(longToBytes);
13996
+ return bigintToBytesLE(this.value);
14239
13997
  }
14240
13998
  default:
14241
13999
  throw new YorkieError(
@@ -14244,10 +14002,76 @@ class CRDTCounter extends CRDTElement {
14244
14002
  );
14245
14003
  }
14246
14004
  }
14005
+ /**
14006
+ * `isDedup` returns whether dedup mode is enabled (derived from ValueType).
14007
+ */
14008
+ isDedup() {
14009
+ return this.valueType === 2;
14010
+ }
14011
+ /**
14012
+ * `increaseDedup` increases the counter using HLL-based dedup.
14013
+ * Only updates the value if the actor is new (not seen before).
14014
+ */
14015
+ increaseDedup(v, actor) {
14016
+ if (!this.isDedup() || !this.hll) {
14017
+ return this.increase(v);
14018
+ }
14019
+ if (!this.isNumericType() || !v.isNumericType()) {
14020
+ throw new TypeError(`Unsupported type of value: ${typeof v.getValue()}`);
14021
+ }
14022
+ if (!actor) {
14023
+ throw new YorkieError(
14024
+ Code.ErrInvalidArgument,
14025
+ "dedup counter requires actor"
14026
+ );
14027
+ }
14028
+ const val = v.getValue();
14029
+ const isUnit = v.getType() === PrimitiveType.Long ? val === 1n : val === 1;
14030
+ if (!isUnit) {
14031
+ throw new YorkieError(
14032
+ Code.ErrInvalidArgument,
14033
+ "dedup counter only supports increment by 1"
14034
+ );
14035
+ }
14036
+ if (this.hll.add(actor)) {
14037
+ this.recomputeValue();
14038
+ }
14039
+ return this;
14040
+ }
14041
+ /**
14042
+ * `hllBytes` returns the HLL register bytes, or undefined if not in dedup mode.
14043
+ */
14044
+ hllBytes() {
14045
+ return this.hll?.toBytes();
14046
+ }
14047
+ /**
14048
+ * `restoreHLL` restores the HLL state from serialized bytes.
14049
+ */
14050
+ restoreHLL(data) {
14051
+ if (!this.hll) {
14052
+ this.hll = new HLL();
14053
+ }
14054
+ this.hll.restore(data);
14055
+ this.recomputeValue();
14056
+ }
14057
+ /**
14058
+ * `recomputeValue` updates the counter value from the HLL cardinality estimate.
14059
+ */
14060
+ recomputeValue() {
14061
+ if (!this.hll) return;
14062
+ this.value = this.hll.count();
14063
+ }
14247
14064
  /**
14248
14065
  * `increase` increases numeric data.
14066
+ * Dedup counters must use increaseDedup() instead.
14249
14067
  */
14250
14068
  increase(v) {
14069
+ if (this.isDedup()) {
14070
+ throw new YorkieError(
14071
+ Code.ErrInvalidArgument,
14072
+ "dedup counter requires actor, use increaseDedup()"
14073
+ );
14074
+ }
14251
14075
  function checkNumericType(target) {
14252
14076
  if (!target.isNumericType()) {
14253
14077
  throw new TypeError(
@@ -14258,14 +14082,17 @@ class CRDTCounter extends CRDTElement {
14258
14082
  checkNumericType(this);
14259
14083
  checkNumericType(v);
14260
14084
  if (this.valueType === 1) {
14261
- this.value = this.value.add(v.getValue());
14085
+ const delta = typeof v.getValue() === "bigint" ? v.getValue() : BigInt(Math.trunc(v.getValue()));
14086
+ this.value = BigInt.asIntN(64, this.value + delta);
14262
14087
  } else {
14263
14088
  if (v.getType() === PrimitiveType.Long) {
14264
- this.value = this.value + v.getValue().toInt();
14089
+ this.value = this.value + bigintToInt32(v.getValue());
14265
14090
  } else {
14266
- this.value = Long.fromNumber(
14267
- this.value + removeDecimal(v.getValue())
14268
- ).toInt();
14091
+ this.value = bigintToInt32(
14092
+ BigInt(
14093
+ this.value + removeDecimal(v.getValue())
14094
+ )
14095
+ );
14269
14096
  }
14270
14097
  }
14271
14098
  return this;
@@ -14273,15 +14100,23 @@ class CRDTCounter extends CRDTElement {
14273
14100
  }
14274
14101
  class IncreaseOperation extends Operation {
14275
14102
  value;
14276
- constructor(parentCreatedAt, value, executedAt) {
14103
+ actor;
14104
+ constructor(parentCreatedAt, value, executedAt, actor) {
14277
14105
  super(parentCreatedAt, executedAt);
14278
14106
  this.value = value;
14107
+ this.actor = actor || "";
14279
14108
  }
14280
14109
  /**
14281
14110
  * `create` creates a new instance of IncreaseOperation.
14282
14111
  */
14283
- static create(parentCreatedAt, value, executedAt) {
14284
- return new IncreaseOperation(parentCreatedAt, value, executedAt);
14112
+ static create(parentCreatedAt, value, executedAt, actor) {
14113
+ return new IncreaseOperation(parentCreatedAt, value, executedAt, actor);
14114
+ }
14115
+ /**
14116
+ * `getActor` returns the actor ID associated with this operation.
14117
+ */
14118
+ getActor() {
14119
+ return this.actor;
14285
14120
  }
14286
14121
  /**
14287
14122
  * `execute` executes this operation on the given `CRDTRoot`.
@@ -14302,7 +14137,17 @@ class IncreaseOperation extends Operation {
14302
14137
  }
14303
14138
  const counter = parentObject;
14304
14139
  const value = this.value.deepcopy();
14305
- counter.increase(value);
14140
+ if (counter.isDedup()) {
14141
+ if (!this.actor) {
14142
+ throw new YorkieError(
14143
+ Code.ErrInvalidArgument,
14144
+ "dedup counter requires actor"
14145
+ );
14146
+ }
14147
+ counter.increaseDedup(value, this.actor);
14148
+ } else {
14149
+ counter.increase(value);
14150
+ }
14306
14151
  return {
14307
14152
  opInfos: [
14308
14153
  {
@@ -14311,7 +14156,9 @@ class IncreaseOperation extends Operation {
14311
14156
  value: value.getValue()
14312
14157
  }
14313
14158
  ],
14314
- reverseOp: this.toReverseOperation()
14159
+ // Dedup counters do not support undo/redo because HLL cannot
14160
+ // remove an actor once added.
14161
+ reverseOp: this.actor ? void 0 : this.toReverseOperation()
14315
14162
  };
14316
14163
  }
14317
14164
  /**
@@ -14320,7 +14167,7 @@ class IncreaseOperation extends Operation {
14320
14167
  toReverseOperation() {
14321
14168
  const primitiveValue = this.value.deepcopy();
14322
14169
  const valueType = primitiveValue.getType();
14323
- const value = valueType === PrimitiveType.Long ? primitiveValue.getValue().multiply(-1) : primitiveValue.getValue() * -1;
14170
+ const value = valueType === PrimitiveType.Long ? -primitiveValue.getValue() : primitiveValue.getValue() * -1;
14324
14171
  const reverseOp = IncreaseOperation.create(
14325
14172
  this.getParentCreatedAt(),
14326
14173
  Primitive.of(value, primitiveValue.getCreatedAt())
@@ -14405,28 +14252,67 @@ class TreeStyleOperation extends Operation {
14405
14252
  let changes;
14406
14253
  let pairs;
14407
14254
  let diff = { data: 0, meta: 0 };
14255
+ const reversePrevAttributes = /* @__PURE__ */ new Map();
14256
+ const reverseAttrsToRemove = [];
14408
14257
  if (this.attributes.size) {
14409
14258
  const attributes = {};
14410
14259
  [...this.attributes].forEach(([key, value]) => attributes[key] = value);
14411
- [pairs, changes, diff] = tree.style(
14260
+ let prevAttributes;
14261
+ let newAttrKeys;
14262
+ [pairs, changes, diff, prevAttributes, newAttrKeys] = tree.style(
14412
14263
  [this.fromPos, this.toPos],
14413
14264
  attributes,
14414
14265
  this.getExecutedAt(),
14415
14266
  versionVector
14416
14267
  );
14268
+ for (const [key, value] of prevAttributes) {
14269
+ reversePrevAttributes.set(key, value);
14270
+ }
14271
+ reverseAttrsToRemove.push(...newAttrKeys);
14417
14272
  } else {
14418
14273
  const attributesToRemove = this.attributesToRemove;
14419
- [pairs, changes, diff] = tree.removeStyle(
14274
+ let prevAttributes;
14275
+ [pairs, changes, diff, prevAttributes] = tree.removeStyle(
14420
14276
  [this.fromPos, this.toPos],
14421
14277
  attributesToRemove,
14422
14278
  this.getExecutedAt(),
14423
14279
  versionVector
14424
14280
  );
14281
+ for (const [key, value] of prevAttributes) {
14282
+ reversePrevAttributes.set(key, value);
14283
+ }
14425
14284
  }
14426
14285
  root.acc(diff);
14427
14286
  for (const pair of pairs) {
14428
14287
  root.registerGCPair(pair);
14429
14288
  }
14289
+ let reverseOp;
14290
+ if (reversePrevAttributes.size > 0 && reverseAttrsToRemove.length > 0) {
14291
+ reverseOp = new TreeStyleOperation(
14292
+ this.getParentCreatedAt(),
14293
+ this.fromPos,
14294
+ this.toPos,
14295
+ reversePrevAttributes,
14296
+ reverseAttrsToRemove,
14297
+ void 0
14298
+ );
14299
+ } else if (reverseAttrsToRemove.length > 0) {
14300
+ reverseOp = TreeStyleOperation.createTreeRemoveStyleOperation(
14301
+ this.getParentCreatedAt(),
14302
+ this.fromPos,
14303
+ this.toPos,
14304
+ reverseAttrsToRemove,
14305
+ void 0
14306
+ );
14307
+ } else if (reversePrevAttributes.size > 0) {
14308
+ reverseOp = TreeStyleOperation.create(
14309
+ this.getParentCreatedAt(),
14310
+ this.fromPos,
14311
+ this.toPos,
14312
+ reversePrevAttributes,
14313
+ void 0
14314
+ );
14315
+ }
14430
14316
  return {
14431
14317
  opInfos: changes.map(({ from, to, value, fromPath, toPath }) => {
14432
14318
  return {
@@ -14438,7 +14324,8 @@ class TreeStyleOperation extends Operation {
14438
14324
  toPath,
14439
14325
  path: root.createPath(this.getParentCreatedAt())
14440
14326
  };
14441
- })
14327
+ }),
14328
+ reverseOp
14442
14329
  };
14443
14330
  }
14444
14331
  /**
@@ -14659,6 +14546,8 @@ function toCounterType(valueType) {
14659
14546
  return ValueType.INTEGER_CNT;
14660
14547
  case CounterType.Long:
14661
14548
  return ValueType.LONG_CNT;
14549
+ case CounterType.IntDedup:
14550
+ return ValueType.INTEGER_DEDUP_CNT;
14662
14551
  default:
14663
14552
  throw new YorkieError(
14664
14553
  Code.ErrInvalidType,
@@ -14831,6 +14720,7 @@ function toOperation(operation) {
14831
14720
  pbIncreaseOperation.executedAt = toTimeTicket(
14832
14721
  increaseOperation.getExecutedAt()
14833
14722
  );
14723
+ pbIncreaseOperation.actor = increaseOperation.getActor();
14834
14724
  pbOperation.body.case = "increase";
14835
14725
  pbOperation.body.value = pbIncreaseOperation;
14836
14726
  } else if (operation instanceof TreeEditOperation) {
@@ -15082,7 +14972,8 @@ function toCounter(counter) {
15082
14972
  value: counter.toBytes(),
15083
14973
  createdAt: toTimeTicket(counter.getCreatedAt()),
15084
14974
  movedAt: toTimeTicket(counter.getMovedAt()),
15085
- removedAt: toTimeTicket(counter.getRemovedAt())
14975
+ removedAt: toTimeTicket(counter.getRemovedAt()),
14976
+ hllRegisters: counter.hllBytes() || new Uint8Array()
15086
14977
  })
15087
14978
  }
15088
14979
  });
@@ -15246,6 +15137,8 @@ function fromCounterType(pbValueType) {
15246
15137
  return CounterType.Int;
15247
15138
  case ValueType.LONG_CNT:
15248
15139
  return CounterType.Long;
15140
+ case ValueType.INTEGER_DEDUP_CNT:
15141
+ return CounterType.IntDedup;
15249
15142
  }
15250
15143
  throw new YorkieError(
15251
15144
  Code.ErrUnimplemented,
@@ -15288,6 +15181,7 @@ function fromElementSimple(pbElementSimple) {
15288
15181
  );
15289
15182
  case ValueType.INTEGER_CNT:
15290
15183
  case ValueType.LONG_CNT:
15184
+ case ValueType.INTEGER_DEDUP_CNT:
15291
15185
  return CRDTCounter.create(
15292
15186
  fromCounterType(pbElementSimple.type),
15293
15187
  CRDTCounter.valueFromBytes(
@@ -15470,7 +15364,8 @@ function fromOperation(pbOperation) {
15470
15364
  return IncreaseOperation.create(
15471
15365
  fromTimeTicket(pbIncreaseOperation.parentCreatedAt),
15472
15366
  fromElementSimple(pbIncreaseOperation.value),
15473
- fromTimeTicket(pbIncreaseOperation.executedAt)
15367
+ fromTimeTicket(pbIncreaseOperation.executedAt),
15368
+ pbIncreaseOperation.actor || void 0
15474
15369
  );
15475
15370
  } else if (pbOperation.body.case === "treeEdit") {
15476
15371
  const pbTreeEditOperation = pbOperation.body.value;
@@ -15618,6 +15513,9 @@ function fromCounter(pbCounter) {
15618
15513
  );
15619
15514
  counter.setMovedAt(fromTimeTicket(pbCounter.movedAt));
15620
15515
  counter.setRemovedAt(fromTimeTicket(pbCounter.removedAt));
15516
+ if (counter.isDedup() && pbCounter.hllRegisters.length > 0) {
15517
+ counter.restoreHLL(pbCounter.hllRegisters);
15518
+ }
15621
15519
  return counter;
15622
15520
  }
15623
15521
  function fromTree(pbTree) {
@@ -17087,7 +16985,7 @@ class Text {
17087
16985
  return this.text.indexRangeToPosRange(fromIdx, toIdx);
17088
16986
  }
17089
16987
  }
17090
- class Counter {
16988
+ class BaseCounter {
17091
16989
  valueType;
17092
16990
  value;
17093
16991
  context;
@@ -17097,7 +16995,7 @@ class Counter {
17097
16995
  this.value = value;
17098
16996
  }
17099
16997
  /**
17100
- * `initialize` initialize this text with context and internal text.
16998
+ * `initialize` links this proxy to a ChangeContext and CRDTCounter.
17101
16999
  */
17102
17000
  initialize(context, counter) {
17103
17001
  this.valueType = counter.getValueType();
@@ -17106,17 +17004,11 @@ class Counter {
17106
17004
  this.value = counter.getValue();
17107
17005
  }
17108
17006
  /**
17109
- * `getID` returns the ID of this text.
17007
+ * `getID` returns the ID of this counter.
17110
17008
  */
17111
17009
  getID() {
17112
17010
  return this.counter.getID();
17113
17011
  }
17114
- /**
17115
- * `getValue` returns the value of this counter;
17116
- */
17117
- getValue() {
17118
- return this.value;
17119
- }
17120
17012
  /**
17121
17013
  * `getValueType` returns the value type of this counter.
17122
17014
  */
@@ -17124,15 +17016,45 @@ class Counter {
17124
17016
  return this.valueType;
17125
17017
  }
17126
17018
  /**
17127
- * `increase` increases numeric data.
17019
+ * `toJSForTest` returns value with meta data for testing.
17128
17020
  */
17129
- increase(v) {
17021
+ toJSForTest() {
17022
+ if (!this.context || !this.counter) {
17023
+ throw new YorkieError(
17024
+ Code.ErrNotInitialized,
17025
+ "Counter is not initialized yet"
17026
+ );
17027
+ }
17028
+ return this.counter.toJSForTest();
17029
+ }
17030
+ /**
17031
+ * `ensureInitialized` throws if this counter has not been initialized.
17032
+ */
17033
+ ensureInitialized() {
17130
17034
  if (!this.context || !this.counter) {
17131
17035
  throw new YorkieError(
17132
17036
  Code.ErrNotInitialized,
17133
17037
  "Counter is not initialized yet"
17134
17038
  );
17135
17039
  }
17040
+ }
17041
+ }
17042
+ class Counter extends BaseCounter {
17043
+ constructor(value) {
17044
+ const type = typeof value === "bigint" ? CounterType.Long : CounterType.Int;
17045
+ super(type, value);
17046
+ }
17047
+ /**
17048
+ * `getValue` returns the value of this counter.
17049
+ */
17050
+ getValue() {
17051
+ return this.value;
17052
+ }
17053
+ /**
17054
+ * `increase` increases numeric data.
17055
+ */
17056
+ increase(v) {
17057
+ this.ensureInitialized();
17136
17058
  const ticket = this.context.issueTimeTicket();
17137
17059
  const value = Primitive.of(v, ticket);
17138
17060
  if (!value.isNumericType()) {
@@ -17146,19 +17068,44 @@ class Counter {
17146
17068
  );
17147
17069
  return this;
17148
17070
  }
17071
+ }
17072
+ class DedupCounter extends BaseCounter {
17073
+ constructor() {
17074
+ super(CounterType.IntDedup, 0);
17075
+ }
17149
17076
  /**
17150
- * `toJSForTest` returns value with meta data for testing.
17077
+ * `getValue` returns the value of this counter. Always a number since
17078
+ * DedupCounter only supports IntDedup.
17151
17079
  */
17152
- toJSForTest() {
17153
- if (!this.context || !this.counter) {
17154
- throw new YorkieError(
17155
- Code.ErrNotInitialized,
17156
- "Counter is not initialized yet"
17157
- );
17080
+ getValue() {
17081
+ return this.value;
17082
+ }
17083
+ /**
17084
+ * `add` records a unique actor in the dedup counter. If the actor has
17085
+ * already been counted, the call is ignored.
17086
+ */
17087
+ add(actor) {
17088
+ this.ensureInitialized();
17089
+ if (!actor) {
17090
+ throw new YorkieError(Code.ErrInvalidArgument, "actor is required");
17158
17091
  }
17159
- return this.counter.toJSForTest();
17092
+ const ticket = this.context.issueTimeTicket();
17093
+ const value = Primitive.of(1, ticket);
17094
+ this.counter.increaseDedup(value, actor);
17095
+ this.context.push(
17096
+ IncreaseOperation.create(
17097
+ this.counter.getCreatedAt(),
17098
+ value,
17099
+ ticket,
17100
+ actor
17101
+ )
17102
+ );
17103
+ return this;
17160
17104
  }
17161
17105
  }
17106
+ function isCounter$1(value) {
17107
+ return value instanceof Counter || value instanceof DedupCounter;
17108
+ }
17162
17109
  function toTreeNode(node) {
17163
17110
  if (node.isText) {
17164
17111
  return {
@@ -17962,7 +17909,12 @@ function toWrappedElement(context, elem) {
17962
17909
  } else if (elem instanceof CRDTText) {
17963
17910
  return new Text(context, elem);
17964
17911
  } else if (elem instanceof CRDTCounter) {
17965
- const counter = new Counter(CounterType.Int, 0);
17912
+ if (elem.isDedup()) {
17913
+ const counter2 = new DedupCounter();
17914
+ counter2.initialize(context, elem);
17915
+ return counter2;
17916
+ }
17917
+ const counter = new Counter(0);
17966
17918
  counter.initialize(context, elem);
17967
17919
  return counter;
17968
17920
  } else if (elem instanceof CRDTTree) {
@@ -17992,7 +17944,7 @@ function buildCRDTElement(context, value, createdAt) {
17992
17944
  if (value instanceof Text) {
17993
17945
  element = CRDTText.create(RGATreeSplit.create(), createdAt);
17994
17946
  value.initialize(context, element);
17995
- } else if (value instanceof Counter) {
17947
+ } else if (isCounter$1(value)) {
17996
17948
  element = CRDTCounter.create(
17997
17949
  value.getValueType(),
17998
17950
  value.getValue(),
@@ -20275,7 +20227,7 @@ function createAuthInterceptor(apiKey, token) {
20275
20227
  };
20276
20228
  }
20277
20229
  const name$1 = "@yorkie-js/sdk";
20278
- const version$1 = "0.7.4";
20230
+ const version$1 = "0.7.5";
20279
20231
  const pkg$1 = {
20280
20232
  name: name$1,
20281
20233
  version: version$1
@@ -20619,21 +20571,19 @@ class Client {
20619
20571
  this.channelHeartbeatInterval = opts.channelHeartbeatInterval ?? DefaultClientOptions.channelHeartbeatInterval;
20620
20572
  const { authInterceptor, setToken } = createAuthInterceptor(this.apiKey);
20621
20573
  this.setAuthToken = setToken;
20574
+ const transportOptions = {
20575
+ baseUrl: rpcAddr,
20576
+ interceptors: [authInterceptor, createMetricInterceptor(opts?.userAgent)],
20577
+ fetch: (input, init) => {
20578
+ return fetch(input, {
20579
+ ...init,
20580
+ keepalive: this.keepalive
20581
+ });
20582
+ }
20583
+ };
20622
20584
  this.rpcClient = createClient(
20623
20585
  YorkieService,
20624
- createGrpcWebTransport({
20625
- baseUrl: rpcAddr,
20626
- interceptors: [
20627
- authInterceptor,
20628
- createMetricInterceptor(opts?.userAgent)
20629
- ],
20630
- fetch: (input, init) => {
20631
- return fetch(input, {
20632
- ...init,
20633
- keepalive: this.keepalive
20634
- });
20635
- }
20636
- })
20586
+ opts.useGrpcWebTransport ? createGrpcWebTransport(transportOptions) : createConnectTransport(transportOptions)
20637
20587
  );
20638
20588
  this.taskQueue = [];
20639
20589
  }
@@ -22131,10 +22081,6 @@ const YSON = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
22131
22081
  textToString,
22132
22082
  treeToXML
22133
22083
  }, Symbol.toStringTag, { value: "Module" }));
22134
- ({
22135
- IntType: CounterType.Int,
22136
- LongType: CounterType.Long
22137
- });
22138
22084
  if (typeof globalThis !== "undefined") {
22139
22085
  globalThis.yorkie = {
22140
22086
  Client,
@@ -22142,18 +22088,17 @@ if (typeof globalThis !== "undefined") {
22142
22088
  Primitive,
22143
22089
  Text,
22144
22090
  Counter,
22091
+ DedupCounter,
22145
22092
  Tree,
22146
22093
  Channel: Channel2,
22147
22094
  ChannelEventType,
22148
22095
  YSON,
22149
22096
  LogLevel,
22150
- setLogLevel,
22151
- IntType: CounterType.Int,
22152
- LongType: CounterType.Long
22097
+ setLogLevel
22153
22098
  };
22154
22099
  }
22155
22100
  const name = "@yorkie-js/react";
22156
- const version = "0.7.4";
22101
+ const version = "0.7.5";
22157
22102
  const pkg = {
22158
22103
  name,
22159
22104
  version