mobx-keystone-yjs 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.3.1
4
+
5
+ - Added `boundObject` to `yjsBindingContext` so it's easier to access the root bound object from the context.
6
+
3
7
  ## 1.3.0
4
8
 
5
9
  - Frozen values will be stored as plain values in Y.js instead of being deeply converted to Y.js Maps/Arrays, etc. This means storing/fetching frozen values should be faster, require less memory and probably require less space in the Y.js state.
@@ -194,7 +194,9 @@ function bindYjsToMobxKeystone({ yjsDoc, yjsObject, mobxKeystoneType }) {
194
194
  yjsDoc,
195
195
  yjsObject,
196
196
  mobxKeystoneType,
197
- yjsOrigin
197
+ yjsOrigin,
198
+ boundObject: void 0
199
+ // not yet created
198
200
  };
199
201
  const yjsJson = yjsObject.toJSON();
200
202
  const initializationGlobalPatches = [];
@@ -204,7 +206,7 @@ function bindYjsToMobxKeystone({ yjsDoc, yjsObject, mobxKeystoneType }) {
204
206
  });
205
207
  try {
206
208
  const boundObject2 = yjsBindingContext.apply(() => fromSnapshot(mobxKeystoneType, yjsJson), bindingContext);
207
- yjsBindingContext.set(boundObject2, bindingContext);
209
+ yjsBindingContext.set(boundObject2, { ...bindingContext, boundObject: boundObject2 });
208
210
  return boundObject2;
209
211
  } finally {
210
212
  disposeOnGlobalPatches();
@@ -286,4 +288,4 @@ export {
286
288
  convertJsonToYjsData,
287
289
  yjsBindingContext
288
290
  };
289
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMuZXNtLm1qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2Vycm9yLnRzIiwiLi4vc3JjL2JpbmRpbmcvY29udmVydEpzb25Ub1lqc0RhdGEudHMiLCIuLi9zcmMvYmluZGluZy9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMudHMiLCIuLi9zcmMvYmluZGluZy95anNCaW5kaW5nQ29udGV4dC50cyIsIi4uL3NyYy9iaW5kaW5nL2JpbmRZanNUb01vYnhLZXlzdG9uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBtb2J4LWtleXN0b25lLXlqcyBlcnJvci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2J4S2V5c3RvbmVZanNFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xyXG4gICAgc3VwZXIobXNnKVxyXG5cclxuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9ieEtleXN0b25lWWpzRXJyb3IucHJvdG90eXBlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUobXNnOiBzdHJpbmcpIHtcclxuICByZXR1cm4gbmV3IE1vYnhLZXlzdG9uZVlqc0Vycm9yKG1zZylcclxufVxyXG4iLCJpbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvblZhbHVlLCBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25QcmltaXRpdmUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcblxuZnVuY3Rpb24gaXNKc29uUHJpbWl0aXZlKHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvblByaW1pdGl2ZSB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgdlxuICByZXR1cm4gdCA9PT0gXCJzdHJpbmdcIiB8fCB0ID09PSBcIm51bWJlclwiIHx8IHQgPT09IFwiYm9vbGVhblwiIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNKc29uQXJyYXkodjogSnNvblZhbHVlKTogdiBpcyBKc29uQXJyYXkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KVxufVxuXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodjogSnNvblZhbHVlKTogdiBpcyBKc29uT2JqZWN0IHtcbiAgcmV0dXJuICFpc0pzb25BcnJheSh2KSAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEpzb25Ub1lqc0RhdGEodjogSnNvblZhbHVlKSB7XG4gIGlmICh2ID09PSB1bmRlZmluZWQgfHwgaXNKc29uUHJpbWl0aXZlKHYpKSB7XG4gICAgcmV0dXJuIHZcbiAgfVxuXG4gIGlmIChpc0pzb25BcnJheSh2KSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBZLkFycmF5KClcbiAgICBhcHBseUpzb25BcnJheVlBcnJheShhcnIsIHYpXG4gICAgcmV0dXJuIGFyclxuICB9XG5cbiAgaWYgKGlzSnNvbk9iamVjdCh2KSkge1xuICAgIGlmICh2LiRmcm96ZW4gPT09IHRydWUpIHtcbiAgICAgIC8vIGZyb3plbiB2YWx1ZSwgc2F2ZSBhcyBpbW11dGFibGUgb2JqZWN0XG4gICAgICByZXR1cm4gdlxuICAgIH1cblxuICAgIGNvbnN0IG1hcCA9IG5ldyBZLk1hcCgpXG4gICAgYXBwbHlKc29uT2JqZWN0VG9ZTWFwKG1hcCwgdilcbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIHR5cGU6ICR7dn1gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uQXJyYXlZQXJyYXkoZGVzdDogWS5BcnJheTx1bmtub3duPiwgc291cmNlOiBKc29uQXJyYXkpIHtcbiAgZGVzdC5wdXNoKHNvdXJjZS5tYXAoY29udmVydEpzb25Ub1lqc0RhdGEpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uT2JqZWN0VG9ZTWFwKGRlc3Q6IFkuTWFwPHVua25vd24+LCBzb3VyY2U6IEpzb25PYmplY3QpIHtcbiAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICBkZXN0LnNldChrLCBjb252ZXJ0SnNvblRvWWpzRGF0YSh2KSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuaW1wb3J0IHsgY29udmVydEpzb25Ub1lqc0RhdGEgfSBmcm9tIFwiLi9jb252ZXJ0SnNvblRvWWpzRGF0YVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2g6IFBhdGNoLCB5anM6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0Y2gucGF0aFxuXG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoU3RyaW5nKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgbWFwIC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkocGF0Y2gpfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoTnVtYmVyKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgYXJyYXkgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGNoXG4gICAgICAgICAgKX1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICBgaW52YWxpZCBwYXRjaCBwYXRoLCBrZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdW5rbm93biBZanMgb2JqZWN0IC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcGF0Y2hcbiAgICAgICAgKX1gXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0Y2gucGF0aFswXSlcblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICB5anMuc2V0KGtleSwgY29udmVydEpzb25Ub1lqc0RhdGEocGF0Y2gudmFsdWUpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShrZXkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgaW52YWxpZCBwYXRjaCBvcGVyYXRpb24gZm9yIG1hcGApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhdGNoLnBhdGhbMF1cblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgaWYgKHlqcy5sZW5ndGggPiBwYXRjaC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCB0b0RlbGV0ZSA9IHlqcy5sZW5ndGggLSBwYXRjaC52YWx1ZVxuICAgICAgICAgICAgICB5anMuZGVsZXRlKHBhdGNoLnZhbHVlLCB0b0RlbGV0ZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeWpzLmxlbmd0aCA8IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gcGF0Y2gudmFsdWUgLSB5anMubGVuZ3RoXG4gICAgICAgICAgICAgIHlqcy5pbnNlcnQoeWpzLmxlbmd0aCwgQXJyYXkodG9JbnNlcnQpLmZpbGwodW5kZWZpbmVkKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhZGRcIjoge1xuICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgYXJyYXlgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIHRoZSBZanMgb2JqZWN0IGlzIG9mIGFuIHVua293biB0eXBlLCBzbyBrZXkgXCIke3BhdGNoLnBhdGhbMF19XCIgY2Fubm90IGJlIGZvdW5kIGluIGl0YFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIHBhdGgsIGl0IGNhbm5vdCBiZSBlbXB0eWApXG4gIH1cbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblZhbHVlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudDogWS5ZRXZlbnQ8YW55Pik6IFBhdGNoW10ge1xuICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllNYXBFdmVudCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGV2ZW50LnRhcmdldCBhcyBZLk1hcDxhbnk+XG5cbiAgICBldmVudC5jaGFuZ2VzLmtleXMuZm9yRWFjaCgoY2hhbmdlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwga2V5XVxuXG4gICAgICBzd2l0Y2ggKGNoYW5nZS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHNvdXJjZS5nZXQoa2V5KSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgb3A6IFwicmVwbGFjZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgdW5zdXBwb3J0ZWQgWWpzIG1hcCBldmVudCBhY3Rpb246ICR7Y2hhbmdlLmFjdGlvbn1gKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllBcnJheUV2ZW50KSB7XG4gICAgbGV0IHJldGFpbiA9IDBcbiAgICBldmVudC5jaGFuZ2VzLmRlbHRhLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5yZXRhaW4pIHtcbiAgICAgICAgcmV0YWluICs9IGNoYW5nZS5yZXRhaW5cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZS5kZWxldGUpIHtcbiAgICAgICAgLy8gcmVtb3ZlIFggaXRlbXMgYXQgcmV0YWluIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZS5kZWxldGU7IGkrKykge1xuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmluc2VydCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGNoYW5nZS5pbnNlcnQpID8gY2hhbmdlLmluc2VydCA6IFtjaGFuZ2UuaW5zZXJ0XVxuICAgICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHYpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0YWluKytcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHBhdGNoZXNcbn1cblxuZnVuY3Rpb24gdG9QbGFpblZhbHVlKHY6IFkuTWFwPGFueT4gfCBZLkFycmF5PGFueT4gfCBKc29uVmFsdWUpIHtcbiAgaWYgKHYgaW5zdGFuY2VvZiBZLk1hcCB8fCB2IGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgIHJldHVybiB2LnRvSlNPTigpIGFzIEpzb25PYmplY3QgfCBKc29uQXJyYXlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdlxuICB9XG59XG4iLCJpbXBvcnQgeyBBbnlUeXBlLCBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcblxuZXhwb3J0IGludGVyZmFjZSBZanNCaW5kaW5nQ29udGV4dCB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogQW55VHlwZVxuICB5anNPcmlnaW46IHN5bWJvbFxufVxuXG5leHBvcnQgY29uc3QgeWpzQmluZGluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFlqc0JpbmRpbmdDb250ZXh0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLCJpbXBvcnQge1xuICBBbnlEYXRhTW9kZWwsXG4gIEFueU1vZGVsLFxuICBBbnlTdGFuZGFyZFR5cGUsXG4gIE1vZGVsQ2xhc3MsXG4gIFBhdGNoLFxuICBUeXBlVG9EYXRhLFxuICBhcHBseVBhdGNoZXMsXG4gIGZyb21TbmFwc2hvdCxcbiAgZ2V0UGFyZW50VG9DaGlsZFBhdGgsXG4gIG9uR2xvYmFsUGF0Y2hlcyxcbiAgb25QYXRjaGVzLFxuICBvblNuYXBzaG90LFxufSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0IH0gZnJvbSBcIi4vYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0XCJcbmltcG9ydCB7IGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyB9IGZyb20gXCIuL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlc1wiXG5pbXBvcnQgeyBZanNCaW5kaW5nQ29udGV4dCwgeWpzQmluZGluZ0NvbnRleHQgfSBmcm9tIFwiLi95anNCaW5kaW5nQ29udGV4dFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kWWpzVG9Nb2J4S2V5c3RvbmU8XG4gIFRUeXBlIGV4dGVuZHMgQW55U3RhbmRhcmRUeXBlIHwgTW9kZWxDbGFzczxBbnlNb2RlbD4gfCBNb2RlbENsYXNzPEFueURhdGFNb2RlbD4sXG4+KHtcbiAgeWpzRG9jLFxuICB5anNPYmplY3QsXG4gIG1vYnhLZXlzdG9uZVR5cGUsXG59OiB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogVFR5cGVcbn0pOiB7XG4gIGJvdW5kT2JqZWN0OiBUeXBlVG9EYXRhPFRUeXBlPlxuICBkaXNwb3NlKCk6IHZvaWRcbiAgeWpzT3JpZ2luOiBzeW1ib2xcbn0ge1xuICBjb25zdCB5anNPcmlnaW4gPSBTeW1ib2woXCJiaW5kWWpzVG9Nb2J4S2V5c3RvbmVUcmFuc2FjdGlvbk9yaWdpblwiKVxuXG4gIGNvbnN0IGJpbmRpbmdDb250ZXh0OiBZanNCaW5kaW5nQ29udGV4dCA9IHtcbiAgICB5anNEb2MsXG4gICAgeWpzT2JqZWN0LFxuICAgIG1vYnhLZXlzdG9uZVR5cGUsXG4gICAgeWpzT3JpZ2luLFxuICB9XG5cbiAgY29uc3QgeWpzSnNvbiA9IHlqc09iamVjdC50b0pTT04oKVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlczogeyB0YXJnZXQ6IG9iamVjdDsgcGF0Y2hlczogUGF0Y2hbXSB9W10gPSBbXVxuXG4gIGNvbnN0IGNyZWF0ZUJvdW5kT2JqZWN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMgPSBvbkdsb2JhbFBhdGNoZXMoKHRhcmdldCwgcGF0Y2hlcykgPT4ge1xuICAgICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLnB1c2goeyB0YXJnZXQsIHBhdGNoZXMgfSlcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvdW5kT2JqZWN0ID0geWpzQmluZGluZ0NvbnRleHQuYXBwbHkoXG4gICAgICAgICgpID0+IGZyb21TbmFwc2hvdChtb2J4S2V5c3RvbmVUeXBlLCB5anNKc29uIGFzIGFueSksXG4gICAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgICApXG4gICAgICB5anNCaW5kaW5nQ29udGV4dC5zZXQoYm91bmRPYmplY3QsIGJpbmRpbmdDb250ZXh0KVxuICAgICAgcmV0dXJuIGJvdW5kT2JqZWN0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJvdW5kT2JqZWN0ID0gY3JlYXRlQm91bmRPYmplY3QoKVxuXG4gIGxldCBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMgPSAwXG5cbiAgLy8gYmluZCBhbnkgY2hhbmdlcyBmcm9tIHlqcyB0byBtb2J4LWtleXN0b25lXG4gIGNvbnN0IG9ic2VydmVEZWVwQ2IgPSAoZXZlbnRzOiBZLllFdmVudDxhbnk+W10pID0+IHtcbiAgICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50cmFuc2FjdGlvbi5vcmlnaW4gIT09IHlqc09yaWdpbikge1xuICAgICAgICBwYXRjaGVzLnB1c2goLi4uY29udmVydFlqc0V2ZW50VG9QYXRjaGVzKGV2ZW50KSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKHBhdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzKytcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcGx5UGF0Y2hlcyhib3VuZE9iamVjdCwgcGF0Y2hlcylcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcy0tXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeWpzT2JqZWN0Lm9ic2VydmVEZWVwKG9ic2VydmVEZWVwQ2IpXG5cbiAgLy8gYmluZCBhbnkgY2hhbmdlcyBmcm9tIG1vYngta2V5c3RvbmUgdG8geWpzXG4gIGxldCBwZW5kaW5nUGF0Y2hlczogUGF0Y2hbXSA9IFtdXG4gIGNvbnN0IGRpc3Bvc2VPblBhdGNoZXMgPSBvblBhdGNoZXMoYm91bmRPYmplY3QsIChwYXRjaGVzKSA9PiB7XG4gICAgaWYgKGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcyA+IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHBlbmRpbmdQYXRjaGVzLnB1c2goLi4ucGF0Y2hlcylcbiAgfSlcblxuICAvLyB0aGlzIGlzIG9ubHkgdXNlZCBzbyB3ZSBjYW4gdHJhbnNhY3QgYWxsIHBhdGNoZXMgdG8gdGhlIHNuYXBzaG90IGJvdW5kYXJ5XG4gIGNvbnN0IGRpc3Bvc2VPblNuYXBzaG90ID0gb25TbmFwc2hvdChib3VuZE9iamVjdCwgKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nUGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhdGNoZXMgPSBwZW5kaW5nUGF0Y2hlc1xuICAgIHBlbmRpbmdQYXRjaGVzID0gW11cblxuICAgIHlqc0RvYy50cmFuc2FjdCgoKSA9PiB7XG4gICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChwYXRjaCwgeWpzT2JqZWN0KVxuICAgICAgfSlcbiAgICB9LCB5anNPcmlnaW4pXG4gIH0pXG5cbiAgLy8gc3luYyBpbml0aWFsIHBhdGNoZXMsIHRoYXQgbWlnaHQgaW5jbHVkZSBzZXR0aW5nIGRlZmF1bHRzLCBJRHMsIGV0Y1xuICB5anNEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBpbml0aWFsaXphdGlvbnMgdW50aWwgd2UgaGl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYm91bmQgb2JqZWN0XG4gICAgLy8gdGhpcyBpcyBiZWNhdXNlIGRlZmF1bHQgb2JqZWN0cyBtaWdodCBiZSBjcmVhdGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdGhlIG1haW4gb2JqZWN0XG4gICAgLy8gYnV0IHdlIGp1c3QgbmVlZCB0byBjYXRjaCB3aGVuIHRob3NlIGFyZSBhY3R1YWxseSBhc3NpZ25lZCB0byB0aGUgYm91bmQgb2JqZWN0XG4gICAgbGV0IGJvdW5kT2JqZWN0Rm91bmQgPSBmYWxzZVxuXG4gICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLmZvckVhY2goKHsgdGFyZ2V0LCBwYXRjaGVzIH0pID0+IHtcbiAgICAgIGlmICghYm91bmRPYmplY3RGb3VuZCkge1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBib3VuZE9iamVjdCkge1xuICAgICAgICAgIHJldHVybiAvLyBza2lwXG4gICAgICAgIH1cbiAgICAgICAgYm91bmRPYmplY3RGb3VuZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50VG9DaGlsZFBhdGggPSBnZXRQYXJlbnRUb0NoaWxkUGF0aChib3VuZE9iamVjdCwgdGFyZ2V0KVxuICAgICAgLy8gdGhpcyBpcyB1bmRlZmluZWQgb25seSBpZiB0YXJnZXQgaXMgbm90IGEgY2hpbGQgb2YgYm91bmRNb2RlbFxuICAgICAgaWYgKHBhcmVudFRvQ2hpbGRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xuICAgICAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJlbnRUb0NoaWxkUGF0aCwgLi4ucGF0Y2gucGF0aF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeWpzT2JqZWN0XG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIHlqc09yaWdpbilcblxuICByZXR1cm4ge1xuICAgIGJvdW5kT2JqZWN0LFxuICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgIGRpc3Bvc2VPblBhdGNoZXMoKVxuICAgICAgZGlzcG9zZU9uU25hcHNob3QoKVxuICAgICAgeWpzT2JqZWN0LnVub2JzZXJ2ZURlZXAob2JzZXJ2ZURlZXBDYilcbiAgICB9LFxuICAgIHlqc09yaWdpbixcbiAgfVxufVxuIl0sIm5hbWVzIjpbImJvdW5kT2JqZWN0Il0sIm1hcHBpbmdzIjoiOztBQUdNLE1BQU8sNkJBQTZCLE1BQUs7QUFBQSxFQUM3QyxZQUFZLEtBQVc7QUFDckIsVUFBTSxHQUFHO0FBR0YsV0FBQSxlQUFlLE1BQU0scUJBQXFCLFNBQVM7QUFBQSxFQUM1RDtBQUNEO0FBS0ssU0FBVSxRQUFRLEtBQVc7QUFDMUIsU0FBQSxJQUFJLHFCQUFxQixHQUFHO0FBQ3JDO0FDZEEsU0FBUyxnQkFBZ0IsR0FBWTtBQUNuQyxRQUFNLElBQUksT0FBTztBQUNqQixTQUFPLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxhQUFhLE1BQU07QUFDdEU7QUFFQSxTQUFTLFlBQVksR0FBWTtBQUN4QixTQUFBLE1BQU0sUUFBUSxDQUFDO0FBQ3hCO0FBRUEsU0FBUyxhQUFhLEdBQVk7QUFDaEMsU0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLE9BQU8sTUFBTTtBQUN6QztBQUVNLFNBQVUscUJBQXFCLEdBQVk7QUFDL0MsTUFBSSxNQUFNLFVBQWEsZ0JBQWdCLENBQUMsR0FBRztBQUNsQyxXQUFBO0FBQUEsRUFDVDtBQUVJLE1BQUEsWUFBWSxDQUFDLEdBQUc7QUFDWixVQUFBLE1BQU0sSUFBSSxFQUFFO0FBQ2xCLHlCQUFxQixLQUFLLENBQUM7QUFDcEIsV0FBQTtBQUFBLEVBQ1Q7QUFFSSxNQUFBLGFBQWEsQ0FBQyxHQUFHO0FBQ2YsUUFBQSxFQUFFLFlBQVksTUFBTTtBQUVmLGFBQUE7QUFBQSxJQUNUO0FBRU0sVUFBQSxNQUFNLElBQUksRUFBRTtBQUNsQiwwQkFBc0IsS0FBSyxDQUFDO0FBQ3JCLFdBQUE7QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLE1BQU0sMkJBQTJCLENBQUMsRUFBRTtBQUNoRDtBQUVnQixTQUFBLHFCQUFxQixN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
291
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMuZXNtLm1qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2Vycm9yLnRzIiwiLi4vc3JjL2JpbmRpbmcvY29udmVydEpzb25Ub1lqc0RhdGEudHMiLCIuLi9zcmMvYmluZGluZy9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMudHMiLCIuLi9zcmMvYmluZGluZy95anNCaW5kaW5nQ29udGV4dC50cyIsIi4uL3NyYy9iaW5kaW5nL2JpbmRZanNUb01vYnhLZXlzdG9uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBtb2J4LWtleXN0b25lLXlqcyBlcnJvci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2J4S2V5c3RvbmVZanNFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xyXG4gICAgc3VwZXIobXNnKVxyXG5cclxuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9ieEtleXN0b25lWWpzRXJyb3IucHJvdG90eXBlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUobXNnOiBzdHJpbmcpIHtcclxuICByZXR1cm4gbmV3IE1vYnhLZXlzdG9uZVlqc0Vycm9yKG1zZylcclxufVxyXG4iLCJpbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvblZhbHVlLCBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25QcmltaXRpdmUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcblxuZnVuY3Rpb24gaXNKc29uUHJpbWl0aXZlKHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvblByaW1pdGl2ZSB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgdlxuICByZXR1cm4gdCA9PT0gXCJzdHJpbmdcIiB8fCB0ID09PSBcIm51bWJlclwiIHx8IHQgPT09IFwiYm9vbGVhblwiIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNKc29uQXJyYXkodjogSnNvblZhbHVlKTogdiBpcyBKc29uQXJyYXkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KVxufVxuXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodjogSnNvblZhbHVlKTogdiBpcyBKc29uT2JqZWN0IHtcbiAgcmV0dXJuICFpc0pzb25BcnJheSh2KSAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEpzb25Ub1lqc0RhdGEodjogSnNvblZhbHVlKSB7XG4gIGlmICh2ID09PSB1bmRlZmluZWQgfHwgaXNKc29uUHJpbWl0aXZlKHYpKSB7XG4gICAgcmV0dXJuIHZcbiAgfVxuXG4gIGlmIChpc0pzb25BcnJheSh2KSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBZLkFycmF5KClcbiAgICBhcHBseUpzb25BcnJheVlBcnJheShhcnIsIHYpXG4gICAgcmV0dXJuIGFyclxuICB9XG5cbiAgaWYgKGlzSnNvbk9iamVjdCh2KSkge1xuICAgIGlmICh2LiRmcm96ZW4gPT09IHRydWUpIHtcbiAgICAgIC8vIGZyb3plbiB2YWx1ZSwgc2F2ZSBhcyBpbW11dGFibGUgb2JqZWN0XG4gICAgICByZXR1cm4gdlxuICAgIH1cblxuICAgIGNvbnN0IG1hcCA9IG5ldyBZLk1hcCgpXG4gICAgYXBwbHlKc29uT2JqZWN0VG9ZTWFwKG1hcCwgdilcbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIHR5cGU6ICR7dn1gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uQXJyYXlZQXJyYXkoZGVzdDogWS5BcnJheTx1bmtub3duPiwgc291cmNlOiBKc29uQXJyYXkpIHtcbiAgZGVzdC5wdXNoKHNvdXJjZS5tYXAoY29udmVydEpzb25Ub1lqc0RhdGEpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uT2JqZWN0VG9ZTWFwKGRlc3Q6IFkuTWFwPHVua25vd24+LCBzb3VyY2U6IEpzb25PYmplY3QpIHtcbiAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICBkZXN0LnNldChrLCBjb252ZXJ0SnNvblRvWWpzRGF0YSh2KSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuaW1wb3J0IHsgY29udmVydEpzb25Ub1lqc0RhdGEgfSBmcm9tIFwiLi9jb252ZXJ0SnNvblRvWWpzRGF0YVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2g6IFBhdGNoLCB5anM6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0Y2gucGF0aFxuXG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoU3RyaW5nKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgbWFwIC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkocGF0Y2gpfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoTnVtYmVyKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgYXJyYXkgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGNoXG4gICAgICAgICAgKX1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICBgaW52YWxpZCBwYXRjaCBwYXRoLCBrZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdW5rbm93biBZanMgb2JqZWN0IC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcGF0Y2hcbiAgICAgICAgKX1gXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0Y2gucGF0aFswXSlcblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICB5anMuc2V0KGtleSwgY29udmVydEpzb25Ub1lqc0RhdGEocGF0Y2gudmFsdWUpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShrZXkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgaW52YWxpZCBwYXRjaCBvcGVyYXRpb24gZm9yIG1hcGApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhdGNoLnBhdGhbMF1cblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgaWYgKHlqcy5sZW5ndGggPiBwYXRjaC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCB0b0RlbGV0ZSA9IHlqcy5sZW5ndGggLSBwYXRjaC52YWx1ZVxuICAgICAgICAgICAgICB5anMuZGVsZXRlKHBhdGNoLnZhbHVlLCB0b0RlbGV0ZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeWpzLmxlbmd0aCA8IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gcGF0Y2gudmFsdWUgLSB5anMubGVuZ3RoXG4gICAgICAgICAgICAgIHlqcy5pbnNlcnQoeWpzLmxlbmd0aCwgQXJyYXkodG9JbnNlcnQpLmZpbGwodW5kZWZpbmVkKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhZGRcIjoge1xuICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgYXJyYXlgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIHRoZSBZanMgb2JqZWN0IGlzIG9mIGFuIHVua293biB0eXBlLCBzbyBrZXkgXCIke3BhdGNoLnBhdGhbMF19XCIgY2Fubm90IGJlIGZvdW5kIGluIGl0YFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIHBhdGgsIGl0IGNhbm5vdCBiZSBlbXB0eWApXG4gIH1cbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblZhbHVlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudDogWS5ZRXZlbnQ8YW55Pik6IFBhdGNoW10ge1xuICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllNYXBFdmVudCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGV2ZW50LnRhcmdldCBhcyBZLk1hcDxhbnk+XG5cbiAgICBldmVudC5jaGFuZ2VzLmtleXMuZm9yRWFjaCgoY2hhbmdlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwga2V5XVxuXG4gICAgICBzd2l0Y2ggKGNoYW5nZS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHNvdXJjZS5nZXQoa2V5KSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgb3A6IFwicmVwbGFjZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgdW5zdXBwb3J0ZWQgWWpzIG1hcCBldmVudCBhY3Rpb246ICR7Y2hhbmdlLmFjdGlvbn1gKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllBcnJheUV2ZW50KSB7XG4gICAgbGV0IHJldGFpbiA9IDBcbiAgICBldmVudC5jaGFuZ2VzLmRlbHRhLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5yZXRhaW4pIHtcbiAgICAgICAgcmV0YWluICs9IGNoYW5nZS5yZXRhaW5cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZS5kZWxldGUpIHtcbiAgICAgICAgLy8gcmVtb3ZlIFggaXRlbXMgYXQgcmV0YWluIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZS5kZWxldGU7IGkrKykge1xuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmluc2VydCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGNoYW5nZS5pbnNlcnQpID8gY2hhbmdlLmluc2VydCA6IFtjaGFuZ2UuaW5zZXJ0XVxuICAgICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHYpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0YWluKytcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHBhdGNoZXNcbn1cblxuZnVuY3Rpb24gdG9QbGFpblZhbHVlKHY6IFkuTWFwPGFueT4gfCBZLkFycmF5PGFueT4gfCBKc29uVmFsdWUpIHtcbiAgaWYgKHYgaW5zdGFuY2VvZiBZLk1hcCB8fCB2IGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgIHJldHVybiB2LnRvSlNPTigpIGFzIEpzb25PYmplY3QgfCBKc29uQXJyYXlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdlxuICB9XG59XG4iLCJpbXBvcnQgeyBBbnlUeXBlLCBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcblxuZXhwb3J0IGludGVyZmFjZSBZanNCaW5kaW5nQ29udGV4dCB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogQW55VHlwZVxuICB5anNPcmlnaW46IHN5bWJvbFxuICBib3VuZE9iamVjdDogdW5rbm93biB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgeWpzQmluZGluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFlqc0JpbmRpbmdDb250ZXh0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLCJpbXBvcnQge1xuICBBbnlEYXRhTW9kZWwsXG4gIEFueU1vZGVsLFxuICBBbnlTdGFuZGFyZFR5cGUsXG4gIE1vZGVsQ2xhc3MsXG4gIFBhdGNoLFxuICBUeXBlVG9EYXRhLFxuICBhcHBseVBhdGNoZXMsXG4gIGZyb21TbmFwc2hvdCxcbiAgZ2V0UGFyZW50VG9DaGlsZFBhdGgsXG4gIG9uR2xvYmFsUGF0Y2hlcyxcbiAgb25QYXRjaGVzLFxuICBvblNuYXBzaG90LFxufSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0IH0gZnJvbSBcIi4vYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0XCJcbmltcG9ydCB7IGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyB9IGZyb20gXCIuL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlc1wiXG5pbXBvcnQgeyBZanNCaW5kaW5nQ29udGV4dCwgeWpzQmluZGluZ0NvbnRleHQgfSBmcm9tIFwiLi95anNCaW5kaW5nQ29udGV4dFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kWWpzVG9Nb2J4S2V5c3RvbmU8XG4gIFRUeXBlIGV4dGVuZHMgQW55U3RhbmRhcmRUeXBlIHwgTW9kZWxDbGFzczxBbnlNb2RlbD4gfCBNb2RlbENsYXNzPEFueURhdGFNb2RlbD4sXG4+KHtcbiAgeWpzRG9jLFxuICB5anNPYmplY3QsXG4gIG1vYnhLZXlzdG9uZVR5cGUsXG59OiB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogVFR5cGVcbn0pOiB7XG4gIGJvdW5kT2JqZWN0OiBUeXBlVG9EYXRhPFRUeXBlPlxuICBkaXNwb3NlKCk6IHZvaWRcbiAgeWpzT3JpZ2luOiBzeW1ib2xcbn0ge1xuICBjb25zdCB5anNPcmlnaW4gPSBTeW1ib2woXCJiaW5kWWpzVG9Nb2J4S2V5c3RvbmVUcmFuc2FjdGlvbk9yaWdpblwiKVxuXG4gIGNvbnN0IGJpbmRpbmdDb250ZXh0OiBZanNCaW5kaW5nQ29udGV4dCA9IHtcbiAgICB5anNEb2MsXG4gICAgeWpzT2JqZWN0LFxuICAgIG1vYnhLZXlzdG9uZVR5cGUsXG4gICAgeWpzT3JpZ2luLFxuICAgIGJvdW5kT2JqZWN0OiB1bmRlZmluZWQsIC8vIG5vdCB5ZXQgY3JlYXRlZFxuICB9XG5cbiAgY29uc3QgeWpzSnNvbiA9IHlqc09iamVjdC50b0pTT04oKVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlczogeyB0YXJnZXQ6IG9iamVjdDsgcGF0Y2hlczogUGF0Y2hbXSB9W10gPSBbXVxuXG4gIGNvbnN0IGNyZWF0ZUJvdW5kT2JqZWN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMgPSBvbkdsb2JhbFBhdGNoZXMoKHRhcmdldCwgcGF0Y2hlcykgPT4ge1xuICAgICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLnB1c2goeyB0YXJnZXQsIHBhdGNoZXMgfSlcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvdW5kT2JqZWN0ID0geWpzQmluZGluZ0NvbnRleHQuYXBwbHkoXG4gICAgICAgICgpID0+IGZyb21TbmFwc2hvdChtb2J4S2V5c3RvbmVUeXBlLCB5anNKc29uIGFzIGFueSksXG4gICAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgICApXG4gICAgICB5anNCaW5kaW5nQ29udGV4dC5zZXQoYm91bmRPYmplY3QsIHsgLi4uYmluZGluZ0NvbnRleHQsIGJvdW5kT2JqZWN0IH0pXG4gICAgICByZXR1cm4gYm91bmRPYmplY3RcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcygpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYm91bmRPYmplY3QgPSBjcmVhdGVCb3VuZE9iamVjdCgpXG5cbiAgbGV0IGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcyA9IDBcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20geWpzIHRvIG1vYngta2V5c3RvbmVcbiAgY29uc3Qgb2JzZXJ2ZURlZXBDYiA9IChldmVudHM6IFkuWUV2ZW50PGFueT5bXSkgPT4ge1xuICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRyYW5zYWN0aW9uLm9yaWdpbiAhPT0geWpzT3JpZ2luKSB7XG4gICAgICAgIHBhdGNoZXMucHVzaCguLi5jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMoZXZlbnQpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAocGF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMrK1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwbHlQYXRjaGVzKGJvdW5kT2JqZWN0LCBwYXRjaGVzKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzLS1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB5anNPYmplY3Qub2JzZXJ2ZURlZXAob2JzZXJ2ZURlZXBDYilcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20gbW9ieC1rZXlzdG9uZSB0byB5anNcbiAgbGV0IHBlbmRpbmdQYXRjaGVzOiBQYXRjaFtdID0gW11cbiAgY29uc3QgZGlzcG9zZU9uUGF0Y2hlcyA9IG9uUGF0Y2hlcyhib3VuZE9iamVjdCwgKHBhdGNoZXMpID0+IHtcbiAgICBpZiAoYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcGVuZGluZ1BhdGNoZXMucHVzaCguLi5wYXRjaGVzKVxuICB9KVxuXG4gIC8vIHRoaXMgaXMgb25seSB1c2VkIHNvIHdlIGNhbiB0cmFuc2FjdCBhbGwgcGF0Y2hlcyB0byB0aGUgc25hcHNob3QgYm91bmRhcnlcbiAgY29uc3QgZGlzcG9zZU9uU25hcHNob3QgPSBvblNuYXBzaG90KGJvdW5kT2JqZWN0LCAoKSA9PiB7XG4gICAgaWYgKHBlbmRpbmdQYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGF0Y2hlcyA9IHBlbmRpbmdQYXRjaGVzXG4gICAgcGVuZGluZ1BhdGNoZXMgPSBbXVxuXG4gICAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHBhdGNoLCB5anNPYmplY3QpXG4gICAgICB9KVxuICAgIH0sIHlqc09yaWdpbilcbiAgfSlcblxuICAvLyBzeW5jIGluaXRpYWwgcGF0Y2hlcywgdGhhdCBtaWdodCBpbmNsdWRlIHNldHRpbmcgZGVmYXVsdHMsIElEcywgZXRjXG4gIHlqc0RvYy50cmFuc2FjdCgoKSA9PiB7XG4gICAgLy8gd2UgbmVlZCB0byBza2lwIGluaXRpYWxpemF0aW9ucyB1bnRpbCB3ZSBoaXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBib3VuZCBvYmplY3RcbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgZGVmYXVsdCBvYmplY3RzIG1pZ2h0IGJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgbWFpbiBvYmplY3RcbiAgICAvLyBidXQgd2UganVzdCBuZWVkIHRvIGNhdGNoIHdoZW4gdGhvc2UgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIHRoZSBib3VuZCBvYmplY3RcbiAgICBsZXQgYm91bmRPYmplY3RGb3VuZCA9IGZhbHNlXG5cbiAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMuZm9yRWFjaCgoeyB0YXJnZXQsIHBhdGNoZXMgfSkgPT4ge1xuICAgICAgaWYgKCFib3VuZE9iamVjdEZvdW5kKSB7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IGJvdW5kT2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIC8vIHNraXBcbiAgICAgICAgfVxuICAgICAgICBib3VuZE9iamVjdEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnRUb0NoaWxkUGF0aCA9IGdldFBhcmVudFRvQ2hpbGRQYXRoKGJvdW5kT2JqZWN0LCB0YXJnZXQpXG4gICAgICAvLyB0aGlzIGlzIHVuZGVmaW5lZCBvbmx5IGlmIHRhcmdldCBpcyBub3QgYSBjaGlsZCBvZiBib3VuZE1vZGVsXG4gICAgICBpZiAocGFyZW50VG9DaGlsZFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgICAgICAgcGF0aDogWy4uLnBhcmVudFRvQ2hpbGRQYXRoLCAuLi5wYXRjaC5wYXRoXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5anNPYmplY3RcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgeWpzT3JpZ2luKVxuXG4gIHJldHVybiB7XG4gICAgYm91bmRPYmplY3QsXG4gICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgZGlzcG9zZU9uUGF0Y2hlcygpXG4gICAgICBkaXNwb3NlT25TbmFwc2hvdCgpXG4gICAgICB5anNPYmplY3QudW5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxuICAgIH0sXG4gICAgeWpzT3JpZ2luLFxuICB9XG59XG4iXSwibmFtZXMiOlsiYm91bmRPYmplY3QiXSwibWFwcGluZ3MiOiI7O0FBR00sTUFBTyw2QkFBNkIsTUFBSztBQUFBLEVBQzdDLFlBQVksS0FBVztBQUNyQixVQUFNLEdBQUc7QUFHRixXQUFBLGVBQWUsTUFBTSxxQkFBcUIsU0FBUztBQUFBLEVBQzVEO0FBQ0Q7QUFLSyxTQUFVLFFBQVEsS0FBVztBQUMxQixTQUFBLElBQUkscUJBQXFCLEdBQUc7QUFDckM7QUNkQSxTQUFTLGdCQUFnQixHQUFZO0FBQ25DLFFBQU0sSUFBSSxPQUFPO0FBQ2pCLFNBQU8sTUFBTSxZQUFZLE1BQU0sWUFBWSxNQUFNLGFBQWEsTUFBTTtBQUN0RTtBQUVBLFNBQVMsWUFBWSxHQUFZO0FBQ3hCLFNBQUEsTUFBTSxRQUFRLENBQUM7QUFDeEI7QUFFQSxTQUFTLGFBQWEsR0FBWTtBQUNoQyxTQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssT0FBTyxNQUFNO0FBQ3pDO0FBRU0sU0FBVSxxQkFBcUIsR0FBWTtBQUMvQyxNQUFJLE1BQU0sVUFBYSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ2xDLFdBQUE7QUFBQSxFQUNUO0FBRUksTUFBQSxZQUFZLENBQUMsR0FBRztBQUNaLFVBQUEsTUFBTSxJQUFJLEVBQUU7QUFDbEIseUJBQXFCLEtBQUssQ0FBQztBQUNwQixXQUFBO0FBQUEsRUFDVDtBQUVJLE1BQUEsYUFBYSxDQUFDLEdBQUc7QUFDZixRQUFBLEVBQUUsWUFBWSxNQUFNO0FBRWYsYUFBQTtBQUFBLElBQ1Q7QUFFTSxVQUFBLE1BQU0sSUFBSSxFQUFFO0FB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
@@ -194,7 +194,9 @@ function bindYjsToMobxKeystone({ yjsDoc, yjsObject, mobxKeystoneType }) {
194
194
  yjsDoc,
195
195
  yjsObject,
196
196
  mobxKeystoneType,
197
- yjsOrigin
197
+ yjsOrigin,
198
+ boundObject: void 0
199
+ // not yet created
198
200
  };
199
201
  const yjsJson = yjsObject.toJSON();
200
202
  const initializationGlobalPatches = [];
@@ -204,7 +206,7 @@ function bindYjsToMobxKeystone({ yjsDoc, yjsObject, mobxKeystoneType }) {
204
206
  });
