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