@fluid-experimental/property-changeset 2.70.0 → 2.72.0
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/dist/changeset.d.ts.map +1 -1
- package/dist/changeset.js.map +1 -1
- package/dist/changeset_operations/array.d.ts.map +1 -1
- package/dist/changeset_operations/array.js.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
- package/dist/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/dist/changeset_operations/indexedCollection.js.map +1 -1
- package/dist/pathHelper.d.ts +1 -1
- package/dist/pathHelper.js.map +1 -1
- package/dist/templateValidator.d.ts.map +1 -1
- package/dist/templateValidator.js.map +1 -1
- package/dist/test/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/lib/changeset.d.ts.map +1 -1
- package/lib/changeset.js.map +1 -1
- package/lib/changeset_operations/array.d.ts.map +1 -1
- package/lib/changeset_operations/array.js.map +1 -1
- package/lib/changeset_operations/arrayChangesetIterator.d.ts.map +1 -1
- package/lib/changeset_operations/arrayChangesetIterator.js.map +1 -1
- package/lib/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/lib/changeset_operations/indexedCollection.js.map +1 -1
- package/lib/pathHelper.d.ts +1 -1
- package/lib/pathHelper.js.map +1 -1
- package/lib/templateValidator.d.ts.map +1 -1
- package/lib/templateValidator.js.map +1 -1
- package/lib/test/tsconfig.tsbuildinfo +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js.map +1 -1
- package/package.json +6 -6
package/lib/changeset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeset.d.ts","sourceRoot":"","sources":["../src/changeset.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"changeset.d.ts","sourceRoot":"","sources":["../src/changeset.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAEhF,OAAO,EAAE,mCAAmC,EAAE,MAAM,6CAA6C,CAAC;AAYlG,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,yBAAyB,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE1C;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACtC,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC;AAChC,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACrB,MAAM,CAAC,YAAY,sBAAgB;IACnC,MAAM,CAAC,gBAAgB,iCAAoB;IAC3C,MAAM,CAAC,iBAAiB,8BAAqB;IAE9B,gCAAgC,EAAE,OAAO,mCAAmC,CAAC,gCAAgC,CAAC;IAC9G,iCAAiC,EAAE,OAAO,uBAAuB,CAAC,iCAAiC,CAAC;IACpG,gCAAgC,EAAE,OAAO,uBAAuB,CAAC,gCAAgC,CAAC;IAClG,yBAAyB,EAAE,OAAO,uBAAuB,CAAC,yBAAyB,CAAC;IACpF,6CAA6C,EAAE,OAAO,mCAAmC,CAAC,6CAA6C,CAAC;IACxI,4CAA4C,EAAE,OAAO,mCAAmC,CAAC,4CAA4C,CAAC;IAErJ,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IAEvB;;;OAGG;gBACS,UAAU,CAAC,EAAE,aAAa;IAgBtC;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,sBAAsB,IAAI,mBAAmB;IAI7C;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,OAAO;IAIxC;;;;;OAKG;IACH,eAAe,IAAI,OAAO;IAI1B;;;;OAIG;IACH,KAAK,IAAI,SAAS;IAIlB;;;;;;;;OAQG;IACH,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,qBAAqB;IAsBpF;;;;;;;;;OASG;IACH,OAAO,CAAC,4BAA4B;IAyDpC;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;;;;;;;;;OAWG;IACI,qCAAqC,CAC3C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,mBAAmB,EACnC,yBAAyB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAC/C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,CAAC,EAAE,qBAAqB;IA+HnC;;;;;;;;;;;;OAYG;IACI,gBAAgB,CACtB,YAAY,EAAE,mBAAmB,EACjC,aAAa,EAAE,YAAY,EAAE,EAC7B,UAAU,CAAC,EAAE,sBAAsB,GACjC,mBAAmB;IAWtB;;;;;;;;;OASG;IACH,OAAO,CAAC,2BAA2B;IAyLnC;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,yCAAyC;IAiFjD;;;;;OAKG;IACH,OAAO,CAAC,oCAAoC;IA2M5C;;;;;;;OAOG;IACI,sBAAsB,CAAC,qBAAqB,EAAE,mBAAmB;IA4BxE;;;;;;OAMG;IACI,yBAAyB,CAAC,cAAc,EAAE,OAAO;IAwHxD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;OAGG;IACH,OAAO,CAAC,qCAAqC;IAoK7C;;;;;OAKG;IACI,kBAAkB;CAWzB"}
|
package/lib/changeset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeset.js","sourceRoot":"","sources":["../src/changeset.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAE1C,aAAa;AAEb,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAChF,2EAA2E;AAC3E,OAAO,EAAE,mCAAmC,EAAE,MAAM,6CAA6C,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AAEnD,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;AAqCzD;;;;;GAKG;AACH,MAAM,OAAO,SAAS;IAerB;;;OAGG;IACH,YAAY,UAA0B;QACrC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,8BAA8B;YAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,UAAU,YAAY,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACP,uBAAuB;YACvB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,QAAQ;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,sBAAsB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,eAAwB;QACvC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,eAAe;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACJ,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;OAQG;IACH,cAAc,CAAC,YAAiC,EAAE,UAAkC;QACnF,IAAI,OAAO,GAAG,YAAY,CAAC;QAC3B,IAAI,YAAY,YAAY,SAAS,EAAE,CAAC;YACvC,OAAO,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,QAAQ,GACb,QAAQ,CAAC,OAAO,CAAC,IAAK,OAA+B,CAAC,KAAK,KAAK,SAAS;gBACxE,CAAC,CAAE,OAA+B,CAAC,KAAK;gBACxC,CAAC,CAAC,OAAO,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvE,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,4BAA4B,CAChC,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,CAAC,IAAI,CAAC,aAAa,EACnB,UAAU,CACV,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;;;;;OASG;IACK,4BAA4B,CACnC,sBAA2C,EAC3C,yBAA8C,EAC9C,cAAuB,EACvB,UAAkC;QAElC,oCAAoC;QACpC,IACC,yBAAyB,CAAC,MAAM;YAChC,yBAAyB,CAAC,MAAM;YAChC,yBAAyB,CAAC,MAAM,EAC/B,CAAC;YACF,IAAI,CAAC,6CAA6C,CACjD,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,UAAU,CACV,CAAC,CAAC,0CAA0C;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,eAAe,CAAC,EAAE,CAAC;YACzD,sBAAsB,CAAC,eAAe,GAAG,sBAAsB,CAAC,eAAe,IAAI,EAAE,CAAC;YACtF,MAAM,CACL,sBAAsB,CAAC,eAAe,EACtC,yBAAyB,CAAC,eAAe,CACzC,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAClC,wDAAwD;YACxD,IAAI,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,SAAS;YACV,CAAC;YAED,sBAAsB,CAAC,MAAM,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACtE,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,qCAAqC,CACzC,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,EACX,yBAAyB,CAAC,MAAM,CAAC,EACjC,MAAM,EACN,cAAc,EACd,UAAU,CACV,CAAC;YACH,CAAC;YACD,8DAA8D;YAC9D,IAAI,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC/D,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;;OAQG;IACK,WAAW,CAClB,cAAmC,EACnC,UAAkB,EAClB,eAAoC;QAEpC,MAAM,QAAQ,GACb,eAAe,IAAI,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC;YACzD,CAAC,CAAC,eAAe,CAAC,KAAK;YACvB,CAAC,CAAC,eAAe,CAAC;QACpB,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YACtF,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC7C,CAAC;aAAM,CAAC;YACP,cAAc,CAAC,UAAU,CAAC;gBACzB,cAAc,CAAC,UAAU,CAAC,KAAK,SAAS;oBACxC,eAAe;oBACf,eAAe,CAAC,cAAc,CAAC,UAAU,CAAC;oBACzC,CAAC,CAAC;wBACA,KAAK,EAAE,QAAQ;wBACf,QAAQ,EAAE,eAAe,CAAC,QAAQ;qBAClC;oBACF,CAAC,CAAC,QAAQ,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;;;;;;;;;OAWG;IACI,qCAAqC,CAC3C,aAAqB,EACrB,cAAmC,EACnC,yBAA+C,EAC/C,SAAiB,EACjB,cAAuB,EACvB,UAAkC;QAElC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACpE,cAAc,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YACpE,IAAI,CAAC,6CAA6C,CACjD,cAAc,CAAC,aAAa,CAAC,EAC7B,yBAAyB,CAAC,aAAa,CAAC,EACxC,WAAW,CAAC,MAAM,EAClB,UAAU,CACV,CAAC;YAEF,yDAAyD;YACzD,IAAI,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBAC9D,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;YACtC,CAAC;QACF,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/E,cAAc,CAAC,aAAa,CAAC;gBAC5B,cAAc,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,QAAQ,CAAC;YACb,IACC,WAAW,CAAC,MAAM,KAAK,QAAQ;gBAC/B,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;oBACvC,CAAC,cAAc,CAAC,aAAa,CAAC;wBAC7B,cAAc,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EACxD,CAAC;gBACF,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC;gBAClD,wEAAwE;gBACxE,yFAAyF;gBACzF,cAAc,CAAC,aAAa,CAAC;oBAC5B,cAAc,CAAC,aAAa,CAAC;wBAC7B,cAAc,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;wBACpD,CAAC,CAAC;4BACA,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC;yBAClD;wBACF,CAAC,CAAC;4BACA,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;yBAC5C,CAAC;gBACL,eAAe,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,IAAI,cAAc,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxE,cAAc,GAAI,cAAsC,CAAC,KAAK,CAAC;YAChE,CAAC;YAED,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjE,2DAA2D;gBAC3D,cAAc,CAAC,aAAa,CAAC;oBAC5B,eAAe,IAAI,QAAQ,KAAK,SAAS;wBACxC,CAAC,CAAC;4BACA,KAAK,EAAE,cAAc;4BACrB,QAAQ;yBACR;wBACF,CAAC,CAAC,cAAc,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACP,oDAAoD;gBACpD,IAAI,CAAC,iCAAiC,CACrC,cAAc,CAAC,aAAa,CAAC,EAC7B,yBAAyB,CAAC,aAAa,CAAC,EACxC,WAAW,CAAC,MAAM,EAClB,UAAU,CACV,CAAC;gBACF,IAAI,eAAe,EAAE,CAAC;oBACrB,uEAAuE;oBACvE,IAAI,QAAQ,CAAC;oBACb,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;wBAChD,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9C,cAAc,CAAC,aAAa,CAAC;wBAC5B,QAAQ,KAAK,SAAS;4BACrB,CAAC,CAAC;gCACA,KAAK,EAAE,QAAQ;gCACf,QAAQ;6BACR;4BACF,CAAC,CAAC,QAAQ,CAAC;gBACd,CAAC;YACF,CAAC;YAED,yDAAyD;YACzD,IAAI,cAAc,IAAI,SAAS,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBACjF,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;YACtC,CAAC;QACF,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YAC/B,uCAAuC;YACvC,IAAI,CAAC,WAAW,CACf,cAAc,EACd,aAAa,EACb,yBAAyB,CAAC,aAAa,CAAC,CACxC,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,8EAA8E;gBAC9E,4DAA4D;gBAC5D,IAAI,WAAW,CAAC,MAAM,KAAK,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACvE,IAAI,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;oBAC1D,IAAI,UAAU,IAAI,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wBACtD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;oBAC/B,CAAC;oBACD,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,WAAW,CACf,cAAc,EACd,aAAa,EACb,yBAAyB,CAAC,aAAa,CAAC,CACxC,CAAC;gBACH,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;oBACnC,wDAAwD;oBACxD,IAAI,CAAC,4BAA4B,CAChC,cAAc,CAAC,aAAa,CAAC,EAC7B,yBAAyB,CAAC,aAAa,CAAC,EACxC,KAAK,EACL,UAAU,CACV,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,qDAAqD;oBACrD,cAAc,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC;gBACrF,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,gBAAgB,CACtB,YAAiC,EACjC,aAA6B,EAC7B,UAAmC;QAEnC,wEAAwE;QACxE,OAAO,IAAI,CAAC,2BAA2B,CACtC,IAAI,CAAC,QAAQ,EACb,YAAY,EACZ,EAAE,EACF,aAAa,EACb,UAAU,CACV,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,2BAA2B,CAClC,uBAA4C,EAC5C,0BAA+C,EAC/C,WAAmB,EACnB,aAA6B,EAC7B,UAAiC;QAEjC,yCAAyC;QACzC,IACC,CAAC,uBAAuB,CAAC,MAAM;YAC9B,uBAAuB,CAAC,MAAM;YAC9B,uBAAuB,CAAC,MAAM,CAAC;YAChC,CAAC,0BAA0B,CAAC,MAAM;gBACjC,0BAA0B,CAAC,MAAM;gBACjC,0BAA0B,CAAC,MAAM,CAAC,EAClC,CAAC;YACF,IAAI,CAAC,4CAA4C,CAChD,uBAAuB,EACvB,0BAA0B,EAC1B,WAAW,EACX,cAAc,EAAE,0CAA0C;YAC1D,KAAK,EAAE,+CAA+C;YACtD,aAAa,EACb,UAAU,CACV,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;YAExE,MAAM,yBAAyB,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;YAE1D,MAAM,wBAAwB,GAAG;gBAChC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,kBAAkB;gBAC/C,iBAAiB,EAAE,yBAAyB;aAC5C,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE,UAAU,MAAM;gBAC7B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACpE,IACC,uBAAuB,CAAC,eAAe;oBACvC,uBAAuB,CAAC,eAAe,CAAC,MAAM,CAAC,EAC9C,CAAC;oBACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,cAAc,CACrD,QAAQ,EACR,uBAAuB,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CACxD,CAAC;oBAEF,IAAI,CAAC,OAAO,EAAE,CAAC;wBACd,IAAI,UAAU,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;4BACtD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;wBACjD,CAAC;wBAED,yBAAyB,CAAC,eAAe,CAAC,MAAM,CAAC;4BAChD,uBAAuB,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;wBAC1D,4EAA4E;wBAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;oBAC9C,CAAC;oBAED,OAAO,0BAA0B,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC3D,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,4CAA4C;YAC5C,IAAI,OAAO,CAAC,0BAA0B,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzD,OAAO,0BAA0B,CAAC,eAAe,CAAC;YACnD,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1E,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC9C,CAAC;QACF,CAAC;QAED,mDAAmD;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAE5D,mCAAmC;QACnC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE3D,2DAA2D;YAC3D,iEAAiE;YACjE,kDAAkD;YAClD,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,0BAA0B,EAAE,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,eAAe,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,0BAA0B,CAAC,MAAM,EAAE,CAAC;wBACpF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;wBAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC3C,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gCACnE,IAAI,kBAAkB,GACrB,0BAA0B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC7D,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,UAAU,IAAI,kBAAkB,EAAE,CAAC;oCACrE,kBAA0C,CAAC,QAAQ;wCACnD,uBAAuB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gCACjE,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,0GAA0G;gBAC1G,8GAA8G;gBAC9G,0CAA0C;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IACC,MAAM,IAAI,0BAA0B;wBACpC,KAAK,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,MAAM,CAAC,EAC7C,CAAC;wBACF,IAAI,kBAAkB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtE,IAAI,QAAQ,CAAC,kBAAkB,CAAC,IAAI,UAAU,IAAI,kBAAkB,EAAE,CAAC;4BACtE,+DAA+D;4BAC/D,IACC,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;gCACrD,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAC9C,CAAC;gCACF,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;oCACpD,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;4BAClD,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,6FAA6F;YAC7F,qCAAqC;YACrC,IAAI,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChF,SAAS;YACV,CAAC;YAED,sDAAsD;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,IAAI,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChE,uBAAuB,CAAC,MAAM,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAExE,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;oBAC1E,+DAA+D;oBAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,yCAAyC,CACjE,KAAK,CAAC,CAAC,CAAC,EACR,uBAAuB,CAAC,MAAM,CAAC,EAC/B,0BAA0B,CAAC,MAAM,CAAC,EAClC,MAAM,EACN,OAAO,EACP,IAAI,EACJ,aAAa,EACb,UAAU,CACV,CAAC;oBAEF,+EAA+E;oBAC/E,IAAI,WAAW,EAAE,CAAC;wBACjB,+DAA+D;wBAC/D,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBAE5C,oFAAoF;wBACpF,6FAA6F;wBAC7F,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpF,CAAC;gBACF,CAAC;gBAED,yDAAyD;gBACzD,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3D,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,CAAC;YACF,CAAC;YAED,yDAAyD;YACzD,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACjD,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG;gBAChB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,aAAa;gBAC1C,iBAAiB,EAAE,SAAS;aAC5B,CAAC;YACF,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,0BAA0B,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACK,yCAAyC,CAChD,MAAc,EACd,uBAA4C,EAC5C,0BAA+C,EAC/C,SAAiB,EACjB,WAAmB,EACnB,cAAuB,EACvB,aAAkB,EAClB,UAAiC;QAEjC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACpE,IAAI,CAAC,4CAA4C,CAChD,uBAAuB,CAAC,MAAM,CAAC,EAC/B,0BAA0B,CAAC,MAAM,CAAC,EAClC,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,IAAI,EAAE,sBAAsB;YAC5B,aAAa,EACb,UAAU,CACV,CAAC;YAEF,yDAAyD;YACzD,IAAI,cAAc,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACnE,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,gCAAgC,CACpC,uBAAuB,CAAC,MAAM,CAAC,EAC/B,0BAA0B,CAAC,MAAM,CAAC,EAClC,WAAW,EACX,aAAa,EACb,WAAW,CAAC,MAAM,EAClB,UAAU,CACV,CAAC;YACF,yDAAyD;YACzD,IAAI,cAAc,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACnE,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,yBAAyB,CAC7B,uBAAuB,CAAC,MAAM,CAAC,EAC/B,0BAA0B,EAC1B,MAAM,EACN,WAAW,EACX,aAAa,EACb,UAAU,CACV,CAAC;YACF,yDAAyD;YACzD,IAAI,cAAc,IAAI,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACnE,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7C,sEAAsE;YACtE,IAAI,uBAAuB,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnD,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC/D,OAAO,IAAI,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACP,6CAA6C;oBAE7C,4BAA4B;oBAC5B,uBAAuB,CAAC,MAAM,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAExE,wCAAwC;oBACxC,IAAI,CAAC,2BAA2B,CAC/B,uBAAuB,CAAC,MAAM,CAAC,EAC/B,0BAA0B,CAAC,MAAM,CAAC,EAClC,WAAW,EACX,aAAa,EACb,UAAU,CACV,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,oCAAoC,CAAC,UAAkC;QAC9E,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAC7C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;YAC9C,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAEtD,IAAI,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC;YACrD,IAAI,UAAU,CAAC,wBAAwB,EAAE,KAAK,MAAM,EAAE,CAAC;gBACtD,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;YAC7C,CAAC;iBAAM,IAAI,OAAO,EAAE,CAAC;gBACpB,IAAI,UAAU,CAAC,wBAAwB,EAAE,KAAK,UAAU,EAAE,CAAC;oBAC1D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC1B,CAAC;gBAED,IAAI,UAAU,CAAC,wBAAwB,EAAE,KAAK,OAAO,EAAE,CAAC;oBACvD,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;oBACrD,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACP,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;gBACjE,CAAC;YACF,CAAC;YAED,UAAU,CAAC,WAAW,CAAC;gBACtB,aAAa,EAAE,OAAO;gBACtB,QAAQ,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ;aAC3C,CAAC,CAAC;YAEH,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACd,GACC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,EAC1C,sCAAsC,CACtC,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,GAAG,OAAO,CAAC;gBAEvB,kCAAkC;gBAClC,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBACrD,2BAA2B;oBAC3B,IAAI,SAAS,CAAC;oBACd,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACxB,SAAS,GAAG,QAAQ,CAAC;oBACtB,CAAC;oBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACtC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;4BACpC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;wBACpE,CAAC;oBACF,CAAC;oBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACtC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BAE3B,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gCACjC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;4BACrC,CAAC;4BACD,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,iBAAiB,CAAC,CAAC;wBAC1E,CAAC;oBACF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,IAAI,eAAe,IAAI,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wBAChE,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBACrC,CAAC;yBAAM,CAAC;wBACP,MAAM,YAAY,GAAG;4BACpB,KAAK,EAAE,eAAe;4BACtB,QAAQ;yBACR,CAAC;wBACF,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;oBACjD,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACd,GAAG,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,EAAE,kCAAkC,CAChF,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE1D,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBACtD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACtC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BAC3B,IAAI,UAAU,GAAG,EAAE,CAAC;4BACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC1C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BACvD,CAAC;4BACD,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;wBACvB,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACtC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,UAAU,GAAG,EAAE,CAAC;wBAEpB,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;4BACtC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;wBACrC,CAAC;wBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC5C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvD,CAAC;wBACD,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;oBACvB,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,IACN,SAAS,CAAC,OAAO,KAAK,KAAK;gBAC3B,gFAAgF;gBAChF,eAAe,CAAC,MAAM;gBACtB,eAAe,CAAC,MAAM;gBACtB,eAAe,CAAC,MAAM,EACrB,CAAC;gBACF,2FAA2F;gBAC3F,4FAA4F;gBAC5F,gHAAgH;gBAChH,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBACzE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACpC,OAAO;gBACR,CAAC;gBACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACd,GAAG,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,EAAE,gCAAgC,CAC9E,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;gBAE9B,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;4BACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gCAChE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BACrB,CAAC;4BACD,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;gCACzC,KAAK,EAAE,KAAK;gCACZ,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC9C,CAAC;wBACH,CAAC;oBACF,CAAC;oBACD,IAAI,SAAS,GAAG,EAAE,CAAC;oBACnB,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;wBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;4BACjC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxC,CAAC;wBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7C,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjE,CAAC;wBACD,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;oBACpC,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;oBACtD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,oCAAoC;oBACrC,CAAC;oBACD,IAAI,SAAS,GAAG,EAAE,CAAC;oBACnB,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;4BAC3C,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;4BACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC7C,IAAI,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gCACjC,uCAAuC;gCACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCAC7C,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;wCAC1D,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;wCAClD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4CAChC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wCAChC,CAAC;wCACD,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;oCAC9D,CAAC;gCACF,CAAC;4BACF,CAAC;4BACD,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;wBACpC,CAAC;6BAAM,CAAC;4BACP,yEAAyE;4BACzE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;4BACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC9C,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCAC7C,IAAI,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oCACjC,IAAI,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;oCACnD,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gCACjE,CAAC;4BACF,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACI,sBAAsB,CAAC,qBAA0C;QACvE,YAAY,CAAC,MAAM,CAClB,qBAAqB,KAAK,SAAS,EACnC,GAAG,GAAG,CAAC,gBAAgB,iFAAiF,CACxG,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,QAAQ,GAAG;oBACf,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;wBAC7C,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE;wBAC/B,CAAC,CAAC,qBAAqB;oBACxB,KAAK,EAAE,IAAI,CAAC,QAAQ;iBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAgC,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;oBACrF,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE;oBAC/B,CAAC,CAAC,qBAAqB,CAAC;YAC1B,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;YACtD,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACjD,WAAW,EAAE,IAAI,CAAC,oCAAoC;gBACtD,QAAQ,EAAE,SAAS;aACnB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACI,yBAAyB,CAAC,cAAuB;QACvD,MAAM,QAAQ,GAAG,UAAU,UAAU;YACpC,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC7C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO;gBACR,CAAC;gBACD,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;gBAE9C,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,mBAAmB;oBACnB,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;oBACtD,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;wBACrD,2BAA2B;wBAE3B,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gCACtC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BACpB,CAAC;wBACF,CAAC;wBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gCAEtC,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gCACjC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;oCACjC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gCACrC,CAAC;gCACD,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;4BAC9B,CAAC;wBACF,CAAC;wBACD,IAAI,eAAe,IAAI,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;4BAChE,UAAU,CAAC,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAC1D,CAAC;oBACF,CAAC;yBAAM,IAAI,eAAe,IAAI,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvE,UAAU,CAAC,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC1D,CAAC;gBACF,CAAC;qBAAM,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;oBAC1C,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;oBACtD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACtC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpB,CAAC;oBACF,CAAC;oBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;wBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BACxD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACtC,IAAI,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gCACtC,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;4BACrC,CAAC;4BACD,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;wBAC9B,CAAC;oBACF,CAAC;oBACD,+DAA+D;gBAChE,CAAC;qBAAM,IACN,SAAS,CAAC,OAAO,KAAK,KAAK;oBAC3B,CAAC,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,EAClD,CAAC;oBACF,yCAAyC;oBACzC,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;oBACtD,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;4BACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC9C,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gCACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;oCAChE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gCACrB,CAAC;gCACD,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BACjD,CAAC;wBACF,CAAC;wBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;4BACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gCACjC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCACvC,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC;4BACtC,CAAC;wBACF,CAAC;oBACF,CAAC;yBAAM,CAAC;wBACP,IAAI,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;wBACtD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,oCAAoC;wBACrC,CAAC;wBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;4BAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;gCAC5C,oDAAoD;gCACpD,IAAI,SAAS,GAAG,EAAE,CAAC;gCACnB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oCAC9C,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wCAC7C,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oCAChC,CAAC;gCACF,CAAC;gCACD,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;4BACpC,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC;QAEF,IACC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtB,IAAI,CAAC,QAAgC,CAAC,QAAQ,KAAK,SAAS;YAC5D,IAAI,CAAC,QAAgC,CAAC,KAAK,KAAK,SAAS,EACzD,CAAC;YACF,IAAI,CAAC,QAAQ,GAAI,IAAI,CAAC,QAAgC,CAAC,KAAK,CAAC;YAC7D,OAAO;QACR,CAAC;QAED,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjD,WAAW,EAAE,QAAQ;SACrB,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACK,uBAAuB,CAC9B,YAAiC,EACjC,qBAA8B;QAE9B,IAAI,KAAK,CAAC;QACV,IAAI,qBAAqB,EAAE,CAAC;YAC3B,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACP,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,EAAE,UAAU,eAAe;gBAC3C,IAAI,CAAC,eAAe,EAAE,UAAU,gBAAgB,EAAE,IAAI;oBACrD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,qCAAqC,CAAC,UAAkC;QAC/E,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,kFAAkF;QAClF,sEAAsE;QACtE,MAAM,sBAAsB,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAElF,IAAI,sBAAsB,IAAI,UAAU,CAAC,gBAAgB,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC1E,mEAAmE;YACnE,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;YACpC,OAAO;QACR,CAAC;QAED,IACC,UAAU,CAAC,gBAAgB,EAAE,KAAK,QAAQ;YAC1C,UAAU,CAAC,gBAAgB,EAAE,KAAK,QAAQ,EACzC,CAAC;YACF,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;YAE9C,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,YAAY,CAAC,MAAM,CAClB,KAAK,EACL,GAAG,GAAG,CAAC,gBAAgB,uCAAuC,IAAI,CAAC,SAAS,CAC3E,UAAU,CACV,EAAE,CACH,CAAC;YACH,CAAC;YAED,MAAM,eAAe,GAAG,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAExD,IACC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC;gBAC5C,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EACxD,CAAC;gBACF,yDAAyD;gBACzD,IACC,UAAU,CAAC,gBAAgB,EAAE,KAAK,QAAQ;oBAC1C,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;wBAC1B,OAAQ,eAAuC,CAAC,QAAQ,KAAK,WAAW,CAAC,EACzE,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAC1C,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC;gBACnC,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC;gBACjD,eAAe,CAAC,KAAK,GAAG,GAAG,CAAC;YAC7B,CAAC;iBAAM,IACN,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC1D,SAAS,CAAC,OAAO,KAAK,OAAO,EAC5B,CAAC;gBACF,4CAA4C;gBAC5C,MAAM,aAAa,GAAG,IAAI,sBAAsB,CAAC,eAAe,CAAC,CAAC;gBAClE,MAAM,eAAe,GAAwB,EAAE,CAAC;gBAChD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC7B,CAAC;gBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC7B,CAAC;gBACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC7B,CAAC;gBACD,qDAAqD;gBACrD,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC/B,QAAQ,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;wBAC1C,KAAK,2BAA2B,CAAC,MAAM;4BACtC,iBAAiB;4BACjB,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;gCAC3B,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM;gCAC7E,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;6BACxC,CAAC,CAAC;4BACH,MAAM;wBACP,KAAK,2BAA2B,CAAC,MAAM;4BACtC,iBAAiB;4BACjB,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;gCAC3B,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM;gCAC7E,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;6BACxC,CAAC,CAAC;4BACH,MAAM;wBACP,KAAK,2BAA2B,CAAC,MAAM;4BACtC,kBAAkB;4BAClB,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gCACvC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;oCAC3B,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;wCACvC,aAAa,CAAC,aAAa,CAAC,MAAM;oCACnC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;oCACxC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;iCACxC,CAAC,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACP,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;oCAC3B,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;wCACvC,aAAa,CAAC,aAAa,CAAC,MAAM;oCACnC,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;iCACxC,CAAC,CAAC;4BACJ,CAAC;4BACD,MAAM;wBACP;4BACC,OAAO,CAAC,KAAK,CACZ,mBAAmB,GAAG,CAAC,iBAAiB,GAAG,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,CAC7E,CAAC;oBACJ,CAAC;oBACD,aAAa,CAAC,IAAI,EAAE,CAAC;gBACtB,CAAC;gBACD,UAAU,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACP,mCAAmC;gBACnC,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;wBACtE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtD,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;4BACtB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;4BAC7B,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;wBACtB,CAAC;oBACF,CAAC;gBACF,CAAC;gBACD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC;gBACzC,IAAI,cAAc,GAAG,KAAK,CAAC;gBAC3B,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;oBAC5B,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;oBAChD,cAAc,GAAG,IAAI,CAAC;oBACtB,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;oBACnC,OAAO,eAAe,CAAC,MAAM,CAAC;oBAC9B,MAAM,iBAAiB,GAAG,eAAe,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC9E,IAAI,CACH,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACvE,UAAU,IAAI;wBACb,MAAM,QAAQ,GAAG,SAAS,CACzB,UAAU,CAAC,WAAW,EAAE,EACxB,IAAI,EACJ,uBAAuB,CACvB,CAAC;wBACF,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC3C,CAAC,CACD,CAAC;gBACH,CAAC;gBACD,IAAI,SAAS,EAAE,CAAC;oBACf,IAAI,cAAc,EAAE,CAAC;wBACpB,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACP,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;wBACnC,eAAe,CAAC,MAAM,GAAG,SAAS,CAAC;wBACnC,OAAO,eAAe,CAAC,MAAM,CAAC;oBAC/B,CAAC;oBACD,MAAM,iBAAiB,GAAG,eAAe,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC9E,IAAI,CACH,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACvE,UAAU,IAAI;wBACb,MAAM,QAAQ,GAAG,SAAS,CACzB,UAAU,CAAC,WAAW,EAAE,EACxB,IAAI,EACJ,uBAAuB,CACvB,CAAC;wBACF,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC3C,CAAC,CACD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,kBAAkB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC9B,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACjD,WAAW,EAAE,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC;aAClE,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;;AA7uCM,sBAAY,GAAG,YAAY,CAAC;AAC5B,0BAAgB,GAAG,gBAAgB,CAAC;AACpC,2BAAiB,GAAG,iBAAiB,CAAC;AA8uC9C,SAAS,CAAC,SAAS,CAAC,iCAAiC;IACpD,uBAAuB,CAAC,iCAAiC,CAAC;AAC3D,SAAS,CAAC,SAAS,CAAC,gCAAgC;IACnD,uBAAuB,CAAC,gCAAgC,CAAC;AAC1D,SAAS,CAAC,SAAS,CAAC,yBAAyB;IAC5C,uBAAuB,CAAC,yBAAyB,CAAC;AAEnD,2EAA2E;AAC3E,SAAS,CAAC,SAAS,CAAC,6CAA6C;IAChE,mCAAmC,CAAC,6CAA6C,CAAC;AACnF,SAAS,CAAC,SAAS,CAAC,gCAAgC;IACnD,mCAAmC,CAAC,gCAAgC,CAAC;AACtE,SAAS,CAAC,SAAS,CAAC,4CAA4C;IAC/D,mCAAmC,CAAC,4CAA4C,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview Serialized representation of the changes in a repository\n */\n\nimport { constants, ConsoleUtils, joinPaths } from \"@fluid-experimental/property-common\";\nimport cloneDeep from \"lodash/cloneDeep.js\";\nimport each from \"lodash/each.js\";\nimport extend from \"lodash/extend.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport isObject from \"lodash/isObject.js\";\nimport isString from \"lodash/isString.js\";\n\n// @ts-ignore\n\nimport { ChangeSetArrayFunctions } from \"./changeset_operations/array.js\";\nimport { ArrayChangeSetIterator } from \"./changeset_operations/arrayChangesetIterator.js\";\nimport { ConflictType } from \"./changeset_operations/changesetConflictTypes.js\";\n// Add the indexed collection functions into the prototype of the ChangeSet\nimport { ChangeSetIndexedCollectionFunctions } from \"./changeset_operations/indexedCollection.js\";\nimport { isEmptyChangeSet } from \"./changeset_operations/isEmptyChangeset.js\";\nimport { ArrayIteratorOperationTypes } from \"./changeset_operations/operationTypes.js\";\nimport { TypeIdHelper } from \"./helpers/typeidHelper.js\";\nimport { isReservedKeyword } from \"./isReservedKeyword.js\";\nimport { TemplateValidator } from \"./templateValidator.js\";\nimport { Utils } from \"./utils.js\";\n\nconst { PROPERTY_PATH_DELIMITER, MSG } = constants;\n\nconst { extractContext, isPrimitiveType } = TypeIdHelper;\n\nexport interface ApplyChangeSetOptions {\n\t/**\n\t * Additional meta information which help later to obtain more compact changeset during the apply operation.\n\t */\n\tapplyAfterMetaInformation?: Map<any, any>;\n\n\t/**\n\t * Throw error for template definition mismatches.\n\t */\n\tthrowOnTemplateMismatch?: boolean;\n}\n\nexport interface RebaseChangeSetOptions extends ApplyChangeSetOptions {\n\trebaseMetaInformation?: object;\n}\n\n/**\n * The plain serialization data structure used to encode a ChangeSet.\n * @internal\n */\nexport type SerializedChangeSet = any; // @TODO Maybe we should add full type for the ChangeSet\nexport type ChangeSetType = any;\nexport interface ConflictInfo {\n\t/**\n\t * Path to the position where the conflict occurred. If the conflicting change is of type\n\t * MISMATCH_TEMPLATES then the path will be undefined.\n\t */\n\tpath?: string | undefined;\n\t/**\n\t * Type of the conflict\n\t */\n\ttype: ConflictType;\n\tconflictingChange?: SerializedChangeSet;\n}\n\n/**\n * The ChangeSet represents an operation to be done (or that was done) on the data. It encapsulate one or\n * many addition/insertion and deletion of properties. The ChangeSetObject also provides functionality\n * to merge and swap change sets.\n * @internal\n */\nexport class ChangeSet {\n\tstatic ConflictType = ConflictType;\n\tstatic isEmptyChangeSet = isEmptyChangeSet;\n\tstatic isReservedKeyword = isReservedKeyword;\n\n\tpublic declare _cleanIndexedCollectionChangeSet: typeof ChangeSetIndexedCollectionFunctions._cleanIndexedCollectionChangeSet;\n\tpublic declare _performApplyAfterOnPropertyArray: typeof ChangeSetArrayFunctions._performApplyAfterOnPropertyArray;\n\tpublic declare _rebaseArrayChangeSetForProperty: typeof ChangeSetArrayFunctions._rebaseArrayChangeSetForProperty;\n\tpublic declare _rebaseChangeSetForString: typeof ChangeSetArrayFunctions._rebaseChangeSetForString;\n\tpublic declare _performApplyAfterOnPropertyIndexedCollection: typeof ChangeSetIndexedCollectionFunctions._performApplyAfterOnPropertyIndexedCollection;\n\tpublic declare _rebaseIndexedCollectionChangeSetForProperty: typeof ChangeSetIndexedCollectionFunctions._rebaseIndexedCollectionChangeSetForProperty;\n\n\t_changes: SerializedChangeSet;\n\t_isNormalized: boolean;\n\n\t/**\n\t * @param [in_changes] - The serialized changes to store in this change set if a string is supplied,\n\t * we assume it to be a serialized JSON representation of the change set. If none is supplied, an empty changeset will be created.\n\t */\n\tconstructor(in_changes?: ChangeSetType) {\n\t\tif (in_changes === undefined || in_changes === null) {\n\t\t\tthis._changes = {};\n\t\t} else if (isString(in_changes)) {\n\t\t\t// Stringified Serialized JSON\n\t\t\tthis._changes = JSON.parse(in_changes);\n\t\t} else if (in_changes instanceof ChangeSet) {\n\t\t\tthis._changes = cloneDeep(in_changes._changes);\n\t\t} else {\n\t\t\t// Serialized Changeset\n\t\t\tthis._changes = in_changes;\n\t\t}\n\n\t\tthis._isNormalized = false;\n\t}\n\n\t/**\n\t * Creates a string representation of the change set\n\t * @returns JSON encoding of the changes in this change set\n\t */\n\ttoString(): string {\n\t\treturn JSON.stringify(this._changes);\n\t}\n\n\t/**\n\t * Returns the serialized changes.\n\t *\n\t * @returns The serialized changeset\n\t */\n\tgetSerializedChangeSet(): SerializedChangeSet {\n\t\treturn this._changes;\n\t}\n\n\t/**\n\t * Indicates whether this is a normalized ChangeSet. If this is set to true, squashes will not remove empty entries\n\t * from the ChangeSet.\n\t *\n\t * @param in_isNormalized - is this a normalized ChangeSet?\n\t */\n\tsetIsNormalized(in_isNormalized: boolean) {\n\t\tthis._isNormalized = in_isNormalized;\n\t}\n\n\t/**\n\t * Indicates whether this is a normalized ChangeSet. If this is set to true, squashes will not remove empty entries\n\t * from the ChangeSet.\n\t *\n\t * @returns Is this a normalized ChangeSet?\n\t */\n\tgetIsNormalized(): boolean {\n\t\treturn this._isNormalized;\n\t}\n\n\t/**\n\t * Clones the ChangeSet\n\t *\n\t * @returns The cloned ChangeSet\n\t */\n\tclone(): ChangeSet {\n\t\treturn new ChangeSet(cloneDeep(this._changes));\n\t}\n\n\t/**\n\t * Updates this ChangeSet. The result will be the concatenation of the two ChangeSets. First the changes in this\n\t * ChangeSet are executed, then the changes in the supplied in_changeSet are applied. The result will be\n\t * stored in this ChangeSet. This function assumes that the second ChangeSet is relative to the state after\n\t * application of the first ChangeSet.\n\t *\n\t * @param in_changeSet - The changeset to apply\n\t * @param in_options - Optional additional parameters\n\t */\n\tapplyChangeSet(in_changeSet: SerializedChangeSet, in_options?: ApplyChangeSetOptions) {\n\t\tlet changes = in_changeSet;\n\t\tif (in_changeSet instanceof ChangeSet) {\n\t\t\tchanges = in_changeSet.getSerializedChangeSet();\n\t\t}\n\n\t\tif (!isObject(this._changes) || Array.isArray(this._changes)) {\n\t\t\tconst oldValue =\n\t\t\t\tisObject(changes) && (changes as SerializedChangeSet).value !== undefined\n\t\t\t\t\t? (changes as SerializedChangeSet).value\n\t\t\t\t\t: changes;\n\t\t\tthis._changes = Array.isArray(oldValue) ? oldValue.slice() : oldValue;\n\t\t} else {\n\t\t\tthis._performApplyAfterOnProperty(\n\t\t\t\tthis._changes,\n\t\t\t\tchanges,\n\t\t\t\t!this._isNormalized,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Applies a changeset to a given property (recursively). The ChangeSet is assumed to be relative to the same\n\t * property root and it will be applied behind the base ChangeSet (assuming that the changes are relative to the\n\t * state after the base ChangeSet has been applied. It will change the base ChangeSet).\n\t *\n\t * @param io_basePropertyChanges - The ChangeSet describing the initial state.\n\t * @param in_appliedPropertyChanges - The ChangeSet to apply to this state.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param in_options - Optional additional parameters.\n\t */\n\tprivate _performApplyAfterOnProperty(\n\t\tio_basePropertyChanges: SerializedChangeSet,\n\t\tin_appliedPropertyChanges: SerializedChangeSet,\n\t\tin_removeEmpty: boolean,\n\t\tin_options?: ApplyChangeSetOptions,\n\t) {\n\t\t// Apply dynamic property operations\n\t\tif (\n\t\t\tin_appliedPropertyChanges.insert ||\n\t\t\tin_appliedPropertyChanges.modify ||\n\t\t\tin_appliedPropertyChanges.remove\n\t\t) {\n\t\t\tthis._performApplyAfterOnPropertyIndexedCollection(\n\t\t\t\tio_basePropertyChanges,\n\t\t\t\tin_appliedPropertyChanges,\n\t\t\t\t\"NodeProperty\",\n\t\t\t\tin_options,\n\t\t\t); // TODO: recursively propagate the typeid?\n\t\t}\n\n\t\tif (!isEmpty(in_appliedPropertyChanges.insertTemplates)) {\n\t\t\tio_basePropertyChanges.insertTemplates = io_basePropertyChanges.insertTemplates || {};\n\t\t\textend(\n\t\t\t\tio_basePropertyChanges.insertTemplates,\n\t\t\t\tin_appliedPropertyChanges.insertTemplates,\n\t\t\t);\n\t\t}\n\n\t\t// Apply ChangeSet to the properties\n\t\tconst modifiedTypeids = Object.keys(in_appliedPropertyChanges);\n\t\tfor (let i = 0; i < modifiedTypeids.length; i++) {\n\t\t\tconst typeid = modifiedTypeids[i];\n\t\t\t// The reserved keywords have already been handled above\n\t\t\tif (ChangeSet.isReservedKeyword(typeid)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tio_basePropertyChanges[typeid] = io_basePropertyChanges[typeid] || {};\n\t\t\tconst baseChanges = io_basePropertyChanges[typeid];\n\t\t\tconst changedKeys = Object.keys(in_appliedPropertyChanges[typeid]);\n\t\t\tfor (let j = 0; j < changedKeys.length; j++) {\n\t\t\t\tthis.performApplyAfterOnPropertyWithTypeid(\n\t\t\t\t\tchangedKeys[j],\n\t\t\t\t\tbaseChanges,\n\t\t\t\t\tin_appliedPropertyChanges[typeid],\n\t\t\t\t\ttypeid,\n\t\t\t\t\tin_removeEmpty,\n\t\t\t\t\tin_options,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Remove the type when it no longer contains any changed keys\n\t\t\tif (in_removeEmpty && isEmpty(io_basePropertyChanges[typeid])) {\n\t\t\t\tdelete io_basePropertyChanges[typeid];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Helper function used to apply a new value to a given ChangeSet.\n\t * It is used to handle setting a primitive value, which might either be represented\n\t * via a literal or an object with a member value.\n\t * applies in_appliedValue to the io_baseChanges at the given in_baseKey\n\t * @param io_baseChanges - base changes (modified)\n\t * @param in_baseKey - key\n\t * @param in_appliedValue - applied changes to be applied\n\t */\n\tprivate _applyValue(\n\t\tio_baseChanges: SerializedChangeSet,\n\t\tin_baseKey: string,\n\t\tin_appliedValue: SerializedChangeSet,\n\t) {\n\t\tconst newValue =\n\t\t\tin_appliedValue && in_appliedValue.hasOwnProperty(\"value\")\n\t\t\t\t? in_appliedValue.value\n\t\t\t\t: in_appliedValue;\n\t\tif (io_baseChanges[in_baseKey] && io_baseChanges[in_baseKey].hasOwnProperty(\"value\")) {\n\t\t\tio_baseChanges[in_baseKey].value = newValue;\n\t\t} else {\n\t\t\tio_baseChanges[in_baseKey] =\n\t\t\t\tio_baseChanges[in_baseKey] === undefined &&\n\t\t\t\tin_appliedValue &&\n\t\t\t\tin_appliedValue.hasOwnProperty(\"oldValue\")\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\toldValue: in_appliedValue.oldValue,\n\t\t\t\t\t\t}\n\t\t\t\t\t: newValue;\n\t\t}\n\t}\n\n\t/**\n\t * Decides based on the given Typeid which applyAfter operation to perform.\n\t * Note: This function is not directly called on the ChangeSet but on the object containing it together with a key\n\t * since it needs to be able to overwrite this entry\n\t *\n\t * @param in_changedKey - The key of the entry in the object.\n\t * @param in_baseChanges - The object containing the state before the applyAfter.\n\t * @param in_appliedPropertyChanges - The object containing the ChangeSet with the modification.\n\t * @param in_typeid - The typeid of the property to modify.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param in_options - Optional additional parameters.\n\t */\n\tpublic performApplyAfterOnPropertyWithTypeid(\n\t\tin_changedKey: string,\n\t\tin_baseChanges: SerializedChangeSet,\n\t\tin_appliedPropertyChanges: { [x: string]: any },\n\t\tin_typeid: string,\n\t\tin_removeEmpty: boolean,\n\t\tin_options?: ApplyChangeSetOptions,\n\t) {\n\t\tconst splitTypeid = extractContext(in_typeid);\n\n\t\tif (splitTypeid.context === \"set\" || splitTypeid.context === \"map\") {\n\t\t\tin_baseChanges[in_changedKey] = in_baseChanges[in_changedKey] || {};\n\t\t\tthis._performApplyAfterOnPropertyIndexedCollection(\n\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\tin_options,\n\t\t\t);\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(in_baseChanges[in_changedKey])) {\n\t\t\t\tdelete in_baseChanges[in_changedKey];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"array\" || splitTypeid.typeid === \"String\") {\n\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\tin_baseChanges[in_changedKey] !== undefined ? in_baseChanges[in_changedKey] : {};\n\t\t\tlet baseIsSetChange = false;\n\t\t\tlet oldValue;\n\t\t\tif (\n\t\t\t\tsplitTypeid.typeid === \"String\" &&\n\t\t\t\t(isString(in_baseChanges[in_changedKey]) ||\n\t\t\t\t\t(in_baseChanges[in_changedKey] &&\n\t\t\t\t\t\tin_baseChanges[in_changedKey].hasOwnProperty(\"value\")))\n\t\t\t) {\n\t\t\t\toldValue = in_baseChanges[in_changedKey].oldValue;\n\t\t\t\t// we need to convert the format to allow the application of the changes\n\t\t\t\t// since _performApplyAfterOnPropertyArray only understands insert/modify/remove commands\n\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\tin_baseChanges[in_changedKey] &&\n\t\t\t\t\tin_baseChanges[in_changedKey].hasOwnProperty(\"value\")\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinsert: [[0, in_baseChanges[in_changedKey].value]],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tinsert: [[0, in_baseChanges[in_changedKey]]],\n\t\t\t\t\t\t\t};\n\t\t\t\tbaseIsSetChange = true;\n\t\t\t}\n\t\t\tlet appliedChanges = in_appliedPropertyChanges[in_changedKey];\n\t\t\tif (isObject(appliedChanges) && appliedChanges.hasOwnProperty(\"value\")) {\n\t\t\t\tappliedChanges = (appliedChanges as SerializedChangeSet).value;\n\t\t\t}\n\n\t\t\tif (splitTypeid.typeid === \"String\" && isString(appliedChanges)) {\n\t\t\t\t// we've got a 'set' command and just overwrite the changes\n\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\tbaseIsSetChange && oldValue !== undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tvalue: appliedChanges,\n\t\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: appliedChanges;\n\t\t\t} else {\n\t\t\t\t// we have incremental changes (or a standard array)\n\t\t\t\tthis._performApplyAfterOnPropertyArray(\n\t\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\tsplitTypeid.typeid,\n\t\t\t\t\tin_options,\n\t\t\t\t);\n\t\t\t\tif (baseIsSetChange) {\n\t\t\t\t\t// we have to convert back to a string, if it had been converted before\n\t\t\t\t\tlet newValue;\n\t\t\t\t\tnewValue = isEmpty(in_baseChanges[in_changedKey])\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: in_baseChanges[in_changedKey].insert[0][1];\n\t\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\t\toldValue !== undefined\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: newValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && ChangeSet.isEmptyChangeSet(in_baseChanges[in_changedKey])) {\n\t\t\t\tdelete in_baseChanges[in_changedKey];\n\t\t\t}\n\t\t} else if (splitTypeid.isEnum) {\n\t\t\t// Enum types can simply be overwritten\n\t\t\tthis._applyValue(\n\t\t\t\tin_baseChanges,\n\t\t\t\tin_changedKey,\n\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t);\n\t\t} else if (splitTypeid.context === \"single\") {\n\t\t\tif (isPrimitiveType(splitTypeid.typeid)) {\n\t\t\t\t// Primitive types can simply be overwritten, however we have an exception for\n\t\t\t\t// 64 bit integers (until javascript natively supports them)\n\t\t\t\tif (splitTypeid.typeid === \"Int64\" || splitTypeid.typeid === \"Uint64\") {\n\t\t\t\t\tlet appliedVal = in_appliedPropertyChanges[in_changedKey];\n\t\t\t\t\tif (appliedVal && appliedVal.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tappliedVal = appliedVal.value;\n\t\t\t\t\t}\n\t\t\t\t\tthis._applyValue(in_baseChanges, in_changedKey, appliedVal.slice());\n\t\t\t\t} else {\n\t\t\t\t\tthis._applyValue(\n\t\t\t\t\t\tin_baseChanges,\n\t\t\t\t\t\tin_changedKey,\n\t\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (in_baseChanges[in_changedKey]) {\n\t\t\t\t\t// Otherwise we have to continue the merging recursively\n\t\t\t\t\tthis._performApplyAfterOnProperty(\n\t\t\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// If the key doesn't exist, yet, we can just copy it\n\t\t\t\t\tin_baseChanges[in_changedKey] = cloneDeep(in_appliedPropertyChanges[in_changedKey]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(MSG.UNKNOWN_CONTEXT + splitTypeid.context);\n\t\t}\n\t}\n\n\t/**\n\t * Rebases a given ChangeSet behind the current ChangeSet.\n\t *\n\t * This function takes a ChangeSet which is assumed to be relative to the same base state as the ChangeSet stored in\n\t * this class and transforms it in such a way that it can be applied after this ChangeSet. The function will modify\n\t * the supplied ChangeSet\n\t *\n\t * @param io_changeSet - The ChangeSet that is rebased behind the state obtained by application of this ChangeSet.\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict.\n\t * @param in_options - Optional additional parameters.\n\t * @returns The rebased ChangeSet (the same object as io_changeSet, it will be\n\t * modified in place).\n\t */\n\tpublic _rebaseChangeSet(\n\t\tio_changeSet: SerializedChangeSet,\n\t\tout_conflicts: ConflictInfo[],\n\t\tin_options?: RebaseChangeSetOptions,\n\t): SerializedChangeSet {\n\t\t// We actually only pass this request to the recursive internal function\n\t\treturn this._rebaseChangeSetForProperty(\n\t\t\tthis._changes,\n\t\t\tio_changeSet,\n\t\t\t\"\",\n\t\t\tout_conflicts,\n\t\t\tin_options,\n\t\t);\n\t}\n\n\t/**\n\t * Internal helper function that performs a rebase on a single property\n\t *\n\t * @param in_ownPropertyChangeSet - The ChangeSet for the property stored in this class\n\t * @param io_rebasePropertyChangeSet - The ChangeSet for the property to be rebased\n\t * @param in_basePath - Base path to get to the property processed by this function\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict\n\t * @param in_options - Optional additional parameters\n\t * @returns The rebased ChangeSet for this property\n\t */\n\tprivate _rebaseChangeSetForProperty(\n\t\tin_ownPropertyChangeSet: SerializedChangeSet,\n\t\tio_rebasePropertyChangeSet: SerializedChangeSet,\n\t\tin_basePath: string,\n\t\tout_conflicts: ConflictInfo[],\n\t\tin_options: ApplyChangeSetOptions,\n\t): SerializedChangeSet {\n\t\t// Process the children in this ChangeSet\n\t\tif (\n\t\t\t(in_ownPropertyChangeSet.insert ||\n\t\t\t\tin_ownPropertyChangeSet.modify ||\n\t\t\t\tin_ownPropertyChangeSet.remove) &&\n\t\t\t(io_rebasePropertyChangeSet.insert ||\n\t\t\t\tio_rebasePropertyChangeSet.modify ||\n\t\t\t\tio_rebasePropertyChangeSet.remove)\n\t\t) {\n\t\t\tthis._rebaseIndexedCollectionChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet,\n\t\t\t\tio_rebasePropertyChangeSet,\n\t\t\t\tin_basePath,\n\t\t\t\t\"NodeProperty\", // TODO: recursively propagate the typeid?\n\t\t\t\tfalse, // don't use square brackets (use dots instead)\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t}\n\t\tif (!isEmpty(io_rebasePropertyChangeSet.insertTemplates)) {\n\t\t\tconst typeids = Object.keys(io_rebasePropertyChangeSet.insertTemplates);\n\n\t\t\tconst templateMismatchChangeSet = { insertTemplates: {} };\n\n\t\t\tconst templateMismatchConflict = {\n\t\t\t\ttype: ChangeSet.ConflictType.MISMATCH_TEMPLATES,\n\t\t\t\tconflictingChange: templateMismatchChangeSet,\n\t\t\t};\n\n\t\t\teach(typeids, function (typeid) {\n\t\t\t\tconst template = io_rebasePropertyChangeSet.insertTemplates[typeid];\n\t\t\t\tif (\n\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates &&\n\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[typeid]\n\t\t\t\t) {\n\t\t\t\t\tconst isEqual = TemplateValidator.Utils.psetDeepEquals(\n\t\t\t\t\t\ttemplate,\n\t\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[template.typeid],\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!isEqual) {\n\t\t\t\t\t\tif (in_options && in_options.throwOnTemplateMismatch) {\n\t\t\t\t\t\t\tthrow new Error(MSG.TEMPLATE_MISMATCH + typeid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttemplateMismatchChangeSet.insertTemplates[typeid] =\n\t\t\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[template.typeid];\n\t\t\t\t\t\t// TODO: Remove this warning message once we offer a conflict resolution API\n\t\t\t\t\t\tconsole.warn(MSG.TEMPLATE_MISMATCH + typeid);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete io_rebasePropertyChangeSet.insertTemplates[typeid];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Remove insertTemplates key if it is empty\n\t\t\tif (isEmpty(io_rebasePropertyChangeSet.insertTemplates)) {\n\t\t\t\tdelete io_rebasePropertyChangeSet.insertTemplates;\n\t\t\t}\n\n\t\t\tif (!isEmpty(templateMismatchConflict.conflictingChange.insertTemplates)) {\n\t\t\t\tout_conflicts.push(templateMismatchConflict);\n\t\t\t}\n\t\t}\n\n\t\t// Check for collisions in the property assignments\n\t\tconst changedTypeids = Object.keys(in_ownPropertyChangeSet);\n\n\t\t// We currently do not yet have any\n\t\tconst changeSet = {};\n\t\tfor (let i = 0; i < changedTypeids.length; i++) {\n\t\t\tconst typeid = changedTypeids[i];\n\t\t\tconst paths = Object.keys(in_ownPropertyChangeSet[typeid]);\n\n\t\t\t// Update the oldValue of primitive property of a changeset\n\t\t\t// for simple changeset with 'modify', property type, name, value\n\t\t\t// find the oldValue of the property and update it\n\t\t\tif (typeid === \"modify\" && \"modify\" in io_rebasePropertyChangeSet) {\n\t\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\t\tconst tempTypeid = paths[i];\n\t\t\t\t\tif (isPrimitiveType(tempTypeid) && tempTypeid in io_rebasePropertyChangeSet.modify) {\n\t\t\t\t\t\tconst tempPaths = Object.keys(in_ownPropertyChangeSet.modify[tempTypeid]);\n\t\t\t\t\t\tfor (let z = 0; z < tempPaths.length; z++) {\n\t\t\t\t\t\t\tif (tempPaths[z] in io_rebasePropertyChangeSet.modify[tempTypeid]) {\n\t\t\t\t\t\t\t\tlet rebasedPropContent =\n\t\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet.modify[tempTypeid][tempPaths[z]];\n\t\t\t\t\t\t\t\tif (isObject(rebasedPropContent) && \"oldValue\" in rebasedPropContent) {\n\t\t\t\t\t\t\t\t\t(rebasedPropContent as SerializedChangeSet).oldValue =\n\t\t\t\t\t\t\t\t\t\tin_ownPropertyChangeSet.modify[tempTypeid][tempPaths[z]].value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (isPrimitiveType(typeid)) {\n\t\t\t\t// for complex changeset, the function will be called recursively, when the function is at the level where\n\t\t\t\t// io_rebasePropertyChangeSet && in_ownPropertyChangeSet contain only property type, name and value, we update\n\t\t\t\t// oldValue of io_rebasePropertyChangeSet.\n\t\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeid in io_rebasePropertyChangeSet &&\n\t\t\t\t\t\tpaths[j] in io_rebasePropertyChangeSet[typeid]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet rebasedPropContent = io_rebasePropertyChangeSet[typeid][paths[j]];\n\t\t\t\t\t\tif (isObject(rebasedPropContent) && \"oldValue\" in rebasedPropContent) {\n\t\t\t\t\t\t\t// if oldValue already be update above, we don't need to update\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid][paths[j]].oldValue !==\n\t\t\t\t\t\t\t\tin_ownPropertyChangeSet[typeid][paths[j]].value\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid][paths[j]].oldValue =\n\t\t\t\t\t\t\t\t\tin_ownPropertyChangeSet[typeid][paths[j]].value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The reserved keywords have already been handled above and changes which are not present in\n\t\t\t// the other ChangeSet can be ignored\n\t\t\tif (ChangeSet.isReservedKeyword(typeid) || !io_rebasePropertyChangeSet[typeid]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check, whether we have a collision in a path update\n\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\tif (io_rebasePropertyChangeSet[typeid][paths[j]] !== undefined) {\n\t\t\t\t\tin_ownPropertyChangeSet[typeid] = in_ownPropertyChangeSet[typeid] || {};\n\n\t\t\t\t\tconst newPath = joinPaths(in_basePath, paths[j], PROPERTY_PATH_DELIMITER);\n\t\t\t\t\t// Perform the rebase operation on the ChangeSet for this entry\n\t\t\t\t\tconst setConflict = this.rebaseChangeSetForPropertyEntryWithTypeid(\n\t\t\t\t\t\tpaths[j],\n\t\t\t\t\t\tin_ownPropertyChangeSet[typeid],\n\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid],\n\t\t\t\t\t\ttypeid,\n\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tout_conflicts,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\n\t\t\t\t\t// If there has been a non-recursive set collision we handle it here separately\n\t\t\t\t\tif (setConflict) {\n\t\t\t\t\t\t// If we have two writes to primitive types, this is a conflict\n\t\t\t\t\t\tchangeSet[typeid] = changeSet[typeid] || {};\n\n\t\t\t\t\t\t// Store the change. Note: We make a deep copy here, as this is a reference into our\n\t\t\t\t\t\t// own internal ChangeSet and we want to be sure, nobody changes our internal data-structures\n\t\t\t\t\t\tchangeSet[typeid][paths[j]] = cloneDeep(in_ownPropertyChangeSet[typeid][paths[j]]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove the typeid, when it no longer contains any keys\n\t\t\t\tif (isEmpty(io_rebasePropertyChangeSet[typeid][paths[j]])) {\n\t\t\t\t\tdelete io_rebasePropertyChangeSet[typeid][paths[j]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the typeid, when it no longer contains any keys\n\t\t\tif (isEmpty(io_rebasePropertyChangeSet[typeid])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[typeid];\n\t\t\t}\n\t\t}\n\n\t\t// If there were conflicts in the set operations, report them\n\t\tif (!isEmpty(changeSet)) {\n\t\t\tconst conflict = {\n\t\t\t\tpath: in_basePath,\n\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\tconflictingChange: changeSet,\n\t\t\t};\n\t\t\tout_conflicts.push(conflict);\n\t\t}\n\n\t\treturn io_rebasePropertyChangeSet;\n\t}\n\n\t/**\n\t * Decides based on the given Typeid which rebase operation to perform.\n\t *\n\t * @remarks Note: This function is not directly called on the ChangeSet but on the object containing it together\n\t * with a key since it needs to be able to overwrite this entry\n\t *\n\t * @param in_key - The key of the entry in the object\n\t * @param in_ownPropertyChangeSet - The object containing the ChangeSet for the property stored in this class.\n\t * @param io_rebasePropertyChangeSet - The object containing the ChangeSet for the property to be rebased.\n\t * @param in_typeid - The typeid of the property to rebase.\n\t * @param in_basePath - Base path to get to the property processed by this function.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict.\n\t *\n\t * @returns Has there been a simple set collision? Those have to be handled separately\n\t *\n\t * @privateRemarks TODO: We should unify the handling of set collisions\n\t * @private\n\t */\n\tprivate rebaseChangeSetForPropertyEntryWithTypeid(\n\t\tin_key: string,\n\t\tin_ownPropertyChangeSet: SerializedChangeSet,\n\t\tio_rebasePropertyChangeSet: SerializedChangeSet,\n\t\tin_typeid: string,\n\t\tin_basePath: string,\n\t\tin_removeEmpty: boolean,\n\t\tout_conflicts: any,\n\t\tin_options: ApplyChangeSetOptions,\n\t): boolean {\n\t\tconst splitTypeid = extractContext(in_typeid);\n\n\t\tif (splitTypeid.context === \"set\" || splitTypeid.context === \"map\") {\n\t\t\tthis._rebaseIndexedCollectionChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\tin_basePath,\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\ttrue, // use square brackets\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"array\") {\n\t\t\tthis._rebaseArrayChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\tin_basePath,\n\t\t\t\tout_conflicts,\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.typeid === \"String\") {\n\t\t\tthis._rebaseChangeSetForString(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet,\n\t\t\t\tin_key,\n\t\t\t\tin_basePath,\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"single\") {\n\t\t\t// We only can have a conflict when the path exists in both ChangeSets\n\t\t\tif (in_ownPropertyChangeSet[in_key] !== undefined) {\n\t\t\t\tif (isPrimitiveType(splitTypeid.typeid) || splitTypeid.isEnum) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, we have to continue recursively\n\n\t\t\t\t\t// Make sure the paths exist\n\t\t\t\t\tin_ownPropertyChangeSet[in_key] = in_ownPropertyChangeSet[in_key] || {};\n\n\t\t\t\t\t// And then perform the recursive rebase\n\t\t\t\t\tthis._rebaseChangeSetForProperty(\n\t\t\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\t\t\tin_basePath,\n\t\t\t\t\t\tout_conflicts,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(MSG.UNKNOWN_CONTEXT + splitTypeid.context);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Recursive helper function for ChangeSet.prototype._toReversibleChangeSet\n\t * which converts a irreversible changeset to a reversible changeset\n\t * or updates the former state of a reversible changeset\n\t * @param in_context - The traversal context.\n\t */\n\tprivate _recursivelyBuildReversibleChangeSet(in_context: Utils.TraversalContext) {\n\t\tconst opType = in_context.getOperationType();\n\t\tif (opType === \"modify\") {\n\t\t\tconst type = in_context.getTypeid();\n\t\t\tconst splitType = in_context.getSplitTypeID();\n\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\n\t\t\tlet current = in_context.getUserData().parallelState;\n\t\t\tif (in_context.getPropertyContainerType() === \"root\") {\n\t\t\t\tcurrent = in_context.getUserData().oldState;\n\t\t\t} else if (current) {\n\t\t\t\tif (in_context.getPropertyContainerType() !== \"template\") {\n\t\t\t\t\tcurrent = current.insert;\n\t\t\t\t}\n\n\t\t\t\tif (in_context.getPropertyContainerType() !== \"array\") {\n\t\t\t\t\tcurrent = current && current[in_context.getTypeid()];\n\t\t\t\t\tcurrent = current && current[in_context.getLastSegment()];\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = current && current[0][1][in_context.getLastSegment()];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tin_context.setUserData({\n\t\t\t\tparallelState: current,\n\t\t\t\toldState: in_context.getUserData().oldState,\n\t\t\t});\n\n\t\t\tif (isPrimitiveType(type)) {\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${\n\t\t\t\t\t\t\tMSG.INVALID_PATH + in_context.getFullPath()\n\t\t\t\t\t\t}. Making primitive value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current;\n\n\t\t\t\t// store it in reversibleChangeSet\n\t\t\t\tif (type === \"String\" && !isString(nestedChangeset)) {\n\t\t\t\t\t// String is a special case\n\t\t\t\t\tlet oldString;\n\t\t\t\t\tif (isString(oldValue)) {\n\t\t\t\t\t\toldString = oldValue;\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\t\tconst entryLength = entry[1].length;\n\t\t\t\t\t\t\tentry[2] = oldString.slice(entryOffset, entryOffset + entryLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\n\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\tif (isString(removeRangeLength)) {\n\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[1] = oldString.slice(entryOffset, entryOffset + removeRangeLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tnestedChangeset.oldValue = oldValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst newChangeSet = {\n\t\t\t\t\t\t\tvalue: nestedChangeset,\n\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tin_context.replaceNestedChangeSet(newChangeSet);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (splitType.context === \"array\") {\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${MSG.INVALID_PATH + in_context.getFullPath()}. Making array value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current.insert ? current.insert[0][1] : [];\n\n\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\t\tlet oldEntries = [];\n\t\t\t\t\t\t\tfor (let j = 0; j < entry[1].length; j++) {\n\t\t\t\t\t\t\t\toldEntries.push(cloneDeep(oldValue[entryOffset + j]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[2] = oldEntries;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\tlet oldEntries = [];\n\n\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\tif (Array.isArray(removeRangeLength)) {\n\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let j = 0; j < removeRangeLength; j++) {\n\t\t\t\t\t\t\toldEntries.push(cloneDeep(oldValue[entryOffset + j]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentry[1] = oldEntries;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tsplitType.context === \"map\" ||\n\t\t\t\t// node property test: (we have to do the test this way, because of inheritance)\n\t\t\t\tnestedChangeset.insert ||\n\t\t\t\tnestedChangeset.modify ||\n\t\t\t\tnestedChangeset.remove\n\t\t\t) {\n\t\t\t\t// This prevents an error, if the changeset only contains an insert operation. In that case\n\t\t\t\t// we don't actually need the corresponding old state and thus do not need to throw an error\n\t\t\t\t// This type of situation can occur in the materialized history, if an insert happens right at a chunk boundary.\n\t\t\t\tif (Object.keys(nestedChangeset).length === 1 && nestedChangeset.insert) {\n\t\t\t\t\tin_context._traversalStopped = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${MSG.INVALID_PATH + in_context.getFullPath()}. Making map value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current.insert;\n\n\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\tif (typeof entry === \"object\" && entry.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\t\tentry = entry.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnestedChangeset.modify[modifiedKeys[i]] = {\n\t\t\t\t\t\t\t\tvalue: entry,\n\t\t\t\t\t\t\t\toldValue: cloneDeep(oldValue[modifiedKeys[i]]),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet newRemove = {};\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\tif (!Array.isArray(removedKeys)) {\n\t\t\t\t\t\t\tremovedKeys = Object.keys(removedKeys);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\tnewRemove[removedKeys[i]] = cloneDeep(oldValue[removedKeys[i]]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t// this case is handeled recursively\n\t\t\t\t\t}\n\t\t\t\t\tlet newRemove = {};\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tif (Array.isArray(nestedChangeset.remove)) {\n\t\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\tlet searchedKey = removedKeys[i];\n\t\t\t\t\t\t\t\t// search for this key in the old keys:\n\t\t\t\t\t\t\t\tconst oldTypeKeys = Object.keys(oldValue);\n\t\t\t\t\t\t\t\tfor (let k = 0; k < oldTypeKeys.length; k++) {\n\t\t\t\t\t\t\t\t\tif (oldValue[oldTypeKeys[k]].hasOwnProperty(searchedKey)) {\n\t\t\t\t\t\t\t\t\t\tlet entry = oldValue[oldTypeKeys[k]][searchedKey];\n\t\t\t\t\t\t\t\t\t\tif (!newRemove[oldTypeKeys[k]]) {\n\t\t\t\t\t\t\t\t\t\t\tnewRemove[oldTypeKeys[k]] = {};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnewRemove[oldTypeKeys[k]][removedKeys[i]] = cloneDeep(entry);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// we already have a reversibleChangeSet and need to update the oldValues\n\t\t\t\t\t\t\tconst removedTypes = Object.keys(nestedChangeset.remove);\n\t\t\t\t\t\t\tfor (let t = 0; t < removedTypes.length; t++) {\n\t\t\t\t\t\t\t\tlet removedKeys = Object.keys(nestedChangeset.remove[removedTypes[t]]);\n\t\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\t\tlet searchedKey = removedKeys[i];\n\t\t\t\t\t\t\t\t\tlet entry = oldValue[removedTypes[t]][searchedKey];\n\t\t\t\t\t\t\t\t\tnestedChangeset.remove[removedTypes[t]][removedKeys[i]] = entry;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Converts an irreversible changeset to a reversible changeset\n\t * or updates the former state of a reversible changeset\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release.\n\t * @param in_oldSerializedState - The old state.\n\t */\n\tpublic _toReversibleChangeSet(in_oldSerializedState: SerializedChangeSet) {\n\t\tConsoleUtils.assert(\n\t\t\tin_oldSerializedState !== undefined,\n\t\t\t`${MSG.ASSERTION_FAILED}Missing function parameter \"in_oldSerializedState\" of \"_toReversibleChangeSet\".`,\n\t\t);\n\n\t\tif (!isObject(in_oldSerializedState) || Array.isArray(in_oldSerializedState)) {\n\t\t\tif (!isObject(this._changes) || Array.isArray(this._changes)) {\n\t\t\t\tthis._changes = {\n\t\t\t\t\toldValue: Array.isArray(in_oldSerializedState)\n\t\t\t\t\t\t? in_oldSerializedState.slice()\n\t\t\t\t\t\t: in_oldSerializedState,\n\t\t\t\t\tvalue: this._changes,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t(this._changes as SerializedChangeSet).oldValue = Array.isArray(in_oldSerializedState)\n\t\t\t\t\t? in_oldSerializedState.slice()\n\t\t\t\t\t: in_oldSerializedState;\n\t\t\t}\n\t\t} else {\n\t\t\tconst workspace = { oldState: in_oldSerializedState };\n\t\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\t\tpreCallback: this._recursivelyBuildReversibleChangeSet,\n\t\t\t\tuserData: workspace,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Converts a reversible changeset to an irreversible changeset\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release.\n\t * @param in_withoutRoot - Bypass a fix where the root of a changeset is cleaned\n\t */\n\tpublic _stripReversibleChangeSet(in_withoutRoot: boolean) {\n\t\tconst callback = function (in_context) {\n\t\t\tconst opType = in_context.getOperationType();\n\t\t\tif (opType === \"remove\" || opType === \"modify\") {\n\t\t\t\tconst type = in_context.getTypeid();\n\t\t\t\tif (!type) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst splitType = in_context.getSplitTypeID();\n\n\t\t\t\tif (isPrimitiveType(type)) {\n\t\t\t\t\t// remove old state\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (type === \"String\" && !isString(nestedChangeset)) {\n\t\t\t\t\t\t// String is a special case\n\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\t\tentry.splice(2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\n\t\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\t\tif (isString(removeRangeLength)) {\n\t\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tentry[1] = removeRangeLength;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\tin_context.replaceNestedChangeSet(nestedChangeset.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tin_context.replaceNestedChangeSet(nestedChangeset.value);\n\t\t\t\t\t}\n\t\t\t\t} else if (splitType.context === \"array\") {\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tentry.splice(2, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\tif (Array.isArray(removeRangeLength)) {\n\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[1] = removeRangeLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: Remove in_withoutRoot when it will not be used anymore\n\t\t\t\t} else if (\n\t\t\t\t\tsplitType.context === \"map\" ||\n\t\t\t\t\t(!in_withoutRoot && splitType.context === \"single\")\n\t\t\t\t) {\n\t\t\t\t\t// For NodeProperty / inserts at the root\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\t\tif (typeof entry === \"object\" && entry.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\t\t\tentry = entry.value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnestedChangeset.modify[modifiedKeys[i]] = entry;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\t\tif (!Array.isArray(removedKeys)) {\n\t\t\t\t\t\t\t\tremovedKeys = Object.keys(removedKeys);\n\t\t\t\t\t\t\t\tnestedChangeset.remove = removedKeys;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\t// this case is handeled recursively\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tif (!Array.isArray(nestedChangeset.remove)) {\n\t\t\t\t\t\t\t\t// we have a reversibleChangeSet and need to convert\n\t\t\t\t\t\t\t\tlet newRemove = [];\n\t\t\t\t\t\t\t\tconst removedTypes = Object.keys(nestedChangeset.remove);\n\t\t\t\t\t\t\t\tfor (let t = 0; t < removedTypes.length; t++) {\n\t\t\t\t\t\t\t\t\tlet removedKeys = Object.keys(nestedChangeset.remove[removedTypes[t]]);\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\t\t\tnewRemove.push(removedKeys[i]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (\n\t\t\tisObject(this._changes) &&\n\t\t\t(this._changes as SerializedChangeSet).oldValue !== undefined &&\n\t\t\t(this._changes as SerializedChangeSet).value !== undefined\n\t\t) {\n\t\t\tthis._changes = (this._changes as SerializedChangeSet).value;\n\t\t\treturn;\n\t\t}\n\n\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\tpreCallback: callback,\n\t\t});\n\t}\n\n\t/**\n\t * Helper function to extract the first level paths from a given change set\n\t * @param in_changeSet - The ChangeSet to extract paths from.\n\t * @param isPrimitiveCollection - Is this a primitive type collection?\n\t *\n\t * @returns List of paths found at the first level of the change set\n\t */\n\tprivate _extractFirstLevelPaths(\n\t\tin_changeSet: SerializedChangeSet,\n\t\tisPrimitiveCollection: boolean,\n\t): string[] {\n\t\tlet paths;\n\t\tif (isPrimitiveCollection) {\n\t\t\tpaths = Object.keys(in_changeSet);\n\t\t} else {\n\t\t\tpaths = [];\n\t\t\teach(in_changeSet, function (nestedChangeSet) {\n\t\t\t\teach(nestedChangeSet, function (nestedChangeSet2, path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn paths;\n\t}\n\n\t/**\n\t * recursive helper function for ChangeSet.prototype._toInverseChangeSet\n\t * @param in_context - The traversal context.\n\t */\n\tprivate _recursivelyInvertReversibleChangeset(in_context: Utils.TraversalContext) {\n\t\tin_context.setUserData(in_context.getUserData() || {});\n\n\t\t// Figure out if we have already visited this path by verifying that the full path\n\t\t// is contained within the list of processed deleted or inserted paths\n\t\tconst isWithinInsertOrDelete = in_context.getUserData()[in_context.getFullPath()];\n\n\t\tif (isWithinInsertOrDelete && in_context.getOperationType() !== \"modify\") {\n\t\t\t// We are within an insert or remove sub tree. Skip this iteration.\n\t\t\tin_context._traversalStopped = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tin_context.getOperationType() === \"remove\" ||\n\t\t\tin_context.getOperationType() === \"modify\"\n\t\t) {\n\t\t\tconst type = in_context.getTypeid();\n\t\t\tconst splitType = in_context.getSplitTypeID();\n\n\t\t\tif (!splitType) {\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\tfalse,\n\t\t\t\t\t`${MSG.ASSERTION_FAILED}Missing \"splitType\" in \"in_context\":${JSON.stringify(\n\t\t\t\t\t\tin_context,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst nestedChangeset = in_context.getNestedChangeSet();\n\n\t\t\tif (\n\t\t\t\t(isPrimitiveType(type) && type !== \"String\") ||\n\t\t\t\t(type === \"String\" && isString(nestedChangeset.oldValue))\n\t\t\t) {\n\t\t\t\t// check if we were called with an irreversible changeset\n\t\t\t\tif (\n\t\t\t\t\tin_context.getOperationType() === \"modify\" &&\n\t\t\t\t\t(!isObject(nestedChangeset) ||\n\t\t\t\t\t\ttypeof (nestedChangeset as SerializedChangeSet).oldValue === \"undefined\")\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(MSG.OLD_VALUE_NOT_FOUND);\n\t\t\t\t}\n\n\t\t\t\t// switch oldValue and value\n\t\t\t\tlet tmp = nestedChangeset.oldValue;\n\t\t\t\tnestedChangeset.oldValue = nestedChangeset.value;\n\t\t\t\tnestedChangeset.value = tmp;\n\t\t\t} else if (\n\t\t\t\t(type === \"String\" && !isString(nestedChangeset.oldValue)) ||\n\t\t\t\tsplitType.context === \"array\"\n\t\t\t) {\n\t\t\t\t// String and Arrays need special treatment:\n\t\t\t\tconst arrayIterator = new ArrayChangeSetIterator(nestedChangeset);\n\t\t\t\tconst resultChangeset: SerializedChangeSet = {};\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tresultChangeset.modify = [];\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.insert) {\n\t\t\t\t\tresultChangeset.remove = [];\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tresultChangeset.insert = [];\n\t\t\t\t}\n\t\t\t\t// Successively invert the changes from the changeSet\n\t\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.INSERT:\n\t\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\t\tresultChangeset.remove.push([\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.REMOVE:\n\t\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\t\tresultChangeset.insert.push([\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.MODIFY:\n\t\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\t\t\tresultChangeset.modify.push([\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] +\n\t\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[2],\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresultChangeset.modify.push([\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] +\n\t\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t`applyChangeset: ${MSG.UNKNOWN_OPERATION}${arrayIterator.opDescription.type}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tarrayIterator.next();\n\t\t\t\t}\n\t\t\t\tin_context.replaceNestedChangeSet(resultChangeset);\n\t\t\t} else {\n\t\t\t\t// Covers NodeProperty, Map and Set\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid) && splitType.context === \"map\") {\n\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\tconst entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\tlet tmp = entry.value;\n\t\t\t\t\t\t\tentry.value = entry.oldValue;\n\t\t\t\t\t\t\tentry.oldValue = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst oldInsert = nestedChangeset.insert;\n\t\t\t\tlet replacedInsert = false;\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tnestedChangeset.insert = nestedChangeset.remove;\n\t\t\t\t\treplacedInsert = true;\n\t\t\t\t\tnestedChangeset.remove = undefined;\n\t\t\t\t\tdelete nestedChangeset.remove;\n\t\t\t\t\tconst isPrimitiveTypeid = isPrimitiveType(in_context.getSplitTypeID().typeid);\n\t\t\t\t\teach(\n\t\t\t\t\t\tthis._extractFirstLevelPaths(nestedChangeset.insert, isPrimitiveTypeid),\n\t\t\t\t\t\tfunction (path) {\n\t\t\t\t\t\t\tconst fullPath = joinPaths(\n\t\t\t\t\t\t\t\tin_context.getFullPath(),\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tPROPERTY_PATH_DELIMITER,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tin_context.getUserData()[fullPath] = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (oldInsert) {\n\t\t\t\t\tif (replacedInsert) {\n\t\t\t\t\t\tnestedChangeset.remove = cloneDeep(oldInsert);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnestedChangeset.remove = oldInsert;\n\t\t\t\t\t\tnestedChangeset.insert = undefined;\n\t\t\t\t\t\tdelete nestedChangeset.insert;\n\t\t\t\t\t}\n\t\t\t\t\tconst isPrimitiveTypeid = isPrimitiveType(in_context.getSplitTypeID().typeid);\n\t\t\t\t\teach(\n\t\t\t\t\t\tthis._extractFirstLevelPaths(nestedChangeset.remove, isPrimitiveTypeid),\n\t\t\t\t\t\tfunction (path) {\n\t\t\t\t\t\t\tconst fullPath = joinPaths(\n\t\t\t\t\t\t\t\tin_context.getFullPath(),\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tPROPERTY_PATH_DELIMITER,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tin_context.getUserData()[fullPath] = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Inverts a reversible ChangeSets\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release\n\t */\n\tpublic toInverseChangeSet() {\n\t\tif (this._changes.value !== undefined && this._changes.oldValue !== undefined) {\n\t\t\tconst tmp = this._changes.value;\n\t\t\tthis._changes.value = this._changes.oldValue;\n\t\t\tthis._changes.oldValue = tmp;\n\t\t} else {\n\t\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\t\tpreCallback: this._recursivelyInvertReversibleChangeset.bind(this),\n\t\t\t});\n\t\t}\n\t}\n}\n\nChangeSet.prototype._performApplyAfterOnPropertyArray =\n\tChangeSetArrayFunctions._performApplyAfterOnPropertyArray;\nChangeSet.prototype._rebaseArrayChangeSetForProperty =\n\tChangeSetArrayFunctions._rebaseArrayChangeSetForProperty;\nChangeSet.prototype._rebaseChangeSetForString =\n\tChangeSetArrayFunctions._rebaseChangeSetForString;\n\n// Add the indexed collection functions into the prototype of the ChangeSet\nChangeSet.prototype._performApplyAfterOnPropertyIndexedCollection =\n\tChangeSetIndexedCollectionFunctions._performApplyAfterOnPropertyIndexedCollection;\nChangeSet.prototype._cleanIndexedCollectionChangeSet =\n\tChangeSetIndexedCollectionFunctions._cleanIndexedCollectionChangeSet;\nChangeSet.prototype._rebaseIndexedCollectionChangeSetForProperty =\n\tChangeSetIndexedCollectionFunctions._rebaseIndexedCollectionChangeSetForProperty;\n"]}
|
|
1
|
+
{"version":3,"file":"changeset.js","sourceRoot":"","sources":["../src/changeset.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * @fileoverview Serialized representation of the changes in a repository\n */\n\nimport { constants, ConsoleUtils, joinPaths } from \"@fluid-experimental/property-common\";\n\nimport cloneDeep from \"lodash/cloneDeep.js\";\nimport each from \"lodash/each.js\";\nimport extend from \"lodash/extend.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport isObject from \"lodash/isObject.js\";\nimport isString from \"lodash/isString.js\";\n\n// @ts-ignore\n\nimport { ChangeSetArrayFunctions } from \"./changeset_operations/array.js\";\nimport { ArrayChangeSetIterator } from \"./changeset_operations/arrayChangesetIterator.js\";\nimport { ConflictType } from \"./changeset_operations/changesetConflictTypes.js\";\n// Add the indexed collection functions into the prototype of the ChangeSet\nimport { ChangeSetIndexedCollectionFunctions } from \"./changeset_operations/indexedCollection.js\";\nimport { isEmptyChangeSet } from \"./changeset_operations/isEmptyChangeset.js\";\nimport { ArrayIteratorOperationTypes } from \"./changeset_operations/operationTypes.js\";\nimport { TypeIdHelper } from \"./helpers/typeidHelper.js\";\nimport { isReservedKeyword } from \"./isReservedKeyword.js\";\nimport { TemplateValidator } from \"./templateValidator.js\";\nimport { Utils } from \"./utils.js\";\n\nconst { PROPERTY_PATH_DELIMITER, MSG } = constants;\n\nconst { extractContext, isPrimitiveType } = TypeIdHelper;\n\nexport interface ApplyChangeSetOptions {\n\t/**\n\t * Additional meta information which help later to obtain more compact changeset during the apply operation.\n\t */\n\tapplyAfterMetaInformation?: Map<any, any>;\n\n\t/**\n\t * Throw error for template definition mismatches.\n\t */\n\tthrowOnTemplateMismatch?: boolean;\n}\n\nexport interface RebaseChangeSetOptions extends ApplyChangeSetOptions {\n\trebaseMetaInformation?: object;\n}\n\n/**\n * The plain serialization data structure used to encode a ChangeSet.\n * @internal\n */\nexport type SerializedChangeSet = any; // @TODO Maybe we should add full type for the ChangeSet\nexport type ChangeSetType = any;\nexport interface ConflictInfo {\n\t/**\n\t * Path to the position where the conflict occurred. If the conflicting change is of type\n\t * MISMATCH_TEMPLATES then the path will be undefined.\n\t */\n\tpath?: string | undefined;\n\t/**\n\t * Type of the conflict\n\t */\n\ttype: ConflictType;\n\tconflictingChange?: SerializedChangeSet;\n}\n\n/**\n * The ChangeSet represents an operation to be done (or that was done) on the data. It encapsulate one or\n * many addition/insertion and deletion of properties. The ChangeSetObject also provides functionality\n * to merge and swap change sets.\n * @internal\n */\nexport class ChangeSet {\n\tstatic ConflictType = ConflictType;\n\tstatic isEmptyChangeSet = isEmptyChangeSet;\n\tstatic isReservedKeyword = isReservedKeyword;\n\n\tpublic declare _cleanIndexedCollectionChangeSet: typeof ChangeSetIndexedCollectionFunctions._cleanIndexedCollectionChangeSet;\n\tpublic declare _performApplyAfterOnPropertyArray: typeof ChangeSetArrayFunctions._performApplyAfterOnPropertyArray;\n\tpublic declare _rebaseArrayChangeSetForProperty: typeof ChangeSetArrayFunctions._rebaseArrayChangeSetForProperty;\n\tpublic declare _rebaseChangeSetForString: typeof ChangeSetArrayFunctions._rebaseChangeSetForString;\n\tpublic declare _performApplyAfterOnPropertyIndexedCollection: typeof ChangeSetIndexedCollectionFunctions._performApplyAfterOnPropertyIndexedCollection;\n\tpublic declare _rebaseIndexedCollectionChangeSetForProperty: typeof ChangeSetIndexedCollectionFunctions._rebaseIndexedCollectionChangeSetForProperty;\n\n\t_changes: SerializedChangeSet;\n\t_isNormalized: boolean;\n\n\t/**\n\t * @param [in_changes] - The serialized changes to store in this change set if a string is supplied,\n\t * we assume it to be a serialized JSON representation of the change set. If none is supplied, an empty changeset will be created.\n\t */\n\tconstructor(in_changes?: ChangeSetType) {\n\t\tif (in_changes === undefined || in_changes === null) {\n\t\t\tthis._changes = {};\n\t\t} else if (isString(in_changes)) {\n\t\t\t// Stringified Serialized JSON\n\t\t\tthis._changes = JSON.parse(in_changes);\n\t\t} else if (in_changes instanceof ChangeSet) {\n\t\t\tthis._changes = cloneDeep(in_changes._changes);\n\t\t} else {\n\t\t\t// Serialized Changeset\n\t\t\tthis._changes = in_changes;\n\t\t}\n\n\t\tthis._isNormalized = false;\n\t}\n\n\t/**\n\t * Creates a string representation of the change set\n\t * @returns JSON encoding of the changes in this change set\n\t */\n\ttoString(): string {\n\t\treturn JSON.stringify(this._changes);\n\t}\n\n\t/**\n\t * Returns the serialized changes.\n\t *\n\t * @returns The serialized changeset\n\t */\n\tgetSerializedChangeSet(): SerializedChangeSet {\n\t\treturn this._changes;\n\t}\n\n\t/**\n\t * Indicates whether this is a normalized ChangeSet. If this is set to true, squashes will not remove empty entries\n\t * from the ChangeSet.\n\t *\n\t * @param in_isNormalized - is this a normalized ChangeSet?\n\t */\n\tsetIsNormalized(in_isNormalized: boolean) {\n\t\tthis._isNormalized = in_isNormalized;\n\t}\n\n\t/**\n\t * Indicates whether this is a normalized ChangeSet. If this is set to true, squashes will not remove empty entries\n\t * from the ChangeSet.\n\t *\n\t * @returns Is this a normalized ChangeSet?\n\t */\n\tgetIsNormalized(): boolean {\n\t\treturn this._isNormalized;\n\t}\n\n\t/**\n\t * Clones the ChangeSet\n\t *\n\t * @returns The cloned ChangeSet\n\t */\n\tclone(): ChangeSet {\n\t\treturn new ChangeSet(cloneDeep(this._changes));\n\t}\n\n\t/**\n\t * Updates this ChangeSet. The result will be the concatenation of the two ChangeSets. First the changes in this\n\t * ChangeSet are executed, then the changes in the supplied in_changeSet are applied. The result will be\n\t * stored in this ChangeSet. This function assumes that the second ChangeSet is relative to the state after\n\t * application of the first ChangeSet.\n\t *\n\t * @param in_changeSet - The changeset to apply\n\t * @param in_options - Optional additional parameters\n\t */\n\tapplyChangeSet(in_changeSet: SerializedChangeSet, in_options?: ApplyChangeSetOptions) {\n\t\tlet changes = in_changeSet;\n\t\tif (in_changeSet instanceof ChangeSet) {\n\t\t\tchanges = in_changeSet.getSerializedChangeSet();\n\t\t}\n\n\t\tif (!isObject(this._changes) || Array.isArray(this._changes)) {\n\t\t\tconst oldValue =\n\t\t\t\tisObject(changes) && (changes as SerializedChangeSet).value !== undefined\n\t\t\t\t\t? (changes as SerializedChangeSet).value\n\t\t\t\t\t: changes;\n\t\t\tthis._changes = Array.isArray(oldValue) ? oldValue.slice() : oldValue;\n\t\t} else {\n\t\t\tthis._performApplyAfterOnProperty(\n\t\t\t\tthis._changes,\n\t\t\t\tchanges,\n\t\t\t\t!this._isNormalized,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Applies a changeset to a given property (recursively). The ChangeSet is assumed to be relative to the same\n\t * property root and it will be applied behind the base ChangeSet (assuming that the changes are relative to the\n\t * state after the base ChangeSet has been applied. It will change the base ChangeSet).\n\t *\n\t * @param io_basePropertyChanges - The ChangeSet describing the initial state.\n\t * @param in_appliedPropertyChanges - The ChangeSet to apply to this state.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param in_options - Optional additional parameters.\n\t */\n\tprivate _performApplyAfterOnProperty(\n\t\tio_basePropertyChanges: SerializedChangeSet,\n\t\tin_appliedPropertyChanges: SerializedChangeSet,\n\t\tin_removeEmpty: boolean,\n\t\tin_options?: ApplyChangeSetOptions,\n\t) {\n\t\t// Apply dynamic property operations\n\t\tif (\n\t\t\tin_appliedPropertyChanges.insert ||\n\t\t\tin_appliedPropertyChanges.modify ||\n\t\t\tin_appliedPropertyChanges.remove\n\t\t) {\n\t\t\tthis._performApplyAfterOnPropertyIndexedCollection(\n\t\t\t\tio_basePropertyChanges,\n\t\t\t\tin_appliedPropertyChanges,\n\t\t\t\t\"NodeProperty\",\n\t\t\t\tin_options,\n\t\t\t); // TODO: recursively propagate the typeid?\n\t\t}\n\n\t\tif (!isEmpty(in_appliedPropertyChanges.insertTemplates)) {\n\t\t\tio_basePropertyChanges.insertTemplates = io_basePropertyChanges.insertTemplates || {};\n\t\t\textend(\n\t\t\t\tio_basePropertyChanges.insertTemplates,\n\t\t\t\tin_appliedPropertyChanges.insertTemplates,\n\t\t\t);\n\t\t}\n\n\t\t// Apply ChangeSet to the properties\n\t\tconst modifiedTypeids = Object.keys(in_appliedPropertyChanges);\n\t\tfor (let i = 0; i < modifiedTypeids.length; i++) {\n\t\t\tconst typeid = modifiedTypeids[i];\n\t\t\t// The reserved keywords have already been handled above\n\t\t\tif (ChangeSet.isReservedKeyword(typeid)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tio_basePropertyChanges[typeid] = io_basePropertyChanges[typeid] || {};\n\t\t\tconst baseChanges = io_basePropertyChanges[typeid];\n\t\t\tconst changedKeys = Object.keys(in_appliedPropertyChanges[typeid]);\n\t\t\tfor (let j = 0; j < changedKeys.length; j++) {\n\t\t\t\tthis.performApplyAfterOnPropertyWithTypeid(\n\t\t\t\t\tchangedKeys[j],\n\t\t\t\t\tbaseChanges,\n\t\t\t\t\tin_appliedPropertyChanges[typeid],\n\t\t\t\t\ttypeid,\n\t\t\t\t\tin_removeEmpty,\n\t\t\t\t\tin_options,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Remove the type when it no longer contains any changed keys\n\t\t\tif (in_removeEmpty && isEmpty(io_basePropertyChanges[typeid])) {\n\t\t\t\tdelete io_basePropertyChanges[typeid];\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Helper function used to apply a new value to a given ChangeSet.\n\t * It is used to handle setting a primitive value, which might either be represented\n\t * via a literal or an object with a member value.\n\t * applies in_appliedValue to the io_baseChanges at the given in_baseKey\n\t * @param io_baseChanges - base changes (modified)\n\t * @param in_baseKey - key\n\t * @param in_appliedValue - applied changes to be applied\n\t */\n\tprivate _applyValue(\n\t\tio_baseChanges: SerializedChangeSet,\n\t\tin_baseKey: string,\n\t\tin_appliedValue: SerializedChangeSet,\n\t) {\n\t\tconst newValue =\n\t\t\tin_appliedValue && in_appliedValue.hasOwnProperty(\"value\")\n\t\t\t\t? in_appliedValue.value\n\t\t\t\t: in_appliedValue;\n\t\tif (io_baseChanges[in_baseKey] && io_baseChanges[in_baseKey].hasOwnProperty(\"value\")) {\n\t\t\tio_baseChanges[in_baseKey].value = newValue;\n\t\t} else {\n\t\t\tio_baseChanges[in_baseKey] =\n\t\t\t\tio_baseChanges[in_baseKey] === undefined &&\n\t\t\t\tin_appliedValue &&\n\t\t\t\tin_appliedValue.hasOwnProperty(\"oldValue\")\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\toldValue: in_appliedValue.oldValue,\n\t\t\t\t\t\t}\n\t\t\t\t\t: newValue;\n\t\t}\n\t}\n\n\t/**\n\t * Decides based on the given Typeid which applyAfter operation to perform.\n\t * Note: This function is not directly called on the ChangeSet but on the object containing it together with a key\n\t * since it needs to be able to overwrite this entry\n\t *\n\t * @param in_changedKey - The key of the entry in the object.\n\t * @param in_baseChanges - The object containing the state before the applyAfter.\n\t * @param in_appliedPropertyChanges - The object containing the ChangeSet with the modification.\n\t * @param in_typeid - The typeid of the property to modify.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param in_options - Optional additional parameters.\n\t */\n\tpublic performApplyAfterOnPropertyWithTypeid(\n\t\tin_changedKey: string,\n\t\tin_baseChanges: SerializedChangeSet,\n\t\tin_appliedPropertyChanges: { [x: string]: any },\n\t\tin_typeid: string,\n\t\tin_removeEmpty: boolean,\n\t\tin_options?: ApplyChangeSetOptions,\n\t) {\n\t\tconst splitTypeid = extractContext(in_typeid);\n\n\t\tif (splitTypeid.context === \"set\" || splitTypeid.context === \"map\") {\n\t\t\tin_baseChanges[in_changedKey] = in_baseChanges[in_changedKey] || {};\n\t\t\tthis._performApplyAfterOnPropertyIndexedCollection(\n\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\tin_options,\n\t\t\t);\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(in_baseChanges[in_changedKey])) {\n\t\t\t\tdelete in_baseChanges[in_changedKey];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"array\" || splitTypeid.typeid === \"String\") {\n\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\tin_baseChanges[in_changedKey] !== undefined ? in_baseChanges[in_changedKey] : {};\n\t\t\tlet baseIsSetChange = false;\n\t\t\tlet oldValue;\n\t\t\tif (\n\t\t\t\tsplitTypeid.typeid === \"String\" &&\n\t\t\t\t(isString(in_baseChanges[in_changedKey]) ||\n\t\t\t\t\t(in_baseChanges[in_changedKey] &&\n\t\t\t\t\t\tin_baseChanges[in_changedKey].hasOwnProperty(\"value\")))\n\t\t\t) {\n\t\t\t\toldValue = in_baseChanges[in_changedKey].oldValue;\n\t\t\t\t// we need to convert the format to allow the application of the changes\n\t\t\t\t// since _performApplyAfterOnPropertyArray only understands insert/modify/remove commands\n\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\tin_baseChanges[in_changedKey] &&\n\t\t\t\t\tin_baseChanges[in_changedKey].hasOwnProperty(\"value\")\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinsert: [[0, in_baseChanges[in_changedKey].value]],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tinsert: [[0, in_baseChanges[in_changedKey]]],\n\t\t\t\t\t\t\t};\n\t\t\t\tbaseIsSetChange = true;\n\t\t\t}\n\t\t\tlet appliedChanges = in_appliedPropertyChanges[in_changedKey];\n\t\t\tif (isObject(appliedChanges) && appliedChanges.hasOwnProperty(\"value\")) {\n\t\t\t\tappliedChanges = (appliedChanges as SerializedChangeSet).value;\n\t\t\t}\n\n\t\t\tif (splitTypeid.typeid === \"String\" && isString(appliedChanges)) {\n\t\t\t\t// we've got a 'set' command and just overwrite the changes\n\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\tbaseIsSetChange && oldValue !== undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tvalue: appliedChanges,\n\t\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: appliedChanges;\n\t\t\t} else {\n\t\t\t\t// we have incremental changes (or a standard array)\n\t\t\t\tthis._performApplyAfterOnPropertyArray(\n\t\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\tsplitTypeid.typeid,\n\t\t\t\t\tin_options,\n\t\t\t\t);\n\t\t\t\tif (baseIsSetChange) {\n\t\t\t\t\t// we have to convert back to a string, if it had been converted before\n\t\t\t\t\tlet newValue;\n\t\t\t\t\tnewValue = isEmpty(in_baseChanges[in_changedKey])\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: in_baseChanges[in_changedKey].insert[0][1];\n\t\t\t\t\tin_baseChanges[in_changedKey] =\n\t\t\t\t\t\toldValue !== undefined\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tvalue: newValue,\n\t\t\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: newValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && ChangeSet.isEmptyChangeSet(in_baseChanges[in_changedKey])) {\n\t\t\t\tdelete in_baseChanges[in_changedKey];\n\t\t\t}\n\t\t} else if (splitTypeid.isEnum) {\n\t\t\t// Enum types can simply be overwritten\n\t\t\tthis._applyValue(\n\t\t\t\tin_baseChanges,\n\t\t\t\tin_changedKey,\n\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t);\n\t\t} else if (splitTypeid.context === \"single\") {\n\t\t\tif (isPrimitiveType(splitTypeid.typeid)) {\n\t\t\t\t// Primitive types can simply be overwritten, however we have an exception for\n\t\t\t\t// 64 bit integers (until javascript natively supports them)\n\t\t\t\tif (splitTypeid.typeid === \"Int64\" || splitTypeid.typeid === \"Uint64\") {\n\t\t\t\t\tlet appliedVal = in_appliedPropertyChanges[in_changedKey];\n\t\t\t\t\tif (appliedVal && appliedVal.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tappliedVal = appliedVal.value;\n\t\t\t\t\t}\n\t\t\t\t\tthis._applyValue(in_baseChanges, in_changedKey, appliedVal.slice());\n\t\t\t\t} else {\n\t\t\t\t\tthis._applyValue(\n\t\t\t\t\t\tin_baseChanges,\n\t\t\t\t\t\tin_changedKey,\n\t\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (in_baseChanges[in_changedKey]) {\n\t\t\t\t\t// Otherwise we have to continue the merging recursively\n\t\t\t\t\tthis._performApplyAfterOnProperty(\n\t\t\t\t\t\tin_baseChanges[in_changedKey],\n\t\t\t\t\t\tin_appliedPropertyChanges[in_changedKey],\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// If the key doesn't exist, yet, we can just copy it\n\t\t\t\t\tin_baseChanges[in_changedKey] = cloneDeep(in_appliedPropertyChanges[in_changedKey]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(MSG.UNKNOWN_CONTEXT + splitTypeid.context);\n\t\t}\n\t}\n\n\t/**\n\t * Rebases a given ChangeSet behind the current ChangeSet.\n\t *\n\t * This function takes a ChangeSet which is assumed to be relative to the same base state as the ChangeSet stored in\n\t * this class and transforms it in such a way that it can be applied after this ChangeSet. The function will modify\n\t * the supplied ChangeSet\n\t *\n\t * @param io_changeSet - The ChangeSet that is rebased behind the state obtained by application of this ChangeSet.\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict.\n\t * @param in_options - Optional additional parameters.\n\t * @returns The rebased ChangeSet (the same object as io_changeSet, it will be\n\t * modified in place).\n\t */\n\tpublic _rebaseChangeSet(\n\t\tio_changeSet: SerializedChangeSet,\n\t\tout_conflicts: ConflictInfo[],\n\t\tin_options?: RebaseChangeSetOptions,\n\t): SerializedChangeSet {\n\t\t// We actually only pass this request to the recursive internal function\n\t\treturn this._rebaseChangeSetForProperty(\n\t\t\tthis._changes,\n\t\t\tio_changeSet,\n\t\t\t\"\",\n\t\t\tout_conflicts,\n\t\t\tin_options,\n\t\t);\n\t}\n\n\t/**\n\t * Internal helper function that performs a rebase on a single property\n\t *\n\t * @param in_ownPropertyChangeSet - The ChangeSet for the property stored in this class\n\t * @param io_rebasePropertyChangeSet - The ChangeSet for the property to be rebased\n\t * @param in_basePath - Base path to get to the property processed by this function\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict\n\t * @param in_options - Optional additional parameters\n\t * @returns The rebased ChangeSet for this property\n\t */\n\tprivate _rebaseChangeSetForProperty(\n\t\tin_ownPropertyChangeSet: SerializedChangeSet,\n\t\tio_rebasePropertyChangeSet: SerializedChangeSet,\n\t\tin_basePath: string,\n\t\tout_conflicts: ConflictInfo[],\n\t\tin_options: ApplyChangeSetOptions,\n\t): SerializedChangeSet {\n\t\t// Process the children in this ChangeSet\n\t\tif (\n\t\t\t(in_ownPropertyChangeSet.insert ||\n\t\t\t\tin_ownPropertyChangeSet.modify ||\n\t\t\t\tin_ownPropertyChangeSet.remove) &&\n\t\t\t(io_rebasePropertyChangeSet.insert ||\n\t\t\t\tio_rebasePropertyChangeSet.modify ||\n\t\t\t\tio_rebasePropertyChangeSet.remove)\n\t\t) {\n\t\t\tthis._rebaseIndexedCollectionChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet,\n\t\t\t\tio_rebasePropertyChangeSet,\n\t\t\t\tin_basePath,\n\t\t\t\t\"NodeProperty\", // TODO: recursively propagate the typeid?\n\t\t\t\tfalse, // don't use square brackets (use dots instead)\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t}\n\t\tif (!isEmpty(io_rebasePropertyChangeSet.insertTemplates)) {\n\t\t\tconst typeids = Object.keys(io_rebasePropertyChangeSet.insertTemplates);\n\n\t\t\tconst templateMismatchChangeSet = { insertTemplates: {} };\n\n\t\t\tconst templateMismatchConflict = {\n\t\t\t\ttype: ChangeSet.ConflictType.MISMATCH_TEMPLATES,\n\t\t\t\tconflictingChange: templateMismatchChangeSet,\n\t\t\t};\n\n\t\t\teach(typeids, function (typeid) {\n\t\t\t\tconst template = io_rebasePropertyChangeSet.insertTemplates[typeid];\n\t\t\t\tif (\n\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates &&\n\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[typeid]\n\t\t\t\t) {\n\t\t\t\t\tconst isEqual = TemplateValidator.Utils.psetDeepEquals(\n\t\t\t\t\t\ttemplate,\n\t\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[template.typeid],\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!isEqual) {\n\t\t\t\t\t\tif (in_options && in_options.throwOnTemplateMismatch) {\n\t\t\t\t\t\t\tthrow new Error(MSG.TEMPLATE_MISMATCH + typeid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttemplateMismatchChangeSet.insertTemplates[typeid] =\n\t\t\t\t\t\t\tin_ownPropertyChangeSet.insertTemplates[template.typeid];\n\t\t\t\t\t\t// TODO: Remove this warning message once we offer a conflict resolution API\n\t\t\t\t\t\tconsole.warn(MSG.TEMPLATE_MISMATCH + typeid);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete io_rebasePropertyChangeSet.insertTemplates[typeid];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Remove insertTemplates key if it is empty\n\t\t\tif (isEmpty(io_rebasePropertyChangeSet.insertTemplates)) {\n\t\t\t\tdelete io_rebasePropertyChangeSet.insertTemplates;\n\t\t\t}\n\n\t\t\tif (!isEmpty(templateMismatchConflict.conflictingChange.insertTemplates)) {\n\t\t\t\tout_conflicts.push(templateMismatchConflict);\n\t\t\t}\n\t\t}\n\n\t\t// Check for collisions in the property assignments\n\t\tconst changedTypeids = Object.keys(in_ownPropertyChangeSet);\n\n\t\t// We currently do not yet have any\n\t\tconst changeSet = {};\n\t\tfor (let i = 0; i < changedTypeids.length; i++) {\n\t\t\tconst typeid = changedTypeids[i];\n\t\t\tconst paths = Object.keys(in_ownPropertyChangeSet[typeid]);\n\n\t\t\t// Update the oldValue of primitive property of a changeset\n\t\t\t// for simple changeset with 'modify', property type, name, value\n\t\t\t// find the oldValue of the property and update it\n\t\t\tif (typeid === \"modify\" && \"modify\" in io_rebasePropertyChangeSet) {\n\t\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\t\tconst tempTypeid = paths[i];\n\t\t\t\t\tif (isPrimitiveType(tempTypeid) && tempTypeid in io_rebasePropertyChangeSet.modify) {\n\t\t\t\t\t\tconst tempPaths = Object.keys(in_ownPropertyChangeSet.modify[tempTypeid]);\n\t\t\t\t\t\tfor (let z = 0; z < tempPaths.length; z++) {\n\t\t\t\t\t\t\tif (tempPaths[z] in io_rebasePropertyChangeSet.modify[tempTypeid]) {\n\t\t\t\t\t\t\t\tlet rebasedPropContent =\n\t\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet.modify[tempTypeid][tempPaths[z]];\n\t\t\t\t\t\t\t\tif (isObject(rebasedPropContent) && \"oldValue\" in rebasedPropContent) {\n\t\t\t\t\t\t\t\t\t(rebasedPropContent as SerializedChangeSet).oldValue =\n\t\t\t\t\t\t\t\t\t\tin_ownPropertyChangeSet.modify[tempTypeid][tempPaths[z]].value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (isPrimitiveType(typeid)) {\n\t\t\t\t// for complex changeset, the function will be called recursively, when the function is at the level where\n\t\t\t\t// io_rebasePropertyChangeSet && in_ownPropertyChangeSet contain only property type, name and value, we update\n\t\t\t\t// oldValue of io_rebasePropertyChangeSet.\n\t\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeid in io_rebasePropertyChangeSet &&\n\t\t\t\t\t\tpaths[j] in io_rebasePropertyChangeSet[typeid]\n\t\t\t\t\t) {\n\t\t\t\t\t\tlet rebasedPropContent = io_rebasePropertyChangeSet[typeid][paths[j]];\n\t\t\t\t\t\tif (isObject(rebasedPropContent) && \"oldValue\" in rebasedPropContent) {\n\t\t\t\t\t\t\t// if oldValue already be update above, we don't need to update\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid][paths[j]].oldValue !==\n\t\t\t\t\t\t\t\tin_ownPropertyChangeSet[typeid][paths[j]].value\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid][paths[j]].oldValue =\n\t\t\t\t\t\t\t\t\tin_ownPropertyChangeSet[typeid][paths[j]].value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The reserved keywords have already been handled above and changes which are not present in\n\t\t\t// the other ChangeSet can be ignored\n\t\t\tif (ChangeSet.isReservedKeyword(typeid) || !io_rebasePropertyChangeSet[typeid]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check, whether we have a collision in a path update\n\t\t\tfor (let j = 0; j < paths.length; j++) {\n\t\t\t\tif (io_rebasePropertyChangeSet[typeid][paths[j]] !== undefined) {\n\t\t\t\t\tin_ownPropertyChangeSet[typeid] = in_ownPropertyChangeSet[typeid] || {};\n\n\t\t\t\t\tconst newPath = joinPaths(in_basePath, paths[j], PROPERTY_PATH_DELIMITER);\n\t\t\t\t\t// Perform the rebase operation on the ChangeSet for this entry\n\t\t\t\t\tconst setConflict = this.rebaseChangeSetForPropertyEntryWithTypeid(\n\t\t\t\t\t\tpaths[j],\n\t\t\t\t\t\tin_ownPropertyChangeSet[typeid],\n\t\t\t\t\t\tio_rebasePropertyChangeSet[typeid],\n\t\t\t\t\t\ttypeid,\n\t\t\t\t\t\tnewPath,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\tout_conflicts,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\n\t\t\t\t\t// If there has been a non-recursive set collision we handle it here separately\n\t\t\t\t\tif (setConflict) {\n\t\t\t\t\t\t// If we have two writes to primitive types, this is a conflict\n\t\t\t\t\t\tchangeSet[typeid] = changeSet[typeid] || {};\n\n\t\t\t\t\t\t// Store the change. Note: We make a deep copy here, as this is a reference into our\n\t\t\t\t\t\t// own internal ChangeSet and we want to be sure, nobody changes our internal data-structures\n\t\t\t\t\t\tchangeSet[typeid][paths[j]] = cloneDeep(in_ownPropertyChangeSet[typeid][paths[j]]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove the typeid, when it no longer contains any keys\n\t\t\t\tif (isEmpty(io_rebasePropertyChangeSet[typeid][paths[j]])) {\n\t\t\t\t\tdelete io_rebasePropertyChangeSet[typeid][paths[j]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the typeid, when it no longer contains any keys\n\t\t\tif (isEmpty(io_rebasePropertyChangeSet[typeid])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[typeid];\n\t\t\t}\n\t\t}\n\n\t\t// If there were conflicts in the set operations, report them\n\t\tif (!isEmpty(changeSet)) {\n\t\t\tconst conflict = {\n\t\t\t\tpath: in_basePath,\n\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\tconflictingChange: changeSet,\n\t\t\t};\n\t\t\tout_conflicts.push(conflict);\n\t\t}\n\n\t\treturn io_rebasePropertyChangeSet;\n\t}\n\n\t/**\n\t * Decides based on the given Typeid which rebase operation to perform.\n\t *\n\t * @remarks Note: This function is not directly called on the ChangeSet but on the object containing it together\n\t * with a key since it needs to be able to overwrite this entry\n\t *\n\t * @param in_key - The key of the entry in the object\n\t * @param in_ownPropertyChangeSet - The object containing the ChangeSet for the property stored in this class.\n\t * @param io_rebasePropertyChangeSet - The object containing the ChangeSet for the property to be rebased.\n\t * @param in_typeid - The typeid of the property to rebase.\n\t * @param in_basePath - Base path to get to the property processed by this function.\n\t * @param in_removeEmpty - Should empty ChangeSets be removed?\n\t * @param out_conflicts - A list of paths that resulted in conflicts together with the type of the conflict.\n\t *\n\t * @returns Has there been a simple set collision? Those have to be handled separately\n\t *\n\t * @privateRemarks TODO: We should unify the handling of set collisions\n\t * @private\n\t */\n\tprivate rebaseChangeSetForPropertyEntryWithTypeid(\n\t\tin_key: string,\n\t\tin_ownPropertyChangeSet: SerializedChangeSet,\n\t\tio_rebasePropertyChangeSet: SerializedChangeSet,\n\t\tin_typeid: string,\n\t\tin_basePath: string,\n\t\tin_removeEmpty: boolean,\n\t\tout_conflicts: any,\n\t\tin_options: ApplyChangeSetOptions,\n\t): boolean {\n\t\tconst splitTypeid = extractContext(in_typeid);\n\n\t\tif (splitTypeid.context === \"set\" || splitTypeid.context === \"map\") {\n\t\t\tthis._rebaseIndexedCollectionChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\tin_basePath,\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\ttrue, // use square brackets\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"array\") {\n\t\t\tthis._rebaseArrayChangeSetForProperty(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\tin_basePath,\n\t\t\t\tout_conflicts,\n\t\t\t\tsplitTypeid.typeid,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.typeid === \"String\") {\n\t\t\tthis._rebaseChangeSetForString(\n\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\tio_rebasePropertyChangeSet,\n\t\t\t\tin_key,\n\t\t\t\tin_basePath,\n\t\t\t\tout_conflicts,\n\t\t\t\tin_options,\n\t\t\t);\n\t\t\t// Remove the key, when it no longer contains a changeset\n\t\t\tif (in_removeEmpty && isEmpty(io_rebasePropertyChangeSet[in_key])) {\n\t\t\t\tdelete io_rebasePropertyChangeSet[in_key];\n\t\t\t}\n\t\t} else if (splitTypeid.context === \"single\") {\n\t\t\t// We only can have a conflict when the path exists in both ChangeSets\n\t\t\tif (in_ownPropertyChangeSet[in_key] !== undefined) {\n\t\t\t\tif (isPrimitiveType(splitTypeid.typeid) || splitTypeid.isEnum) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, we have to continue recursively\n\n\t\t\t\t\t// Make sure the paths exist\n\t\t\t\t\tin_ownPropertyChangeSet[in_key] = in_ownPropertyChangeSet[in_key] || {};\n\n\t\t\t\t\t// And then perform the recursive rebase\n\t\t\t\t\tthis._rebaseChangeSetForProperty(\n\t\t\t\t\t\tin_ownPropertyChangeSet[in_key],\n\t\t\t\t\t\tio_rebasePropertyChangeSet[in_key],\n\t\t\t\t\t\tin_basePath,\n\t\t\t\t\t\tout_conflicts,\n\t\t\t\t\t\tin_options,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(MSG.UNKNOWN_CONTEXT + splitTypeid.context);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Recursive helper function for ChangeSet.prototype._toReversibleChangeSet\n\t * which converts a irreversible changeset to a reversible changeset\n\t * or updates the former state of a reversible changeset\n\t * @param in_context - The traversal context.\n\t */\n\tprivate _recursivelyBuildReversibleChangeSet(in_context: Utils.TraversalContext) {\n\t\tconst opType = in_context.getOperationType();\n\t\tif (opType === \"modify\") {\n\t\t\tconst type = in_context.getTypeid();\n\t\t\tconst splitType = in_context.getSplitTypeID();\n\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\n\t\t\tlet current = in_context.getUserData().parallelState;\n\t\t\tif (in_context.getPropertyContainerType() === \"root\") {\n\t\t\t\tcurrent = in_context.getUserData().oldState;\n\t\t\t} else if (current) {\n\t\t\t\tif (in_context.getPropertyContainerType() !== \"template\") {\n\t\t\t\t\tcurrent = current.insert;\n\t\t\t\t}\n\n\t\t\t\tif (in_context.getPropertyContainerType() !== \"array\") {\n\t\t\t\t\tcurrent = current && current[in_context.getTypeid()];\n\t\t\t\t\tcurrent = current && current[in_context.getLastSegment()];\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = current && current[0][1][in_context.getLastSegment()];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tin_context.setUserData({\n\t\t\t\tparallelState: current,\n\t\t\t\toldState: in_context.getUserData().oldState,\n\t\t\t});\n\n\t\t\tif (isPrimitiveType(type)) {\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${\n\t\t\t\t\t\t\tMSG.INVALID_PATH + in_context.getFullPath()\n\t\t\t\t\t\t}. Making primitive value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current;\n\n\t\t\t\t// store it in reversibleChangeSet\n\t\t\t\tif (type === \"String\" && !isString(nestedChangeset)) {\n\t\t\t\t\t// String is a special case\n\t\t\t\t\tlet oldString;\n\t\t\t\t\tif (isString(oldValue)) {\n\t\t\t\t\t\toldString = oldValue;\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\t\tconst entryLength = entry[1].length;\n\t\t\t\t\t\t\tentry[2] = oldString.slice(entryOffset, entryOffset + entryLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\n\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\tif (isString(removeRangeLength)) {\n\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[1] = oldString.slice(entryOffset, entryOffset + removeRangeLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tnestedChangeset.oldValue = oldValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst newChangeSet = {\n\t\t\t\t\t\t\tvalue: nestedChangeset,\n\t\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tin_context.replaceNestedChangeSet(newChangeSet);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (splitType.context === \"array\") {\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${MSG.INVALID_PATH + in_context.getFullPath()}. Making array value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current.insert ? current.insert[0][1] : [];\n\n\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\t\tlet oldEntries = [];\n\t\t\t\t\t\t\tfor (let j = 0; j < entry[1].length; j++) {\n\t\t\t\t\t\t\t\toldEntries.push(cloneDeep(oldValue[entryOffset + j]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[2] = oldEntries;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\tlet entryOffset = entry[0];\n\t\t\t\t\t\tlet oldEntries = [];\n\n\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\tif (Array.isArray(removeRangeLength)) {\n\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let j = 0; j < removeRangeLength; j++) {\n\t\t\t\t\t\t\toldEntries.push(cloneDeep(oldValue[entryOffset + j]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentry[1] = oldEntries;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tsplitType.context === \"map\" ||\n\t\t\t\t// node property test: (we have to do the test this way, because of inheritance)\n\t\t\t\tnestedChangeset.insert ||\n\t\t\t\tnestedChangeset.modify ||\n\t\t\t\tnestedChangeset.remove\n\t\t\t) {\n\t\t\t\t// This prevents an error, if the changeset only contains an insert operation. In that case\n\t\t\t\t// we don't actually need the corresponding old state and thus do not need to throw an error\n\t\t\t\t// This type of situation can occur in the materialized history, if an insert happens right at a chunk boundary.\n\t\t\t\tif (Object.keys(nestedChangeset).length === 1 && nestedChangeset.insert) {\n\t\t\t\t\tin_context._traversalStopped = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (current === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${MSG.INVALID_PATH + in_context.getFullPath()}. Making map value reversible.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tlet oldValue = current.insert;\n\n\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\tif (typeof entry === \"object\" && entry.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\t\tentry = entry.value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnestedChangeset.modify[modifiedKeys[i]] = {\n\t\t\t\t\t\t\t\tvalue: entry,\n\t\t\t\t\t\t\t\toldValue: cloneDeep(oldValue[modifiedKeys[i]]),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet newRemove = {};\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\tif (!Array.isArray(removedKeys)) {\n\t\t\t\t\t\t\tremovedKeys = Object.keys(removedKeys);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\tnewRemove[removedKeys[i]] = cloneDeep(oldValue[removedKeys[i]]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t// this case is handeled recursively\n\t\t\t\t\t}\n\t\t\t\t\tlet newRemove = {};\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tif (Array.isArray(nestedChangeset.remove)) {\n\t\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\tlet searchedKey = removedKeys[i];\n\t\t\t\t\t\t\t\t// search for this key in the old keys:\n\t\t\t\t\t\t\t\tconst oldTypeKeys = Object.keys(oldValue);\n\t\t\t\t\t\t\t\tfor (let k = 0; k < oldTypeKeys.length; k++) {\n\t\t\t\t\t\t\t\t\tif (oldValue[oldTypeKeys[k]].hasOwnProperty(searchedKey)) {\n\t\t\t\t\t\t\t\t\t\tlet entry = oldValue[oldTypeKeys[k]][searchedKey];\n\t\t\t\t\t\t\t\t\t\tif (!newRemove[oldTypeKeys[k]]) {\n\t\t\t\t\t\t\t\t\t\t\tnewRemove[oldTypeKeys[k]] = {};\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tnewRemove[oldTypeKeys[k]][removedKeys[i]] = cloneDeep(entry);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// we already have a reversibleChangeSet and need to update the oldValues\n\t\t\t\t\t\t\tconst removedTypes = Object.keys(nestedChangeset.remove);\n\t\t\t\t\t\t\tfor (let t = 0; t < removedTypes.length; t++) {\n\t\t\t\t\t\t\t\tlet removedKeys = Object.keys(nestedChangeset.remove[removedTypes[t]]);\n\t\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\t\tlet searchedKey = removedKeys[i];\n\t\t\t\t\t\t\t\t\tlet entry = oldValue[removedTypes[t]][searchedKey];\n\t\t\t\t\t\t\t\t\tnestedChangeset.remove[removedTypes[t]][removedKeys[i]] = entry;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Converts an irreversible changeset to a reversible changeset\n\t * or updates the former state of a reversible changeset\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release.\n\t * @param in_oldSerializedState - The old state.\n\t */\n\tpublic _toReversibleChangeSet(in_oldSerializedState: SerializedChangeSet) {\n\t\tConsoleUtils.assert(\n\t\t\tin_oldSerializedState !== undefined,\n\t\t\t`${MSG.ASSERTION_FAILED}Missing function parameter \"in_oldSerializedState\" of \"_toReversibleChangeSet\".`,\n\t\t);\n\n\t\tif (!isObject(in_oldSerializedState) || Array.isArray(in_oldSerializedState)) {\n\t\t\tif (!isObject(this._changes) || Array.isArray(this._changes)) {\n\t\t\t\tthis._changes = {\n\t\t\t\t\toldValue: Array.isArray(in_oldSerializedState)\n\t\t\t\t\t\t? in_oldSerializedState.slice()\n\t\t\t\t\t\t: in_oldSerializedState,\n\t\t\t\t\tvalue: this._changes,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t(this._changes as SerializedChangeSet).oldValue = Array.isArray(in_oldSerializedState)\n\t\t\t\t\t? in_oldSerializedState.slice()\n\t\t\t\t\t: in_oldSerializedState;\n\t\t\t}\n\t\t} else {\n\t\t\tconst workspace = { oldState: in_oldSerializedState };\n\t\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\t\tpreCallback: this._recursivelyBuildReversibleChangeSet,\n\t\t\t\tuserData: workspace,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Converts a reversible changeset to an irreversible changeset\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release.\n\t * @param in_withoutRoot - Bypass a fix where the root of a changeset is cleaned\n\t */\n\tpublic _stripReversibleChangeSet(in_withoutRoot: boolean) {\n\t\tconst callback = function (in_context) {\n\t\t\tconst opType = in_context.getOperationType();\n\t\t\tif (opType === \"remove\" || opType === \"modify\") {\n\t\t\t\tconst type = in_context.getTypeid();\n\t\t\t\tif (!type) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst splitType = in_context.getSplitTypeID();\n\n\t\t\t\tif (isPrimitiveType(type)) {\n\t\t\t\t\t// remove old state\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (type === \"String\" && !isString(nestedChangeset)) {\n\t\t\t\t\t\t// String is a special case\n\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\t\tentry.splice(2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\n\t\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\t\tif (isString(removeRangeLength)) {\n\t\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tentry[1] = removeRangeLength;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\tin_context.replaceNestedChangeSet(nestedChangeset.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (nestedChangeset && nestedChangeset.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\tin_context.replaceNestedChangeSet(nestedChangeset.value);\n\t\t\t\t\t}\n\t\t\t\t} else if (splitType.context === \"array\") {\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.modify.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[i];\n\t\t\t\t\t\t\tentry.splice(2, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\tfor (let i = 0; i < nestedChangeset.remove.length; i++) {\n\t\t\t\t\t\t\tlet entry = nestedChangeset.remove[i];\n\t\t\t\t\t\t\tlet removeRangeLength = entry[1];\n\t\t\t\t\t\t\tif (Array.isArray(removeRangeLength)) {\n\t\t\t\t\t\t\t\tremoveRangeLength = entry[1].length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tentry[1] = removeRangeLength;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// TODO: Remove in_withoutRoot when it will not be used anymore\n\t\t\t\t} else if (\n\t\t\t\t\tsplitType.context === \"map\" ||\n\t\t\t\t\t(!in_withoutRoot && splitType.context === \"single\")\n\t\t\t\t) {\n\t\t\t\t\t// For NodeProperty / inserts at the root\n\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\t\tlet entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\t\tif (typeof entry === \"object\" && entry.hasOwnProperty(\"value\")) {\n\t\t\t\t\t\t\t\t\tentry = entry.value;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnestedChangeset.modify[modifiedKeys[i]] = entry;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tlet removedKeys = nestedChangeset.remove;\n\t\t\t\t\t\t\tif (!Array.isArray(removedKeys)) {\n\t\t\t\t\t\t\t\tremovedKeys = Object.keys(removedKeys);\n\t\t\t\t\t\t\t\tnestedChangeset.remove = removedKeys;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet nestedChangeset = in_context.getNestedChangeSet();\n\t\t\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\t\t\t// this case is handeled recursively\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\t\t\tif (!Array.isArray(nestedChangeset.remove)) {\n\t\t\t\t\t\t\t\t// we have a reversibleChangeSet and need to convert\n\t\t\t\t\t\t\t\tlet newRemove = [];\n\t\t\t\t\t\t\t\tconst removedTypes = Object.keys(nestedChangeset.remove);\n\t\t\t\t\t\t\t\tfor (let t = 0; t < removedTypes.length; t++) {\n\t\t\t\t\t\t\t\t\tlet removedKeys = Object.keys(nestedChangeset.remove[removedTypes[t]]);\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < removedKeys.length; i++) {\n\t\t\t\t\t\t\t\t\t\tnewRemove.push(removedKeys[i]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnestedChangeset.remove = newRemove;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (\n\t\t\tisObject(this._changes) &&\n\t\t\t(this._changes as SerializedChangeSet).oldValue !== undefined &&\n\t\t\t(this._changes as SerializedChangeSet).value !== undefined\n\t\t) {\n\t\t\tthis._changes = (this._changes as SerializedChangeSet).value;\n\t\t\treturn;\n\t\t}\n\n\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\tpreCallback: callback,\n\t\t});\n\t}\n\n\t/**\n\t * Helper function to extract the first level paths from a given change set\n\t * @param in_changeSet - The ChangeSet to extract paths from.\n\t * @param isPrimitiveCollection - Is this a primitive type collection?\n\t *\n\t * @returns List of paths found at the first level of the change set\n\t */\n\tprivate _extractFirstLevelPaths(\n\t\tin_changeSet: SerializedChangeSet,\n\t\tisPrimitiveCollection: boolean,\n\t): string[] {\n\t\tlet paths;\n\t\tif (isPrimitiveCollection) {\n\t\t\tpaths = Object.keys(in_changeSet);\n\t\t} else {\n\t\t\tpaths = [];\n\t\t\teach(in_changeSet, function (nestedChangeSet) {\n\t\t\t\teach(nestedChangeSet, function (nestedChangeSet2, path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn paths;\n\t}\n\n\t/**\n\t * recursive helper function for ChangeSet.prototype._toInverseChangeSet\n\t * @param in_context - The traversal context.\n\t */\n\tprivate _recursivelyInvertReversibleChangeset(in_context: Utils.TraversalContext) {\n\t\tin_context.setUserData(in_context.getUserData() || {});\n\n\t\t// Figure out if we have already visited this path by verifying that the full path\n\t\t// is contained within the list of processed deleted or inserted paths\n\t\tconst isWithinInsertOrDelete = in_context.getUserData()[in_context.getFullPath()];\n\n\t\tif (isWithinInsertOrDelete && in_context.getOperationType() !== \"modify\") {\n\t\t\t// We are within an insert or remove sub tree. Skip this iteration.\n\t\t\tin_context._traversalStopped = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tin_context.getOperationType() === \"remove\" ||\n\t\t\tin_context.getOperationType() === \"modify\"\n\t\t) {\n\t\t\tconst type = in_context.getTypeid();\n\t\t\tconst splitType = in_context.getSplitTypeID();\n\n\t\t\tif (!splitType) {\n\t\t\t\tConsoleUtils.assert(\n\t\t\t\t\tfalse,\n\t\t\t\t\t`${MSG.ASSERTION_FAILED}Missing \"splitType\" in \"in_context\":${JSON.stringify(\n\t\t\t\t\t\tin_context,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst nestedChangeset = in_context.getNestedChangeSet();\n\n\t\t\tif (\n\t\t\t\t(isPrimitiveType(type) && type !== \"String\") ||\n\t\t\t\t(type === \"String\" && isString(nestedChangeset.oldValue))\n\t\t\t) {\n\t\t\t\t// check if we were called with an irreversible changeset\n\t\t\t\tif (\n\t\t\t\t\tin_context.getOperationType() === \"modify\" &&\n\t\t\t\t\t(!isObject(nestedChangeset) ||\n\t\t\t\t\t\ttypeof (nestedChangeset as SerializedChangeSet).oldValue === \"undefined\")\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(MSG.OLD_VALUE_NOT_FOUND);\n\t\t\t\t}\n\n\t\t\t\t// switch oldValue and value\n\t\t\t\tlet tmp = nestedChangeset.oldValue;\n\t\t\t\tnestedChangeset.oldValue = nestedChangeset.value;\n\t\t\t\tnestedChangeset.value = tmp;\n\t\t\t} else if (\n\t\t\t\t(type === \"String\" && !isString(nestedChangeset.oldValue)) ||\n\t\t\t\tsplitType.context === \"array\"\n\t\t\t) {\n\t\t\t\t// String and Arrays need special treatment:\n\t\t\t\tconst arrayIterator = new ArrayChangeSetIterator(nestedChangeset);\n\t\t\t\tconst resultChangeset: SerializedChangeSet = {};\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tresultChangeset.modify = [];\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.insert) {\n\t\t\t\t\tresultChangeset.remove = [];\n\t\t\t\t}\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tresultChangeset.insert = [];\n\t\t\t\t}\n\t\t\t\t// Successively invert the changes from the changeSet\n\t\t\t\twhile (!arrayIterator.atEnd()) {\n\t\t\t\t\tswitch (arrayIterator.opDescription.type) {\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.INSERT:\n\t\t\t\t\t\t\t// Handle inserts\n\t\t\t\t\t\t\tresultChangeset.remove.push([\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.REMOVE:\n\t\t\t\t\t\t\t// Handle removes\n\t\t\t\t\t\t\tresultChangeset.insert.push([\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] + arrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase ArrayIteratorOperationTypes.MODIFY:\n\t\t\t\t\t\t\t// Handle modifies\n\t\t\t\t\t\t\tif (isPrimitiveType(splitType.typeid)) {\n\t\t\t\t\t\t\t\tresultChangeset.modify.push([\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] +\n\t\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[2],\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresultChangeset.modify.push([\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[0] +\n\t\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.offset,\n\t\t\t\t\t\t\t\t\tarrayIterator.opDescription.operation[1],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\t`applyChangeset: ${MSG.UNKNOWN_OPERATION}${arrayIterator.opDescription.type}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tarrayIterator.next();\n\t\t\t\t}\n\t\t\t\tin_context.replaceNestedChangeSet(resultChangeset);\n\t\t\t} else {\n\t\t\t\t// Covers NodeProperty, Map and Set\n\t\t\t\tif (nestedChangeset.modify) {\n\t\t\t\t\tif (isPrimitiveType(splitType.typeid) && splitType.context === \"map\") {\n\t\t\t\t\t\tconst modifiedKeys = Object.keys(nestedChangeset.modify);\n\t\t\t\t\t\tfor (let i = 0; i < modifiedKeys.length; i++) {\n\t\t\t\t\t\t\tconst entry = nestedChangeset.modify[modifiedKeys[i]];\n\t\t\t\t\t\t\tlet tmp = entry.value;\n\t\t\t\t\t\t\tentry.value = entry.oldValue;\n\t\t\t\t\t\t\tentry.oldValue = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst oldInsert = nestedChangeset.insert;\n\t\t\t\tlet replacedInsert = false;\n\t\t\t\tif (nestedChangeset.remove) {\n\t\t\t\t\tnestedChangeset.insert = nestedChangeset.remove;\n\t\t\t\t\treplacedInsert = true;\n\t\t\t\t\tnestedChangeset.remove = undefined;\n\t\t\t\t\tdelete nestedChangeset.remove;\n\t\t\t\t\tconst isPrimitiveTypeid = isPrimitiveType(in_context.getSplitTypeID().typeid);\n\t\t\t\t\teach(\n\t\t\t\t\t\tthis._extractFirstLevelPaths(nestedChangeset.insert, isPrimitiveTypeid),\n\t\t\t\t\t\tfunction (path) {\n\t\t\t\t\t\t\tconst fullPath = joinPaths(\n\t\t\t\t\t\t\t\tin_context.getFullPath(),\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tPROPERTY_PATH_DELIMITER,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tin_context.getUserData()[fullPath] = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (oldInsert) {\n\t\t\t\t\tif (replacedInsert) {\n\t\t\t\t\t\tnestedChangeset.remove = cloneDeep(oldInsert);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnestedChangeset.remove = oldInsert;\n\t\t\t\t\t\tnestedChangeset.insert = undefined;\n\t\t\t\t\t\tdelete nestedChangeset.insert;\n\t\t\t\t\t}\n\t\t\t\t\tconst isPrimitiveTypeid = isPrimitiveType(in_context.getSplitTypeID().typeid);\n\t\t\t\t\teach(\n\t\t\t\t\t\tthis._extractFirstLevelPaths(nestedChangeset.remove, isPrimitiveTypeid),\n\t\t\t\t\t\tfunction (path) {\n\t\t\t\t\t\t\tconst fullPath = joinPaths(\n\t\t\t\t\t\t\t\tin_context.getFullPath(),\n\t\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\t\tPROPERTY_PATH_DELIMITER,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tin_context.getUserData()[fullPath] = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Inverts a reversible ChangeSets\n\t * WARNING: This function is still experimental and needs more testing\n\t * and it's set to private for now. It will be converted to a public API function\n\t * in a later release\n\t */\n\tpublic toInverseChangeSet() {\n\t\tif (this._changes.value !== undefined && this._changes.oldValue !== undefined) {\n\t\t\tconst tmp = this._changes.value;\n\t\t\tthis._changes.value = this._changes.oldValue;\n\t\t\tthis._changes.oldValue = tmp;\n\t\t} else {\n\t\t\tUtils.traverseChangeSetRecursively(this._changes, {\n\t\t\t\tpreCallback: this._recursivelyInvertReversibleChangeset.bind(this),\n\t\t\t});\n\t\t}\n\t}\n}\n\nChangeSet.prototype._performApplyAfterOnPropertyArray =\n\tChangeSetArrayFunctions._performApplyAfterOnPropertyArray;\nChangeSet.prototype._rebaseArrayChangeSetForProperty =\n\tChangeSetArrayFunctions._rebaseArrayChangeSetForProperty;\nChangeSet.prototype._rebaseChangeSetForString =\n\tChangeSetArrayFunctions._rebaseChangeSetForString;\n\n// Add the indexed collection functions into the prototype of the ChangeSet\nChangeSet.prototype._performApplyAfterOnPropertyIndexedCollection =\n\tChangeSetIndexedCollectionFunctions._performApplyAfterOnPropertyIndexedCollection;\nChangeSet.prototype._cleanIndexedCollectionChangeSet =\n\tChangeSetIndexedCollectionFunctions._cleanIndexedCollectionChangeSet;\nChangeSet.prototype._rebaseIndexedCollectionChangeSetForProperty =\n\tChangeSetIndexedCollectionFunctions._rebaseIndexedCollectionChangeSetForProperty;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/changeset_operations/array.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/changeset_operations/array.ts"],"names":[],"mappings":"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"}
|