205
207
  try {
206
208
  const boundObject2 = yjsBindingContext.apply(() => fromSnapshot(mobxKeystoneType, yjsJson), bindingContext);
207
- yjsBindingContext.set(boundObject2, bindingContext);
209
+ yjsBindingContext.set(boundObject2, { ...bindingContext, boundObject: boundObject2 });
208
210
  return boundObject2;
209
211
  } finally {
210
212
  disposeOnGlobalPatches();
@@ -286,4 +288,4 @@ export {
286
288
  convertJsonToYjsData,
287
289
  yjsBindingContext
288
290
  };
289
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMuZXNtLm1qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2Vycm9yLnRzIiwiLi4vc3JjL2JpbmRpbmcvY29udmVydEpzb25Ub1lqc0RhdGEudHMiLCIuLi9zcmMvYmluZGluZy9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMudHMiLCIuLi9zcmMvYmluZGluZy95anNCaW5kaW5nQ29udGV4dC50cyIsIi4uL3NyYy9iaW5kaW5nL2JpbmRZanNUb01vYnhLZXlzdG9uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBtb2J4LWtleXN0b25lLXlqcyBlcnJvci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2J4S2V5c3RvbmVZanNFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xyXG4gICAgc3VwZXIobXNnKVxyXG5cclxuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9ieEtleXN0b25lWWpzRXJyb3IucHJvdG90eXBlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUobXNnOiBzdHJpbmcpIHtcclxuICByZXR1cm4gbmV3IE1vYnhLZXlzdG9uZVlqc0Vycm9yKG1zZylcclxufVxyXG4iLCJpbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvblZhbHVlLCBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25QcmltaXRpdmUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcblxuZnVuY3Rpb24gaXNKc29uUHJpbWl0aXZlKHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvblByaW1pdGl2ZSB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgdlxuICByZXR1cm4gdCA9PT0gXCJzdHJpbmdcIiB8fCB0ID09PSBcIm51bWJlclwiIHx8IHQgPT09IFwiYm9vbGVhblwiIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNKc29uQXJyYXkodjogSnNvblZhbHVlKTogdiBpcyBKc29uQXJyYXkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KVxufVxuXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodjogSnNvblZhbHVlKTogdiBpcyBKc29uT2JqZWN0IHtcbiAgcmV0dXJuICFpc0pzb25BcnJheSh2KSAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEpzb25Ub1lqc0RhdGEodjogSnNvblZhbHVlKSB7XG4gIGlmICh2ID09PSB1bmRlZmluZWQgfHwgaXNKc29uUHJpbWl0aXZlKHYpKSB7XG4gICAgcmV0dXJuIHZcbiAgfVxuXG4gIGlmIChpc0pzb25BcnJheSh2KSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBZLkFycmF5KClcbiAgICBhcHBseUpzb25BcnJheVlBcnJheShhcnIsIHYpXG4gICAgcmV0dXJuIGFyclxuICB9XG5cbiAgaWYgKGlzSnNvbk9iamVjdCh2KSkge1xuICAgIGlmICh2LiRmcm96ZW4gPT09IHRydWUpIHtcbiAgICAgIC8vIGZyb3plbiB2YWx1ZSwgc2F2ZSBhcyBpbW11dGFibGUgb2JqZWN0XG4gICAgICByZXR1cm4gdlxuICAgIH1cblxuICAgIGNvbnN0IG1hcCA9IG5ldyBZLk1hcCgpXG4gICAgYXBwbHlKc29uT2JqZWN0VG9ZTWFwKG1hcCwgdilcbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIHR5cGU6ICR7dn1gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uQXJyYXlZQXJyYXkoZGVzdDogWS5BcnJheTx1bmtub3duPiwgc291cmNlOiBKc29uQXJyYXkpIHtcbiAgZGVzdC5wdXNoKHNvdXJjZS5tYXAoY29udmVydEpzb25Ub1lqc0RhdGEpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uT2JqZWN0VG9ZTWFwKGRlc3Q6IFkuTWFwPHVua25vd24+LCBzb3VyY2U6IEpzb25PYmplY3QpIHtcbiAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICBkZXN0LnNldChrLCBjb252ZXJ0SnNvblRvWWpzRGF0YSh2KSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuaW1wb3J0IHsgY29udmVydEpzb25Ub1lqc0RhdGEgfSBmcm9tIFwiLi9jb252ZXJ0SnNvblRvWWpzRGF0YVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2g6IFBhdGNoLCB5anM6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0Y2gucGF0aFxuXG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoU3RyaW5nKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgbWFwIC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkocGF0Y2gpfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoTnVtYmVyKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgYXJyYXkgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGNoXG4gICAgICAgICAgKX1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICBgaW52YWxpZCBwYXRjaCBwYXRoLCBrZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdW5rbm93biBZanMgb2JqZWN0IC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcGF0Y2hcbiAgICAgICAgKX1gXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0Y2gucGF0aFswXSlcblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICB5anMuc2V0KGtleSwgY29udmVydEpzb25Ub1lqc0RhdGEocGF0Y2gudmFsdWUpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShrZXkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgaW52YWxpZCBwYXRjaCBvcGVyYXRpb24gZm9yIG1hcGApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhdGNoLnBhdGhbMF1cblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgaWYgKHlqcy5sZW5ndGggPiBwYXRjaC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCB0b0RlbGV0ZSA9IHlqcy5sZW5ndGggLSBwYXRjaC52YWx1ZVxuICAgICAgICAgICAgICB5anMuZGVsZXRlKHBhdGNoLnZhbHVlLCB0b0RlbGV0ZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeWpzLmxlbmd0aCA8IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gcGF0Y2gudmFsdWUgLSB5anMubGVuZ3RoXG4gICAgICAgICAgICAgIHlqcy5pbnNlcnQoeWpzLmxlbmd0aCwgQXJyYXkodG9JbnNlcnQpLmZpbGwodW5kZWZpbmVkKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhZGRcIjoge1xuICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgYXJyYXlgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIHRoZSBZanMgb2JqZWN0IGlzIG9mIGFuIHVua293biB0eXBlLCBzbyBrZXkgXCIke3BhdGNoLnBhdGhbMF19XCIgY2Fubm90IGJlIGZvdW5kIGluIGl0YFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIHBhdGgsIGl0IGNhbm5vdCBiZSBlbXB0eWApXG4gIH1cbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblZhbHVlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudDogWS5ZRXZlbnQ8YW55Pik6IFBhdGNoW10ge1xuICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllNYXBFdmVudCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGV2ZW50LnRhcmdldCBhcyBZLk1hcDxhbnk+XG5cbiAgICBldmVudC5jaGFuZ2VzLmtleXMuZm9yRWFjaCgoY2hhbmdlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwga2V5XVxuXG4gICAgICBzd2l0Y2ggKGNoYW5nZS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHNvdXJjZS5nZXQoa2V5KSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgb3A6IFwicmVwbGFjZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgdW5zdXBwb3J0ZWQgWWpzIG1hcCBldmVudCBhY3Rpb246ICR7Y2hhbmdlLmFjdGlvbn1gKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllBcnJheUV2ZW50KSB7XG4gICAgbGV0IHJldGFpbiA9IDBcbiAgICBldmVudC5jaGFuZ2VzLmRlbHRhLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5yZXRhaW4pIHtcbiAgICAgICAgcmV0YWluICs9IGNoYW5nZS5yZXRhaW5cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZS5kZWxldGUpIHtcbiAgICAgICAgLy8gcmVtb3ZlIFggaXRlbXMgYXQgcmV0YWluIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZS5kZWxldGU7IGkrKykge1xuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmluc2VydCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGNoYW5nZS5pbnNlcnQpID8gY2hhbmdlLmluc2VydCA6IFtjaGFuZ2UuaW5zZXJ0XVxuICAgICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHYpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0YWluKytcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHBhdGNoZXNcbn1cblxuZnVuY3Rpb24gdG9QbGFpblZhbHVlKHY6IFkuTWFwPGFueT4gfCBZLkFycmF5PGFueT4gfCBKc29uVmFsdWUpIHtcbiAgaWYgKHYgaW5zdGFuY2VvZiBZLk1hcCB8fCB2IGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgIHJldHVybiB2LnRvSlNPTigpIGFzIEpzb25PYmplY3QgfCBKc29uQXJyYXlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdlxuICB9XG59XG4iLCJpbXBvcnQgeyBBbnlUeXBlLCBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcblxuZXhwb3J0IGludGVyZmFjZSBZanNCaW5kaW5nQ29udGV4dCB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogQW55VHlwZVxuICB5anNPcmlnaW46IHN5bWJvbFxufVxuXG5leHBvcnQgY29uc3QgeWpzQmluZGluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFlqc0JpbmRpbmdDb250ZXh0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLCJpbXBvcnQge1xuICBBbnlEYXRhTW9kZWwsXG4gIEFueU1vZGVsLFxuICBBbnlTdGFuZGFyZFR5cGUsXG4gIE1vZGVsQ2xhc3MsXG4gIFBhdGNoLFxuICBUeXBlVG9EYXRhLFxuICBhcHBseVBhdGNoZXMsXG4gIGZyb21TbmFwc2hvdCxcbiAgZ2V0UGFyZW50VG9DaGlsZFBhdGgsXG4gIG9uR2xvYmFsUGF0Y2hlcyxcbiAgb25QYXRjaGVzLFxuICBvblNuYXBzaG90LFxufSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0IH0gZnJvbSBcIi4vYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0XCJcbmltcG9ydCB7IGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyB9IGZyb20gXCIuL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlc1wiXG5pbXBvcnQgeyBZanNCaW5kaW5nQ29udGV4dCwgeWpzQmluZGluZ0NvbnRleHQgfSBmcm9tIFwiLi95anNCaW5kaW5nQ29udGV4dFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kWWpzVG9Nb2J4S2V5c3RvbmU8XG4gIFRUeXBlIGV4dGVuZHMgQW55U3RhbmRhcmRUeXBlIHwgTW9kZWxDbGFzczxBbnlNb2RlbD4gfCBNb2RlbENsYXNzPEFueURhdGFNb2RlbD4sXG4+KHtcbiAgeWpzRG9jLFxuICB5anNPYmplY3QsXG4gIG1vYnhLZXlzdG9uZVR5cGUsXG59OiB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogVFR5cGVcbn0pOiB7XG4gIGJvdW5kT2JqZWN0OiBUeXBlVG9EYXRhPFRUeXBlPlxuICBkaXNwb3NlKCk6IHZvaWRcbiAgeWpzT3JpZ2luOiBzeW1ib2xcbn0ge1xuICBjb25zdCB5anNPcmlnaW4gPSBTeW1ib2woXCJiaW5kWWpzVG9Nb2J4S2V5c3RvbmVUcmFuc2FjdGlvbk9yaWdpblwiKVxuXG4gIGNvbnN0IGJpbmRpbmdDb250ZXh0OiBZanNCaW5kaW5nQ29udGV4dCA9IHtcbiAgICB5anNEb2MsXG4gICAgeWpzT2JqZWN0LFxuICAgIG1vYnhLZXlzdG9uZVR5cGUsXG4gICAgeWpzT3JpZ2luLFxuICB9XG5cbiAgY29uc3QgeWpzSnNvbiA9IHlqc09iamVjdC50b0pTT04oKVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlczogeyB0YXJnZXQ6IG9iamVjdDsgcGF0Y2hlczogUGF0Y2hbXSB9W10gPSBbXVxuXG4gIGNvbnN0IGNyZWF0ZUJvdW5kT2JqZWN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMgPSBvbkdsb2JhbFBhdGNoZXMoKHRhcmdldCwgcGF0Y2hlcykgPT4ge1xuICAgICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLnB1c2goeyB0YXJnZXQsIHBhdGNoZXMgfSlcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvdW5kT2JqZWN0ID0geWpzQmluZGluZ0NvbnRleHQuYXBwbHkoXG4gICAgICAgICgpID0+IGZyb21TbmFwc2hvdChtb2J4S2V5c3RvbmVUeXBlLCB5anNKc29uIGFzIGFueSksXG4gICAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgICApXG4gICAgICB5anNCaW5kaW5nQ29udGV4dC5zZXQoYm91bmRPYmplY3QsIGJpbmRpbmdDb250ZXh0KVxuICAgICAgcmV0dXJuIGJvdW5kT2JqZWN0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJvdW5kT2JqZWN0ID0gY3JlYXRlQm91bmRPYmplY3QoKVxuXG4gIGxldCBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMgPSAwXG5cbiAgLy8gYmluZCBhbnkgY2hhbmdlcyBmcm9tIHlqcyB0byBtb2J4LWtleXN0b25lXG4gIGNvbnN0IG9ic2VydmVEZWVwQ2IgPSAoZXZlbnRzOiBZLllFdmVudDxhbnk+W10pID0+IHtcbiAgICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50cmFuc2FjdGlvbi5vcmlnaW4gIT09IHlqc09yaWdpbikge1xuICAgICAgICBwYXRjaGVzLnB1c2goLi4uY29udmVydFlqc0V2ZW50VG9QYXRjaGVzKGV2ZW50KSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKHBhdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzKytcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcGx5UGF0Y2hlcyhib3VuZE9iamVjdCwgcGF0Y2hlcylcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcy0tXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgeWpzT2JqZWN0Lm9ic2VydmVEZWVwKG9ic2VydmVEZWVwQ2IpXG5cbiAgLy8gYmluZCBhbnkgY2hhbmdlcyBmcm9tIG1vYngta2V5c3RvbmUgdG8geWpzXG4gIGxldCBwZW5kaW5nUGF0Y2hlczogUGF0Y2hbXSA9IFtdXG4gIGNvbnN0IGRpc3Bvc2VPblBhdGNoZXMgPSBvblBhdGNoZXMoYm91bmRPYmplY3QsIChwYXRjaGVzKSA9PiB7XG4gICAgaWYgKGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcyA+IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHBlbmRpbmdQYXRjaGVzLnB1c2goLi4ucGF0Y2hlcylcbiAgfSlcblxuICAvLyB0aGlzIGlzIG9ubHkgdXNlZCBzbyB3ZSBjYW4gdHJhbnNhY3QgYWxsIHBhdGNoZXMgdG8gdGhlIHNuYXBzaG90IGJvdW5kYXJ5XG4gIGNvbnN0IGRpc3Bvc2VPblNuYXBzaG90ID0gb25TbmFwc2hvdChib3VuZE9iamVjdCwgKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nUGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhdGNoZXMgPSBwZW5kaW5nUGF0Y2hlc1xuICAgIHBlbmRpbmdQYXRjaGVzID0gW11cblxuICAgIHlqc0RvYy50cmFuc2FjdCgoKSA9PiB7XG4gICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChwYXRjaCwgeWpzT2JqZWN0KVxuICAgICAgfSlcbiAgICB9LCB5anNPcmlnaW4pXG4gIH0pXG5cbiAgLy8gc3luYyBpbml0aWFsIHBhdGNoZXMsIHRoYXQgbWlnaHQgaW5jbHVkZSBzZXR0aW5nIGRlZmF1bHRzLCBJRHMsIGV0Y1xuICB5anNEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgIC8vIHdlIG5lZWQgdG8gc2tpcCBpbml0aWFsaXphdGlvbnMgdW50aWwgd2UgaGl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYm91bmQgb2JqZWN0XG4gICAgLy8gdGhpcyBpcyBiZWNhdXNlIGRlZmF1bHQgb2JqZWN0cyBtaWdodCBiZSBjcmVhdGVkIGFuZCBpbml0aWFsaXplZCBiZWZvcmUgdGhlIG1haW4gb2JqZWN0XG4gICAgLy8gYnV0IHdlIGp1c3QgbmVlZCB0byBjYXRjaCB3aGVuIHRob3NlIGFyZSBhY3R1YWxseSBhc3NpZ25lZCB0byB0aGUgYm91bmQgb2JqZWN0XG4gICAgbGV0IGJvdW5kT2JqZWN0Rm91bmQgPSBmYWxzZVxuXG4gICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLmZvckVhY2goKHsgdGFyZ2V0LCBwYXRjaGVzIH0pID0+IHtcbiAgICAgIGlmICghYm91bmRPYmplY3RGb3VuZCkge1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBib3VuZE9iamVjdCkge1xuICAgICAgICAgIHJldHVybiAvLyBza2lwXG4gICAgICAgIH1cbiAgICAgICAgYm91bmRPYmplY3RGb3VuZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50VG9DaGlsZFBhdGggPSBnZXRQYXJlbnRUb0NoaWxkUGF0aChib3VuZE9iamVjdCwgdGFyZ2V0KVxuICAgICAgLy8gdGhpcyBpcyB1bmRlZmluZWQgb25seSBpZiB0YXJnZXQgaXMgbm90IGEgY2hpbGQgb2YgYm91bmRNb2RlbFxuICAgICAgaWYgKHBhcmVudFRvQ2hpbGRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xuICAgICAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucGF0Y2gsXG4gICAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJlbnRUb0NoaWxkUGF0aCwgLi4ucGF0Y2gucGF0aF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeWpzT2JqZWN0XG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIHlqc09yaWdpbilcblxuICByZXR1cm4ge1xuICAgIGJvdW5kT2JqZWN0LFxuICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgIGRpc3Bvc2VPblBhdGNoZXMoKVxuICAgICAgZGlzcG9zZU9uU25hcHNob3QoKVxuICAgICAgeWpzT2JqZWN0LnVub2JzZXJ2ZURlZXAob2JzZXJ2ZURlZXBDYilcbiAgICB9LFxuICAgIHlqc09yaWdpbixcbiAgfVxufVxuIl0sIm5hbWVzIjpbImJvdW5kT2JqZWN0Il0sIm1hcHBpbmdzIjoiOztBQUdNLE1BQU8sNkJBQTZCLE1BQUs7QUFBQSxFQUM3QyxZQUFZLEtBQVc7QUFDckIsVUFBTSxHQUFHO0FBR0YsV0FBQSxlQUFlLE1BQU0scUJBQXFCLFNBQVM7QUFBQSxFQUM1RDtBQUNEO0FBS0ssU0FBVSxRQUFRLEtBQVc7QUFDMUIsU0FBQSxJQUFJLHFCQUFxQixHQUFHO0FBQ3JDO0FDZEEsU0FBUyxnQkFBZ0IsR0FBWTtBQUNuQyxRQUFNLElBQUksT0FBTztBQUNqQixTQUFPLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxhQUFhLE1BQU07QUFDdEU7QUFFQSxTQUFTLFlBQVksR0FBWTtBQUN4QixTQUFBLE1BQU0sUUFBUSxDQUFDO0FBQ3hCO0FBRUEsU0FBUyxhQUFhLEdBQVk7QUFDaEMsU0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLE9BQU8sTUFBTTtBQUN6QztBQUVNLFNBQVUscUJBQXFCLEdBQVk7QUFDL0MsTUFBSSxNQUFNLFVBQWEsZ0JBQWdCLENBQUMsR0FBRztBQUNsQyxXQUFBO0FBQUEsRUFDVDtBQUVJLE1BQUEsWUFBWSxDQUFDLEdBQUc7QUFDWixVQUFBLE1BQU0sSUFBSSxFQUFFO0FBQ2xCLHlCQUFxQixLQUFLLENBQUM7QUFDcEIsV0FBQTtBQUFBLEVBQ1Q7QUFFSSxNQUFBLGFBQWEsQ0FBQyxHQUFHO0FBQ2YsUUFBQSxFQUFFLFlBQVksTUFBTTtBQUVmLGFBQUE7QUFBQSxJQUNUO0FBRU0sVUFBQSxNQUFNLElBQUksRUFBRTtBQUNsQiwwQkFBc0IsS0FBSyxDQUFDO0FBQ3JCLFdBQUE7QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLE1BQU0sMkJBQTJCLENBQUMsRUFBRTtBQUNoRDtBQUVnQixTQUFBLHFCQUFxQixN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
291
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMuZXNtLm1qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2Vycm9yLnRzIiwiLi4vc3JjL2JpbmRpbmcvY29udmVydEpzb25Ub1lqc0RhdGEudHMiLCIuLi9zcmMvYmluZGluZy9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMudHMiLCIuLi9zcmMvYmluZGluZy95anNCaW5kaW5nQ29udGV4dC50cyIsIi4uL3NyYy9iaW5kaW5nL2JpbmRZanNUb01vYnhLZXlzdG9uZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQSBtb2J4LWtleXN0b25lLXlqcyBlcnJvci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2J4S2V5c3RvbmVZanNFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZykge1xyXG4gICAgc3VwZXIobXNnKVxyXG5cclxuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTW9ieEtleXN0b25lWWpzRXJyb3IucHJvdG90eXBlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZhaWx1cmUobXNnOiBzdHJpbmcpIHtcclxuICByZXR1cm4gbmV3IE1vYnhLZXlzdG9uZVlqc0Vycm9yKG1zZylcclxufVxyXG4iLCJpbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvblZhbHVlLCBKc29uQXJyYXksIEpzb25PYmplY3QsIEpzb25QcmltaXRpdmUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcblxuZnVuY3Rpb24gaXNKc29uUHJpbWl0aXZlKHY6IEpzb25WYWx1ZSk6IHYgaXMgSnNvblByaW1pdGl2ZSB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgdlxuICByZXR1cm4gdCA9PT0gXCJzdHJpbmdcIiB8fCB0ID09PSBcIm51bWJlclwiIHx8IHQgPT09IFwiYm9vbGVhblwiIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNKc29uQXJyYXkodjogSnNvblZhbHVlKTogdiBpcyBKc29uQXJyYXkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KVxufVxuXG5mdW5jdGlvbiBpc0pzb25PYmplY3QodjogSnNvblZhbHVlKTogdiBpcyBKc29uT2JqZWN0IHtcbiAgcmV0dXJuICFpc0pzb25BcnJheSh2KSAmJiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEpzb25Ub1lqc0RhdGEodjogSnNvblZhbHVlKSB7XG4gIGlmICh2ID09PSB1bmRlZmluZWQgfHwgaXNKc29uUHJpbWl0aXZlKHYpKSB7XG4gICAgcmV0dXJuIHZcbiAgfVxuXG4gIGlmIChpc0pzb25BcnJheSh2KSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBZLkFycmF5KClcbiAgICBhcHBseUpzb25BcnJheVlBcnJheShhcnIsIHYpXG4gICAgcmV0dXJuIGFyclxuICB9XG5cbiAgaWYgKGlzSnNvbk9iamVjdCh2KSkge1xuICAgIGlmICh2LiRmcm96ZW4gPT09IHRydWUpIHtcbiAgICAgIC8vIGZyb3plbiB2YWx1ZSwgc2F2ZSBhcyBpbW11dGFibGUgb2JqZWN0XG4gICAgICByZXR1cm4gdlxuICAgIH1cblxuICAgIGNvbnN0IG1hcCA9IG5ldyBZLk1hcCgpXG4gICAgYXBwbHlKc29uT2JqZWN0VG9ZTWFwKG1hcCwgdilcbiAgICByZXR1cm4gbWFwXG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHZhbHVlIHR5cGU6ICR7dn1gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uQXJyYXlZQXJyYXkoZGVzdDogWS5BcnJheTx1bmtub3duPiwgc291cmNlOiBKc29uQXJyYXkpIHtcbiAgZGVzdC5wdXNoKHNvdXJjZS5tYXAoY29udmVydEpzb25Ub1lqc0RhdGEpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlKc29uT2JqZWN0VG9ZTWFwKGRlc3Q6IFkuTWFwPHVua25vd24+LCBzb3VyY2U6IEpzb25PYmplY3QpIHtcbiAgT2JqZWN0LmVudHJpZXMoc291cmNlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICBkZXN0LnNldChrLCBjb252ZXJ0SnNvblRvWWpzRGF0YSh2KSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuaW1wb3J0IHsgY29udmVydEpzb25Ub1lqc0RhdGEgfSBmcm9tIFwiLi9jb252ZXJ0SnNvblRvWWpzRGF0YVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2g6IFBhdGNoLCB5anM6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IFtrZXksIC4uLnJlc3RdID0gcGF0Y2gucGF0aFxuXG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoU3RyaW5nKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgbWFwIC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkocGF0Y2gpfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIGlmICh5anMgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHlqcy5nZXQoTnVtYmVyKGtleSkpXG4gICAgICBpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiBZanMgYXJyYXkgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIHBhdGNoXG4gICAgICAgICAgKX1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdCh7IC4uLnBhdGNoLCBwYXRoOiByZXN0IH0sIGNoaWxkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFxuICAgICAgICBgaW52YWxpZCBwYXRjaCBwYXRoLCBrZXkgXCIke2tleX1cIiBub3QgZm91bmQgaW4gdW5rbm93biBZanMgb2JqZWN0IC0gcGF0Y2g6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcGF0Y2hcbiAgICAgICAgKX1gXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKHBhdGNoLnBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHlqcyBpbnN0YW5jZW9mIFkuTWFwKSB7XG4gICAgICBjb25zdCBrZXkgPSBTdHJpbmcocGF0Y2gucGF0aFswXSlcblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICB5anMuc2V0KGtleSwgY29udmVydEpzb25Ub1lqc0RhdGEocGF0Y2gudmFsdWUpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShrZXkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgaW52YWxpZCBwYXRjaCBvcGVyYXRpb24gZm9yIG1hcGApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGtleSA9IHBhdGNoLnBhdGhbMF1cblxuICAgICAgc3dpdGNoIChwYXRjaC5vcCkge1xuICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgaWYgKHlqcy5sZW5ndGggPiBwYXRjaC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCB0b0RlbGV0ZSA9IHlqcy5sZW5ndGggLSBwYXRjaC52YWx1ZVxuICAgICAgICAgICAgICB5anMuZGVsZXRlKHBhdGNoLnZhbHVlLCB0b0RlbGV0ZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoeWpzLmxlbmd0aCA8IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gcGF0Y2gudmFsdWUgLSB5anMubGVuZ3RoXG4gICAgICAgICAgICAgIHlqcy5pbnNlcnQoeWpzLmxlbmd0aCwgQXJyYXkodG9JbnNlcnQpLmZpbGwodW5kZWZpbmVkKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhZGRcIjoge1xuICAgICAgICAgIHlqcy5pbnNlcnQoTnVtYmVyKGtleSksIFtjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSldKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgeWpzLmRlbGV0ZShOdW1iZXIoa2V5KSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgYXJyYXlgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIHRoZSBZanMgb2JqZWN0IGlzIG9mIGFuIHVua293biB0eXBlLCBzbyBrZXkgXCIke3BhdGNoLnBhdGhbMF19XCIgY2Fubm90IGJlIGZvdW5kIGluIGl0YFxuICAgICAgKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIHBhdGgsIGl0IGNhbm5vdCBiZSBlbXB0eWApXG4gIH1cbn1cbiIsImltcG9ydCB7IFBhdGNoIH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcbmltcG9ydCB7IEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblZhbHVlIH0gZnJvbSBcIi4uL2pzb25UeXBlc1wiXG5pbXBvcnQgeyBmYWlsdXJlIH0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudDogWS5ZRXZlbnQ8YW55Pik6IFBhdGNoW10ge1xuICBjb25zdCBwYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllNYXBFdmVudCkge1xuICAgIGNvbnN0IHNvdXJjZSA9IGV2ZW50LnRhcmdldCBhcyBZLk1hcDxhbnk+XG5cbiAgICBldmVudC5jaGFuZ2VzLmtleXMuZm9yRWFjaCgoY2hhbmdlLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwga2V5XVxuXG4gICAgICBzd2l0Y2ggKGNoYW5nZS5hY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHNvdXJjZS5nZXQoa2V5KSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgICAgICBwYXRjaGVzLnB1c2goe1xuICAgICAgICAgICAgb3A6IFwicmVwbGFjZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShgdW5zdXBwb3J0ZWQgWWpzIG1hcCBldmVudCBhY3Rpb246ICR7Y2hhbmdlLmFjdGlvbn1gKVxuICAgICAgfVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBZLllBcnJheUV2ZW50KSB7XG4gICAgbGV0IHJldGFpbiA9IDBcbiAgICBldmVudC5jaGFuZ2VzLmRlbHRhLmZvckVhY2goKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5yZXRhaW4pIHtcbiAgICAgICAgcmV0YWluICs9IGNoYW5nZS5yZXRhaW5cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZS5kZWxldGUpIHtcbiAgICAgICAgLy8gcmVtb3ZlIFggaXRlbXMgYXQgcmV0YWluIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZS5kZWxldGU7IGkrKykge1xuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZW1vdmVcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmluc2VydCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGNoYW5nZS5pbnNlcnQpID8gY2hhbmdlLmluc2VydCA6IFtjaGFuZ2UuaW5zZXJ0XVxuICAgICAgICBuZXdWYWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBbLi4uZXZlbnQucGF0aCwgcmV0YWluXVxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJhZGRcIixcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB2YWx1ZTogdG9QbGFpblZhbHVlKHYpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0YWluKytcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHBhdGNoZXNcbn1cblxuZnVuY3Rpb24gdG9QbGFpblZhbHVlKHY6IFkuTWFwPGFueT4gfCBZLkFycmF5PGFueT4gfCBKc29uVmFsdWUpIHtcbiAgaWYgKHYgaW5zdGFuY2VvZiBZLk1hcCB8fCB2IGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgIHJldHVybiB2LnRvSlNPTigpIGFzIEpzb25PYmplY3QgfCBKc29uQXJyYXlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdlxuICB9XG59XG4iLCJpbXBvcnQgeyBBbnlUeXBlLCBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIm1vYngta2V5c3RvbmVcIlxuaW1wb3J0ICogYXMgWSBmcm9tIFwieWpzXCJcblxuZXhwb3J0IGludGVyZmFjZSBZanNCaW5kaW5nQ29udGV4dCB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogQW55VHlwZVxuICB5anNPcmlnaW46IHN5bWJvbFxuICBib3VuZE9iamVjdDogdW5rbm93biB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgeWpzQmluZGluZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFlqc0JpbmRpbmdDb250ZXh0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLCJpbXBvcnQge1xuICBBbnlEYXRhTW9kZWwsXG4gIEFueU1vZGVsLFxuICBBbnlTdGFuZGFyZFR5cGUsXG4gIE1vZGVsQ2xhc3MsXG4gIFBhdGNoLFxuICBUeXBlVG9EYXRhLFxuICBhcHBseVBhdGNoZXMsXG4gIGZyb21TbmFwc2hvdCxcbiAgZ2V0UGFyZW50VG9DaGlsZFBhdGgsXG4gIG9uR2xvYmFsUGF0Y2hlcyxcbiAgb25QYXRjaGVzLFxuICBvblNuYXBzaG90LFxufSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0IH0gZnJvbSBcIi4vYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0XCJcbmltcG9ydCB7IGNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyB9IGZyb20gXCIuL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlc1wiXG5pbXBvcnQgeyBZanNCaW5kaW5nQ29udGV4dCwgeWpzQmluZGluZ0NvbnRleHQgfSBmcm9tIFwiLi95anNCaW5kaW5nQ29udGV4dFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kWWpzVG9Nb2J4S2V5c3RvbmU8XG4gIFRUeXBlIGV4dGVuZHMgQW55U3RhbmRhcmRUeXBlIHwgTW9kZWxDbGFzczxBbnlNb2RlbD4gfCBNb2RlbENsYXNzPEFueURhdGFNb2RlbD4sXG4+KHtcbiAgeWpzRG9jLFxuICB5anNPYmplY3QsXG4gIG1vYnhLZXlzdG9uZVR5cGUsXG59OiB7XG4gIHlqc0RvYzogWS5Eb2NcbiAgeWpzT2JqZWN0OiBZLk1hcDx1bmtub3duPiB8IFkuQXJyYXk8dW5rbm93bj5cbiAgbW9ieEtleXN0b25lVHlwZTogVFR5cGVcbn0pOiB7XG4gIGJvdW5kT2JqZWN0OiBUeXBlVG9EYXRhPFRUeXBlPlxuICBkaXNwb3NlKCk6IHZvaWRcbiAgeWpzT3JpZ2luOiBzeW1ib2xcbn0ge1xuICBjb25zdCB5anNPcmlnaW4gPSBTeW1ib2woXCJiaW5kWWpzVG9Nb2J4S2V5c3RvbmVUcmFuc2FjdGlvbk9yaWdpblwiKVxuXG4gIGNvbnN0IGJpbmRpbmdDb250ZXh0OiBZanNCaW5kaW5nQ29udGV4dCA9IHtcbiAgICB5anNEb2MsXG4gICAgeWpzT2JqZWN0LFxuICAgIG1vYnhLZXlzdG9uZVR5cGUsXG4gICAgeWpzT3JpZ2luLFxuICAgIGJvdW5kT2JqZWN0OiB1bmRlZmluZWQsIC8vIG5vdCB5ZXQgY3JlYXRlZFxuICB9XG5cbiAgY29uc3QgeWpzSnNvbiA9IHlqc09iamVjdC50b0pTT04oKVxuXG4gIGNvbnN0IGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlczogeyB0YXJnZXQ6IG9iamVjdDsgcGF0Y2hlczogUGF0Y2hbXSB9W10gPSBbXVxuXG4gIGNvbnN0IGNyZWF0ZUJvdW5kT2JqZWN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGRpc3Bvc2VPbkdsb2JhbFBhdGNoZXMgPSBvbkdsb2JhbFBhdGNoZXMoKHRhcmdldCwgcGF0Y2hlcykgPT4ge1xuICAgICAgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzLnB1c2goeyB0YXJnZXQsIHBhdGNoZXMgfSlcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvdW5kT2JqZWN0ID0geWpzQmluZGluZ0NvbnRleHQuYXBwbHkoXG4gICAgICAgICgpID0+IGZyb21TbmFwc2hvdChtb2J4S2V5c3RvbmVUeXBlLCB5anNKc29uIGFzIGFueSksXG4gICAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgICApXG4gICAgICB5anNCaW5kaW5nQ29udGV4dC5zZXQoYm91bmRPYmplY3QsIHsgLi4uYmluZGluZ0NvbnRleHQsIGJvdW5kT2JqZWN0IH0pXG4gICAgICByZXR1cm4gYm91bmRPYmplY3RcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcygpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYm91bmRPYmplY3QgPSBjcmVhdGVCb3VuZE9iamVjdCgpXG5cbiAgbGV0IGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcyA9IDBcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20geWpzIHRvIG1vYngta2V5c3RvbmVcbiAgY29uc3Qgb2JzZXJ2ZURlZXBDYiA9IChldmVudHM6IFkuWUV2ZW50PGFueT5bXSkgPT4ge1xuICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRyYW5zYWN0aW9uLm9yaWdpbiAhPT0geWpzT3JpZ2luKSB7XG4gICAgICAgIHBhdGNoZXMucHVzaCguLi5jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMoZXZlbnQpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAocGF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMrK1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwbHlQYXRjaGVzKGJvdW5kT2JqZWN0LCBwYXRjaGVzKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzLS1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB5anNPYmplY3Qub2JzZXJ2ZURlZXAob2JzZXJ2ZURlZXBDYilcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20gbW9ieC1rZXlzdG9uZSB0byB5anNcbiAgbGV0IHBlbmRpbmdQYXRjaGVzOiBQYXRjaFtdID0gW11cbiAgY29uc3QgZGlzcG9zZU9uUGF0Y2hlcyA9IG9uUGF0Y2hlcyhib3VuZE9iamVjdCwgKHBhdGNoZXMpID0+IHtcbiAgICBpZiAoYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcGVuZGluZ1BhdGNoZXMucHVzaCguLi5wYXRjaGVzKVxuICB9KVxuXG4gIC8vIHRoaXMgaXMgb25seSB1c2VkIHNvIHdlIGNhbiB0cmFuc2FjdCBhbGwgcGF0Y2hlcyB0byB0aGUgc25hcHNob3QgYm91bmRhcnlcbiAgY29uc3QgZGlzcG9zZU9uU25hcHNob3QgPSBvblNuYXBzaG90KGJvdW5kT2JqZWN0LCAoKSA9PiB7XG4gICAgaWYgKHBlbmRpbmdQYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGF0Y2hlcyA9IHBlbmRpbmdQYXRjaGVzXG4gICAgcGVuZGluZ1BhdGNoZXMgPSBbXVxuXG4gICAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHBhdGNoLCB5anNPYmplY3QpXG4gICAgICB9KVxuICAgIH0sIHlqc09yaWdpbilcbiAgfSlcblxuICAvLyBzeW5jIGluaXRpYWwgcGF0Y2hlcywgdGhhdCBtaWdodCBpbmNsdWRlIHNldHRpbmcgZGVmYXVsdHMsIElEcywgZXRjXG4gIHlqc0RvYy50cmFuc2FjdCgoKSA9PiB7XG4gICAgLy8gd2UgbmVlZCB0byBza2lwIGluaXRpYWxpemF0aW9ucyB1bnRpbCB3ZSBoaXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBib3VuZCBvYmplY3RcbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgZGVmYXVsdCBvYmplY3RzIG1pZ2h0IGJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgbWFpbiBvYmplY3RcbiAgICAvLyBidXQgd2UganVzdCBuZWVkIHRvIGNhdGNoIHdoZW4gdGhvc2UgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIHRoZSBib3VuZCBvYmplY3RcbiAgICBsZXQgYm91bmRPYmplY3RGb3VuZCA9IGZhbHNlXG5cbiAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMuZm9yRWFjaCgoeyB0YXJnZXQsIHBhdGNoZXMgfSkgPT4ge1xuICAgICAgaWYgKCFib3VuZE9iamVjdEZvdW5kKSB7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IGJvdW5kT2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIC8vIHNraXBcbiAgICAgICAgfVxuICAgICAgICBib3VuZE9iamVjdEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnRUb0NoaWxkUGF0aCA9IGdldFBhcmVudFRvQ2hpbGRQYXRoKGJvdW5kT2JqZWN0LCB0YXJnZXQpXG4gICAgICAvLyB0aGlzIGlzIHVuZGVmaW5lZCBvbmx5IGlmIHRhcmdldCBpcyBub3QgYSBjaGlsZCBvZiBib3VuZE1vZGVsXG4gICAgICBpZiAocGFyZW50VG9DaGlsZFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgICAgICAgcGF0aDogWy4uLnBhcmVudFRvQ2hpbGRQYXRoLCAuLi5wYXRjaC5wYXRoXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5anNPYmplY3RcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgeWpzT3JpZ2luKVxuXG4gIHJldHVybiB7XG4gICAgYm91bmRPYmplY3QsXG4gICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgZGlzcG9zZU9uUGF0Y2hlcygpXG4gICAgICBkaXNwb3NlT25TbmFwc2hvdCgpXG4gICAgICB5anNPYmplY3QudW5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxuICAgIH0sXG4gICAgeWpzT3JpZ2luLFxuICB9XG59XG4iXSwibmFtZXMiOlsiYm91bmRPYmplY3QiXSwibWFwcGluZ3MiOiI7O0FBR00sTUFBTyw2QkFBNkIsTUFBSztBQUFBLEVBQzdDLFlBQVksS0FBVztBQUNyQixVQUFNLEdBQUc7QUFHRixXQUFBLGVBQWUsTUFBTSxxQkFBcUIsU0FBUztBQUFBLEVBQzVEO0FBQ0Q7QUFLSyxTQUFVLFFBQVEsS0FBVztBQUMxQixTQUFBLElBQUkscUJBQXFCLEdBQUc7QUFDckM7QUNkQSxTQUFTLGdCQUFnQixHQUFZO0FBQ25DLFFBQU0sSUFBSSxPQUFPO0FBQ2pCLFNBQU8sTUFBTSxZQUFZLE1BQU0sWUFBWSxNQUFNLGFBQWEsTUFBTTtBQUN0RTtBQUVBLFNBQVMsWUFBWSxHQUFZO0FBQ3hCLFNBQUEsTUFBTSxRQUFRLENBQUM7QUFDeEI7QUFFQSxTQUFTLGFBQWEsR0FBWTtBQUNoQyxTQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssT0FBTyxNQUFNO0FBQ3pDO0FBRU0sU0FBVSxxQkFBcUIsR0FBWTtBQUMvQyxNQUFJLE1BQU0sVUFBYSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ2xDLFdBQUE7QUFBQSxFQUNUO0FBRUksTUFBQSxZQUFZLENBQUMsR0FBRztBQUNaLFVBQUEsTUFBTSxJQUFJLEVBQUU7QUFDbEIseUJBQXFCLEtBQUssQ0FBQztBQUNwQixXQUFBO0FBQUEsRUFDVDtBQUVJLE1BQUEsYUFBYSxDQUFDLEdBQUc7QUFDZixRQUFBLEVBQUUsWUFBWSxNQUFNO0FBRWYsYUFBQTtBQUFBLElBQ1Q7QUFFTSxVQUFBLE1BQU0sSUFBSSxFQUFFO0FB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
@@ -213,7 +213,9 @@
213
213
  yjsDoc,
214
214
  yjsObject,
215
215
  mobxKeystoneType,
216
- yjsOrigin
216
+ yjsOrigin,
217
+ boundObject: void 0
218
+ // not yet created
217
219
  };
