@itwin/core-backend 5.6.0-dev.6 → 5.6.0-dev.8

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaImportCallbacks.test.js","sourceRoot":"","sources":["../../../../src/test/schema/SchemaImportCallbacks.test.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAgB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAe,cAAc,EAAyB,0BAA0B,EAAY,UAAU,EAAqB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3K,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,MAAoB,CAAC;IAEzB,mCAAmC;IACnC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;;;;;;;;;gBASf,CAAC;IAEf,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC;;;;;;;;;;gBAUf,CAAC;IAYf,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChI,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACrI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,MAAM;YAChB,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,kDAAkD;YAClD,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE;wBAClC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACzB,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;oBAChE,CAAC;oBACD,wBAAwB,EAAE,KAAK,IAAI,EAAE;wBACnC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACnD,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;QACnD,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YAMpE,IAAI,kBAA0C,CAAC;YAC/C,MAAM,kBAAkB,GAAe;gBACrC,QAAQ,EAAE;oBACR,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAkB;oBACzE,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAkB;iBAC1E;gBACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;wBACpC,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ;wBACtD,UAAU,EAAE;4BACV,QAAQ,EAAE;gCACR,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAkB;gCACzE,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAkB;6BAC1E;4BACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB;qBACF,CAAC;oBACF,wBAAwB,EAAE,KAAK,EAAE,OAA0B,EAAE,EAAE;wBAC7D,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAwB,CAAC;wBAChE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;wBAC/C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;wBAC/D,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;wBAC3E,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACzE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACjD,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,0BAA0B;YAC1B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAErD,wBAAwB;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,iCAAiC;gBAC7C,OAAO,EAAE,EAAE;aACZ,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAO/D,MAAM,UAAU,GAAiB,CAAC,UAAU,CAAC,CAAC;YAE9C,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBACzC,kDAAkD;wBAClD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;wBACnC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBACrC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAElC,YAAY,CAAC,UAAU,GAAG,kCAAkC,CAAC;wBAC7D,YAAY,CAAC,OAAO,GAAG,EAAE,CAAC;wBAC1B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;wBAE7D,MAAM,MAAM,GAAmB,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;wBAEnD,OAAO;4BACL,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ;4BACtD,UAAU,EAAE,MAAM;yBACnB,CAAC;oBACJ,CAAC;oBACD,wBAAwB,EAAE,KAAK,EAAE,OAA0B,EAAE,EAAE;wBAC7D,sDAAsD;wBACtD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;wBACpD,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,OAAO,CAAC,SAAS,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnI,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;wBACjD,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAC9C,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAChD,mBAAmB,CAAC,UAAU,GAAG,wBAAwB,CAAC;wBAC1D,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;wBAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA0B,mBAAmB,CAAC,CAAC;oBACtF,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,4BAA4B;YAC5B,IAAI,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;YAC9E,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE9C,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;YACrE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;QACnD,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;oBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC7C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,UAAU,CAAC,CAAC;wBACtD,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,8BAA8B;YAC9B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAErD,sCAAsC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,GAAG;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;YAE3D,+CAA+C;YAC/C,IAAI,mBAAuC,CAAC;YAE5C,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;oBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC3F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBAEtE,oCAAoC;wBACpC,MAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;wBACtH,mBAAmB,GAAG,oBAAoB,CAAC,UAAU,CAAC;wBAEtD,yEAAyE;wBACzE,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;wBACxG,mBAAmB,CAAC,OAAO,GAAG,iBAAiB,mBAAmB,EAAE,CAAC;wBACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;oBAC7D,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAE,YAAoB,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,IAAI,YAAgC,CAAC;YAErC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;oBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC7C,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,QAAQ,CAAC;wBACpD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;oBACrD,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,oCAAoC,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;YAC/E,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;wBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBACjD,CAAC;qBACF;iBACF,CAAC,CAAA;gBACF,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,4GAA4G,CAAC,CAAC;YAC7I,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,8BAA8B;YAC9B,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAErD,iBAAiB;YACjB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,CAAC;aACX,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAE1C,sCAAsC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,gBAAgB;4BAChB,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BACxG,mBAAmB,CAAC,OAAO,IAAI,CAAC,CAAC;4BACjC,mBAAmB,CAAC,UAAU,GAAG,oBAAoB,CAAC;4BACtD,mBAAmB,CAAC,OAAO,GAAG,oBAAoB,CAAC;4BACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;4BAE3D,mBAAmB;4BACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;wBAClD,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,0EAA0E,CAAC,CAAC;YACxG,CAAC;YAED,4CAA4C;YAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEtE,gEAAgE;YAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;YAC9F,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,IAAI,YAAgC,CAAC;YAErC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;wBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,QAAQ,CAAC;4BACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;wBAClD,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,0EAA0E,CAAC,CAAC;YACxG,CAAC;YAED,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,gDAAgD,CAAC,CAAC;YACxG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEtE,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE;4BAClC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;wBACxC,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,+DAA+D,CAAC,CAAC;YAC7F,CAAC;YAED,uCAAuC;YACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;YAC/F,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;YAEvD,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE;oBACvC,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;4BACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;4BAC3C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;4BAChD,gBAAgB,GAAG,IAAI,CAAC;4BACxB,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;qBACF;iBACF,CAAC,CAAC;gBAEH,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAChE,CAAC;oBAAS,CAAC;gBACT,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;YAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;YAC/F,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;YAEvD,MAAM,gBAAgB,GAAa,EAAE,CAAC;YACtC,MAAM,kBAAkB,GAAa,EAAE,CAAC;YAExC,IAAI,CAAC;gBACH,8BAA8B;gBAC9B,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE;oBACvC,IAAI,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;oBAC9B,cAAc,EAAE;wBACd,UAAU,EAAE,QAAQ;wBACpB,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1B,gBAAgB,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC3D,CAAC;qBACF;oBACD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;4BACrD,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;wBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,gBAAgB,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;wBACxD,CAAC;qBACF;iBACF,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,aAAa,GAAG,eAAe,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACjI,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBAEtI,gCAAgC;gBAChC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;oBAChC,cAAc,EAAE;wBACd,UAAU,EAAE,QAAQ;wBACpB,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1B,kBAAkB,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC7D,CAAC;qBACF;oBACD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;4BACvD,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;wBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,kBAAkB,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC1D,CAAC;qBACF;iBACF,CAAC,CAAC;gBAEH,gDAAgD;gBAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACjE,MAAM,CAAC,SAAS,CACd,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1C,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;oBACnC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,sBAAsB;YACtB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEtE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iGAAiG,EAAE,KAAK,IAAI,EAAE;YAC/G,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,cAAc;gBAC1B,OAAO,EAAE,GAAG;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAE1C,2CAA2C;YAC3C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/C,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,0DAA0D;4BAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BACjG,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC;4BAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB;4BAEzE,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,yCAAyC;gBACzC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,wDAAwD,EAAE,yCAAyC,CAAC,CAAC;YACjJ,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;YAChH,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,cAAc;gBAC1B,OAAO,EAAE,GAAG;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAE1C,2CAA2C;YAC3C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/C,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAC7F,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,0DAA0D;4BAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BACjG,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC;4BAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB;wBAC3E,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,yCAAyC;gBACzC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,wDAAwD,EAAE,yCAAyC,CAAC,CAAC;YACjJ,CAAC;YAED,2DAA2D;YAC3D,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB;YACjE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;YACvF,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,uCAAuC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,oCAAoC;YACpC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAErD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,GAAG;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAE1C,qDAAqD;YACrD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACnD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ,EAAE,CAAC;wBACjG,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1C,4DAA4D;4BAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,QAAS,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BAC/G,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;4BAExD,6DAA6D;4BAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BACjG,YAAY,CAAC,OAAO,GAAG,kBAAkB,CAAC;4BAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;wBACtE,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,yCAAyC,CAAC,CAAC;YAClG,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YAOtD,MAAM,QAAQ,GAAa;gBACzB,SAAS,EAAE,kBAAkB;gBAC7B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aAC/B,CAAC;YAEF,MAAM,YAAY,GAA4D,EAAE,CAAC;YAEjF,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE;oBACd,UAAU,EAAE,QAAQ;oBACpB,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1B,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;oBACtC,CAAC;iBACF;gBACD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBACzC,YAAY,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;wBAChC,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;oBAChE,CAAC;oBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;oBACnC,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,qDAAqD;YACrD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YAOnE,MAAM,QAAQ,GAAoB;gBAChC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC/D,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;gBACrC,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;oBACnC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;iBACrC;aACF,CAAC;YAEF,IAAI,YAAyC,CAAC;YAE9C,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;wBACpC,iBAAiB,EAAE,0BAA0B,CAAC,IAAI;qBACnD,CAAC;oBACF,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;oBAC9B,CAAC;iBACF;gBACD,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,YAAa,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,YAAa,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9D,MAAM,CAAC,SAAS,CAAC,YAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,KAAK,CAAC,YAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBACzC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACjC,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;oBAChE,CAAC;oBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnC,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAMhE,IAAI,QAAQ,GAAa;gBACvB,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,EAAE;aACR,CAAC;YAEF,yBAAyB;YACzB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE;oBACd,UAAU,EAAE,QAAQ;oBACpB,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1B,OAAO,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,CAAC;wBACxB,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC5C,CAAC;iBACF;gBACD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAK,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;wBACzD,OAAO,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,CAAC;wBACxB,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACrC,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;oBAChE,CAAC;oBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACpC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAK,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;wBACvE,OAAO,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,CAAC;wBACxB,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACxC,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B;YAC/D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;YAEjF,QAAQ,GAAG;gBACT,IAAI,EAAE,CAAC;gBACP,GAAG,EAAE,EAAE;aACR,CAAC;YAEF,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,IAAI,EAAE,QAAQ;gBACd,qBAAqB,EAAE;oBACrB,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,OAAO,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,CAAC;wBACxB,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACxC,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B;YAC9D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,IAAI,aAAyB,CAAC;QAE9B;;WAEG;QACH,SAAS,iBAAiB,CAAC,MAAgB;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;YACvF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC,CAAC;QAED,SAAS,iBAAiB,CAAC,MAAgB,EAAE,OAAe;YAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;YACvF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,2CAA2C,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,yCAAyC;QACzC,+FAA+F;QAC/F,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAA8B,EAAE,EAAE;YACrE,OAAO,CAAC,IAAI,CAAC,UAA2B,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACvD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,EAAE,CAAC,CAAC;gBAC1F,IAAI,YAAY,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;oBAC5C,YAAY,CAAC,SAAS,GAAG,eAAe,CAAC;gBAC3C,CAAC;qBAAM,IAAI,YAAY,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;oBACpD,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC;gBACxC,CAAC;qBAAM,IAAI,YAAY,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;oBACnD,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,sCAAsC;YACtC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEtE,MAAM,UAAU,GAAG,aAAa,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAE9C,mBAAmB;YACnB,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACnD,WAAW,EAAE,cAAc;gBAC3B,UAAU;aACX,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,uCAAuC,CAAC,CAAC;YAEvF,uBAAuB;YACvB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEnC,4CAA4C;YAC5C,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAEjD,oEAAoE;YACpE,MAAM,UAAU,GAAiB,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC/E,MAAM,YAAY,GAA4B;oBAC5C,aAAa,EAAE,wBAAwB;oBACvC,KAAK,EAAE,SAAS,CAAC,EAAE;oBACnB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;oBACxB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,GAAG,GAAG,KAAK,GAAG,GAAG;oBAC1B,SAAS,EAAE,iBAAiB;iBAC7B,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,CAAC,WAAW,CAAC,oEAAoE,CAAC,CAAC;YAEzF,2IAA2I;YAC3I,2EAA2E;YAC3E,8EAA8E;YAC9E,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACnD,IAAI,EAAE,EAAE,UAAU,EAAE;gBACpB,cAAc,EAAE;oBACd,UAAU;oBACV,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,sBAAsB;iBACjC;gBACD,qBAAqB,EAAE;oBACrB,uBAAuB,EAAE,KAAK,IAAI,EAAE;wBAClC,OAAO;4BACL,iBAAiB,EAAE,0BAA0B,CAAC,QAAQ;4BACtD,UAAU,EAAE;gCACV,UAAU;6BACX;yBACF,CAAC;oBACJ,CAAC;oBACD,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,sEAAsE;wBACtE,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,UAAW,CAAC,UAA0B,CAAC;wBAC/E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;wBACtE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;wBAEzD,aAAa,CAAC,OAAO,CAAC,CAAC,SAAqB,EAAE,EAAE;4BAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BACjG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,EAAE,4EAA4E,CAAC,CAAC;wBAC3I,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,QAAoB,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC;QAEjC,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB,OAAO,CAAC,OAAO,CAAC,iCAAiC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACjF,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/I,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,KAAK,UAAU,cAAc;YAC3B,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7H,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAEzE,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAE1D,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YAEnD,IAAI,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;gBACpE,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBACxC,WAAW,EAAE,cAAc;oBAC3B,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,YAAY,GAA4B;gBAC5C,aAAa,EAAE,wBAAwB;gBACvC,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;gBACxB,UAAU,EAAE,MAAM;gBAClB,OAAO,EAAE,GAAG;aACb,CAAC;YAEF,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACnE,WAAW,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAC/C,MAAM,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YAExD,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACxD,cAAc,EAAE;wBACd,UAAU;wBACV,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1B,oCAAoC;4BACpC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BAC1F,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;4BACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;4BAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;wBAC5C,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACzD,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,CAAC;YAED,uBAAuB;YACvB,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACxD,cAAc,EAAE;wBACd,UAAU;wBACV,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,OAAO;wBAClB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BAC1B,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;4BAClE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BAC1F,KAAK,CAAC,UAAU,GAAG,oBAAoB,CAAC;4BACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;4BAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;wBACnD,CAAC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,yDAAyD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,WAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YAExD,wDAAwD;YACxD,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACxD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,oCAAoC;4BACpC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BAC1F,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;4BACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;4BAE7C,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACxC,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,CAAC;YAED,uBAAuB;YACvB,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;oBACxD,qBAAqB,EAAE;wBACrB,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;4BACzC,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;4BAClE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;4BAC1F,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;4BACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;4BAC7C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;4BAE1C,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,IAAI,EAAE,CAAC;wBAChE,CAAC;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,yDAAyD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,WAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,cAAc,EAAE,CAAC;YAExD,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,MAAM,WAAW,CAAC,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE;gBACxD,qBAAqB,EAAE;oBACrB,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;wBAC1C,gBAAgB,GAAG,IAAI,CAAC;wBAExB,4CAA4C;wBAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;wBAC1F,KAAK,CAAC,OAAO,GAAG,2CAA2C,CAAC;wBAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC/C,CAAC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC;YAChF,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,eAAe,CAA0B,SAAS,CAAC,CAAC;YAC5F,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAAC;YAC9E,MAAM,WAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { Guid, Id64String } from \"@itwin/core-bentley\";\r\nimport { Code, ElementProps, IModel } from \"@itwin/core-common\";\r\nimport { BriefcaseDb, ChannelControl, ChannelUpgradeContext, DataTransformationStrategy, IModelDb, IModelJsFs, PostImportContext, StandaloneDb } from \"../../core-backend\";\r\nimport { HubWrappers, IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { KnownTestLocations } from \"../KnownTestLocations\";\r\nimport { HubMock } from \"../../internal/HubMock\";\r\n\r\ndescribe(\"Schema Import Callbacks\", () => {\r\n let imodel: StandaloneDb;\r\n\r\n // Test schema with version changes\r\n const testSchemaV100 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\r\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n const testSchemaV101 = () => `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.1\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\r\n <ECSchemaReference name=\"BisCore\" version=\"1.0.0\" alias=\"bis\"/>\r\n <ECEntityClass typeName=\"TestElement\">\r\n <BaseClass>bis:DefinitionElement</BaseClass>\r\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"IntProp\" typeName=\"int\" />\r\n <ECProperty propertyName=\"NewProp\" typeName=\"string\" />\r\n <ECProperty propertyName=\"ModelName\" typeName=\"string\" />\r\n </ECEntityClass>\r\n </ECSchema>`;\r\n\r\n interface TestInitialElementProps extends ElementProps {\r\n stringProp: string;\r\n intProp: number;\r\n modelName?: string;\r\n }\r\n\r\n interface TestUpdatedElementProps extends TestInitialElementProps {\r\n newProp?: string;\r\n }\r\n\r\n beforeEach(() => {\r\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\r\n imodel = StandaloneDb.createEmpty(testFileName, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\r\n assert.exists(imodel);\r\n });\r\n\r\n afterEach(() => {\r\n if (imodel?.isOpen)\r\n imodel.close();\r\n });\r\n\r\n describe(\"Basic Callback Execution\", () => {\r\n it(\"should work without callbacks\", async () => {\r\n // This should not throw and should work as before\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\r\n });\r\n\r\n it(\"should call both callbacks in correct order\", async () => {\r\n const callOrder: string[] = [];\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n callOrder.push(\"before\");\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async () => {\r\n callOrder.push(\"after\");\r\n },\r\n },\r\n });\r\n\r\n assert.deepEqual(callOrder, [\"before\", \"after\"]);\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.None\", () => {\r\n it(\"should not create snapshot or cache data with None strategy\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.resources.snapshot);\r\n assert.isUndefined(context.resources.cachedData);\r\n },\r\n },\r\n });\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.InMemory\", () => {\r\n it(\"should pass cached data from preImport to postImport\", async () => {\r\n interface CachedData {\r\n elements: ElementProps[];\r\n timestamp: number;\r\n }\r\n\r\n let receivedCachedData: CachedData | undefined;\r\n const expectedCachedData: CachedData = {\r\n elements: [\r\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n ],\r\n timestamp: Date.now(),\r\n };\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: {\r\n elements: [\r\n { id: \"0x1\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n { id: \"0x2\", classFullName: \"BisCore:DefinitionElement\" } as ElementProps,\r\n ],\r\n timestamp: Date.now(),\r\n },\r\n }),\r\n postSchemaImportCallback: async (context: PostImportContext) => {\r\n receivedCachedData = context.resources.cachedData as CachedData;\r\n assert.isDefined(context.resources.cachedData);\r\n assert.equal(context.resources.cachedData!.elements.length, 2);\r\n assert.deepEqual(receivedCachedData.elements, expectedCachedData.elements);\r\n assert.equal(receivedCachedData.timestamp, expectedCachedData.timestamp);\r\n assert.isUndefined(context.resources.snapshot);\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"should cache element properties and use them after import\", async () => {\r\n // First import the schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create a test element\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"original value of first element\",\r\n intProp: 42,\r\n };\r\n\r\n const elementId1 = imodel.elements.insertElement(elementProps);\r\n\r\n // Now import updated schema and transform the element\r\n interface CachedElements {\r\n ids: Id64String[];\r\n }\r\n\r\n const elementIds: Id64String[] = [elementId1];\r\n\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // Create another element before the schema import\r\n assert.equal(elementIds.length, 1);\r\n const element = context.iModel.elements.getElementProps<TestInitialElementProps>(elementIds[0]);\r\n assert.isDefined(element.stringProp);\r\n assert.isDefined(element.intProp);\r\n\r\n elementProps.stringProp = \"original value of second element\";\r\n elementProps.intProp = 84;\r\n elementIds.push(imodel.elements.insertElement(elementProps));\r\n\r\n const cached: CachedElements = { ids: elementIds };\r\n\r\n return {\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: cached,\r\n };\r\n },\r\n postSchemaImportCallback: async (context: PostImportContext) => {\r\n // Use cached data to update element with new property\r\n assert.isDefined(context.resources.cachedData?.ids);\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(context.resources.cachedData!.ids[1]);\r\n assert.isDefined(updatedElementProps.stringProp);\r\n assert.isDefined(updatedElementProps.intProp);\r\n assert.isUndefined(updatedElementProps.newProp);\r\n updatedElementProps.stringProp = \"modified in postImport\";\r\n updatedElementProps.newProp = `New Prop Added`;\r\n context.iModel.elements.updateElement<TestUpdatedElementProps>(updatedElementProps);\r\n },\r\n },\r\n });\r\n\r\n // Verify the transformation\r\n let finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[0]);\r\n assert.equal(finalElementProps.stringProp, \"original value of first element\");\r\n assert.isUndefined(finalElementProps.newProp);\r\n\r\n finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementIds[1]);\r\n assert.equal(finalElementProps.stringProp, \"modified in postImport\");\r\n assert.isDefined(finalElementProps.newProp);\r\n assert.equal(finalElementProps.newProp, \"New Prop Added\");\r\n });\r\n });\r\n\r\n describe(\"DataTransformationStrategy.Snapshot\", () => {\r\n it(\"should provide snapshot in postImport callback\", async () => {\r\n let snapshotProvided = false;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n assert.notEqual(context.resources.snapshot, context.iModel);\r\n assert.isTrue(context.resources.snapshot!.isSnapshot);\r\n snapshotProvided = true;\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(snapshotProvided);\r\n });\r\n\r\n it(\"should allow reading pre-import state from snapshot\", async () => {\r\n // First import initial schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create element with original schema\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"snapshot test\",\r\n intProp: 123,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Insert element before schema upgrade\");\r\n\r\n // Import updated schema with snapshot strategy\r\n let originalStringValue: string | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n assert.equal(context.resources.snapshot?.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n\r\n // Read original value from snapshot\r\n const snapshotElementProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\r\n originalStringValue = snapshotElementProps.stringProp;\r\n\r\n // Update element in main iModel with new property based on snapshot data\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedElementProps.newProp = `Original was: ${originalStringValue}`;\r\n context.iModel.elements.updateElement(updatedElementProps);\r\n },\r\n },\r\n });\r\n\r\n assert.equal(originalStringValue, \"snapshot test\");\r\n const finalElement = imodel.elements.getElement(elementId);\r\n assert.equal((finalElement as any).newProp, \"Original was: snapshot test\");\r\n });\r\n\r\n it(\"should clean up snapshot after successful import\", async () => {\r\n let snapshotPath: string | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.resources.snapshot);\r\n snapshotPath = context.resources.snapshot!.pathName;\r\n assert.isTrue(IModelJsFs.existsSync(snapshotPath));\r\n },\r\n },\r\n });\r\n\r\n if (snapshotPath) {\r\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot file should be cleaned up\");\r\n }\r\n });\r\n });\r\n\r\n describe(\"Error Handling\", () => {\r\n it(\"In memory strategy selected without caching any data pre import\", async () => {\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.InMemory }),\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.resources.snapshot);\r\n },\r\n },\r\n })\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n expect(err.message).to.equal(\"Failed to execute preSchemaImportCallback: InMemory transform strategy requires cachedData to be provided.\");\r\n }\r\n });\r\n\r\n it(\"should abandon changes if postImport callback throws\", async () => {\r\n // First import initial schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n // Create element\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test\",\r\n intProp: 1,\r\n };\r\n\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Insert test element\");\r\n\r\n // Try to import with failing callback\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n // Make a change\r\n const updatedElementProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedElementProps.intProp += 1;\r\n updatedElementProps.stringProp = \"should be reverted\";\r\n updatedElementProps.newProp = \"should be reverted\";\r\n context.iModel.elements.updateElement(updatedElementProps);\r\n\r\n // Then throw error\r\n throw new Error(\"Intentional callback failure\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Intentional callback failure\");\r\n }\r\n\r\n // Schema import should have been successful\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n\r\n // Changes should be abandoned - element should not have newProp\r\n const finalElementProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.equal(finalElementProps.intProp, 1);\r\n assert.equal(finalElementProps.stringProp, \"test\");\r\n assert.isUndefined(finalElementProps.newProp);\r\n });\r\n\r\n it(\"should clean up snapshot when postImport throws error\", async () => {\r\n let snapshotPath: string | undefined;\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n snapshotPath = context.resources.snapshot!.pathName;\r\n throw new Error(\"Error after snapshot created\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute postSchemaImportCallback: Error after snapshot created\");\r\n }\r\n\r\n if (snapshotPath) {\r\n assert.isFalse(IModelJsFs.existsSync(snapshotPath), \"Snapshot should be cleaned up even after error\");\r\n }\r\n });\r\n\r\n it(\"should handle error in preImport callback\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n throw new Error(\"Error in preImport\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error\");\r\n } catch (err: any) {\r\n assert.equal(err.message, \"Failed to execute preSchemaImportCallback: Error in preImport\");\r\n }\r\n\r\n // Schema should not have been imported\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n });\r\n });\r\n\r\n describe(\"File-based Schema Import\", () => {\r\n it(\"should work with importSchemas() using file paths\", async () => {\r\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\r\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\r\n\r\n let callbackExecuted = false;\r\n\r\n try {\r\n await imodel.importSchemas([schemaPath], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.isDefined(context.schemaData);\r\n assert.equal(context.schemaData.length, 1);\r\n assert.equal(context.schemaData[0], schemaPath);\r\n callbackExecuted = true;\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(callbackExecuted);\r\n assert.isTrue(imodel.containsClass(`TestSchema:TestElement`));\r\n } finally {\r\n if (IModelJsFs.existsSync(schemaPath)) {\r\n IModelJsFs.removeSync(schemaPath);\r\n }\r\n }\r\n });\r\n\r\n it(\"should have consistent behavior between importSchemas and importSchemaStrings\", async () => {\r\n const schemaPath = path.join(KnownTestLocations.outputDir, `TestSchema.01.00.00.ecschema.xml`);\r\n IModelJsFs.writeFileSync(schemaPath, testSchemaV100());\r\n\r\n const executionLogFile: string[] = [];\r\n const executionLogString: string[] = [];\r\n\r\n try {\r\n // Test with file-based import\r\n await imodel.importSchemas([schemaPath], {\r\n data: { testId: \"file-based\" },\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"2.0.0\",\r\n callback: async (context) => {\r\n executionLogFile.push(`channel: ${context.data.testId}`);\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n executionLogFile.push(`pre: ${context.data.testId}`);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n executionLogFile.push(`post: ${context.data.testId}`);\r\n },\r\n },\r\n });\r\n\r\n // Clean iModel for next test\r\n imodel.close();\r\n const testFileName2 = IModelTestUtils.prepareOutputFile(\"SchemaImportCallbacks\", `SchemaCallbackTest_${Guid.createValue()}.bim`);\r\n imodel = StandaloneDb.createEmpty(testFileName2, { rootSubject: { name: \"TestSubject\" }, allowEdit: JSON.stringify({ txns: true }) });\r\n\r\n // Test with string-based import\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: { testId: \"string-based\" },\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"2.0.0\",\r\n callback: async (context) => {\r\n executionLogString.push(`channel: ${context.data.testId}`);\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n executionLogString.push(`pre: ${context.data.testId}`);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n executionLogString.push(`post: ${context.data.testId}`);\r\n },\r\n },\r\n });\r\n\r\n // Both should have identical execution patterns\r\n assert.equal(executionLogFile.length, executionLogString.length);\r\n assert.deepEqual(\r\n executionLogFile.map(s => s.split(\":\")[0]),\r\n executionLogString.map(s => s.split(\":\")[0])\r\n );\r\n } finally {\r\n if (IModelJsFs.existsSync(schemaPath))\r\n IModelJsFs.removeSync(schemaPath);\r\n }\r\n });\r\n });\r\n\r\n describe(\"Channel Access Validation\", () => {\r\n beforeEach(async () => {\r\n // Import schema first\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n });\r\n\r\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel pre import\", async () => {\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test element\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Now REMOVE the shared channel permission\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n // Try to import schema and modify element - should fail\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // This should throw because shared channel is not allowed\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw here\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n }\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n // Verify it's a channel constraint error\r\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\r\n }\r\n\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n });\r\n\r\n it(\"should throw ChannelConstraintViolation when modifying element from disabled channel post import\", async () => {\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test element\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Now REMOVE the shared channel permission\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n // Try to import schema and modify element - should fail\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.None }),\r\n postSchemaImportCallback: async (context) => {\r\n // This should throw because shared channel is not allowed\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw here\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n // Verify it's a channel constraint error\r\n assert.include(err.message.toLowerCase(), \"error updating element [channel shared is not allowed]\", \"Error should mention channel constraint\");\r\n }\r\n\r\n // Verify element was NOT modified (changes were abandoned)\r\n imodel.channels.addAllowedChannel(\"shared\"); // Re-enable to read\r\n const finalProps = imodel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.isUndefined(finalProps.newProp, \"Element should not have been modified\");\r\n });\r\n\r\n it(\"should handle channel permission check in snapshot strategy\", async () => {\r\n // Enable channel and create element\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n\r\n const model = imodel.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"snapshot test\",\r\n intProp: 123,\r\n };\r\n\r\n const elementId = imodel.elements.insertElement(elementProps);\r\n imodel.saveChanges(\"Create test element\");\r\n\r\n // Disable channel before schema import with snapshot\r\n imodel.channels.removeAllowedChannel(\"shared\");\r\n\r\n try {\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({ transformStrategy: DataTransformationStrategy.Snapshot }),\r\n postSchemaImportCallback: async (context) => {\r\n // Can read from snapshot (it's read-only, no channel check)\r\n const snapshotProps = context.resources.snapshot!.elements.getElementProps<TestInitialElementProps>(elementId);\r\n assert.equal(snapshotProps.stringProp, \"snapshot test\");\r\n\r\n // But can't modify in main iModel without channel permission\r\n const updatedProps = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n updatedProps.newProp = \"This should fail\";\r\n context.iModel.elements.updateElement(updatedProps); // Should throw\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown ChannelConstraintViolation\");\r\n } catch (err: any) {\r\n assert.include(err.message.toLowerCase(), \"channel\", \"Error should mention channel constraint\");\r\n }\r\n });\r\n });\r\n\r\n describe(\"User Data Propagation\", () => {\r\n it(\"should pass user data to all callbacks\", async () => {\r\n interface UserData {\r\n processId: string;\r\n timestamp: number;\r\n metadata: { version: string };\r\n }\r\n\r\n const userData: UserData = {\r\n processId: \"test-process-123\",\r\n timestamp: Date.now(),\r\n metadata: { version: \"1.0.0\" },\r\n };\r\n\r\n const receivedData: { channel?: UserData; pre?: UserData; post?: UserData } = {};\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n callback: async (context) => {\r\n receivedData.channel = context.data;\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n receivedData.pre = context.data;\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n receivedData.post = context.data;\r\n },\r\n },\r\n });\r\n\r\n // Verify all callbacks received the user data passed\r\n assert.deepEqual(receivedData.channel, userData);\r\n assert.deepEqual(receivedData.pre, userData);\r\n assert.deepEqual(receivedData.post, userData);\r\n });\r\n\r\n it(\"should handle more complicated user data structures\", async () => {\r\n interface ComplexUserData {\r\n elementMap: Map<Id64String, string>;\r\n counters: { inserted: number; updated: number };\r\n handlers: Array<{ name: string; enabled: boolean }>;\r\n }\r\n\r\n const userData: ComplexUserData = {\r\n elementMap: new Map([[\"0x1\", \"Element1\"], [\"0x2\", \"Element2\"]]),\r\n counters: { inserted: 0, updated: 0 },\r\n handlers: [\r\n { name: \"Handler1\", enabled: true },\r\n { name: \"Handler2\", enabled: false },\r\n ],\r\n };\r\n\r\n let receivedData: ComplexUserData | undefined;\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => ({\r\n transformStrategy: DataTransformationStrategy.None,\r\n }),\r\n postSchemaImportCallback: async (context) => {\r\n receivedData = context.data;\r\n },\r\n },\r\n data: userData,\r\n });\r\n\r\n assert.isDefined(receivedData);\r\n assert.equal(receivedData!.elementMap.size, 2);\r\n assert.equal(receivedData!.elementMap.get(\"0x1\"), \"Element1\");\r\n assert.deepEqual(receivedData!.counters, { inserted: 0, updated: 0 });\r\n assert.equal(receivedData!.handlers.length, 2);\r\n });\r\n\r\n it(\"should work with undefined user data\", async () => {\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.data);\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n assert.isUndefined(context.data);\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"should allow user data mutation across callbacks\", async () => {\r\n interface UserData {\r\n step: number;\r\n log: string[];\r\n }\r\n\r\n let userData: UserData = {\r\n step: 0,\r\n log: [],\r\n };\r\n\r\n // All 3 callbacks called\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n channelUpgrade: {\r\n channelKey: \"shared\",\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n callback: async (context) => {\r\n context.data!.step += 1;\r\n context.data!.log.push(\"channel-upgrade\");\r\n },\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n assert.equal(context.data!.step, 1);\r\n assert.deepEqual(context.data!.log, [\"channel-upgrade\"]);\r\n context.data!.step += 1;\r\n context.data!.log.push(\"pre-import\");\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n assert.equal(context.data!.step, 2);\r\n assert.deepEqual(context.data!.log, [\"channel-upgrade\", \"pre-import\"]);\r\n context.data!.step += 1;\r\n context.data!.log.push(\"post-import\");\r\n },\r\n },\r\n });\r\n\r\n // Verify final state\r\n assert.equal(userData.step, 3); // All three callbacks executed\r\n assert.deepEqual(userData.log, [\"channel-upgrade\", \"pre-import\", \"post-import\"]);\r\n\r\n userData = {\r\n step: 0,\r\n log: [],\r\n };\r\n\r\n await imodel.importSchemaStrings([testSchemaV100()], {\r\n data: userData,\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n context.data!.step += 1;\r\n context.data!.log.push(\"post-import\");\r\n },\r\n },\r\n });\r\n\r\n // Verify final state\r\n assert.equal(userData.step, 1); // Only post-import was called\r\n assert.deepEqual(userData.log, [\"post-import\"]);\r\n });\r\n });\r\n\r\n describe(\"Channel Reorganization Before Schema Import\", () => {\r\n let channelRootId: Id64String;\r\n\r\n /**\r\n * Helper functions to get and set the version from a ChannelRootAspect\r\n */\r\n function getChannelVersion(iModel: IModelDb): string | undefined {\r\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\r\n if (aspects.length === 0)\r\n return undefined;\r\n return aspects[0].asAny.version;\r\n }\r\n\r\n function setChannelVersion(iModel: IModelDb, version: string): void {\r\n const aspects = iModel.elements.getAspects(channelRootId, \"BisCore:ChannelRootAspect\");\r\n assert.equal(aspects.length, 1, \"Should have exactly one ChannelRootAspect\");\r\n\r\n const aspect = aspects[0];\r\n aspect.asAny.version = version;\r\n iModel.elements.updateAspect(aspect.toJSON());\r\n }\r\n\r\n // Code that simulates a channel upgrade.\r\n // This simulates elements being moved to different models as per the new channel organization.\r\n const channelUpgradeCallback = async (context: ChannelUpgradeContext) => {\r\n (context.data.elementIds as Id64String[]).forEach((id) => {\r\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(id);\r\n if (elementProps.stringProp === \"Material1\") {\r\n elementProps.modelName = \"MaterialModel\";\r\n } else if (elementProps.stringProp === \"LineStyle1\") {\r\n elementProps.modelName = \"StyleModel\";\r\n } else if (elementProps.stringProp === \"Category1\") {\r\n elementProps.modelName = \"StyleModel\";\r\n }\r\n context.iModel.elements.updateElement(elementProps);\r\n });\r\n setChannelVersion(context.iModel, \"1.0.1\");\r\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\r\n context.iModel.saveChanges();\r\n };\r\n\r\n it(\"need for channel reorganization before schema import\", async () => {\r\n // Initial setup: Import v1.0.0 schema\r\n await imodel.importSchemaStrings([testSchemaV100()]);\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.00\");\r\n\r\n const channelKey = \"TestChannel\";\r\n imodel.channels.addAllowedChannel(channelKey);\r\n\r\n // Create a channel\r\n channelRootId = imodel.channels.insertChannelSubject({\r\n subjectName: \"Test Channel\",\r\n channelKey,\r\n });\r\n\r\n assert.isUndefined(getChannelVersion(imodel), \"Version should be undefined initially\");\r\n\r\n // Set version to 1.0.0\r\n setChannelVersion(imodel, \"1.0.0\");\r\n\r\n // Enable shared channel and create elements\r\n imodel.channels.addAllowedChannel(\"shared\");\r\n const rootModel = imodel.models.getModel(IModel.dictionaryId);\r\n assert.equal(getChannelVersion(imodel), \"1.0.0\");\r\n\r\n // Create test elements in the \"old\" channel structure (all in root)\r\n const elementIds: Id64String[] = [];\r\n for (const [index, name] of [\"Material1\", \"LineStyle1\", \"Category1\"].entries()) {\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: rootModel.id,\r\n code: Code.createEmpty(),\r\n stringProp: name,\r\n intProp: 100 + index * 100,\r\n modelName: \"DefinitionModel\"\r\n };\r\n elementIds.push(imodel.elements.insertElement(elementProps));\r\n }\r\n imodel.saveChanges(\"Create elements in a single model under the root channel structure\");\r\n\r\n // Scenario: Let's assume schema has evolved and v1.0.1 expects elements to be in their dedicated models (i.e. it relies on channel v1.0.1)\r\n // The post schema upgrade code will look for elements in their own models.\r\n // If the channel is still in version 1.0.0, the callback will obviously fail.\r\n await imodel.importSchemaStrings([testSchemaV101()], {\r\n data: { elementIds },\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: channelUpgradeCallback,\r\n },\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async () => {\r\n return {\r\n transformStrategy: DataTransformationStrategy.InMemory,\r\n cachedData: {\r\n elementIds,\r\n },\r\n };\r\n },\r\n postSchemaImportCallback: async (context) => {\r\n // Now schema v1.0.1 expects elements to be in their dedicated models.\r\n const elementIdList = context.resources.cachedData!.elementIds as Id64String[];\r\n assert.equal(imodel.getSchemaProps(\"TestSchema\").version, \"01.00.01\");\r\n assert.equal(getChannelVersion(context.iModel), \"1.0.1\");\r\n\r\n elementIdList.forEach((elementId: Id64String) => {\r\n const elementProps = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n assert.notEqual(elementProps.modelName, \"DefinitionModel\", \"Element should have been moved to new model as part of the channel upgrade\");\r\n });\r\n },\r\n },\r\n });\r\n });\r\n });\r\n\r\n describe(\"Locking behavior\", () => {\r\n let iModelId: Id64String;\r\n const channelKey = \"TestChannel\";\r\n\r\n before(async () => {\r\n HubMock.startup(\"SchemaImportCallbackLockingTest\", KnownTestLocations.outputDir);\r\n iModelId = await HubMock.createNewIModel({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelName: \"Test\", description: \"TestSubject\" });\r\n });\r\n\r\n after(async () => {\r\n HubMock.shutdown();\r\n });\r\n\r\n async function setupBriefcase(): Promise<[BriefcaseDb, Id64String]> {\r\n const briefcaseDb = await HubWrappers.downloadAndOpenBriefcase({ accessToken: \"User1\", iTwinId: HubMock.iTwinId, iModelId });\r\n briefcaseDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n\r\n await briefcaseDb.importSchemaStrings([testSchemaV100()]);\r\n\r\n briefcaseDb.channels.addAllowedChannel(channelKey);\r\n\r\n if (briefcaseDb.channels.queryChannelRoot(channelKey) === undefined) {\r\n briefcaseDb.channels.insertChannelSubject({\r\n subjectName: \"Test Channel\",\r\n channelKey,\r\n });\r\n }\r\n\r\n const model = briefcaseDb.models.getModel(IModel.dictionaryId);\r\n const elementProps: TestInitialElementProps = {\r\n classFullName: `TestSchema:TestElement`,\r\n model: model.id,\r\n code: Code.createEmpty(),\r\n stringProp: \"test\",\r\n intProp: 100,\r\n };\r\n\r\n const elementId = briefcaseDb.elements.insertElement(elementProps);\r\n briefcaseDb.saveChanges(\"Create test element\");\r\n await briefcaseDb.pushChanges({ description: \"Create test element\" });\r\n\r\n return [briefcaseDb, elementId];\r\n }\r\n\r\n it(\"channel upgrade callback fails without locks\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n // Try to modify without acquiring locks in the callback\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: async (context) => {\r\n // Intentionally NOT acquiring locks\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Should fail\");\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error about missing locks\");\r\n } catch (err: any) {\r\n assert.equal(err.iTwinErrorId.key.name, \"Lock Not Held\");\r\n briefcaseDb.abandonChanges();\r\n }\r\n\r\n // Try again with locks\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n channelUpgrade: {\r\n channelKey,\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.0.1\",\r\n callback: async (context) => {\r\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"updated with locks\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Updated with locks\");\r\n },\r\n },\r\n });\r\n } catch (err: any) {\r\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n\r\n it(\"preSchemaImportCallback fails without locks\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n // Try to modify without acquiring locks in the callback\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n // Intentionally NOT acquiring locks\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n assert.fail(\"Should have thrown error about missing locks\");\r\n } catch (err: any) {\r\n assert.equal(err.name, \"Lock Not Held\");\r\n briefcaseDb.abandonChanges();\r\n }\r\n\r\n // Try again with locks\r\n try {\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n preSchemaImportCallback: async (context) => {\r\n await context.iModel.locks.acquireLocks({ exclusive: elementId });\r\n const props = context.iModel.elements.getElementProps<TestInitialElementProps>(elementId);\r\n props.stringProp = \"should fail\";\r\n context.iModel.elements.updateElement(props);\r\n context.iModel.saveChanges(\"Should fail\");\r\n\r\n return { transformStrategy: DataTransformationStrategy.None };\r\n },\r\n },\r\n });\r\n } catch (err: any) {\r\n assert.fail(`Should not have thrown error when locks are acquired: ${err.message}`);\r\n }\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n\r\n it(\"lock acquisition is not required during postSchemaImportCallback\", async () => {\r\n const [briefcaseDb, elementId] = await setupBriefcase();\r\n\r\n let postImportCalled = false;\r\n\r\n await briefcaseDb.importSchemaStrings([testSchemaV101()], {\r\n schemaImportCallbacks: {\r\n postSchemaImportCallback: async (context) => {\r\n postImportCalled = true;\r\n\r\n // Schema lock is already held at this point\r\n const props = context.iModel.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n props.newProp = \"added in postImport with schema lock held\";\r\n context.iModel.elements.updateElement(props);\r\n },\r\n },\r\n });\r\n\r\n assert.isTrue(postImportCalled, \"Post-import callback should have been called\");\r\n const finalProps = briefcaseDb.elements.getElementProps<TestUpdatedElementProps>(elementId);\r\n assert.equal(finalProps.newProp, \"added in postImport with schema lock held\");\r\n await HubWrappers.closeAndDeleteBriefcaseDb(\"User1\", briefcaseDb);\r\n });\r\n });\r\n});\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-backend",
3
- "version": "5.6.0-dev.6",
3
+ "version": "5.6.0-dev.8",
4
4
  "description": "iTwin.js backend components",