218
220
  const yjsJson = yjsObject.toJSON();
219
221
  const initializationGlobalPatches = [];
@@ -223,7 +225,7 @@
223
225
  });
224
226
  try {
225
227
  const boundObject2 = yjsBindingContext.apply(() => mobxKeystone.fromSnapshot(mobxKeystoneType, yjsJson), bindingContext);
226
- yjsBindingContext.set(boundObject2, bindingContext);
228
+ yjsBindingContext.set(boundObject2, { ...bindingContext, boundObject: boundObject2 });
227
229
  return boundObject2;
228
230
  } finally {
229
231
  disposeOnGlobalPatches();
@@ -305,4 +307,4 @@
305
307
  exports2.yjsBindingContext = yjsBindingContext;
306
308
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
307
309
  });
308
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMudW1kLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvZXJyb3IudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0SnNvblRvWWpzRGF0YS50cyIsIi4uL3NyYy9iaW5kaW5nL2FwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdC50cyIsIi4uL3NyYy9iaW5kaW5nL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlcy50cyIsIi4uL3NyYy9iaW5kaW5nL3lqc0JpbmRpbmdDb250ZXh0LnRzIiwiLi4vc3JjL2JpbmRpbmcvYmluZFlqc1RvTW9ieEtleXN0b25lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIG1vYngta2V5c3RvbmUteWpzIGVycm9yLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vYnhLZXlzdG9uZVlqc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihtc2cpXHJcblxyXG4gICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNb2J4S2V5c3RvbmVZanNFcnJvci5wcm90b3R5cGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmFpbHVyZShtc2c6IHN0cmluZykge1xyXG4gIHJldHVybiBuZXcgTW9ieEtleXN0b25lWWpzRXJyb3IobXNnKVxyXG59XHJcbiIsImltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBKc29uVmFsdWUsIEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblByaW1pdGl2ZSB9IGZyb20gXCIuLi9qc29uVHlwZXNcIlxuXG5mdW5jdGlvbiBpc0pzb25QcmltaXRpdmUodjogSnNvblZhbHVlKTogdiBpcyBKc29uUHJpbWl0aXZlIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB2XG4gIHJldHVybiB0ID09PSBcInN0cmluZ1wiIHx8IHQgPT09IFwibnVtYmVyXCIgfHwgdCA9PT0gXCJib29sZWFuXCIgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0pzb25BcnJheSh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25BcnJheSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHYpXG59XG5cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25PYmplY3Qge1xuICByZXR1cm4gIWlzSnNvbkFycmF5KHYpICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SnNvblRvWWpzRGF0YSh2OiBKc29uVmFsdWUpIHtcbiAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCBpc0pzb25QcmltaXRpdmUodikpIHtcbiAgICByZXR1cm4gdlxuICB9XG5cbiAgaWYgKGlzSnNvbkFycmF5KHYpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFkuQXJyYXkoKVxuICAgIGFwcGx5SnNvbkFycmF5WUFycmF5KGFyciwgdilcbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICBpZiAoaXNKc29uT2JqZWN0KHYpKSB7XG4gICAgaWYgKHYuJGZyb3plbiA9PT0gdHJ1ZSkge1xuICAgICAgLy8gZnJvemVuIHZhbHVlLCBzYXZlIGFzIGltbXV0YWJsZSBvYmplY3RcbiAgICAgIHJldHVybiB2XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IFkuTWFwKClcbiAgICBhcHBseUpzb25PYmplY3RUb1lNYXAobWFwLCB2KVxuICAgIHJldHVybiBtYXBcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgdHlwZTogJHt2fWApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25BcnJheVlBcnJheShkZXN0OiBZLkFycmF5PHVua25vd24+LCBzb3VyY2U6IEpzb25BcnJheSkge1xuICBkZXN0LnB1c2goc291cmNlLm1hcChjb252ZXJ0SnNvblRvWWpzRGF0YSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25PYmplY3RUb1lNYXAoZGVzdDogWS5NYXA8dW5rbm93bj4sIHNvdXJjZTogSnNvbk9iamVjdCkge1xuICBPYmplY3QuZW50cmllcyhzb3VyY2UpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgIGRlc3Quc2V0KGssIGNvbnZlcnRKc29uVG9ZanNEYXRhKHYpKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgZmFpbHVyZSB9IGZyb20gXCIuLi91dGlscy9lcnJvclwiXG5pbXBvcnQgeyBjb252ZXJ0SnNvblRvWWpzRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRKc29uVG9ZanNEYXRhXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChwYXRjaDogUGF0Y2gsIHlqczogdW5rbm93bik6IHZvaWQge1xuICBpZiAocGF0Y2gucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBwYXRjaC5wYXRoXG5cbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChTdHJpbmcoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBtYXAgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShwYXRjaCl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoeyAuLi5wYXRjaCwgcGF0aDogcmVzdCB9LCBjaGlsZClcbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChOdW1iZXIoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBhcnJheSAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgcGF0Y2hcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiB1bmtub3duIFlqcyBvYmplY3QgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwYXRjaFxuICAgICAgICApfWBcbiAgICAgIClcbiAgICB9XG4gIH0gZWxzZSBpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhwYXRjaC5wYXRoWzBdKVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgY2FzZSBcInJlcGxhY2VcIjoge1xuICAgICAgICAgIHlqcy5zZXQoa2V5LCBjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKGtleSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgbWFwYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeWpzIGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgICAgY29uc3Qga2V5ID0gcGF0Y2gucGF0aFswXVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICBpZiAoeWpzLmxlbmd0aCA+IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0geWpzLmxlbmd0aCAtIHBhdGNoLnZhbHVlXG4gICAgICAgICAgICAgIHlqcy5kZWxldGUocGF0Y2gudmFsdWUsIHRvRGVsZXRlKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh5anMubGVuZ3RoIDwgcGF0Y2gudmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSBwYXRjaC52YWx1ZSAtIHlqcy5sZW5ndGhcbiAgICAgICAgICAgICAgeWpzLmluc2VydCh5anMubGVuZ3RoLCBBcnJheSh0b0luc2VydCkuZmlsbCh1bmRlZmluZWQpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFkZFwiOiB7XG4gICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggb3BlcmF0aW9uIGZvciBhcnJheWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZmFpbHVyZShcbiAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwgdGhlIFlqcyBvYmplY3QgaXMgb2YgYW4gdW5rb3duIHR5cGUsIHNvIGtleSBcIiR7cGF0Y2gucGF0aFswXX1cIiBjYW5ub3QgYmUgZm91bmQgaW4gaXRgXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggcGF0aCwgaXQgY2Fubm90IGJlIGVtcHR5YClcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvbkFycmF5LCBKc29uT2JqZWN0LCBKc29uVmFsdWUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFlqc0V2ZW50VG9QYXRjaGVzKGV2ZW50OiBZLllFdmVudDxhbnk+KTogUGF0Y2hbXSB7XG4gIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuXG4gIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWU1hcEV2ZW50KSB7XG4gICAgY29uc3Qgc291cmNlID0gZXZlbnQudGFyZ2V0IGFzIFkuTWFwPGFueT5cblxuICAgIGV2ZW50LmNoYW5nZXMua2V5cy5mb3JFYWNoKChjaGFuZ2UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCBrZXldXG5cbiAgICAgIHN3aXRjaCAoY2hhbmdlLmFjdGlvbikge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZXBsYWNlXCIsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgdmFsdWU6IHRvUGxhaW5WYWx1ZShzb3VyY2UuZ2V0KGtleSkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiZGVsZXRlXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGB1bnN1cHBvcnRlZCBZanMgbWFwIGV2ZW50IGFjdGlvbjogJHtjaGFuZ2UuYWN0aW9ufWApXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWUFycmF5RXZlbnQpIHtcbiAgICBsZXQgcmV0YWluID0gMFxuICAgIGV2ZW50LmNoYW5nZXMuZGVsdGEuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlLnJldGFpbikge1xuICAgICAgICByZXRhaW4gKz0gY2hhbmdlLnJldGFpblxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmRlbGV0ZSkge1xuICAgICAgICAvLyByZW1vdmUgWCBpdGVtcyBhdCByZXRhaW4gcG9zaXRpb25cbiAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlLmRlbGV0ZTsgaSsrKSB7XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2UuaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLmluc2VydCkgPyBjaGFuZ2UuaW5zZXJ0IDogW2NoYW5nZS5pbnNlcnRdXG4gICAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUodiksXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXRhaW4rK1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gcGF0Y2hlc1xufVxuXG5mdW5jdGlvbiB0b1BsYWluVmFsdWUodjogWS5NYXA8YW55PiB8IFkuQXJyYXk8YW55PiB8IEpzb25WYWx1ZSkge1xuICBpZiAodiBpbnN0YW5jZW9mIFkuTWFwIHx8IHYgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgcmV0dXJuIHYudG9KU09OKCkgYXMgSnNvbk9iamVjdCB8IEpzb25BcnJheVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2XG4gIH1cbn1cbiIsImltcG9ydCB7IEFueVR5cGUsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFlqc0JpbmRpbmdDb250ZXh0IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBBbnlUeXBlXG4gIHlqc09yaWdpbjogc3ltYm9sXG59XG5cbmV4cG9ydCBjb25zdCB5anNCaW5kaW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8WWpzQmluZGluZ0NvbnRleHQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsImltcG9ydCB7XG4gIEFueURhdGFNb2RlbCxcbiAgQW55TW9kZWwsXG4gIEFueVN0YW5kYXJkVHlwZSxcbiAgTW9kZWxDbGFzcyxcbiAgUGF0Y2gsXG4gIFR5cGVUb0RhdGEsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgZnJvbVNuYXBzaG90LFxuICBnZXRQYXJlbnRUb0NoaWxkUGF0aCxcbiAgb25HbG9iYWxQYXRjaGVzLFxuICBvblBhdGNoZXMsXG4gIG9uU25hcHNob3QsXG59IGZyb20gXCJtb2J4LWtleXN0b25lXCJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QgfSBmcm9tIFwiLi9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3RcIlxuaW1wb3J0IHsgY29udmVydFlqc0V2ZW50VG9QYXRjaGVzIH0gZnJvbSBcIi4vY29udmVydFlqc0V2ZW50VG9QYXRjaGVzXCJcbmltcG9ydCB7IFlqc0JpbmRpbmdDb250ZXh0LCB5anNCaW5kaW5nQ29udGV4dCB9IGZyb20gXCIuL3lqc0JpbmRpbmdDb250ZXh0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRZanNUb01vYnhLZXlzdG9uZTxcbiAgVFR5cGUgZXh0ZW5kcyBBbnlTdGFuZGFyZFR5cGUgfCBNb2RlbENsYXNzPEFueU1vZGVsPiB8IE1vZGVsQ2xhc3M8QW55RGF0YU1vZGVsPixcbj4oe1xuICB5anNEb2MsXG4gIHlqc09iamVjdCxcbiAgbW9ieEtleXN0b25lVHlwZSxcbn06IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBUVHlwZVxufSk6IHtcbiAgYm91bmRPYmplY3Q6IFR5cGVUb0RhdGE8VFR5cGU+XG4gIGRpc3Bvc2UoKTogdm9pZFxuICB5anNPcmlnaW46IHN5bWJvbFxufSB7XG4gIGNvbnN0IHlqc09yaWdpbiA9IFN5bWJvbChcImJpbmRZanNUb01vYnhLZXlzdG9uZVRyYW5zYWN0aW9uT3JpZ2luXCIpXG5cbiAgY29uc3QgYmluZGluZ0NvbnRleHQ6IFlqc0JpbmRpbmdDb250ZXh0ID0ge1xuICAgIHlqc0RvYyxcbiAgICB5anNPYmplY3QsXG4gICAgbW9ieEtleXN0b25lVHlwZSxcbiAgICB5anNPcmlnaW4sXG4gIH1cblxuICBjb25zdCB5anNKc29uID0geWpzT2JqZWN0LnRvSlNPTigpXG5cbiAgY29uc3QgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzOiB7IHRhcmdldDogb2JqZWN0OyBwYXRjaGVzOiBQYXRjaFtdIH1bXSA9IFtdXG5cbiAgY29uc3QgY3JlYXRlQm91bmRPYmplY3QgPSAoKSA9PiB7XG4gICAgY29uc3QgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcyA9IG9uR2xvYmFsUGF0Y2hlcygodGFyZ2V0LCBwYXRjaGVzKSA9PiB7XG4gICAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMucHVzaCh7IHRhcmdldCwgcGF0Y2hlcyB9KVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm91bmRPYmplY3QgPSB5anNCaW5kaW5nQ29udGV4dC5hcHBseShcbiAgICAgICAgKCkgPT4gZnJvbVNuYXBzaG90KG1vYnhLZXlzdG9uZVR5cGUsIHlqc0pzb24gYXMgYW55KSxcbiAgICAgICAgYmluZGluZ0NvbnRleHRcbiAgICAgIClcbiAgICAgIHlqc0JpbmRpbmdDb250ZXh0LnNldChib3VuZE9iamVjdCwgYmluZGluZ0NvbnRleHQpXG4gICAgICByZXR1cm4gYm91bmRPYmplY3RcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcygpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgYm91bmRPYmplY3QgPSBjcmVhdGVCb3VuZE9iamVjdCgpXG5cbiAgbGV0IGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcyA9IDBcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20geWpzIHRvIG1vYngta2V5c3RvbmVcbiAgY29uc3Qgb2JzZXJ2ZURlZXBDYiA9IChldmVudHM6IFkuWUV2ZW50PGFueT5bXSkgPT4ge1xuICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRyYW5zYWN0aW9uLm9yaWdpbiAhPT0geWpzT3JpZ2luKSB7XG4gICAgICAgIHBhdGNoZXMucHVzaCguLi5jb252ZXJ0WWpzRXZlbnRUb1BhdGNoZXMoZXZlbnQpKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAocGF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMrK1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwbHlQYXRjaGVzKGJvdW5kT2JqZWN0LCBwYXRjaGVzKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzLS1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB5anNPYmplY3Qub2JzZXJ2ZURlZXAob2JzZXJ2ZURlZXBDYilcblxuICAvLyBiaW5kIGFueSBjaGFuZ2VzIGZyb20gbW9ieC1rZXlzdG9uZSB0byB5anNcbiAgbGV0IHBlbmRpbmdQYXRjaGVzOiBQYXRjaFtdID0gW11cbiAgY29uc3QgZGlzcG9zZU9uUGF0Y2hlcyA9IG9uUGF0Y2hlcyhib3VuZE9iamVjdCwgKHBhdGNoZXMpID0+IHtcbiAgICBpZiAoYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcGVuZGluZ1BhdGNoZXMucHVzaCguLi5wYXRjaGVzKVxuICB9KVxuXG4gIC8vIHRoaXMgaXMgb25seSB1c2VkIHNvIHdlIGNhbiB0cmFuc2FjdCBhbGwgcGF0Y2hlcyB0byB0aGUgc25hcHNob3QgYm91bmRhcnlcbiAgY29uc3QgZGlzcG9zZU9uU25hcHNob3QgPSBvblNuYXBzaG90KGJvdW5kT2JqZWN0LCAoKSA9PiB7XG4gICAgaWYgKHBlbmRpbmdQYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGF0Y2hlcyA9IHBlbmRpbmdQYXRjaGVzXG4gICAgcGVuZGluZ1BhdGNoZXMgPSBbXVxuXG4gICAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHBhdGNoLCB5anNPYmplY3QpXG4gICAgICB9KVxuICAgIH0sIHlqc09yaWdpbilcbiAgfSlcblxuICAvLyBzeW5jIGluaXRpYWwgcGF0Y2hlcywgdGhhdCBtaWdodCBpbmNsdWRlIHNldHRpbmcgZGVmYXVsdHMsIElEcywgZXRjXG4gIHlqc0RvYy50cmFuc2FjdCgoKSA9PiB7XG4gICAgLy8gd2UgbmVlZCB0byBza2lwIGluaXRpYWxpemF0aW9ucyB1bnRpbCB3ZSBoaXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBib3VuZCBvYmplY3RcbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgZGVmYXVsdCBvYmplY3RzIG1pZ2h0IGJlIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgbWFpbiBvYmplY3RcbiAgICAvLyBidXQgd2UganVzdCBuZWVkIHRvIGNhdGNoIHdoZW4gdGhvc2UgYXJlIGFjdHVhbGx5IGFzc2lnbmVkIHRvIHRoZSBib3VuZCBvYmplY3RcbiAgICBsZXQgYm91bmRPYmplY3RGb3VuZCA9IGZhbHNlXG5cbiAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMuZm9yRWFjaCgoeyB0YXJnZXQsIHBhdGNoZXMgfSkgPT4ge1xuICAgICAgaWYgKCFib3VuZE9iamVjdEZvdW5kKSB7XG4gICAgICAgIGlmICh0YXJnZXQgIT09IGJvdW5kT2JqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIC8vIHNraXBcbiAgICAgICAgfVxuICAgICAgICBib3VuZE9iamVjdEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnRUb0NoaWxkUGF0aCA9IGdldFBhcmVudFRvQ2hpbGRQYXRoKGJvdW5kT2JqZWN0LCB0YXJnZXQpXG4gICAgICAvLyB0aGlzIGlzIHVuZGVmaW5lZCBvbmx5IGlmIHRhcmdldCBpcyBub3QgYSBjaGlsZCBvZiBib3VuZE1vZGVsXG4gICAgICBpZiAocGFyZW50VG9DaGlsZFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXRjaGVzLmZvckVhY2goKHBhdGNoKSA9PiB7XG4gICAgICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgICAgICAgcGF0aDogWy4uLnBhcmVudFRvQ2hpbGRQYXRoLCAuLi5wYXRjaC5wYXRoXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB5anNPYmplY3RcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgeWpzT3JpZ2luKVxuXG4gIHJldHVybiB7XG4gICAgYm91bmRPYmplY3QsXG4gICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgZGlzcG9zZU9uUGF0Y2hlcygpXG4gICAgICBkaXNwb3NlT25TbmFwc2hvdCgpXG4gICAgICB5anNPYmplY3QudW5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxuICAgIH0sXG4gICAgeWpzT3JpZ2luLFxuICB9XG59XG4iXSwibmFtZXMiOlsiWSIsImNyZWF0ZUNvbnRleHQiLCJvbkdsb2JhbFBhdGNoZXMiLCJib3VuZE9iamVjdCIsImZyb21TbmFwc2hvdCIsImFwcGx5UGF0Y2hlcyIsIm9uUGF0Y2hlcyIsIm9uU25hcHNob3QiLCJnZXRQYXJlbnRUb0NoaWxkUGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBR00sTUFBTyw2QkFBNkIsTUFBSztBQUFBLElBQzdDLFlBQVksS0FBVztBQUNyQixZQUFNLEdBQUc7QUFHRixhQUFBLGVBQWUsTUFBTSxxQkFBcUIsU0FBUztBQUFBLElBQzVEO0FBQUEsRUFDRDtBQUtLLFdBQVUsUUFBUSxLQUFXO0FBQzFCLFdBQUEsSUFBSSxxQkFBcUIsR0FBRztBQUFBLEVBQ3JDO0FDZEEsV0FBUyxnQkFBZ0IsR0FBWTtBQUNuQyxVQUFNLElBQUksT0FBTztBQUNqQixXQUFPLE1BQU0sWUFBWSxNQUFNLFlBQVksTUFBTSxhQUFhLE1BQU07QUFBQSxFQUN0RTtBQUVBLFdBQVMsWUFBWSxHQUFZO0FBQ3hCLFdBQUEsTUFBTSxRQUFRLENBQUM7QUFBQSxFQUN4QjtBQUVBLFdBQVMsYUFBYSxHQUFZO0FBQ2hDLFdBQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxPQUFPLE1BQU07QUFBQSxFQUN6QztBQUVNLFdBQVUscUJBQXFCLEdBQVk7QUFDL0MsUUFBSSxNQUFNLFVBQWEsZ0JBQWdCLENBQUMsR0FBRztBQUNsQyxhQUFBO0FBQUEsSUFDVDtBQUVJLFFBQUEsWUFBWSxDQUFDLEdBQUc7QUFDWixZQUFBLE1BQU0sSUFBSUEsYUFBRTtBQUNsQiwyQkFBcUIsS0FBSyxDQUFDO0FBQ3BCLGFBQUE7QUFBQSxJQUNUO0FBRUksUUFBQSxhQUFhLENBQUMsR0FBRztBQUNmLFVBQUEsRUFBRSxZ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
310
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ieC1rZXlzdG9uZS15anMudW1kLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMvZXJyb3IudHMiLCIuLi9zcmMvYmluZGluZy9jb252ZXJ0SnNvblRvWWpzRGF0YS50cyIsIi4uL3NyYy9iaW5kaW5nL2FwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdC50cyIsIi4uL3NyYy9iaW5kaW5nL2NvbnZlcnRZanNFdmVudFRvUGF0Y2hlcy50cyIsIi4uL3NyYy9iaW5kaW5nL3lqc0JpbmRpbmdDb250ZXh0LnRzIiwiLi4vc3JjL2JpbmRpbmcvYmluZFlqc1RvTW9ieEtleXN0b25lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIG1vYngta2V5c3RvbmUteWpzIGVycm9yLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1vYnhLZXlzdG9uZVlqc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XHJcbiAgICBzdXBlcihtc2cpXHJcblxyXG4gICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNb2J4S2V5c3RvbmVZanNFcnJvci5wcm90b3R5cGUpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmFpbHVyZShtc2c6IHN0cmluZykge1xyXG4gIHJldHVybiBuZXcgTW9ieEtleXN0b25lWWpzRXJyb3IobXNnKVxyXG59XHJcbiIsImltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBKc29uVmFsdWUsIEpzb25BcnJheSwgSnNvbk9iamVjdCwgSnNvblByaW1pdGl2ZSB9IGZyb20gXCIuLi9qc29uVHlwZXNcIlxuXG5mdW5jdGlvbiBpc0pzb25QcmltaXRpdmUodjogSnNvblZhbHVlKTogdiBpcyBKc29uUHJpbWl0aXZlIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB2XG4gIHJldHVybiB0ID09PSBcInN0cmluZ1wiIHx8IHQgPT09IFwibnVtYmVyXCIgfHwgdCA9PT0gXCJib29sZWFuXCIgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0pzb25BcnJheSh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25BcnJheSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHYpXG59XG5cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2OiBKc29uVmFsdWUpOiB2IGlzIEpzb25PYmplY3Qge1xuICByZXR1cm4gIWlzSnNvbkFycmF5KHYpICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0SnNvblRvWWpzRGF0YSh2OiBKc29uVmFsdWUpIHtcbiAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCBpc0pzb25QcmltaXRpdmUodikpIHtcbiAgICByZXR1cm4gdlxuICB9XG5cbiAgaWYgKGlzSnNvbkFycmF5KHYpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFkuQXJyYXkoKVxuICAgIGFwcGx5SnNvbkFycmF5WUFycmF5KGFyciwgdilcbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICBpZiAoaXNKc29uT2JqZWN0KHYpKSB7XG4gICAgaWYgKHYuJGZyb3plbiA9PT0gdHJ1ZSkge1xuICAgICAgLy8gZnJvemVuIHZhbHVlLCBzYXZlIGFzIGltbXV0YWJsZSBvYmplY3RcbiAgICAgIHJldHVybiB2XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IFkuTWFwKClcbiAgICBhcHBseUpzb25PYmplY3RUb1lNYXAobWFwLCB2KVxuICAgIHJldHVybiBtYXBcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgdHlwZTogJHt2fWApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25BcnJheVlBcnJheShkZXN0OiBZLkFycmF5PHVua25vd24+LCBzb3VyY2U6IEpzb25BcnJheSkge1xuICBkZXN0LnB1c2goc291cmNlLm1hcChjb252ZXJ0SnNvblRvWWpzRGF0YSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUpzb25PYmplY3RUb1lNYXAoZGVzdDogWS5NYXA8dW5rbm93bj4sIHNvdXJjZTogSnNvbk9iamVjdCkge1xuICBPYmplY3QuZW50cmllcyhzb3VyY2UpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgIGRlc3Quc2V0KGssIGNvbnZlcnRKc29uVG9ZanNEYXRhKHYpKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgZmFpbHVyZSB9IGZyb20gXCIuLi91dGlscy9lcnJvclwiXG5pbXBvcnQgeyBjb252ZXJ0SnNvblRvWWpzRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRKc29uVG9ZanNEYXRhXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TW9ieEtleXN0b25lUGF0Y2hUb1lqc09iamVjdChwYXRjaDogUGF0Y2gsIHlqczogdW5rbm93bik6IHZvaWQge1xuICBpZiAocGF0Y2gucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgY29uc3QgW2tleSwgLi4ucmVzdF0gPSBwYXRjaC5wYXRoXG5cbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChTdHJpbmcoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBtYXAgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShwYXRjaCl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoeyAuLi5wYXRjaCwgcGF0aDogcmVzdCB9LCBjaGlsZClcbiAgICB9IGVsc2UgaWYgKHlqcyBpbnN0YW5jZW9mIFkuQXJyYXkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0geWpzLmdldChOdW1iZXIoa2V5KSlcbiAgICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwga2V5IFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIFlqcyBhcnJheSAtIHBhdGNoOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgcGF0Y2hcbiAgICAgICAgICApfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgYXBwbHlNb2J4S2V5c3RvbmVQYXRjaFRvWWpzT2JqZWN0KHsgLi4ucGF0Y2gsIHBhdGg6IHJlc3QgfSwgY2hpbGQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGZhaWx1cmUoXG4gICAgICAgIGBpbnZhbGlkIHBhdGNoIHBhdGgsIGtleSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBpbiB1bmtub3duIFlqcyBvYmplY3QgLSBwYXRjaDogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwYXRjaFxuICAgICAgICApfWBcbiAgICAgIClcbiAgICB9XG4gIH0gZWxzZSBpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoeWpzIGluc3RhbmNlb2YgWS5NYXApIHtcbiAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhwYXRjaC5wYXRoWzBdKVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgY2FzZSBcInJlcGxhY2VcIjoge1xuICAgICAgICAgIHlqcy5zZXQoa2V5LCBjb252ZXJ0SnNvblRvWWpzRGF0YShwYXRjaC52YWx1ZSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKGtleSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGBpbnZhbGlkIHBhdGNoIG9wZXJhdGlvbiBmb3IgbWFwYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeWpzIGluc3RhbmNlb2YgWS5BcnJheSkge1xuICAgICAgY29uc3Qga2V5ID0gcGF0Y2gucGF0aFswXVxuXG4gICAgICBzd2l0Y2ggKHBhdGNoLm9wKSB7XG4gICAgICAgIGNhc2UgXCJyZXBsYWNlXCI6IHtcbiAgICAgICAgICBpZiAoa2V5ID09PSBcImxlbmd0aFwiKSB7XG4gICAgICAgICAgICBpZiAoeWpzLmxlbmd0aCA+IHBhdGNoLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0geWpzLmxlbmd0aCAtIHBhdGNoLnZhbHVlXG4gICAgICAgICAgICAgIHlqcy5kZWxldGUocGF0Y2gudmFsdWUsIHRvRGVsZXRlKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh5anMubGVuZ3RoIDwgcGF0Y2gudmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSBwYXRjaC52YWx1ZSAtIHlqcy5sZW5ndGhcbiAgICAgICAgICAgICAgeWpzLmluc2VydCh5anMubGVuZ3RoLCBBcnJheSh0b0luc2VydCkuZmlsbCh1bmRlZmluZWQpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImFkZFwiOiB7XG4gICAgICAgICAgeWpzLmluc2VydChOdW1iZXIoa2V5KSwgW2NvbnZlcnRKc29uVG9ZanNEYXRhKHBhdGNoLnZhbHVlKV0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlXCI6IHtcbiAgICAgICAgICB5anMuZGVsZXRlKE51bWJlcihrZXkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggb3BlcmF0aW9uIGZvciBhcnJheWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZmFpbHVyZShcbiAgICAgICAgYGludmFsaWQgcGF0Y2ggcGF0aCwgdGhlIFlqcyBvYmplY3QgaXMgb2YgYW4gdW5rb3duIHR5cGUsIHNvIGtleSBcIiR7cGF0Y2gucGF0aFswXX1cIiBjYW5ub3QgYmUgZm91bmQgaW4gaXRgXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IGZhaWx1cmUoYGludmFsaWQgcGF0Y2ggcGF0aCwgaXQgY2Fubm90IGJlIGVtcHR5YClcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGF0Y2ggfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuaW1wb3J0IHsgSnNvbkFycmF5LCBKc29uT2JqZWN0LCBKc29uVmFsdWUgfSBmcm9tIFwiLi4vanNvblR5cGVzXCJcbmltcG9ydCB7IGZhaWx1cmUgfSBmcm9tIFwiLi4vdXRpbHMvZXJyb3JcIlxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFlqc0V2ZW50VG9QYXRjaGVzKGV2ZW50OiBZLllFdmVudDxhbnk+KTogUGF0Y2hbXSB7XG4gIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuXG4gIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWU1hcEV2ZW50KSB7XG4gICAgY29uc3Qgc291cmNlID0gZXZlbnQudGFyZ2V0IGFzIFkuTWFwPGFueT5cblxuICAgIGV2ZW50LmNoYW5nZXMua2V5cy5mb3JFYWNoKChjaGFuZ2UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCBrZXldXG5cbiAgICAgIHN3aXRjaCAoY2hhbmdlLmFjdGlvbikge1xuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUoc291cmNlLmdldChrZXkpKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICBvcDogXCJyZXBsYWNlXCIsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgdmFsdWU6IHRvUGxhaW5WYWx1ZShzb3VyY2UuZ2V0KGtleSkpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiZGVsZXRlXCI6XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKGB1bnN1cHBvcnRlZCBZanMgbWFwIGV2ZW50IGFjdGlvbjogJHtjaGFuZ2UuYWN0aW9ufWApXG4gICAgICB9XG4gICAgfSlcbiAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFkuWUFycmF5RXZlbnQpIHtcbiAgICBsZXQgcmV0YWluID0gMFxuICAgIGV2ZW50LmNoYW5nZXMuZGVsdGEuZm9yRWFjaCgoY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlLnJldGFpbikge1xuICAgICAgICByZXRhaW4gKz0gY2hhbmdlLnJldGFpblxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlLmRlbGV0ZSkge1xuICAgICAgICAvLyByZW1vdmUgWCBpdGVtcyBhdCByZXRhaW4gcG9zaXRpb25cbiAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlLmRlbGV0ZTsgaSsrKSB7XG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcInJlbW92ZVwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2UuaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY2hhbmdlLmluc2VydCkgPyBjaGFuZ2UuaW5zZXJ0IDogW2NoYW5nZS5pbnNlcnRdXG4gICAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IFsuLi5ldmVudC5wYXRoLCByZXRhaW5dXG4gICAgICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIG9wOiBcImFkZFwiLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0b1BsYWluVmFsdWUodiksXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXRhaW4rK1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gcGF0Y2hlc1xufVxuXG5mdW5jdGlvbiB0b1BsYWluVmFsdWUodjogWS5NYXA8YW55PiB8IFkuQXJyYXk8YW55PiB8IEpzb25WYWx1ZSkge1xuICBpZiAodiBpbnN0YW5jZW9mIFkuTWFwIHx8IHYgaW5zdGFuY2VvZiBZLkFycmF5KSB7XG4gICAgcmV0dXJuIHYudG9KU09OKCkgYXMgSnNvbk9iamVjdCB8IEpzb25BcnJheVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2XG4gIH1cbn1cbiIsImltcG9ydCB7IEFueVR5cGUsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwibW9ieC1rZXlzdG9uZVwiXG5pbXBvcnQgKiBhcyBZIGZyb20gXCJ5anNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFlqc0JpbmRpbmdDb250ZXh0IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBBbnlUeXBlXG4gIHlqc09yaWdpbjogc3ltYm9sXG4gIGJvdW5kT2JqZWN0OiB1bmtub3duIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCB5anNCaW5kaW5nQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8WWpzQmluZGluZ0NvbnRleHQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiIsImltcG9ydCB7XG4gIEFueURhdGFNb2RlbCxcbiAgQW55TW9kZWwsXG4gIEFueVN0YW5kYXJkVHlwZSxcbiAgTW9kZWxDbGFzcyxcbiAgUGF0Y2gsXG4gIFR5cGVUb0RhdGEsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgZnJvbVNuYXBzaG90LFxuICBnZXRQYXJlbnRUb0NoaWxkUGF0aCxcbiAgb25HbG9iYWxQYXRjaGVzLFxuICBvblBhdGNoZXMsXG4gIG9uU25hcHNob3QsXG59IGZyb20gXCJtb2J4LWtleXN0b25lXCJcbmltcG9ydCAqIGFzIFkgZnJvbSBcInlqc1wiXG5pbXBvcnQgeyBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QgfSBmcm9tIFwiLi9hcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3RcIlxuaW1wb3J0IHsgY29udmVydFlqc0V2ZW50VG9QYXRjaGVzIH0gZnJvbSBcIi4vY29udmVydFlqc0V2ZW50VG9QYXRjaGVzXCJcbmltcG9ydCB7IFlqc0JpbmRpbmdDb250ZXh0LCB5anNCaW5kaW5nQ29udGV4dCB9IGZyb20gXCIuL3lqc0JpbmRpbmdDb250ZXh0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRZanNUb01vYnhLZXlzdG9uZTxcbiAgVFR5cGUgZXh0ZW5kcyBBbnlTdGFuZGFyZFR5cGUgfCBNb2RlbENsYXNzPEFueU1vZGVsPiB8IE1vZGVsQ2xhc3M8QW55RGF0YU1vZGVsPixcbj4oe1xuICB5anNEb2MsXG4gIHlqc09iamVjdCxcbiAgbW9ieEtleXN0b25lVHlwZSxcbn06IHtcbiAgeWpzRG9jOiBZLkRvY1xuICB5anNPYmplY3Q6IFkuTWFwPHVua25vd24+IHwgWS5BcnJheTx1bmtub3duPlxuICBtb2J4S2V5c3RvbmVUeXBlOiBUVHlwZVxufSk6IHtcbiAgYm91bmRPYmplY3Q6IFR5cGVUb0RhdGE8VFR5cGU+XG4gIGRpc3Bvc2UoKTogdm9pZFxuICB5anNPcmlnaW46IHN5bWJvbFxufSB7XG4gIGNvbnN0IHlqc09yaWdpbiA9IFN5bWJvbChcImJpbmRZanNUb01vYnhLZXlzdG9uZVRyYW5zYWN0aW9uT3JpZ2luXCIpXG5cbiAgY29uc3QgYmluZGluZ0NvbnRleHQ6IFlqc0JpbmRpbmdDb250ZXh0ID0ge1xuICAgIHlqc0RvYyxcbiAgICB5anNPYmplY3QsXG4gICAgbW9ieEtleXN0b25lVHlwZSxcbiAgICB5anNPcmlnaW4sXG4gICAgYm91bmRPYmplY3Q6IHVuZGVmaW5lZCwgLy8gbm90IHlldCBjcmVhdGVkXG4gIH1cblxuICBjb25zdCB5anNKc29uID0geWpzT2JqZWN0LnRvSlNPTigpXG5cbiAgY29uc3QgaW5pdGlhbGl6YXRpb25HbG9iYWxQYXRjaGVzOiB7IHRhcmdldDogb2JqZWN0OyBwYXRjaGVzOiBQYXRjaFtdIH1bXSA9IFtdXG5cbiAgY29uc3QgY3JlYXRlQm91bmRPYmplY3QgPSAoKSA9PiB7XG4gICAgY29uc3QgZGlzcG9zZU9uR2xvYmFsUGF0Y2hlcyA9IG9uR2xvYmFsUGF0Y2hlcygodGFyZ2V0LCBwYXRjaGVzKSA9PiB7XG4gICAgICBpbml0aWFsaXphdGlvbkdsb2JhbFBhdGNoZXMucHVzaCh7IHRhcmdldCwgcGF0Y2hlcyB9KVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm91bmRPYmplY3QgPSB5anNCaW5kaW5nQ29udGV4dC5hcHBseShcbiAgICAgICAgKCkgPT4gZnJvbVNuYXBzaG90KG1vYnhLZXlzdG9uZVR5cGUsIHlqc0pzb24gYXMgYW55KSxcbiAgICAgICAgYmluZGluZ0NvbnRleHRcbiAgICAgIClcbiAgICAgIHlqc0JpbmRpbmdDb250ZXh0LnNldChib3VuZE9iamVjdCwgeyAuLi5iaW5kaW5nQ29udGV4dCwgYm91bmRPYmplY3QgfSlcbiAgICAgIHJldHVybiBib3VuZE9iamVjdFxuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNwb3NlT25HbG9iYWxQYXRjaGVzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBib3VuZE9iamVjdCA9IGNyZWF0ZUJvdW5kT2JqZWN0KClcblxuICBsZXQgYXBwbHlpbmdNb2J4S2V5c3RvbmVDaGFuZ2VzID0gMFxuXG4gIC8vIGJpbmQgYW55IGNoYW5nZXMgZnJvbSB5anMgdG8gbW9ieC1rZXlzdG9uZVxuICBjb25zdCBvYnNlcnZlRGVlcENiID0gKGV2ZW50czogWS5ZRXZlbnQ8YW55PltdKSA9PiB7XG4gICAgY29uc3QgcGF0Y2hlczogUGF0Y2hbXSA9IFtdXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHJhbnNhY3Rpb24ub3JpZ2luICE9PSB5anNPcmlnaW4pIHtcbiAgICAgICAgcGF0Y2hlcy5wdXNoKC4uLmNvbnZlcnRZanNFdmVudFRvUGF0Y2hlcyhldmVudCkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChwYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFwcGx5aW5nTW9ieEtleXN0b25lQ2hhbmdlcysrXG4gICAgICB0cnkge1xuICAgICAgICBhcHBseVBhdGNoZXMoYm91bmRPYmplY3QsIHBhdGNoZXMpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMtLVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHlqc09iamVjdC5vYnNlcnZlRGVlcChvYnNlcnZlRGVlcENiKVxuXG4gIC8vIGJpbmQgYW55IGNoYW5nZXMgZnJvbSBtb2J4LWtleXN0b25lIHRvIHlqc1xuICBsZXQgcGVuZGluZ1BhdGNoZXM6IFBhdGNoW10gPSBbXVxuICBjb25zdCBkaXNwb3NlT25QYXRjaGVzID0gb25QYXRjaGVzKGJvdW5kT2JqZWN0LCAocGF0Y2hlcykgPT4ge1xuICAgIGlmIChhcHBseWluZ01vYnhLZXlzdG9uZUNoYW5nZXMgPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBwZW5kaW5nUGF0Y2hlcy5wdXNoKC4uLnBhdGNoZXMpXG4gIH0pXG5cbiAgLy8gdGhpcyBpcyBvbmx5IHVzZWQgc28gd2UgY2FuIHRyYW5zYWN0IGFsbCBwYXRjaGVzIHRvIHRoZSBzbmFwc2hvdCBib3VuZGFyeVxuICBjb25zdCBkaXNwb3NlT25TbmFwc2hvdCA9IG9uU25hcHNob3QoYm91bmRPYmplY3QsICgpID0+IHtcbiAgICBpZiAocGVuZGluZ1BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXRjaGVzID0gcGVuZGluZ1BhdGNoZXNcbiAgICBwZW5kaW5nUGF0Y2hlcyA9IFtdXG5cbiAgICB5anNEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgcGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xuICAgICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QocGF0Y2gsIHlqc09iamVjdClcbiAgICAgIH0pXG4gICAgfSwgeWpzT3JpZ2luKVxuICB9KVxuXG4gIC8vIHN5bmMgaW5pdGlhbCBwYXRjaGVzLCB0aGF0IG1pZ2h0IGluY2x1ZGUgc2V0dGluZyBkZWZhdWx0cywgSURzLCBldGNcbiAgeWpzRG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAvLyB3ZSBuZWVkIHRvIHNraXAgaW5pdGlhbGl6YXRpb25zIHVudGlsIHdlIGhpdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGJvdW5kIG9iamVjdFxuICAgIC8vIHRoaXMgaXMgYmVjYXVzZSBkZWZhdWx0IG9iamVjdHMgbWlnaHQgYmUgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBtYWluIG9iamVjdFxuICAgIC8vIGJ1dCB3ZSBqdXN0IG5lZWQgdG8gY2F0Y2ggd2hlbiB0aG9zZSBhcmUgYWN0dWFsbHkgYXNzaWduZWQgdG8gdGhlIGJvdW5kIG9iamVjdFxuICAgIGxldCBib3VuZE9iamVjdEZvdW5kID0gZmFsc2VcblxuICAgIGluaXRpYWxpemF0aW9uR2xvYmFsUGF0Y2hlcy5mb3JFYWNoKCh7IHRhcmdldCwgcGF0Y2hlcyB9KSA9PiB7XG4gICAgICBpZiAoIWJvdW5kT2JqZWN0Rm91bmQpIHtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gYm91bmRPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm4gLy8gc2tpcFxuICAgICAgICB9XG4gICAgICAgIGJvdW5kT2JqZWN0Rm91bmQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudFRvQ2hpbGRQYXRoID0gZ2V0UGFyZW50VG9DaGlsZFBhdGgoYm91bmRPYmplY3QsIHRhcmdldClcbiAgICAgIC8vIHRoaXMgaXMgdW5kZWZpbmVkIG9ubHkgaWYgdGFyZ2V0IGlzIG5vdCBhIGNoaWxkIG9mIGJvdW5kTW9kZWxcbiAgICAgIGlmIChwYXJlbnRUb0NoaWxkUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhdGNoZXMuZm9yRWFjaCgocGF0Y2gpID0+IHtcbiAgICAgICAgICBhcHBseU1vYnhLZXlzdG9uZVBhdGNoVG9ZanNPYmplY3QoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnBhdGNoLFxuICAgICAgICAgICAgICBwYXRoOiBbLi4ucGFyZW50VG9DaGlsZFBhdGgsIC4uLnBhdGNoLnBhdGhdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHlqc09iamVjdFxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCB5anNPcmlnaW4pXG5cbiAgcmV0dXJuIHtcbiAgICBib3VuZE9iamVjdCxcbiAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICBkaXNwb3NlT25QYXRjaGVzKClcbiAgICAgIGRpc3Bvc2VPblNuYXBzaG90KClcbiAgICAgIHlqc09iamVjdC51bm9ic2VydmVEZWVwKG9ic2VydmVEZWVwQ2IpXG4gICAgfSxcbiAgICB5anNPcmlnaW4sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJZIiwiY3JlYXRlQ29udGV4dCIsIm9uR2xvYmFsUGF0Y2hlcyIsImJvdW5kT2JqZWN0IiwiZnJvbVNuYXBzaG90IiwiYXBwbHlQYXRjaGVzIiwib25QYXRjaGVzIiwib25TbmFwc2hvdCIsImdldFBhcmVudFRvQ2hpbGRQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFHTSxNQUFPLDZCQUE2QixNQUFLO0FBQUEsSUFDN0MsWUFBWSxLQUFXO0FBQ3JCLFlBQU0sR0FBRztBQUdGLGFBQUEsZUFBZSxNQUFNLHFCQUFxQixTQUFTO0FBQUEsSUFDNUQ7QUFBQSxFQUNEO0FBS0ssV0FBVSxRQUFRLEtBQVc7QUFDMUIsV0FBQSxJQUFJLHFCQUFxQixHQUFHO0FBQUEsRUFDckM7QUNkQSxXQUFTLGdCQUFnQixHQUFZO0FBQ25DLFVBQU0sSUFBSSxPQUFPO0FBQ2pCLFdBQU8sTUFBTSxZQUFZLE1BQU0sWUFBWSxNQUFNLGFBQWEsTUFBTTtBQUFBLEVBQ3RFO0FBRUEsV0FBUyxZQUFZLEdBQVk7QUFDeEIsV0FBQSxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQ3hCO0FBRUEsV0FBUyxhQUFhLEdBQVk7QUFDaEMsV0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLE9BQU8sTUFBTTtBQUFBLEVBQ3pDO0FBRU0sV0FBVSxxQkFBcUIsR0FBWTtBQUMvQyxRQUFJLE1BQU0sVUFBYSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ2xDLGFBQUE7QUFBQSxJQUNUO0FBRUksUUFBQSxZQUFZLENBQUMsR0FBRztBQUNaLFlB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
@@ -5,5 +5,6 @@ export interface YjsBindingContext {
5
5
  yjsObject: Y.Map<unknown> | Y.Array<unknown>;
6
6
  mobxKeystoneType: AnyType;
7
7
  yjsOrigin: symbol;
8
+ boundObject: unknown | undefined;
8
9
  }