5
5
  "main": "lib/cjs/core-backend.js",
6
6
  "module": "lib/esm/core-backend.js",
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@opentelemetry/api": "^1.0.4",
30
- "@itwin/core-bentley": "5.6.0-dev.6",
31
- "@itwin/core-geometry": "5.6.0-dev.6",
32
- "@itwin/ecschema-metadata": "5.6.0-dev.6",
33
- "@itwin/core-common": "5.6.0-dev.6"
30
+ "@itwin/core-bentley": "5.6.0-dev.8",
31
+ "@itwin/ecschema-metadata": "5.6.0-dev.8",
32
+ "@itwin/core-geometry": "5.6.0-dev.8",
33
+ "@itwin/core-common": "5.6.0-dev.8"
34
34
  },
35
35
  "peerDependenciesMeta": {
36
36
  "@opentelemetry/api": {
@@ -77,17 +77,17 @@
77
77
  "marked": "^14.1.3",
78
78
  "sql-formatter": "^15.4.6",
79
79
  "webpack": "^5.97.1",
80
- "@itwin/build-tools": "5.6.0-dev.6",
81
- "@itwin/core-geometry": "5.6.0-dev.6",
82
- "@itwin/ecschema-metadata": "5.6.0-dev.6",
83
- "@itwin/core-bentley": "5.6.0-dev.6",
84
- "@itwin/ecsql-common": "5.6.0-dev.6",
85
- "@itwin/ecschema-locaters": "5.6.0-dev.6",
86
- "@itwin/core-common": "5.6.0-dev.6",
87
- "internal-tools": "3.0.0-dev.69"
80
+ "@itwin/core-bentley": "5.6.0-dev.8",
81
+ "@itwin/build-tools": "5.6.0-dev.8",
82
+ "@itwin/ecschema-locaters": "5.6.0-dev.8",
83
+ "@itwin/ecschema-metadata": "5.6.0-dev.8",
84
+ "@itwin/core-geometry": "5.6.0-dev.8",
85
+ "@itwin/ecsql-common": "5.6.0-dev.8",
86
+ "internal-tools": "3.0.0-dev.69",
87
+ "@itwin/core-common": "5.6.0-dev.8"
88
88
  },
89
89
  "dependencies": {
90
- "@bentley/imodeljs-native": "5.6.3",
90
+ "@bentley/imodeljs-native": "5.6.5",
91
91
  "@itwin/object-storage-azure": "^3.0.4",
92
92
  "@azure/storage-blob": "^12.28.0",
93
93
  "form-data": "^4.0.4",