9
10
  export declare const yjsBindingContext: import("mobx-keystone").Context<YjsBindingContext | undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobx-keystone-yjs",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Yjs bindings for mobx-keystone",
5
5
  "keywords": [
6
6
  "mobx",
@@ -39,6 +39,7 @@ export function bindYjsToMobxKeystone<
39
39
  yjsObject,
40
40
  mobxKeystoneType,
41
41
  yjsOrigin,
42
+ boundObject: undefined, // not yet created
42
43
  }
43
44
 
44
45
  const yjsJson = yjsObject.toJSON()
@@ -55,7 +56,7 @@ export function bindYjsToMobxKeystone<
55
56
  () => fromSnapshot(mobxKeystoneType, yjsJson as any),
56
57
  bindingContext
57
58
  )
58
- yjsBindingContext.set(boundObject, bindingContext)
59
+ yjsBindingContext.set(boundObject, { ...bindingContext, boundObject })
59
60
  return boundObject
60
61
  } finally {
61
62
  disposeOnGlobalPatches()
@@ -6,6 +6,7 @@ export interface YjsBindingContext {
6
6
  yjsObject: Y.Map<unknown> | Y.Array<unknown>
7
7
  mobxKeystoneType: AnyType
8
8
  yjsOrigin: symbol
9
+ boundObject: unknown | undefined
9
10
  }
10
11
 
11
12
  export const yjsBindingContext = createContext<YjsBindingContext | undefined>(undefined)