{"version":3,"sources":["../../src/types.ts","../../src/config.ts","../../src/utils.ts","../../src/errors.ts","../../src/CloudAPI.ts","../../src/RefreshTimer.ts","../../src/utils/vscode-loader.ts","../../src/auth/WebAuthService.ts","../../src/auth/StaticTokenAuthService.ts","../../src/CloudSettingsService.ts","../../src/StaticSettingsService.ts","../../src/TelemetryClient.ts","../../src/CloudShareService.ts","../../src/CloudService.ts","../../src/utils/SocketConnectionManager.ts","../../src/managers/ExtensionManager.ts","../../src/managers/TaskManager.ts","../../src/UnifiedBridgeService.ts"],"names":["ConnectionState","BridgeNamespace","ExtensionInstanceField","TaskStatus","z","ExtensionBridgeChannel","ExtensionBridgeEventChannelMessageType","tokenUsageSchema","toolUsageSchema","ExtensionBridgeControlChannelMessageType","TaskBridgeChannel","TaskBridgeEventChannelMessageType","TaskBridgeControlChannelMessageType","shareResponseSchema","EventEmitter","crypto","organizationSettingsSchema","ORGANIZATION_ALLOW_ALL","TelemetryEventName","rooCodeTelemetryEventSchema","io","RooCodeEventName"],"mappings":";AAiBO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,iBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAuBL,IAAM,qBAAA,GAAwB;AAC9B,IAAM,oBAAA,GAAuB;AAM7B,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AACL,EAAAA,iBAAA,WAAA,CAAA,GAAY,kBAAA;AACZ,EAAAA,iBAAA,MAAA,CAAA,GAAO,aAAA;AAFG,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AASL,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,wBAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,wBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,wBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,wBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,wBAAA,YAAA,CAAA,GAAa,YAAA;AAPH,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAUL,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACL,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,YAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,YAAA,MAAA,CAAA,GAAO,MAAA;AAHG,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAML,IAAM,uBAAA,GAA0BC,MAAE,MAAA,CAAO;AAAA,EAC9C,CAAC,YAAA,oBAAoCA,KAAA,CAAE,MAAA,EAAO;AAAA,EAC9C,CAAC,QAAA,gBAAgCA,KAAA,CAAE,MAAA,EAAO;AAAA,EAC1C,CAAC,eAAA,uBAAuCA,KAAA,CAAE,MAAA,EAAO;AAAA,EACjD,CAAC,kBAAA,0BAA0CA,KAAA,CAAE,MAAA,EAAO;AAAA,EACpD,CAAC,eAAA,uBAAuCA,KAAA,CAAE,OAAO,MAAA,EAAO;AAAA,EACxD,CAAC,QAAA,gBAAgCA,KAAA,CAAE,MAAA,EAAO;AAAA,EAC1C,CAAC,YAAA,oBAAoCA,KAAA,CAAE,WAAW,UAAU;AAC9D,CAAC;AAQM,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,wBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,wBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,wBAAA,UAAA,CAAA,GAAW,UAAA;AAJD,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAWL,IAAK,sCAAA,qBAAAC,uCAAAA,KAAL;AACL,EAAAA,wCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wCAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,wCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wCAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,wCAAA,YAAA,CAAA,GAAa,aAAA;AACb,EAAAA,wCAAA,UAAA,CAAA,GAAW,WAAA;AACX,EAAAA,wCAAA,oBAAA,CAAA,GAAqB,qBAAA;AACrB,EAAAA,wCAAA,sBAAA,CAAA,GAAuB,uBAAA;AACvB,EAAAA,wCAAA,kBAAA,CAAA,GAAmB,mBAAA;AAXT,EAAA,OAAAA,uCAAAA;AAAA,CAAA,EAAA,sCAAA,IAAA,EAAA;AAcL,IAAM,2CAA2CF,KAAA,CAAE,kBAAA;AAAA,EACxD,MAAA;AAAA,EACA;AAAA,IACEA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAAkD;AAAA,MAClE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAAkD;AAAA,MAClE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,gBAAA,qBAAoD;AAAA,MACpE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU,CAAA;AAAA,QACnC,UAAA,EAAYG,sBAAA;AAAA,QACZ,SAAA,EAAWC;AAAA,OACZ,CAAA;AAAA,MACD,SAAA,EAAWJ,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAAkD;AAAA,MAClE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAAkD;AAAA,MAClE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,gBAAA,qBAAoD;AAAA,MACpE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,aAAA,kBAAiD;AAAA,MACjE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,WAAA,gBAA+C;AAAA,MAC/D,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,MAAMA,KAAA,CAAE,OAAA;AAAA,QACN,qBAAA;AAAA,OACF;AAAA,MACA,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,SAASA,KAAA,CAAE,MAAA,CAAO,EAAE,QAAA,EAAU,yBAAyB,CAAA;AAAA,MACvD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,MAAMA,KAAA,CAAE,OAAA;AAAA,QACN,uBAAA;AAAA,OACF;AAAA,MACA,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO,EAAE,YAAYA,KAAA,CAAE,MAAA,IAAU,CAAA;AAAA,MAC5C,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,mBAAA,wBAAuD;AAAA,MACvE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,SAASA,KAAA,CAAE,MAAA,CAAO,EAAE,QAAA,EAAU,yBAAyB,CAAA;AAAA,MACvD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB;AAAA;AAEL;AAUO,IAAK,wCAAA,qBAAAK,yCAAAA,KAAL;AACL,EAAAA,0CAAA,WAAA,CAAA,GAAY,YAAA;AACZ,EAAAA,0CAAA,UAAA,CAAA,GAAW,WAAA;AAFD,EAAA,OAAAA,yCAAAA;AAAA,CAAA,EAAA,wCAAA,IAAA,EAAA;AAKL,IAAM,6CAA6CL,KAAA,CAAE,kBAAA;AAAA,EAC1D,MAAA;AAAA,EACA;AAAA,IACEA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,YAAA,iBAAkD;AAAA,MAClE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,QACf,QAAQA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,OACtC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,WAAA,gBAAiD;AAAA,MACjE,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,MACrB,OAAA,EAASA,MAAE,MAAA,CAAO,EAAE,QAAQA,KAAA,CAAE,MAAA,IAAU,CAAA;AAAA,MACxC,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB;AAAA;AAEL;AAUO,IAAK,iBAAA,qBAAAM,kBAAAA,KAAL;AACL,EAAAA,mBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,mBAAA,QAAA,CAAA,GAAS,QAAA;AAFC,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AASL,IAAK,iCAAA,qBAAAC,kCAAAA,KAAL;AACL,EAAAA,mCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,mCAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,mCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,mCAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,mCAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,mCAAA,YAAA,CAAA,GAAa,aAAA;AACb,EAAAA,mCAAA,UAAA,CAAA,GAAW,WAAA;AAPD,EAAA,OAAAA,kCAAAA;AAAA,CAAA,EAAA,iCAAA,IAAA,EAAA;AAUL,IAAM,sCAAsCP,KAAA,CAAE,kBAAA;AAAA,EACnD,MAAA;AAAA,EACA;AAAA,IACEA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAA6C;AAAA,MAC7D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,gBAAA,qBAA+C;AAAA,MAC/D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU,CAAA;AAAA,QACnC,UAAA,EAAYG,sBAAA;AAAA,QACZ,SAAA,EAAWC;AAAA,OACZ,CAAA;AAAA,MACD,SAAA,EAAWJ,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAA6C;AAAA,MAC7D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,cAAA,mBAA6C;AAAA,MAC7D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,gBAAA,qBAA+C;AAAA,MAC/D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,aAAA,kBAA4C;AAAA,MAC5D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB,CAAA;AAAA,IACDA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,WAAA,gBAA0C;AAAA,MAC1D,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,UAAA,EAAYA,KAAA,CAAE,UAAA,CAAW,UAAU;AAAA,OACpC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB;AAAA;AAEL;AAUO,IAAK,mCAAA,qBAAAQ,oCAAAA,KAAL;AACL,EAAAA,qCAAA,SAAA,CAAA,GAAU,SAAA;AADA,EAAA,OAAAA,oCAAAA;AAAA,CAAA,EAAA,mCAAA,IAAA,EAAA;AAIL,IAAM,wCAAwCR,KAAA,CAAE,kBAAA;AAAA,EACrD,MAAA;AAAA,EACA;AAAA,IACEA,MAAE,MAAA,CAAO;AAAA,MACP,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAA,eAA2C;AAAA,MAC3D,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,MACjB,OAAA,EAASA,MAAE,MAAA,CAAO;AAAA,QAChB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,QACf,QAAQA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAAS,OACtC,CAAA;AAAA,MACD,SAAA,EAAWA,MAAE,MAAA;AAAO,KACrB;AAAA;AAEL;;;AC7WO,IAAM,yBAAA,GAA4B;AAClC,IAAM,2BAAA,GAA8B;AAEpC,IAAM,eAAA,GAAkB,MAC7B,OAAA,CAAQ,GAAA,CAAI,cAAA,IAAkB;AAEzB,IAAM,gBAAA,GAAmB,MAC9B,OAAA,CAAQ,GAAA,CAAI,gBAAA,IAAoB;;;ACL3B,SAAS,aAAa,OAAA,EAAoC;AAC/D,EAAA,OAAO,CAAA,SAAA,EAAY,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,WAAW,SAAS,CAAA,CAAA;AAC1E;;;ACJO,IAAM,aAAA,GAAN,MAAM,cAAA,SAAsB,KAAA,CAAM;AAAA,EACvC,WAAA,CACE,OAAA,EACO,UAAA,EACA,YAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHN,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,cAAA,CAAc,SAAS,CAAA;AAAA,EACrD;AACF,CAAA;AAEO,IAAM,iBAAA,GAAN,MAAM,kBAAA,SAA0B,aAAA,CAAc;AAAA,EACnD,YAAY,MAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,MAAA,GAAS,CAAA,MAAA,EAAS,MAAM,CAAA,WAAA,CAAA,GAAgB,kBAAkB,GAAG,CAAA;AACnE,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,kBAAA,CAAkB,SAAS,CAAA;AAAA,EACzD;AACF,CAAA;AAEO,IAAM,mBAAA,GAAN,MAAM,oBAAA,SAA4B,aAAA,CAAc;AAAA,EACrD,WAAA,CAAY,UAAU,yBAAA,EAA2B;AAC/C,IAAA,KAAA,CAAM,SAAS,GAAG,CAAA;AAClB,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,oBAAA,CAAoB,SAAS,CAAA;AAAA,EAC3D;AACF,CAAA;AAEO,IAAM,YAAA,GAAN,MAAM,aAAA,SAAqB,aAAA,CAAc;AAAA,EAC9C,WAAA,CAAY,UAAU,wBAAA,EAA0B;AAC9C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,aAAA,CAAa,SAAS,CAAA;AAAA,EACpD;AACF,CAAA;AAEO,IAAM,uBAAA,GAAN,MAAM,wBAAA,SAAgC,KAAA,CAAM;AAAA,EACjD,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,8BAA8B,CAAA;AACpC,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,wBAAA,CAAwB,SAAS,CAAA;AAAA,EAC/D;AACF,CAAA;;;AClBO,IAAM,WAAN,MAAe;AAAA,EACZ,WAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EAER,WAAA,CAAY,aAA0B,GAAA,EAAoC;AACxE,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAC1B,IAAA,IAAA,CAAK,UAAU,gBAAA,EAAiB;AAAA,EAClC;AAAA,EAEA,MAAc,OAAA,CACZ,QAAA,EACA,OAAA,GAEI,EAAC,EACO;AACZ,IAAA,MAAM;AAAA,MACJ,OAAA,GAAU,GAAA;AAAA,MACV,aAAA;AAAA,MACA,UAAU,EAAC;AAAA,MACX,GAAG;AAAA,KACL,GAAI,OAAA;AAEJ,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB;AAEtD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,mBAAA,EAAoB;AAAA,IAChC;AAEA,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,QAAQ,CAAA,CAAA;AAEtC,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,cAAA,EAAgB,kBAAA;AAAA,MAChB,aAAA,EAAe,UAAU,YAAY,CAAA,CAAA;AAAA,MACrC,cAAc,YAAA,EAAa;AAAA,MAC3B,GAAG;AAAA,KACL;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,GAAG,YAAA;AAAA,QACH,OAAA,EAAS,cAAA;AAAA,QACT,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,OAAO;AAAA,OACpC,CAAA;AAED,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,MACnD;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,OAAO,cAAc,IAAI,CAAA;AAAA,MAC3B;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,SAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AACjE,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAE,CAAA;AAAA,MAClE;AAEA,MAAA,IAAI,iBAAiB,aAAA,EAAe;AAClC,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,cAAc,QAAQ,CAAA,UAAA,CAAA;AAAA,UACtB,MAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,CAAA,+BAAA,EAAkC,QAAQ,CAAA,EAAA,EAAK,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OACvG;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,mBAAA,CACZ,QAAA,EACA,QAAA,EACgB;AAChB,IAAA,IAAI,YAAA;AAEJ,IAAA,IAAI;AACF,MAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,IACrC,CAAA,CAAA,MAAQ;AACN,MAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,IACrC;AAEA,IAAA,QAAQ,SAAS,MAAA;AAAQ,MACvB,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,mBAAA,EAAoB;AAAA,MAChC,KAAK,GAAA;AACH,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC/B,UAAA,MAAM,IAAI,iBAAA,EAAkB;AAAA,QAC9B;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,uBAAuB,QAAQ,CAAA,CAAA;AAAA,UAC/B,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACE,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA,CAAA;AAAA,UAC/C,QAAA,CAAS,MAAA;AAAA,UACT;AAAA,SACF;AAAA;AACJ,EACF;AAAA,EAEA,MAAM,SAAA,CACJ,MAAA,EACA,UAAA,GAA8B,cAAA,EACN;AACxB,IAAA,IAAA,CAAK,GAAA;AAAA,MACH,CAAA,wBAAA,EAA2B,MAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA;AAAA,KAClE;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,sBAAA,EAAwB;AAAA,MAC1D,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,MAC3C,aAAA,EAAe,CAAC,IAAA,KAASS,yBAAA,CAAoB,MAAM,IAAI;AAAA,KACxD,CAAA;AAED,IAAA,IAAA,CAAK,GAAA,CAAI,8BAA8B,QAAQ,CAAA;AAC/C,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,GAAe;AACnB,IAAA,OAAO,IAAA,CAAK,QAAQ,8BAAA,EAAgC;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,aAAA,EAAe,CAAC,IAAA,KACdT,KAAAA,CACG,MAAA,CAAO;AAAA,QACN,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,QACjB,eAAA,EAAiBA,MAAE,MAAA,EAAO;AAAA,QAC1B,KAAA,EAAOA,MAAE,MAAA;AAAO,OACjB,CAAA,CACA,KAAA,CAAM,IAAI;AAAA,KAChB,CAAA;AAAA,EACH;AACF;;;AC/HO,IAAM,eAAN,MAAmB;AAAA,EAChB,QAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,YAAY,OAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAQ,eAAA,IAAmB,GAAA;AAClD,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,GAAA;AACpD,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,YAAA,IAAgB,GAAA;AAC5C,IAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,gBAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAc;AACnB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAGjB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAAa;AAClB,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AACzB,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,gBAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,oBAAoB,aAAA,EAA8B;AACxD,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,EAAe;AAEjB,MAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,gBAAA;AAC7B,MAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AAEpB,MAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AAAA,QACb,MAAM,KAAK,eAAA,EAAgB;AAAA,QAC3B,IAAA,CAAK;AAAA,OACP;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,YAAA,EAAA;AAIL,MAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,GAAA;AAAA,QAC3B,KAAK,gBAAA,GAAmB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,eAAe,CAAC,CAAA;AAAA,QACzD,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AAAA,QACb,MAAM,KAAK,eAAA,EAAgB;AAAA,QAC3B,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,GAAiC;AAC7C,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,EAAS;AAEnC,MAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,IACjC,SAAS,MAAA,EAAQ;AAEf,MAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAAA,IAChC;AAAA,EACF;AACF,CAAA;;;AC1JA,IAAI,YAAA;AAMJ,eAAsB,SAAA,GAEpB;AACA,EAAA,IAAI;AAEF,IAAA,OAAQ,YAAA,KAAiB,MAAM,OAAO,QAAQ,CAAA;AAAA,EAChD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACOA,IAAM,cAAA,GAAiB,kBAAA;AAMvB,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EACrC,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,8BAA8B,CAAA;AAAA,EAC7D,WAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,GAAG,4BAA4B,CAAA;AAAA,EACzD,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACxC,CAAC,CAAA;AAQD,IAAM,yBAAA,GAA4BA,MAAE,MAAA,CAAO;AAAA,EACzC,QAAA,EAAUA,MAAE,MAAA,CAAO;AAAA,IACjB,kBAAA,EAAoBA,MAAE,MAAA;AAAO,GAC9B;AACH,CAAC,CAAA;AAED,IAAM,qCAAA,GAAwCA,MAAE,MAAA,CAAO;AAAA,EACrD,GAAA,EAAKA,MAAE,MAAA;AACT,CAAC,CAAA;AAED,IAAM,qBAAA,GAAwBA,MAAE,MAAA,CAAO;AAAA,EACrC,QAAA,EAAUA,MAAE,MAAA,CAAO;AAAA,IACjB,EAAA,EAAIA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IACxB,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAA,EAAQ;AAAA,IAC/B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAA,EAAQ;AAAA,IAC9B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC/B,wBAAA,EAA0BA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC9C,iBAAiBA,KAAAA,CACd,KAAA;AAAA,MACCA,MAAE,MAAA,CAAO;AAAA,QACP,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,QACb,aAAA,EAAeA,MAAE,MAAA;AAAO,OACzB;AAAA,MAEF,QAAA,EAAS;AAAA,IACZ,iBAAiBA,KAAAA,CAAE,MAAA,CAAOA,MAAE,GAAA,EAAK,EAAE,QAAA;AAAS,GAC7C;AACH,CAAC,CAAA;AAED,IAAM,kCAAA,GAAqCA,MAAE,MAAA,CAAO;AAAA,EAClD,UAAUA,KAAAA,CAAE,KAAA;AAAA,IACVA,MAAE,MAAA,CAAO;AAAA,MACP,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,MACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,MACf,aAAaA,KAAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MAC1C,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAChC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAChC,YAAA,EAAcA,MAAE,MAAA,CAAO;AAAA,QACrB,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,QACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,QACf,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QAC1B,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QAC/B,SAAA,EAAWA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,QAChC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,QAChC,UAAA,EAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,OACjC;AAAA,KACF;AAAA;AAEL,CAAC,CAAA;AAEM,IAAM,cAAA,GAAN,cACGU,6BAAA,CAEV;AAAA,EACU,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAmB,cAAA;AAAA,EACnB,GAAA;AAAA,EACS,kBAAA;AAAA,EAET,WAAA,GAAsC,IAAA;AAAA,EACtC,YAAA,GAA8B,IAAA;AAAA,EAC9B,QAAA,GAAiC,IAAA;AAAA,EACjC,qBAAA,GAAiC,KAAA;AAAA,EAEzC,WAAA,CAAY,SAA2B,GAAA,EAAoC;AACzE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAG1B,IAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,IAAA,IAAI,iBAAiB,yBAAA,EAA2B;AAC9C,MAAA,IAAA,CAAK,kBAAA,GAAqB,0BAA0B,YAAY,CAAA,CAAA;AAAA,IAClE,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,kBAAA,GAAqB,wBAAA;AAAA,IAC5B;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,YAAA,CAAa;AAAA,MAC5B,UAAU,YAAY;AACpB,QAAA,MAAM,KAAK,cAAA,EAAe;AAC1B,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,eAAA,EAAiB,GAAA;AAAA,MACjB,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEQ,YAAY,QAAA,EAA2B;AAC7C,IAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AACb,IAAA,IAAA,CAAK,KAAK,oBAAA,EAAsB,EAAE,KAAA,EAAO,QAAA,EAAU,eAAe,CAAA;AAAA,EACpE;AAAA,EAEA,MAAc,uBAAA,GAAyC;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,EAAgB;AAE/C,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IACE,IAAA,CAAK,WAAA,KAAgB,IAAA,IACrB,IAAA,CAAK,WAAA,CAAY,WAAA,KAAgB,WAAA,CAAY,WAAA,IAC7C,IAAA,CAAK,WAAA,CAAY,SAAA,KAAc,WAAA,CAAY,SAAA,EAC3C;AACA,UAAA,IAAA,CAAK,8BAA8B,WAAW,CAAA;AAAA,QAChD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,IAAA,CAAK,UAAU,YAAA,EAAc;AAC/B,UAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,6CAA6C,KAAK,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAA,CAAK,MAAM,IAAA,EAAK;AAEhB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,IAAA,IAAA,CAAK,YAAY,YAAY,CAAA;AAE7B,IAAA,IAAA,CAAK,IAAI,yCAAyC,CAAA;AAAA,EACpD;AAAA,EAEQ,8BAA8B,WAAA,EAAoC;AACxE,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAEnB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA;AAE7B,IAAA,IAAA,CAAK,YAAY,oBAAoB,CAAA;AAErC,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAEjB,IAAA,IAAA,CAAK,IAAI,iDAAiD,CAAA;AAAA,EAC5D;AAAA,EAEQ,2BAAA,GAAoC;AAC1C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,IAAA,IAAA,CAAK,YAAY,kBAAkB,CAAA;AAEnC,IAAA,IAAA,CAAK,IAAI,+CAA+C,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,UAAA,GAA4B;AACvC,IAAA,IAAI,IAAA,CAAK,UAAU,cAAA,EAAgB;AACjC,MAAA,IAAA,CAAK,IAAI,sDAAsD,CAAA;AAC/D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAK,uBAAA,EAAwB;AAEnC,IAAA,IAAA,CAAK,QAAQ,aAAA,CAAc,IAAA;AAAA,MACzB,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,WAAA,CAAY,CAAC,CAAA,KAAM;AACtC,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,kBAAA,EAAoB;AACrC,UAAA,IAAA,CAAK,uBAAA,EAAwB;AAAA,QAC/B;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,WAAA,EAA6C;AAC1E,IAAA,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AAAA,MACzB,IAAA,CAAK,kBAAA;AAAA,MACL,IAAA,CAAK,UAAU,WAAW;AAAA,KAC5B;AAAA,EACF;AAAA,EAEA,MAAc,eAAA,GAAmD;AAC/D,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA;AAAA,MACjD,IAAA,CAAK;AAAA,KACP;AACA,IAAA,IAAI,CAAC,iBAAiB,OAAO,IAAA;AAE7B,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AAC7C,MAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,KAAA,CAAM,UAAU,CAAA;AAG1D,MAAA,IACE,WAAA,CAAY,cAAA,KAAmB,KAAA,CAAA,IAC/B,IAAA,CAAK,UAAU,cAAA,EACf;AACA,QAAA,WAAA,CAAY,cAAA,GAAiB,KAAK,QAAA,CAAS,cAAA;AAC3C,QAAA,MAAM,IAAA,CAAK,iBAAiB,WAAW,CAAA;AACvC,QAAA,IAAA,CAAK,IAAI,iDAAiD,CAAA;AAAA,MAC5D;AAEA,MAAA,OAAO,WAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiBV,MAAE,QAAA,EAAU;AAC/B,QAAA,IAAA,CAAK,GAAA,CAAI,oCAAA,EAAsC,KAAA,CAAM,MAAM,CAAA;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,GAAA,CAAI,8CAA8C,KAAK,CAAA;AAAA,MAC9D;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,gBAAA,GAAkC;AAC9C,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,kBAAkB,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,KAAA,GAAuB;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,MAC7C;AAGA,MAAA,MAAM,QAAQW,uBAAA,CAAO,WAAA,CAAY,EAAE,CAAA,CAAE,SAAS,KAAK,CAAA;AACnD,MAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAC3D,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,WAAA;AAC5C,MAAA,MAAM,SAAA,GAAY,aAAa,SAAA,IAAa,kBAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,aAAa,IAAA,IAAQ,WAAA;AAClC,MAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,QACjC,KAAA;AAAA,QACA,aAAA,EAAe,GAAG,MAAA,CAAO,GAAA,CAAI,SAAS,CAAA,GAAA,EAAM,SAAS,IAAI,IAAI,CAAA;AAAA,OAC9D,CAAA;AACD,MAAA,MAAM,MAAM,CAAA,EAAG,gBAAA,EAAkB,CAAA,mBAAA,EAAsB,MAAA,CAAO,UAAU,CAAA,CAAA;AACxE,MAAA,MAAM,OAAO,GAAA,CAAI,YAAA,CAAa,OAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,IACrD,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,CAAA,6CAAA,EAAgD,KAAK,CAAA,CAAE,CAAA;AAChE,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,qDAAqD,KAAK,CAAA;AAAA,OAC5D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,cAAA,CACX,IAAA,EACA,KAAA,EACA,cAAA,EACe;AACf,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,sBAAA;AAAA,UACZ;AAAA,SACF;AAAA,MACF;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,IAAI,cAAc,CAAA;AAE/D,MAAA,IAAI,UAAU,WAAA,EAAa;AACzB,QAAA,IAAA,CAAK,IAAI,mCAAmC,CAAA;AAC5C,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAG/C,MAAA,WAAA,CAAY,iBAAiB,cAAA,IAAkB,IAAA;AAE/C,MAAA,MAAM,IAAA,CAAK,iBAAiB,WAAW,CAAA;AAEvC,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,sBAAA;AAAA,UACZ;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,IAAI,uDAAuD,CAAA;AAAA,IAClE,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,CAAA,+CAAA,EAAkD,KAAK,CAAA,CAAE,CAAA;AAClE,MAAA,IAAA,CAAK,YAAY,YAAY,CAAA;AAC7B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0CAAA,EAA6C,KAAK,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,MAAA,GAAwB;AACnC,IAAA,MAAM,iBAAiB,IAAA,CAAK,WAAA;AAE5B,IAAA,IAAI;AAEF,MAAA,MAAM,KAAK,gBAAA,EAAiB;AAC5B,MAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,MAAA,CAAO,gBAAgB,KAAA,CAAS,CAAA;AAE/D,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,CAAK,YAAY,cAAc,CAAA;AAAA,QACvC,SAAS,KAAA,EAAO;AACd,UAAA,IAAA,CAAK,GAAA,CAAI,qCAAqC,KAAK,CAAA;AAAA,QACrD;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,uBAAuB,gCAAgC,CAAA;AAAA,MACvE;AAEA,MAAA,IAAA,CAAK,IAAI,uCAAuC,CAAA;AAAA,IAClD,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,CAAA,8CAAA,EAAiD,KAAK,CAAA,CAAE,CAAA;AACjE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EAEO,QAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEO,eAAA,GAAsC;AAC3C,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,gBAAA,IAAoB,IAAA,CAAK,YAAA,EAAc;AACxD,MAAA,OAAO,IAAA,CAAK,YAAA;AAAA,IACd;AAEA,IAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAA,GAA2B;AAChC,IAAA,OACE,KAAK,KAAA,KAAU,gBAAA,IACf,KAAK,KAAA,KAAU,oBAAA,IACf,KAAK,KAAA,KAAU,kBAAA;AAAA,EAEnB;AAAA,EAEO,gBAAA,GAA4B;AACjC,IAAA,OAAO,KAAK,KAAA,KAAU,gBAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,6BAAA,GAAyC;AAC9C,IAAA,OACE,IAAA,CAAK,KAAA,KAAU,gBAAA,IAAoB,IAAA,CAAK,KAAA,KAAU,oBAAA;AAAA,EAEtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,cAAA,GAAgC;AAC5C,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,IAAI,oDAAoD,CAAA;AAC7D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA;AAC3B,MAAA,IAAA,CAAK,YAAA,GAAe,MAAM,IAAA,CAAK,uBAAA,EAAwB;AAEvD,MAAA,IAAI,kBAAkB,gBAAA,EAAkB;AACtC,QAAA,IAAA,CAAK,YAAY,gBAAgB,CAAA;AACjC,QAAA,IAAA,CAAK,IAAI,6CAA6C,CAAA;AACtD,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAA,GAAQ,gBAAA;AAAA,MACf;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,uBAAA,EAAyB;AAC5C,QAAA,IAAA,CAAK,IAAI,2DAA2D,CAAA;AACpE,QAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,MACxB,CAAA,MAAA,IACE,IAAA,CAAK,qBAAA,IACL,IAAA,CAAK,UAAU,oBAAA,EACf;AACA,QAAA,IAAA,CAAK,qBAAA,GAAwB,KAAA;AAC7B,QAAA,IAAA,CAAK,2BAAA,EAA4B;AAAA,MACnC;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,oCAAoC,KAAK,CAAA;AAClD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAA+B;AAC3C,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,EAAQ;AACnC,IAAA,IAAA,CAAK,KAAK,WAAA,EAAa,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAA,GAAoC;AACzC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,uBAAA,GAAyC;AAC9C,IAAA,OAAO,IAAA,CAAK,aAAa,cAAA,IAAkB,IAAA;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,MAAA,EAA0C;AAClE,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,EAAgB;AACrC,IAAA,QAAA,CAAS,MAAA,CAAO,YAAY,QAAQ,CAAA;AACpC,IAAA,QAAA,CAAS,MAAA,CAAO,UAAU,MAAM,CAAA;AAEhC,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,eAAA,EAAiB,CAAA,mBAAA,CAAA,EAAuB;AAAA,MACtE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,mCAAA;AAAA,QAChB,YAAA,EAAc,KAAK,SAAA;AAAU,OAC/B;AAAA,MACA,IAAA,EAAM,SAAS,QAAA,EAAS;AAAA,MACxB,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM;AAAA,MACJ,QAAA,EAAU,EAAE,kBAAA,EAAoB,SAAA;AAAU,QACxC,yBAAA,CAA0B,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAGzD,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA;AAExD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,qBAAA,CAAsB,KAAA,CAAM,EAAE,WAAA,EAAa,WAAW,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAc,uBAAA,GAA2C;AACvD,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,EAAgB;AACrC,IAAA,QAAA,CAAS,MAAA,CAAO,cAAc,GAAG,CAAA;AAMjC,IAAA,MAAM,cAAA,GAAiB,KAAK,uBAAA,EAAwB;AACpD,IAAA,IAAI,IAAA,CAAK,WAAA,EAAa,cAAA,KAAmB,MAAA,EAAW;AAElD,MAAA,QAAA,CAAS,MAAA,CAAO,iBAAA,EAAmB,cAAA,IAAkB,EAAE,CAAA;AAAA,IACzD;AAGA,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,GAAG,eAAA,EAAiB,CAAA,oBAAA,EAAuB,IAAA,CAAK,YAAa,SAAS,CAAA,OAAA,CAAA;AAAA,MACtE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,mCAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,WAAA,CAAa,WAAW,CAAA,CAAA;AAAA,UACtD,YAAA,EAAc,KAAK,SAAA;AAAU,SAC/B;AAAA,QACA,IAAA,EAAM,SAAS,QAAA,EAAS;AAAA,QACxB,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA;AACnC,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,EAAK;AACtD,MAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA,IACpC,CAAA,MAAA,IAAW,CAAC,QAAA,CAAS,EAAA,EAAI;AACvB,MAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,OAAO,qCAAA,CAAsC,KAAA;AAAA,MACjD,MAAM,SAAS,IAAA;AAAK,KACtB;AAEA,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACd;AAAA,EAEA,MAAc,OAAA,GAAkC;AAC9C,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,CAAA,EAAG,eAAA,EAAiB,CAAA,MAAA,CAAA,EAAU;AAAA,MACzD,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,WAAA,CAAa,WAAW,CAAA,CAAA;AAAA,QACtD,YAAA,EAAc,KAAK,SAAA;AAAU,OAC/B;AAAA,MACA,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,qBAAA,CAAsB,MAAM,OAAO,CAAA;AAElE,IAAA,MAAM,QAAA,GAA0B;AAAA,MAC9B,IAAI,QAAA,CAAS,EAAA;AAAA,MACb,SAAS,QAAA,CAAS;AAAA,KACpB;AAEA,IAAA,MAAM,QAAQ,CAAC,QAAA,CAAS,UAAA,EAAY,QAAA,CAAS,SAAS,CAAA,CAAE,MAAA;AAAA,MACtD,CAAC,IAAA,KAAS,CAAC,CAAC;AAAA,KACd;AACA,IAAA,QAAA,CAAS,OAAO,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AACrD,IAAA,MAAM,wBAAwB,QAAA,CAAS,wBAAA;AACvC,IAAA,MAAM,iBAAiB,QAAA,CAAS,eAAA;AAEhC,IAAA,IAAI,yBAAyB,cAAA,EAAgB;AAC3C,MAAA,QAAA,CAAS,QAAQ,cAAA,CAAe,IAAA;AAAA,QAC9B,CAAC,KAAA,KAA0B,qBAAA,KAA0B,KAAA,CAAM;AAAA,OAC7D,EAAG,aAAA;AAAA,IACL;AAGA,IAAA,IAAI,sBAAA,GAAyB,KAAA;AAC7B,IAAA,IAAI,QAAA,CAAS,eAAA,EAAiB,wBAAA,KAA6B,IAAA,EAAM;AAC/D,MAAA,sBAAA,GAAyB,IAAA;AAAA,IAC3B;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,KAAK,uBAAA,EAAwB;AAEjD,MAAA,IAAI,IAAA,CAAK,WAAA,EAAa,cAAA,KAAmB,KAAA,CAAA,EAAW;AAElD,QAAA,IAAI,gBAAgB,IAAA,EAAM;AAExB,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,+BAAA,EAAgC;AAClE,UAAA,MAAM,iBAAiB,IAAA,CAAK,0BAAA;AAAA,YAC1B,cAAA;AAAA,YACA;AAAA,WACF;AAEA,UAAA,IAAI,cAAA,EAAgB;AAClB,YAAA,IAAA,CAAK,uBAAA,CAAwB,UAAU,cAAc,CAAA;AAIrD,YAAA,IACE,MAAM,IAAA,CAAK,uCAAA,CAAwC,WAAW,CAAA,EAC9D;AACA,cAAA,sBAAA,GAAyB,IAAA;AAAA,YAC3B;AAEA,YAAA,IAAA,CAAK,IAAI,sCAAA,EAAwC;AAAA,cAC/C,EAAA,EAAI,eAAe,YAAA,CAAa,EAAA;AAAA,cAChC,IAAA,EAAM,eAAe,YAAA,CAAa,IAAA;AAAA,cAClC,MAAM,cAAA,CAAe;AAAA,aACtB,CAAA;AAAA,UACH,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,GAAA;AAAA,cACH,wDAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,GAAA;AAAA,YACH;AAAA,WACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,+BAAA,EAAgC;AAClE,QAAA,MAAM,oBAAA,GACJ,IAAA,CAAK,iCAAA,CAAkC,cAAc,CAAA;AAEvD,QAAA,IAAI,oBAAA,EAAsB;AACxB,UAAA,IAAA,CAAK,uBAAA,CAAwB,UAAU,oBAAoB,CAAA;AAG3D,UAAA,IACE,MAAM,IAAA,CAAK,uCAAA;AAAA,YACT,qBAAqB,YAAA,CAAa;AAAA,WACpC,EACA;AACA,YAAA,sBAAA,GAAyB,IAAA;AAAA,UAC3B;AAEA,UAAA,IAAA,CAAK,GAAA;AAAA,YACH,2DAAA;AAAA,YACA;AAAA,cACE,EAAA,EAAI,qBAAqB,YAAA,CAAa,EAAA;AAAA,cACtC,IAAA,EAAM,qBAAqB,YAAA,CAAa,IAAA;AAAA,cACxC,MAAM,oBAAA,CAAqB;AAAA;AAC7B,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,GAAA;AAAA,YACH;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,6CAA6C,KAAK,CAAA;AAAA,IAE7D;AAGA,IAAA,QAAA,CAAS,sBAAA,GAAyB,sBAAA;AAElC,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,0BAAA,CACN,aACA,cAAA,EACyC;AACzC,IAAA,OAAO,WAAA,EAAa,IAAA;AAAA,MAClB,CAAC,UAAA,KAAe,UAAA,CAAW,YAAA,CAAa,EAAA,KAAO;AAAA,KACjD;AAAA,EACF;AAAA,EAEQ,kCACN,WAAA,EACyC;AACzC,IAAA,OAAO,eAAe,WAAA,CAAY,MAAA,GAAS,CAAA,GAAI,WAAA,CAAY,CAAC,CAAA,GAAI,MAAA;AAAA,EAClE;AAAA,EAEQ,uBAAA,CACN,UACA,UAAA,EACM;AACN,IAAA,QAAA,CAAS,cAAA,GAAiB,WAAW,YAAA,CAAa,EAAA;AAClD,IAAA,QAAA,CAAS,gBAAA,GAAmB,WAAW,YAAA,CAAa,IAAA;AACpD,IAAA,QAAA,CAAS,mBAAmB,UAAA,CAAW,IAAA;AACvC,IAAA,QAAA,CAAS,oBAAA,GAAuB,WAAW,YAAA,CAAa,SAAA;AAAA,EAC1D;AAAA,EAEA,MAAc,+BAAA,GAEZ;AACA,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,CAAA,EAAG,iBAAiB,CAAA,+BAAA,CAAA;AAAA,MACpB;AAAA,QACE,OAAA,EAAS;AAAA,UACP,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,WAAA,CAAa,WAAW,CAAA,CAAA;AAAA,UACtD,YAAA,EAAc,KAAK,SAAA;AAAU,SAC/B;AAAA,QACA,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA;AACnC,KACF;AAEA,IAAA,OAAO,mCAAmC,KAAA,CAAM,MAAM,QAAA,CAAS,IAAA,EAAM,CAAA,CAClE,QAAA;AAAA,EACL;AAAA,EAEA,MAAc,wBACZ,cAAA,EAC+D;AAC/D,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,CAAA,EAAG,eAAA,EAAiB,CAAA,kBAAA,EAAqB,cAAc,CAAA,CAAA;AAAA,QACvD;AAAA,UACE,OAAA,EAAS;AAAA,YACP,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,WAAA,CAAa,WAAW,CAAA,CAAA;AAAA,YACtD,YAAA,EAAc,KAAK,SAAA;AAAU,WAC/B;AAAA,UACA,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA;AACnC,OACF;AAEA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,IAAA,CAAK,GAAA;AAAA,UACH,CAAA,8CAAA,EAAiD,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA;AAAA,SACzF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO,KAAK,QAAA,IAAY,IAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,gDAAgD,KAAK,CAAA;AAC9D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,wCACZ,cAAA,EACkB;AAClB,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,uBAAA,CAAwB,cAAc,CAAA;AACrE,IAAA,OAAO,WAAA,EAAa,iBAAiB,wBAAA,KAA6B,IAAA;AAAA,EACpE;AAAA,EAEA,MAAc,YAAY,WAAA,EAA6C;AACrE,IAAA,MAAM,QAAA,GAAW,IAAI,eAAA,EAAgB;AACrC,IAAA,QAAA,CAAS,MAAA,CAAO,cAAc,GAAG,CAAA;AAEjC,IAAA,MAAM,WAAW,MAAM,KAAA;AAAA,MACrB,CAAA,EAAG,eAAA,EAAiB,CAAA,oBAAA,EAAuB,YAAY,SAAS,CAAA,OAAA,CAAA;AAAA,MAChE;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,mCAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,WAAA,CAAY,WAAW,CAAA,CAAA;AAAA,UAChD,YAAA,EAAc,KAAK,SAAA;AAAU,SAC/B;AAAA,QACA,IAAA,EAAM,SAAS,QAAA,EAAS;AAAA,QACxB,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAK;AAAA;AACnC,KACF;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EAEQ,SAAA,GAAoB;AAC1B,IAAA,OAAO,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,EAClC;AACF,CAAA;ACvxBO,IAAM,sBAAA,GAAN,cACGD,6BAAAA,CAEV;AAAA,EACU,KAAA,GAAmB,gBAAA;AAAA,EACnB,KAAA;AAAA,EACA,GAAA;AAAA,EAER,WAAA,CACE,OAAA,EACA,KAAA,EACA,GAAA,EACA;AACA,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAC1B,IAAA,IAAA,CAAK,IAAI,+CAA+C,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAa,UAAA,GAA4B;AACvC,IAAA,MAAM,aAAA,GAA2B,cAAA;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,gBAAA;AACb,IAAA,IAAA,CAAK,KAAK,oBAAA,EAAsB,EAAE,OAAO,IAAA,CAAK,KAAA,EAAO,eAAe,CAAA;AACpE,IAAA,IAAA,CAAK,GAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAa,KAAA,GAAuB;AAClC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAa,MAAA,GAAwB;AACnC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAa,cAAA,CACX,KAAA,EACA,MAAA,EACA,eAAA,EACe;AACf,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAAA,EAEO,QAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEO,eAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEO,eAAA,GAA2B;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,gBAAA,GAA4B;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,6BAAA,GAAyC;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,WAAA,GAAoC;AACzC,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEO,uBAAA,GAAyC;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AC1EA,IAAM,+BAAA,GAAkC,uBAAA;AAWjC,IAAM,oBAAA,GAAN,cACGA,6BAAAA,CAEV;AAAA,EACU,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA,GAA6C,MAAA;AAAA,EAC7C,KAAA;AAAA,EACA,GAAA;AAAA,EAER,WAAA,CACE,OAAA,EACA,WAAA,EACA,GAAA,EACA;AACA,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAE1B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,YAAA,CAAa;AAAA,MAC5B,UAAU,YAAY;AACpB,QAAA,OAAO,MAAM,KAAK,aAAA,EAAc;AAAA,MAClC,CAAA;AAAA,MACA,eAAA,EAAiB,GAAA;AAAA,MACjB,gBAAA,EAAkB,GAAA;AAAA,MAClB,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEO,UAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAGxB,IAAA,IAAI,KAAK,WAAA,CAAY,QAAA,EAAS,IAAK,YAAA,IAAgB,KAAK,QAAA,EAAU;AAChE,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACtB;AAEA,IAAA,IAAA,CAAK,WAAA,CAAY,EAAA;AAAA,MACf,oBAAA;AAAA,MACA,CAAC,IAAA,KAAyD;AACxD,QAAA,IAAI,IAAA,CAAK,UAAU,gBAAA,EAAkB;AACnC,UAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,QACnB,CAAA,MAAA,IAAW,IAAA,CAAK,aAAA,KAAkB,gBAAA,EAAkB;AAClD,UAAA,IAAA,CAAK,MAAM,IAAA,EAAK;AAEhB,UAAA,IAAI,IAAA,CAAK,UAAU,YAAA,EAAc;AAC/B,YAAA,IAAA,CAAK,cAAA,EAAe;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,gBAAA,EAAiB,EAAG;AACvC,MAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAAkC;AAC9C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB;AAE/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,CAAA,EAAG,kBAAkB,CAAA,0BAAA,CAAA;AAAA,QACrB;AAAA,UACE,OAAA,EAAS;AAAA,YACP,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA;AAChC;AACF,OACF;AAEA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,IAAA,CAAK,GAAA;AAAA,UACH,yDAAA;AAAA,UACA,QAAA,CAAS,MAAA;AAAA,UACT,QAAA,CAAS;AAAA,SACX;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,MAAA,GAASE,gCAAA,CAA2B,SAAA,CAAU,IAAI,CAAA;AAExD,MAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,QAAA,IAAA,CAAK,GAAA;AAAA,UACH,wDAAA;AAAA,UACA,MAAA,CAAO;AAAA,SACT;AACA,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,MAAM,cAAc,MAAA,CAAO,IAAA;AAE3B,MAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,KAAK,QAAA,CAAS,OAAA,KAAY,YAAY,OAAA,EAAS;AACnE,QAAA,MAAM,mBAAmB,IAAA,CAAK,QAAA;AAC9B,QAAA,IAAA,CAAK,QAAA,GAAW,WAAA;AAChB,QAAA,MAAM,KAAK,aAAA,EAAc;AAEzB,QAAA,IAAA,CAAK,KAAK,kBAAA,EAAoB;AAAA,UAC5B,UAAU,IAAA,CAAK,QAAA;AAAA,UACf;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,0DAA0D,KAAK,CAAA;AACxE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAA+B;AAC3C,IAAA,MAAM,IAAA,CAAK,QAAQ,WAAA,CAAY,MAAA;AAAA,MAC7B,+BAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEQ,kBAAA,GAA2B;AACjC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,GAAA;AAAA,MACvC;AAAA,KACF;AAAA,EACF;AAAA,EAEO,YAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,UAAU,SAAA,IAAaC,4BAAA;AAAA,EACrC;AAAA,EAEO,WAAA,GAAgD;AACrD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,MAAc,cAAA,GAAgC;AAC5C,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAChB,IAAA,MAAM,KAAK,aAAA,EAAc;AAAA,EAC3B;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,IAAA,IAAA,CAAK,MAAM,IAAA,EAAK;AAAA,EAClB;AACF,CAAA;ACnKO,IAAM,wBAAN,MAAuD;AAAA,EACpD,QAAA;AAAA,EACA,GAAA;AAAA,EAER,WAAA,CAAY,UAAkB,GAAA,EAAoC;AAChE,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,wBAAA,CAAyB,QAAQ,CAAA;AAAA,EACxD;AAAA,EAEQ,yBAAyB,QAAA,EAAwC;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,MAAA,CAAO,IAAA,CAAK,UAAU,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AACrE,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAC1C,MAAA,OAAOD,gCAAAA,CAA2B,MAAM,UAAU,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA;AAAA,QACH,4DAA4D,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAClH;AAAA,OACF;AAEA,MAAA,MAAM,IAAI,KAAA,CAAM,iCAAA,EAAmC,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,IACrE;AAAA,EACF;AAAA,EAEO,YAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,UAAU,SAAA,IAAaC,4BAAAA;AAAA,EACrC;AAAA,EAEO,WAAA,GAAgD;AACrD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEO,OAAA,GAAgB;AAAA,EAEvB;AACF,CAAA;AC9BA,IAAe,sBAAf,MAA8D;AAAA,EAI5D,WAAA,CACkB,YAAA,EACG,KAAA,GAAQ,KAAA,EAC3B;AAFgB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACG,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAClB;AAAA,EANO,WAAA,GAA2D,IAAA;AAAA,EAC3D,gBAAA,GAA4B,KAAA;AAAA,EAO5B,kBAAkB,SAAA,EAAwC;AAClE,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,KAAS,SAAA,GAC9B,KAAK,YAAA,CAAa,MAAA,CAAO,QAAA,CAAS,SAAS,IAC3C,CAAC,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,SAAS,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,qBAAqB,aAAA,EAAgC;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAgB,mBACd,KAAA,EACuC;AACvC,IAAA,IAAI,qBAAmD,EAAC;AACxD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,EAAa,KAAA,EAAM;AAEzC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI;AAEF,QAAA,kBAAA,GAAqB,MAAM,SAAS,sBAAA,EAAuB;AAAA,MAC7D,SAAS,KAAA,EAAO;AAEd,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,uCAAuC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,SAC/F;AAAA,MACF;AAAA,IACF;AAIA,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,GAAG,kBAAA;AAAA,MACH,GAAI,KAAA,CAAM,UAAA,IAAc;AAAC,KAC3B;AAGA,IAAA,OAAO,MAAA,CAAO,WAAA;AAAA,MACZ,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CAAE,MAAA;AAAA,QAAO,CAAC,CAAC,GAAG,CAAA,KAC3C,IAAA,CAAK,qBAAqB,GAAG;AAAA;AAC/B,KACF;AAAA,EACF;AAAA,EAIO,YAAY,QAAA,EAA6C;AAC9D,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACzC;AAAA,EAIO,kBAAA,GAA8B;AACnC,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAGF,CAAA;AAEO,IAAM,oBAAA,GAAN,cAAmC,mBAAA,CAAoB;AAAA,EAC5D,WAAA,CACU,WAAA,EACA,eAAA,EACR,KAAA,GAAQ,KAAA,EACR;AACA,IAAA,KAAA;AAAA,MACE;AAAA,QACE,IAAA,EAAM,SAAA;AAAA,QACN,MAAA,EAAQ,CAACC,wBAAA,CAAmB,yBAAyB;AAAA,OACvD;AAAA,MACA;AAAA,KACF;AAVQ,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAUV;AAAA,EAEA,MAAc,KAAA,CAAM,IAAA,EAAc,OAAA,EAAsB;AACtD,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB,EAAG;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB;AAE/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,CAAA,iEAAA;AAAA,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,kBAAkB,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,EAAI;AAAA,MAChE,GAAG,OAAA;AAAA,MACH,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,QAC9B,cAAA,EAAgB;AAAA;AAClB,KACD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,CAAA,wBAAA,EAA2B,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,IAAI,OAAO,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA;AAAA,OAChG;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAsB,QAAQ,KAAA,EAAuB;AACnD,IAAA,IAAI,CAAC,KAAK,kBAAA,EAAmB,IAAK,CAAC,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,CAAA,0CAAA,EAA6C,MAAM,KAAK,CAAA;AAAA,SAC1D;AAAA,MACF;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,UAAA,EAAY,MAAM,IAAA,CAAK,kBAAA,CAAmB,KAAK;AAAA,KACjD;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAK,CAAA,0BAAA,EAA6B,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,MAAA,GAASC,iCAAA,CAA4B,SAAA,CAAU,OAAO,CAAA;AAE5D,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,CAAA,mDAAA,EAAsD,OAAO,KAAA,CAAM,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,OACzG;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,MAAM,CAAA,MAAA,CAAA,EAAU;AAAA,QACzB,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI;AAAA,OACjC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,4DAA4D,KAAK,CAAA;AAAA,OACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,gBAAA,CACX,QAAA,EACA,MAAA,EACe;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB,EAAG;AACvC,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,CAAA,8DAAA;AAAA,SACF;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB;AAE/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,CAAA,4EAAA;AAAA,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,kBAAA,CAAmB;AAAA,QACrD,OAAOD,wBAAA,CAAmB,YAAA;AAAA,QAC1B,UAAA,EAAY,EAAE,MAAA;AAAO,OACtB,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,UAAU,MAAM,CAAA;AAChC,MAAA,QAAA,CAAS,MAAA,CAAO,YAAA,EAAc,IAAA,CAAK,SAAA,CAAU,gBAAgB,CAAC,CAAA;AAE9D,MAAA,QAAA,CAAS,MAAA;AAAA,QACP,MAAA;AAAA,QACA,IAAI,KAAK,CAAC,IAAA,CAAK,UAAU,QAAQ,CAAC,GAAG,WAAA,EAAa;AAAA,UAChD,IAAA,EAAM;AAAA,SACP;AAAA,OACH;AAEA,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,CAAA,6CAAA,EAAgD,QAAA,CAAS,MAAM,CAAA,mBAAA,EAAsB,MAAM,CAAA;AAAA,SAC7F;AAAA,MACF;AAGA,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,CAAA,EAAG,kBAAkB,CAAA,oBAAA,CAAA;AAAA,QACrB;AAAA,UACE,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA;AAAA,WAEhC;AAAA,UACA,IAAA,EAAM;AAAA;AACR,OACF;AAEA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,CAAA,2DAAA,EAA8D,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA;AAAA,SACtG;AAAA,MACF,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,8EAA8E,MAAM,CAAA;AAAA,SACtF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,gEAAgE,KAAK,CAAA;AAAA,OACvE;AAAA,IACF;AAAA,EACF;AAAA,EAEgB,qBAAqB,aAAA,EAAwB;AAAA,EAAC;AAAA,EAE9C,kBAAA,GAA8B;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEmB,kBAAkB,SAAA,EAAwC;AAE3E,IAAA,IAAI,CAAC,KAAA,CAAM,iBAAA,CAAkB,SAAS,CAAA,EAAG;AACvC,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,SAAA,KAAcA,yBAAmB,YAAA,EAAc;AACjD,MAAA,OACE,IAAA,CAAK,eAAA,CAAgB,WAAA,EAAY,EAAG,eAAe,kBAAA,IACnD,KAAA;AAAA,IAEJ;AAGA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAsB,QAAA,GAAW;AAAA,EAAC;AACpC,CAAA;;;AC5QO,IAAM,oBAAN,MAAwB;AAAA,EACrB,QAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAA;AAAA,EAER,WAAA,CACE,QAAA,EACA,eAAA,EACA,GAAA,EACA;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAAA,EAC5B;AAAA,EAEA,MAAM,SAAA,CACJ,MAAA,EACA,UAAA,GAA8B,cAAA,EACN;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,QAAQ,UAAU,CAAA;AAEjE,MAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,QAAA,EAAU;AACzC,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,QAAA,IAAI,MAAA,EAAQ,GAAA,EAAK,SAAA,EAAW,SAAA,EAAW;AACrC,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,SAAA,CAAU,SAAS,QAAQ,CAAA;AAAA,UACxD,SAAS,OAAA,EAAS;AAChB,YAAA,IAAA,CAAK,GAAA;AAAA,cACH,oDAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,GAAA;AAAA,YACH;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,sCAAsC,KAAK,CAAA;AACpD,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,GAAiC;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,CAAC,CAAC,IAAA,CAAK,eAAA,CAAgB,WAAA,IAAe,aAAA,EACzC,iBAAA;AAAA,IACN,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,wDAAwD,KAAK,CAAA;AACtE,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;ACpCO,IAAM,YAAA,GAAN,MAAM,aAAA,SACHJ,6BAAAA,CAEV;AAAA,EACE,OAAe,SAAA,GAAiC,IAAA;AAAA,EAExC,OAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EAEA,aAAA,GAAgB,KAAA;AAAA,EAChB,GAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAA,GAAmC,IAAA;AAAA,EAE3C,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEQ,gBAAA,GAA2C,IAAA;AAAA,EAEnD,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEQ,gBAAA,GAA2C,IAAA;AAAA,EAEnD,IAAW,eAAA,GAAkB;AAC3B,IAAA,OAAO,IAAA,CAAK,gBAAA;AAAA,EACd;AAAA,EAEQ,aAAA,GAA0C,IAAA;AAAA,EAElD,IAAW,YAAA,GAAe;AACxB,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA,EAEQ,SAAA,GAA6B,IAAA;AAAA,EAErC,IAAW,QAAA,GAAW;AACpB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEQ,WAAA,CACN,SACA,GAAA,EACA;AACA,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,OAAA,CAAQ,GAAA;AAE1B,IAAA,IAAA,CAAK,iBAAA,GAAoB,CAAC,IAAA,KAAkC;AAC1D,MAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,IAAI,CAAA;AAAA,IACtC,CAAA;AAEA,IAAA,IAAA,CAAK,oBAAA,GAAuB,CAAC,IAAA,KAA8B;AACzD,MAAA,IAAA,CAAK,IAAA,CAAK,aAAa,IAAI,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,IAAA,CAAK,gBAAA,GAAmB,CAAC,IAAA,KAA0B;AACjD,MAAA,IAAA,CAAK,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAAA,IACpC,CAAA;AAAA,EACF;AAAA,EAEA,MAAa,UAAA,GAA4B;AACvC,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,CAAI,oBAAA;AAE/B,MAAA,IAAI,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACvC,QAAA,IAAA,CAAK,eAAe,IAAI,sBAAA;AAAA,UACtB,IAAA,CAAK,OAAA;AAAA,UACL,UAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,eAAe,IAAI,cAAA,CAAe,IAAA,CAAK,OAAA,EAAS,KAAK,GAAG,CAAA;AAAA,MAC/D;AAEA,MAAA,MAAM,IAAA,CAAK,aAAa,UAAA,EAAW;AAEnC,MAAA,IAAA,CAAK,YAAA,CAAa,EAAA,CAAG,oBAAA,EAAsB,IAAA,CAAK,iBAAiB,CAAA;AACjE,MAAA,IAAA,CAAK,YAAA,CAAa,EAAA,CAAG,WAAA,EAAa,IAAA,CAAK,oBAAoB,CAAA;AAG3D,MAAA,MAAM,iBAAA,GAAoB,QAAQ,GAAA,CAAI,2BAAA;AAEtC,MAAA,IAAI,iBAAA,IAAqB,iBAAA,CAAkB,MAAA,GAAS,CAAA,EAAG;AACrD,QAAA,IAAA,CAAK,mBAAmB,IAAI,qBAAA;AAAA,UAC1B,iBAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,uBAAuB,IAAI,oBAAA;AAAA,UAC/B,IAAA,CAAK,OAAA;AAAA,UACL,IAAA,CAAK,YAAA;AAAA,UACL,IAAA,CAAK;AAAA,SACP;AAEA,QAAA,oBAAA,CAAqB,UAAA,EAAW;AAEhC,QAAA,oBAAA,CAAqB,EAAA,CAAG,kBAAA,EAAoB,IAAA,CAAK,gBAAgB,CAAA;AAEjE,QAAA,IAAA,CAAK,gBAAA,GAAmB,oBAAA;AAAA,MAC1B;AAEA,MAAA,IAAA,CAAK,YAAY,IAAI,QAAA,CAAS,IAAA,CAAK,YAAA,EAAc,KAAK,GAAG,CAAA;AAEzD,MAAA,IAAA,CAAK,mBAAmB,IAAI,oBAAA;AAAA,QAC1B,IAAA,CAAK,YAAA;AAAA,QACL,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAA,CAAK,gBAAgB,IAAI,iBAAA;AAAA,QACvB,IAAA,CAAK,SAAA;AAAA,QACL,IAAA,CAAK,gBAAA;AAAA,QACL,IAAA,CAAK;AAAA,OACP;AAEA,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,wCAAwC,KAAK,CAAA;AACtD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA,EAIA,MAAa,KAAA,GAAuB;AAClC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,KAAA,EAAM;AAAA,EACjC;AAAA,EAEA,MAAa,MAAA,GAAwB;AACnC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,MAAA,EAAO;AAAA,EAClC;AAAA,EAEO,eAAA,GAA2B;AAChC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,eAAA,EAAgB;AAAA,EAC3C;AAAA,EAEO,gBAAA,GAA4B;AACjC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,gBAAA,EAAiB;AAAA,EAC5C;AAAA,EAEO,6BAAA,GAAyC;AAC9C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,6BAAA,EAA8B;AAAA,EACzD;AAAA,EAEO,WAAA,GAAoC;AACzC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,WAAA,EAAY;AAAA,EACvC;AAAA,EAEO,iBAAA,GAAmC;AACxC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAa,WAAA,EAAY;AAC/C,IAAA,OAAO,UAAU,cAAA,IAAkB,IAAA;AAAA,EACrC;AAAA,EAEO,mBAAA,GAAqC;AAC1C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAa,WAAA,EAAY;AAC/C,IAAA,OAAO,UAAU,gBAAA,IAAoB,IAAA;AAAA,EACvC;AAAA,EAEO,mBAAA,GAAqC;AAC1C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAa,WAAA,EAAY;AAC/C,IAAA,OAAO,UAAU,gBAAA,IAAoB,IAAA;AAAA,EACvC;AAAA,EAEO,uBAAA,GAAmC;AACxC,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA,CAAa,uBAAA,EAAwB,KAAM,IAAA;AAAA,EACzD;AAAA,EAEO,uBAAA,GAAyC;AAC9C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,uBAAA,EAAwB;AAAA,EACnD;AAAA,EAEO,YAAA,GAAuB;AAC5B,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,YAAa,QAAA,EAAS;AAAA,EACpC;AAAA,EAEA,MAAa,kBAAA,CACX,IAAA,EACA,KAAA,EACA,cAAA,EACe;AACf,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA,CAAa,cAAA,CAAe,IAAA,EAAM,OAAO,cAAc,CAAA;AAAA,EACrE;AAAA;AAAA,EAIO,YAAA,GAAsC;AAC3C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,gBAAiB,YAAA,EAAa;AAAA,EAC5C;AAAA,EAEO,uBAAA,GAA4D;AACjE,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,gBAAiB,WAAA,EAAY;AAAA,EAC3C;AAAA;AAAA,EAIO,aAAa,KAAA,EAA6B;AAC/C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,IAAA,CAAK,eAAA,CAAiB,QAAQ,KAAK,CAAA;AAAA,EACrC;AAAA;AAAA,EAIA,MAAa,SAAA,CACX,MAAA,EACA,UAAA,GAA8B,gBAC9B,aAAA,EACA;AACA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAEvB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAc,SAAA,CAAU,QAAQ,UAAU,CAAA;AAAA,IAC9D,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,qBAAqB,aAAA,EAAe;AAEvD,QAAA,MAAM,IAAA,CAAK,eAAA,CAAiB,gBAAA,CAAiB,aAAA,EAAe,MAAM,CAAA;AAClE,QAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAc,SAAA,CAAU,QAAQ,UAAU,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAa,YAAA,GAAiC;AAC5C,IAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,aAAc,YAAA,EAAa;AAAA,EACzC;AAAA;AAAA,EAIO,OAAA,GAAgB;AACrB,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,oBAAA,EAAsB,IAAA,CAAK,iBAAiB,CAAA;AACjE,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,WAAA,EAAa,IAAA,CAAK,oBAAoB,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAI,IAAA,CAAK,2BAA2B,oBAAA,EAAsB;AACxD,QAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,kBAAA,EAAoB,IAAA,CAAK,gBAAgB,CAAA;AAAA,MACpE;AAEA,MAAA,IAAA,CAAK,gBAAgB,OAAA,EAAQ;AAAA,IAC/B;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,EACvB;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,WAAW,QAAA,GAAyB;AAClC,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,aAAa,cAAA,CACX,OAAA,EACA,GAAA,EACuB;AACvB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,aAAA,CAAa,OAAA,EAAS,GAAG,CAAA;AAC9C,IAAA,MAAM,IAAA,CAAK,UAAU,UAAA,EAAW;AAChC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,OAAO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAA,KAAc,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,aAAA;AAAA,EACnD;AAAA,EAEA,OAAO,aAAA,GAAsB;AAC3B,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,UAAU,OAAA,EAAQ;AACvB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO,SAAA,GAAqB;AAC1B,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,SAAA,EAAW,eAAA,EAAgB;AAAA,EAC3C;AACF;ACnUO,IAAM,0BAAN,MAA8B;AAAA,EAC3B,MAAA,GAAwB,IAAA;AAAA,EACxB,eAAA,GAAA,cAAA;AAAA,EACA,YAAA,GAAuB,CAAA;AAAA,EACvB,YAAA,GAAsC,IAAA;AAAA,EACtC,gBAAA,GAA4B,KAAA;AAAA,EAEnB,WAAA,GAA2B;AAAA,IAC1C,kBAAA,EAAoB,EAAA;AAAA,IACpB,YAAA,EAAc,GAAA;AAAA,IACd,QAAA,EAAU,IAAA;AAAA,IACV,iBAAA,EAAmB;AAAA,GACrB;AAAA,EAEiB,kBAAA,GAAqB,GAAA;AAAA,EACrB,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CACE,WAAA,EACA,OAAA,EACA,WAAA,EACA;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,MAAA,IAAU,OAAA;AAEhC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAA,CAAK,cAAc,EAAE,GAAG,IAAA,CAAK,WAAA,EAAa,GAAG,WAAA,EAAY;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAa,OAAA,GAAyB;AACpC,IAAA,IAAI,KAAK,eAAA,KAAA,WAAA,kBAA+C;AACtD,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,mBAAA,CAAqB,CAAA;AACzD,MAAA;AAAA,IACF;AAEA,IAAA,IACE,IAAA,CAAK,eAAA,KAAA,YAAA,qBACL,IAAA,CAAK,eAAA,KAAA,UAAA,iBACL;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,QACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,wCAAA;AAAA,OACtB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,MACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,qDAAA,CAAA;AAAA,MACpB,KAAK,OAAA,CAAQ;AAAA,KACf;AAGA,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAAA,EAC9B;AAAA,EAEA,MAAc,sBAAA,GAAyB;AACrC,IAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AAEpB,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,gBAAA,EAAiB;AAAA,IAC9B,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,QACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,qCAAA,CAAA;AAAA,QACpB;AAAA,OACF;AAIA,MAAA,IAAA,CAAK,eAAA,GAAA,QAAA;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAc,gBAAA,GAAkC;AAC9C,IAAA,IAAI,KAAA,GAAQ,KAAK,WAAA,CAAY,YAAA;AAE7B,IAAA,OAAO,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,WAAA,CAAY,kBAAA,EAAoB;AAC9D,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,eAAA,GACH,KAAK,YAAA,KAAiB,CAAA,GAAA,YAAA,oBAAA,UAAA;AAIxB,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,UACV,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,qBAAA,EAAwB,IAAA,CAAK,eAAe,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,WAAA,CAAY,kBAAkB,CAAA;AAAA,SAC1G;AAEA,QAAA,MAAM,KAAK,aAAA,EAAc;AAEzB,QAAA,IAAA,CAAK,eAAA,GAAA,WAAA;AACL,QAAA,IAAA,CAAK,YAAA,GAAe,CAAA;AAEpB,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,UACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,4CAAA;AAAA,SACtB;AAEA,QAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,QAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,UAAA,MAAM,IAAA,CAAK,QAAQ,SAAA,EAAU;AAAA,QAC/B;AAEA,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,YAAA,EAAA;AAEL,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,UACV,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,qBAAA,EAAwB,KAAK,YAAY,CAAA,QAAA,CAAA;AAAA,UAC7D;AAAA,SACF;AAEA,QAAA,IAAI,KAAK,MAAA,EAAQ;AACf,UAAA,IAAA,CAAK,OAAO,UAAA,EAAW;AACvB,UAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,QAChB;AAEA,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,CAAY,kBAAA,EAAoB;AAC5D,UAAA,IAAA,CAAK,eAAA,GAAA,QAAA;AAEL,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,wBAAA,EAA2B,IAAA,CAAK,WAAA,CAAY,kBAAkB,CAAA,SAAA;AAAA,WAChE;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,UACV,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,UAAA,EAAa,KAAK,CAAA,kBAAA;AAAA,SACxC;AAEA,QAAA,MAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AAEtB,QAAA,KAAA,GAAQ,IAAA,CAAK,GAAA;AAAA,UACX,KAAA,GAAQ,KAAK,WAAA,CAAY,iBAAA;AAAA,UACzB,KAAK,WAAA,CAAY;AAAA,SACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAA+B;AAC3C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,QACV,IAAI,IAAA,CAAK,WAAW,CAAA,iCAAA,EAAoC,IAAA,CAAK,QAAQ,GAAG,CAAA,IAAA;AAAA,OAC1E;AAEA,MAAA,IAAA,CAAK,SAASM,kBAAA,CAAG,IAAA,CAAK,QAAQ,GAAA,EAAK,IAAA,CAAK,QAAQ,aAAa,CAAA;AAG7D,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,oBAAA,CAAA,EAAwB;AAAA,QAC1D,YAAA,EAAc,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,YAAA;AAAA,QAClC,oBAAA,EAAsB,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,oBAAA;AAAA,QAC1C,iBAAA,EAAmB,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,iBAAA;AAAA,QACvC,oBAAA,EAAsB,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK;AAAA,OAC3C,CAAA;AAED,MAAA,MAAM,iBAAA,GAAoB,WAAW,MAAM;AACzC,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,oBAAA,CAAsB,CAAA;AAE5D,QAAA,IAAI,KAAK,eAAA,KAAA,WAAA,kBAA+C;AACtD,UAAA,IAAA,CAAK,QAAQ,UAAA,EAAW;AACxB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,oBAAoB,CAAC,CAAA;AAAA,QACxC;AAAA,MACF,CAAA,EAAG,KAAK,kBAAkB,CAAA;AAE1B,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,SAAA,EAAW,YAAY;AACpC,QAAA,YAAA,CAAa,iBAAiB,CAAA;AAE9B,QAAA,MAAM,iBAAiB,IAAA,CAAK,gBAAA;AAG5B,QAAA,UAAA,CAAW,MAAM;AACf,UAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,mBAAA,CAAA,EAAuB;AAAA,YACzD,QAAA,EAAU,KAAK,MAAA,EAAQ,EAAA;AAAA,YACvB,iBAAiB,CAAC,cAAA;AAAA,YAClB;AAAA,WACD,CAAA;AAAA,QACH,GAAG,CAAC,CAAA;AAIJ,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,YACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,8DAAA;AAAA,WACtB;AACA,UAAA,IAAA,CAAK,eAAA,GAAA,WAAA;AAEL,UAAA,IAAI,IAAA,CAAK,QAAQ,WAAA,EAAa;AAE5B,YAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,CAAC,CAAA;AAAA,UAClC;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AACxB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,YAAA,EAAc,CAAC,MAAA,KAAmB;AAC/C,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,sBAAA,CAAA,EAA0B;AAAA,UAC5D,MAAA;AAAA,UACA,QAAA,EAAU,KAAK,MAAA,EAAQ;AAAA,SACxB,CAAA;AAED,QAAA,IAAA,CAAK,eAAA,GAAA,cAAA;AAEL,QAAA,IAAI,IAAA,CAAK,QAAQ,YAAA,EAAc;AAC7B,UAAA,IAAA,CAAK,OAAA,CAAQ,aAAa,MAAM,CAAA;AAAA,QAClC;AAGA,QAAA,MAAM,qBAAqB,MAAA,KAAW,sBAAA;AAEtC,QAAA,IAAI,CAAC,kBAAA,IAAsB,IAAA,CAAK,gBAAA,EAAkB;AAEhD,UAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,YACV,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,8CAAA,EAAiD,MAAM,CAAA,CAAA;AAAA,WAC7E;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,mBAAA,EAAqB,CAAC,aAAA,KAA0B;AAC7D,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,8BAAA,CAAA,EAAkC;AAAA,UACpE;AAAA,SACD,CAAA;AAAA,MACH,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,WAAA,EAAa,CAAC,aAAA,KAA0B;AACrD,QAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,qBAAA,CAAA,EAAyB;AAAA,UAC3D,aAAA;AAAA,UACA,QAAA,EAAU,KAAK,MAAA,EAAQ;AAAA,SACxB,CAAA;AAED,QAAA,IAAA,CAAK,eAAA,GAAA,WAAA;AAEL,QAAA,IAAI,IAAA,CAAK,QAAQ,WAAA,EAAa;AAC5B,UAAA,IAAA,CAAK,OAAA,CAAQ,YAAY,aAAa,CAAA;AAAA,QACxC;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,iBAAA,EAAmB,CAAC,KAAA,KAAiB;AAClD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,UACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,4BAAA,CAAA;AAAA,UACpB;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,kBAAA,EAAoB,MAAM;AACvC,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,UACV,CAAA,CAAA,EAAI,KAAK,WAAW,CAAA,kDAAA;AAAA,SACtB;AAEA,QAAA,IAAA,CAAK,eAAA,GAAA,QAAA;AAAA,MAIP,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AACjC,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,mBAAmB,KAAK,CAAA;AAE9D,QAAA,IAAI,KAAK,eAAA,KAAA,WAAA,kBAA+C;AACtD,UAAA,YAAA,CAAa,iBAAiB,CAAA;AAC9B,UAAA,MAAA,CAAO,KAAK,CAAA;AAAA,QACd;AAEA,QAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AACxB,UAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAAA,QAC5B;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,YAAA,EAAc,CAAC,KAAA,KAAU;AACtC,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,2BAA2B,KAAK,CAAA;AACtE,QAAA,YAAA,CAAa,iBAAiB,CAAA;AAC9B,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,KAAA,CAAM,OAAA,IAAW,uBAAuB,CAAC,CAAA;AAAA,MAC5D,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,MAAA,IAAA,CAAK,YAAA,GAAe,UAAA,CAAW,OAAA,EAAS,EAAE,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKQ,kBAAA,GAAqB;AAC3B,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,YAAA,CAAa,KAAK,YAAY,CAAA;AAC9B,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAa,UAAA,GAA4B;AACvC,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,kBAAA,CAAoB,CAAA;AAExD,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,OAAO,kBAAA,EAAmB;AAC/B,MAAA,IAAA,CAAK,OAAO,UAAA,EAAW;AACvB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,IAChB;AAEA,IAAA,IAAA,CAAK,eAAA,GAAA,cAAA;AAEL,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,cAAA,CAAgB,CAAA;AAAA,EACtD;AAAA,EAEO,SAAA,GAA2B;AAChC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EAEO,kBAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OACE,IAAA,CAAK,eAAA,KAAA,WAAA,oBACL,IAAA,CAAK,MAAA,EAAQ,SAAA,KAAc,IAAA;AAAA,EAE/B;AAAA,EAEA,MAAa,SAAA,GAA2B;AACtC,IAAA,IAAI,KAAK,eAAA,KAAA,WAAA,kBAA+C;AACtD,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,mBAAA,CAAqB,CAAA;AACzD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,+BAAA,CAAiC,CAAA;AAErE,IAAA,IAAA,CAAK,gBAAA,GAAmB,KAAA;AAExB,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,KAAK,OAAA,EAAQ;AAAA,EACrB;AACF,CAAA;ACrVO,IAAM,mBAAN,MAAuB;AAAA,EACpB,UAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EAIA,iBAAA;AAAA,EACA,iBAAA,GAA2C,IAAA;AAAA,EAEnD,WAAA,CACE,UAAA,EACA,MAAA,EACA,QAAA,EACA,YAAA,EAGA;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAEpB,IAAA,IAAA,CAAK,iBAAA,GAAoB;AAAA,MACvB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAA,EAAe,KAAK,QAAA,CAAS,GAAA;AAAA,MAC7B,kBACE,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,SAAA,EAAW,aAAa,OAAA,IAAW,SAAA;AAAA,MAC5D,aAAA,EAAe,KAAK,GAAA,EAAI;AAAA,MACxB,GAAG,KAAK,cAAA;AAAe,KACzB;AAEA,IAAA,IAAA,CAAK,sBAAA,EAAuB;AAAA,EAC9B;AAAA,EAEA,MAAa,UAAU,MAAA,EAA+B;AACpD,IAAA,MAAM,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,EAC5B;AAAA,EAEO,YAAA,GAAqB;AAC1B,IAAA,IAAA,CAAK,aAAA,EAAc;AAAA,EACrB;AAAA,EAEA,MAAa,YAAY,MAAA,EAA+B;AACtD,IAAA,MAAM,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAAA,EAC5B;AAAA,EAEA,MAAa,QAAQ,MAAA,EAAsC;AACzD,IAAA,IAAA,CAAK,aAAA,EAAc;AAEnB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,IAAA,CAAK,mBAAmB,MAAM,CAAA;AAAA,IACtC;AAAA,EACF;AAAA,EAEO,oBAAA,GAA0C;AAC/C,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEO,UAAA,CAAW,QAAgB,MAAA,EAA0B;AAC1D,IAAA,IAAA,CAAK,kBAAkB,MAAA,GAAS,MAAA;AAChC,IAAA,IAAA,CAAK,kBAAkB,UAAA,GAAa,MAAA;AAAA,EACtC;AAAA,EAEO,qBACL,OAAA,EACM;AACN,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,IAAA,CAAK,UAAA,EAAY;AAC1C,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,qEAAA;AAAA,QACA;AAAA,UACE,mBAAmB,OAAA,CAAQ,UAAA;AAAA,UAC3B,eAAe,IAAA,CAAK;AAAA;AACtB,OACF;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,gDAAA,EAAkD;AAAA,MAC5D,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAED,IAAA,QAAQ,QAAQ,IAAA;AAAM,MACpB,KAAA,YAAA,kBAAyD;AACvD,QAAA,OAAA,CAAQ,IAAI,wCAAA,EAA0C;AAAA,UACpD,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,SAAA,CAAU,CAAA,EAAG,GAAG,CAAA,GAAI,KAAA;AAAA,UAChD,SAAA,EAAW,CAAC,CAAC,OAAA,CAAQ,OAAA,CAAQ;AAAA,SAC9B,CAAA;AAED,QAAA,IAAA,CAAK,QAAA,CAAS,iBAAA;AAAA,UACZ,QAAQ,OAAA,CAAQ,IAAA;AAAA,UAChB,QAAQ,OAAA,CAAQ;AAAA,SAClB;AAEA,QAAA;AAAA,MACF;AAAA,MACA,KAAA,WAAA,iBAAwD;AACtD,QAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,QAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI,KAAK,cAAA,EAAe;AAEnD,QAAA,IAAI,UAAA,KAAA,SAAA,gBAAmC;AACrC,UAAA,OAAA,CAAQ,IAAI,2CAA2C,CAAA;AACvD,UAAA,IAAA,CAAK,SAAS,UAAA,EAAW;AACzB,UAAA,IAAA,CAAK,SAAS,kBAAA,EAAmB;AAAA,QACnC,WAAW,MAAA,EAAQ;AACjB,UAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,UAAA,IAAA,CAAK,SAAS,SAAA,EAAU;AACxB,UAAA,IAAA,CAAK,SAAS,kBAAA,EAAmB;AAAA,QACnC;AACA,QAAA;AAAA,MACF;AAAA;AACF,EACF;AAAA,EAEA,MAAc,iBAAiB,MAAA,EAA+B;AAC5D,IAAA,OAAA,CAAQ,IAAI,0CAAA,EAA4C;AAAA,MACtD,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,MAAA,EAAQ,KAAK,iBAAA,CAAkB,MAAA;AAAA,MAC/B,UAAA,EAAY,KAAK,iBAAA,CAAkB;AAAA,KACpC,CAAA;AAED,IAAA,IAAA,CAAK,iBAAA,GAAoB;AAAA,MACvB,GAAG,IAAA,CAAK,iBAAA;AAAA,MACR,aAAA,EAAe,KAAK,GAAA,EAAI;AAAA,MACxB,GAAG,KAAK,cAAA;AAAe,KACzB;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,oBAAA,EAAsB,IAAA,CAAK,iBAAiB,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,iDAAiD,CAAA;AAAA,IAC/D,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,2DACE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAK,YAAA,CAAa;AAAA,MACtB,IAAA,EAAA,qBAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,CAAK,iBAAA,EAAkB;AAAA,MAC5C,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,mBAAmB,MAAA,EAA+B;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI,4CAAA,EAA8C,IAAA,CAAK,UAAU,CAAA;AAEzE,IAAA,MAAM,KAAK,YAAA,CAAa;AAAA,MACtB,IAAA,EAAA,uBAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,OAAA,EAAS,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAW;AAAA,MACvC,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAED,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,KAAK,sBAAA,EAAwB,EAAE,UAAA,EAAY,IAAA,CAAK,YAAY,CAAA;AACnE,MAAA,OAAA,CAAQ,IAAI,mDAAmD,CAAA;AAAA,IACjE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,6DACE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAAsB;AAC3C,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,OAAA,CAAQ,IAAI,gDAAgD,CAAA;AAE5D,IAAA,IAAA,CAAK,iBAAA,GAAoB,YAAY,YAAY;AAC/C,MAAA,IAAA,CAAK,iBAAA,CAAkB,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI;AAChD,MAAA,MAAM,EAAE,MAAA,EAAQ,UAAA,EAAW,GAAI,KAAK,cAAA,EAAe;AACnD,MAAA,IAAA,CAAK,kBAAkB,MAAA,GAAS,MAAA;AAChC,MAAA,IAAA,CAAK,kBAAkB,UAAA,GAAa,UAAA;AAEpC,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,IAAA,CAAK,qBAAA,EAAuB,IAAA,CAAK,iBAAiB,CAAA;AACzD,QAAA,OAAA,CAAQ,IAAI,kDAAkD,CAAA;AAAA,MAChE,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,4DACE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,KAAK,YAAA,CAAa;AAAA,QACtB,IAAA,EAAA,mBAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,CAAK,iBAAA,EAAkB;AAAA,QAC5C,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,GAAG,qBAAqB,CAAA;AAAA,EAC1B;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,OAAA,CAAQ,IAAI,gDAAgD,CAAA;AAC5D,MAAA,aAAA,CAAc,KAAK,iBAAiB,CAAA;AACpC,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,sBAAA,GAA+B;AACrC,IAAA,OAAA,CAAQ,IAAI,wDAAwD,CAAA;AAEpE,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGC,sBAAA,CAAiB,WAAA,EAAa,OAAO,KAAA,KAAU;AAC9D,MAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,WAAA,EAAa,OAAO,OAAA,KAAY;AAChE,MAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA;AAAA,MACZA,sBAAA,CAAiB,aAAA;AAAA,MACjB,OAAO,OAAA,EAAiB,UAAA,EAAwB,SAAA,KAAyB;AACvE,QAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AACrD,QAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,QAAA,IAAA,CAAK,YAAA,CAAa;AAAA,UAChB,IAAA,EAAA,gBAAA;AAAA,UACA,YAAY,IAAA,CAAK,UAAA;AAAA,UACjB,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,YAAY,SAAA,EAAU;AAAA,UAC7C,SAAA,EAAW,KAAK,GAAA;AAAI,SACrB,CAAA;AAAA,MACH;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,WAAA,EAAa,YAAY;AACzD,MAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,WAAA,EAAa,OAAO,OAAA,KAAY;AAChE,MAAA,OAAA,CAAQ,IAAI,uCAAuC,CAAA;AACnD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,aAAA,EAAe,OAAO,OAAA,KAAY;AAClE,MAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AACrD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,gBAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,UAAA,EAAY,OAAO,OAAA,KAAY;AAC/D,MAAA,OAAA,CAAQ,IAAI,sCAAsC,CAAA;AAClD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,aAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAGA,sBAAA,CAAiB,QAAA,EAAU,OAAO,OAAA,KAAY;AAC7D,MAAA,OAAA,CAAQ,IAAI,oCAAoC,CAAA;AAChD,MAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AAEpC,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,WAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAA;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,EACpE;AAAA,EAEQ,cAAA,GAA6D;AACnE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,EAAU,eAAA,EAAgB;AAE5C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,OACnB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,EAAE,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAA,MAAA,aAA4B;AAAA,IACnD;AAAA,EACF;AACF,CAAA;ACzUO,IAAM,cAAN,MAAkB;AAAA,EACf,eAAA,uBAA6C,GAAA,EAAI;AAAA,EACjD,aAAA,uBACF,GAAA,EAAI;AAAA,EACF,YAAA;AAAA,EAGA,YAAA,uBAA0C,GAAA,EAAI;AAAA,EAEtD,YACE,YAAA,EACA;AACA,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA,EAEA,MAAa,UAAU,MAAA,EAA+B;AAEpD,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAK,EAAG;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,sCAAsC,MAAM,CAAA;AACxD,MAAA,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA;AAAA,IACrC;AAGA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,YAAA,CAAa,MAAA,EAAO,EAAG;AAC7C,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,EAC1B;AAAA,EAEO,YAAA,GAAqB;AAAA,EAE5B;AAAA,EAEA,MAAa,YAAY,MAAA,EAA+B;AAEtD,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAK,EAAG;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,sDAAsD,MAAM,CAAA;AACxE,MAAA,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAa,QAAQ,MAAA,EAAsC;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,sBAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAK,EAAG;AAChD,MAAA,mBAAA,CAAoB,IAAA,CAAK,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,OAAA,CAAQ,WAAW,mBAAmB,CAAA;AAC5C,IAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAC3B,IAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AACzB,IAAA,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,EAC1B;AAAA,EAEO,eAAe,IAAA,EAAsB;AAC1C,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,MAAa,eAAA,CAAgB,IAAA,EAAgB,MAAA,EAA+B;AAC1E,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI,sCAAsC,MAAM,CAAA;AAExD,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AACrC,IAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAE5B,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,EAAE,MAAA,EAAQ,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,kDAAkD,MAAM,CAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,6CACE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CACX,MAAA,EACA,MAAA,EACe;AACf,IAAA,OAAA,CAAQ,GAAA,CAAI,0CAA0C,MAAM,CAAA;AAE5D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAC5C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAC7B,MAAA,IAAA,CAAK,eAAA,CAAgB,OAAO,MAAM,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,EAAE,MAAA,EAAQ,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,sCAAsC,MAAM,CAAA;AAAA,IAC1D,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,8CACE,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,kBAAA,GAA4C;AACjD,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEO,qBAAqB,OAAA,EAAgD;AAC1E,IAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AACnB,IAAA,OAAA,CAAQ,GAAA,CAAI,oDAAoD,MAAM,CAAA;AAEtE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAA;AAE5C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,gBAAgB,MAAM,CAAA,wCAAA;AAAA,OACxB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAM,CAAA,+BAAA,CAAiC,CAAA;AACnE,IAAA,IAAA,CAAK,kBAAkB,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,EACrE;AAAA,EAEQ,mBAAmB,IAAA,EAAsB;AAC/C,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,EAAG;AACvC,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,yEAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AACA,MAAA,IAAA,CAAK,oBAAoB,IAAI,CAAA;AAAA,IAC/B;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,8CAAA,EAAgD,IAAA,CAAK,MAAM,CAAA;AAEvE,IAAA,MAAM,SAAA,uBAAgB,GAAA,EAAyC;AAG/D,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAEtD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAEzD,IAAA,MAAM,qBAAA,GAAwB,CAC5B,OAAA,EACA,UAAA,EACA,SAAA,KACG;AACH,MAAA,OAAA,CAAQ,GAAA,CAAI,+BAAA,EAAiC,IAAA,CAAK,MAAM,CAAA;AAExD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,gBAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,UACjB,UAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,aAAA,EAAe,qBAAqB,CAAA;AACnE,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,aAAA,EAAe,qBAAqB,CAAA;AAE7D,IAAA,MAAM,sBAAsB,YAAY;AACtC,MAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAEtD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAEzD,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAA+B,IAAA,CAAK,MAAM,CAAA;AAEtD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,cAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAC/D,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,WAAA,EAAa,mBAAmB,CAAA;AAEzD,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAAA,OAAA,CAAQ,GAAA,CAAI,+BAAA,EAAiC,IAAA,CAAK,MAAM,CAAA;AAExD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,gBAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,aAAA,EAAe,qBAAqB,CAAA;AACnE,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,aAAA,EAAe,qBAAqB,CAAA;AAE7D,IAAA,MAAM,qBAAqB,YAAY;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,4BAAA,EAA8B,IAAA,CAAK,MAAM,CAAA;AAErD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,aAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,UAAA,EAAY,kBAAkB,CAAA;AAC7D,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,UAAA,EAAY,kBAAkB,CAAA;AAEvD,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,0BAAA,EAA4B,IAAA,CAAK,MAAM,CAAA;AAEnD,MAAA,IAAA,CAAK,YAAA,CAAa;AAAA,QAChB,IAAA,EAAA,WAAA;AAAA,QACA,OAAA,EAAS;AAAA,UACP,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,WAAA,GAAA,MAAA,cAAA,SAAA;AAAA,SACnB;AAAA,QACA,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,SAAA,CAAU,GAAA,CAAIA,sBAAAA,CAAiB,QAAA,EAAU,gBAAgB,CAAA;AACzD,IAAA,IAAA,CAAK,EAAA,CAAGA,sBAAAA,CAAiB,QAAA,EAAU,gBAAgB,CAAA;AAEnD,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAE7C,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,kDAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA,EAEQ,oBAAoB,IAAA,EAAsB;AAChD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,KAAK,MAAM,CAAA;AACpD,IAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,IAAA,OAAA,CAAQ,GAAA,CAAI,4CAAA,EAA8C,IAAA,CAAK,MAAM,CAAA;AAErE,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,EAAU,SAAA,KAAc;AACzC,MAAA,IAAI;AAEF,QAAA,IAAA,CAAK,GAAA,CAAI,WAAW,QAAe,CAAA;AAAA,MACrC,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,6CAA6C,MAAA,CAAO,SAAS,CAAC,CAAA,SAAA,EAC5D,KAAK,MACP,CAAA,CAAA,CAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,EACvC;AACF,CAAA;;;ACrRO,IAAM,oBAAA,GAAN,MAAM,qBAAA,CAAqB;AAAA,EAChC,OAAe,QAAA,GAAwC,IAAA;AAAA;AAAA,EAGtC,MAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAGT,iBAAA;AAAA,EACA,gBAAA,GAA4C,IAAA;AAAA,EAC5C,WAAA,GAAkC,IAAA;AAAA;AAAA,EAGzB,sBAAA,GAAyB,QAAA;AAAA,EACzB,eAAA,GAAkB,GAAA;AAAA,EAClB,mBAAA,GAAsB,GAAA;AAAA,EAEvC,OAAc,WAAA,GAA2C;AACvD,IAAA,OAAO,qBAAA,CAAqB,QAAA;AAAA,EAC9B;AAAA,EAEA,aAAoB,eAAe,OAAA,EAA+B;AAChE,IAAA,OAAA,CAAQ,IAAI,8CAA8C,CAAA;AAC1D,IAAA,qBAAA,CAAqB,QAAA,GAAW,IAAI,qBAAA,CAAqB,OAAO,CAAA;AAChE,IAAA,MAAM,qBAAA,CAAqB,SAAS,UAAA,EAAW;AAC/C,IAAA,OAAO,qBAAA,CAAqB,QAAA;AAAA,EAC9B;AAAA,EAEA,OAAc,aAAA,GAAgB;AAC5B,IAAA,IAAI,sBAAqB,QAAA,EAAU;AACjC,MAAA,OAAA,CAAQ,IAAI,2CAA2C,CAAA;AACvD,MAAA,qBAAA,CAAqB,QAAA,CAAS,UAAA,EAAW,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACzD,MAAA,qBAAA,CAAqB,QAAA,GAAW,IAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,YAAY,OAAA,EAA+B;AACjD,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,kBAAkB,OAAA,CAAQ,eAAA;AAC/B,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,UAAA,GAAaN,wBAAO,UAAA,EAAW;AAEpC,IAAA,OAAA,CAAQ,IAAI,0CAAA,EAA4C;AAAA,MACtD,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,YAAY,IAAA,CAAK;AAAA,KAClB,CAAA;AAED,IAAA,IAAA,CAAK,oBAAoB,IAAI,uBAAA;AAAA,MAC3B,sBAAA;AAAA,MACA;AAAA,QACE,KAAK,IAAA,CAAK,eAAA;AAAA,QACV,aAAA,EAAe;AAAA,UACb,KAAA,EAAO;AAAA,YACL,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,UAAA,EAAY,WAAA;AAAA,YACZ,YAAY,IAAA,CAAK;AAAA,WACnB;AAAA,UACA,UAAA,EAAY,CAAC,WAAA,EAAa,SAAS,CAAA;AAAA,UACnC,YAAA,EAAc,IAAA;AAAA,UACd,sBAAsB,IAAA,CAAK,sBAAA;AAAA,UAC3B,mBAAmB,IAAA,CAAK,eAAA;AAAA,UACxB,sBAAsB,IAAA,CAAK;AAAA,SAC7B;AAAA,QACA,WAAW,YAAY;AACrB,UAAA,MAAM,KAAK,aAAA,EAAc;AAAA,QAC3B,CAAA;AAAA,QACA,cAAc,MAAM;AAClB,UAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,QACxB,CAAA;AAAA,QACA,WAAA,EAAa,OAAO,aAAA,KAAkB;AACpC,UAAA,MAAM,IAAA,CAAK,gBAAgB,aAAa,CAAA;AAAA,QAC1C;AAAA;AACF,KACF;AAEA,IAAA,IAAA,CAAK,mBAAmB,IAAI,gBAAA;AAAA,MAC1B,IAAA,CAAK,UAAA;AAAA,MACL,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,CAAC,OAAA,KACC,IAAA,CAAK,qBAAA,CAAsB,OAAO;AAAA,KACtC;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,WAAA;AAAA,MACrB,CAAC,OAAA,KACC,IAAA,CAAK,gBAAA,CAAiB,OAAO;AAAA,KACjC;AAAA,EACF;AAAA,EAEA,MAAc,UAAA,GAAa;AACzB,IAAA,MAAM,IAAA,CAAK,kBAAkB,OAAA,EAAQ;AACrC,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA,EAEQ,oBAAA,GAAuB;AAC7B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAEhD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,MAAM,6CAA6C,CAAA;AAC3D,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,IAAI,2BAA2B,CAAA;AACtC,IAAA,MAAA,CAAO,IAAI,sBAAsB,CAAA;AACjC,IAAA,MAAA,CAAO,IAAI,WAAW,CAAA;AAEtB,IAAA,MAAA,CAAO,EAAA;AAAA,MACL,2BAAA;AAAA,MACA,CAAC,OAAA,KAAkD;AACjD,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,4DAAA;AAAA,UACA;AAAA,YACE,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,YAAY,OAAA,CAAQ;AAAA;AACtB,SACF;AAEA,QAAA,IAAA,CAAK,gBAAA,EAAkB,qBAAqB,OAAO,CAAA;AAAA,MACrD;AAAA,KACF;AAEA,IAAA,MAAA,CAAO,EAAA;AAAA,MACL,sBAAA;AAAA,MACA,CAAC,OAAA,KAA6C;AAC5C,QAAA,OAAA,CAAQ,IAAI,uDAAA,EAAyD;AAAA,UACnE,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,QAAQ,OAAA,CAAQ;AAAA,SACjB,CAAA;AAED,QAAA,IAAA,CAAK,WAAA,EAAa,qBAAqB,OAAO,CAAA;AAAA,MAChD;AAAA,KACF;AAYA,IAAA,MAAA,CAAO,EAAA,CAAG,WAAA,EAAa,CAAC,IAAA,KAAS;AAC/B,MAAA,OAAA,CAAQ,GAAA,CAAI,gDAAgD,IAAI,CAAA;AAAA,IAClE,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,aAAA,GAAgB;AAC5B,IAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAE9C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAEhD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,SAAA,CAAU,MAAM,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,SAAA,CAAU,MAAM,CAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAEQ,gBAAA,GAAmB;AACzB,IAAA,OAAA,CAAQ,IAAI,qCAAqC,CAAA;AAEjD,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,IAAA,CAAK,iBAAiB,YAAA,EAAa;AAAA,IACrC;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,YAAY,YAAA,EAAa;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,aAAA,EAAuB;AACnD,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,0CAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAEhD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA;AAAA,IACF;AAKA,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAE1B,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,CAAY,MAAM,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA,EAIO,oBAAA,GAAiD;AACtD,IAAA,OAAO,IAAA,CAAK,gBAAA,EAAkB,oBAAA,EAAqB,IAAK,IAAA;AAAA,EAC1D;AAAA,EAEO,mBAAA,CAAoB,QAAgB,MAAA,EAA0B;AACnE,IAAA,IAAA,CAAK,gBAAA,EAAkB,UAAA,CAAW,MAAA,EAAQ,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA,EAIA,MAAa,gBAAgB,IAAA,EAA+B;AAC1D,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAEhD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,CAAK,iBAAA,CAAkB,aAAY,EAAG;AACpD,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA,IAAA,CAAK,WAAA,CAAY,eAAe,IAAI,CAAA;AAEpC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,kBAAA,EAAmB;AAExD,MAAA,IACE,+CACA,KAAA,KAAA,QAAA,eACA;AACA,QAAA,IAAA,CAAK,UAAA,EAAW;AAAA,MAClB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAAA,EACrD;AAAA,EAEA,MAAa,oBAAoB,MAAA,EAA+B;AAC9D,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA,CAAY,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC3D;AAAA,EAEO,kBAAA,GAA4C;AACjD,IAAA,OAAO,IAAA,CAAK,WAAA,EAAa,kBAAA,EAAmB,wBAAS,GAAA,EAAI;AAAA,EAC3D;AAAA;AAAA,EAIA,MAAc,sBACZ,OAAA,EACkB;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAEhD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,CAAK,iBAAA,CAAkB,aAAY,EAAG;AACpD,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,mBAAmB,OAAO,CAAA;AAEtC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,mDAAA;AAAA,QACA,OAAA,CAAQ;AAAA,OACV;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,2DAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,iBACZ,OAAA,EACkB;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,iBAAA,CAAkB,SAAA,EAAU;AAChD,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,CAAK,iBAAA,CAAkB,aAAY,EAAG;AACpD,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,IAAA,CAAK,cAAc,OAAO,CAAA;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,8CAAA,EAAgD,OAAA,CAAQ,IAAI,CAAA;AACxE,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,sDAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAIO,kBAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,kBAAkB,kBAAA,EAAmB;AAAA,EACnD;AAAA,EAEA,MAAa,UAAA,GAA4B;AACvC,IAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AAErD,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,MAAM,KAAK,gBAAA,CAAiB,OAAA,CAAQ,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAAA,IACxE;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAM,KAAK,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,IAAA,CAAK,kBAAkB,UAAA,EAAW;AACxC,IAAA,qBAAA,CAAqB,QAAA,GAAW,IAAA;AAEhC,IAAA,OAAA,CAAQ,IAAI,qCAAqC,CAAA;AAAA,EACnD;AAAA,EAEA,MAAa,SAAA,GAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,kBAAkB,SAAA,EAAU;AAGvC,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA,EAEA,IAAW,SAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,kBAAkB,WAAA,EAAY;AAAA,EAC5C;AAAA,EAEA,IAAW,mBAAA,GAA8B;AACvC,IAAA,OAAO,IAAA,CAAK,WAAA,EAAa,kBAAA,EAAmB,CAAE,IAAA,IAAQ,CAAA;AAAA,EACxD;AAAA,EAEA,aAAoB,wBAAA,CAClB,QAAA,EACA,oBAAA,EACA,SACA,MAAA,EACA;AACA,IAAA,IAAI,QAAA,EAAU,0BAA0B,oBAAA,EAAsB;AAC5D,MAAA,MAAM,eAAA,GAAkB,sBAAqB,WAAA,EAAY;AAEzD,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAqB,cAAA,CAAe,OAAO,CAAA;AACjE,UAAA,MAAM,KAAA,GAAQ,QAAQ,kBAAA,EAAmB;AAEzC,UAAA,MAAA;AAAA,YACE,4EAA4E,KAAK,CAAA,CAAA;AAAA,WACnF;AAEA,UAAA,IAAI,KAAA,KAAA,WAAA,kBAAqC;AACvC,YAAA,MAAA;AAAA,cACE,CAAA,sGAAA;AAAA,aACF;AAAA,UACF;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,OAAA,GAAU,8EACd,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA,CAAA;AAEA,UAAA,MAAA,GAAS,OAAO,CAAA;AAChB,UAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,QACvB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,gBAAgB,kBAAA,EAAmB;AACjD,QAAA,IACE,mCACA,KAAA,KAAA,cAAA,qBACA;AACA,UAAA,MAAA;AAAA,YACE,uEAAuE,KAAK,CAAA,yBAAA;AAAA,WAC9E;AACA,UAAA,eAAA,CAAgB,SAAA,EAAU,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAC3C,YAAA,MAAM,OAAA,GAAU,wEACd,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA,CAAA;AACA,YAAA,MAAA,GAAS,OAAO,CAAA;AAChB,YAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,UACvB,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,eAAA,GAAkB,sBAAqB,WAAA,EAAY;AAEzD,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,IAAI;AACF,UAAA,MAAM,gBAAgB,UAAA,EAAW;AACjC,UAAA,qBAAA,CAAqB,aAAA,EAAc;AAEnC,UAAA,MAAA;AAAA,YACE,CAAA,8EAAA;AAAA,WACF;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,OAAA,GAAU,4FACd,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CACvD,CAAA,CAAA;AACA,UAAA,MAAA,GAAS,OAAO,CAAA;AAChB,UAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\nimport { tokenUsageSchema, toolUsageSchema } from '@roo-code/types';\n\nimport { AuthServiceEvents } from './auth/index.js';\nimport { SettingsServiceEvents } from './CloudSettingsService.js';\n\n/**\n * CloudServiceEvents\n */\n\nexport type CloudServiceEvents = AuthServiceEvents & SettingsServiceEvents;\n\n/**\n * ConnectionState\n */\n\nexport enum ConnectionState {\n  DISCONNECTED = 'disconnected',\n  CONNECTING = 'connecting',\n  CONNECTED = 'connected',\n  RETRYING = 'retrying',\n  FAILED = 'failed',\n}\n\n/**\n * RetryConfig\n */\n\nexport interface RetryConfig {\n  maxInitialAttempts: number;\n  initialDelay: number;\n  maxDelay: number;\n  backoffMultiplier: number;\n}\n\n/**\n * Constants\n */\n\nexport const HEARTBEAT_INTERVAL_MS = 20_000;\nexport const INSTANCE_TTL_SECONDS = 60;\n\n/**\n * BridgeNamespace\n */\n\nexport enum BridgeNamespace {\n  Extension = 'bridge:extension',\n  Task = 'bridge:task',\n}\n\n/**\n * ExtensionInstance\n */\n\nexport enum ExtensionInstanceField {\n  InstanceId = 'instanceId',\n  UserId = 'userId',\n  WorkspacePath = 'workspacePath',\n  ExtensionVersion = 'extensionVersion',\n  LastHeartbeat = 'lastHeartbeat',\n  TaskId = 'taskId',\n  TaskStatus = 'taskStatus',\n}\n\nexport enum TaskStatus {\n  Running = 'running',\n  Idle = 'idle',\n  None = 'none',\n}\n\nexport const extensionInstanceSchema = z.object({\n  [ExtensionInstanceField.InstanceId]: z.string(),\n  [ExtensionInstanceField.UserId]: z.string(),\n  [ExtensionInstanceField.WorkspacePath]: z.string(),\n  [ExtensionInstanceField.ExtensionVersion]: z.string(),\n  [ExtensionInstanceField.LastHeartbeat]: z.coerce.number(),\n  [ExtensionInstanceField.TaskId]: z.string(),\n  [ExtensionInstanceField.TaskStatus]: z.nativeEnum(TaskStatus),\n});\n\nexport type ExtensionInstance = z.infer<typeof extensionInstanceSchema>;\n\n/**\n * ExtensionBridgeChannel\n */\n\nexport enum ExtensionBridgeChannel {\n  Control = 'control',\n  Events = 'events',\n  Instances = 'instances',\n  Instance = 'instance',\n}\n\n/**\n * ExtensionBridgeEventChannel\n */\n\nexport enum ExtensionBridgeEventChannelMessageType {\n  TaskCreated = 'task_created',\n  TaskStarted = 'task_started',\n  TaskCompleted = 'task_completed',\n  TaskAborted = 'task_aborted',\n  TaskFocused = 'task_focused',\n  TaskUnfocused = 'task_unfocused',\n  TaskActive = 'task_active',\n  TaskIdle = 'task_idle',\n  InstanceRegistered = 'instance_registered',\n  InstanceUnregistered = 'instance_unregistered',\n  HeartbeatUpdated = 'heartbeat_updated',\n}\n\nexport const extensionBridgeEventChannelMessageSchema = z.discriminatedUnion(\n  'type',\n  [\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskCreated),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskStarted),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskCompleted),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n        tokenUsage: tokenUsageSchema,\n        toolUsage: toolUsageSchema,\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskAborted),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskFocused),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskUnfocused),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskActive),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.TaskIdle),\n      instanceId: z.string(),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(\n        ExtensionBridgeEventChannelMessageType.InstanceRegistered,\n      ),\n      instanceId: z.string(),\n      payload: z.object({ instance: extensionInstanceSchema }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(\n        ExtensionBridgeEventChannelMessageType.InstanceUnregistered,\n      ),\n      instanceId: z.string(),\n      payload: z.object({ instanceId: z.string() }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeEventChannelMessageType.HeartbeatUpdated),\n      instanceId: z.string(),\n      payload: z.object({ instance: extensionInstanceSchema }),\n      timestamp: z.number(),\n    }),\n  ],\n);\n\nexport type ExtensionBridgeEventChannelMessage = z.infer<\n  typeof extensionBridgeEventChannelMessageSchema\n>;\n\n/**\n * ExtensionBridgeControlChannel\n */\n\nexport enum ExtensionBridgeControlChannelMessageType {\n  StartTask = 'start_task',\n  StopTask = 'stop_task',\n}\n\nexport const extensionBridgeControlChannelMessageSchema = z.discriminatedUnion(\n  'type',\n  [\n    z.object({\n      type: z.literal(ExtensionBridgeControlChannelMessageType.StartTask),\n      instanceId: z.string(),\n      payload: z.object({\n        text: z.string(),\n        images: z.array(z.string()).optional(),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(ExtensionBridgeControlChannelMessageType.StopTask),\n      instanceId: z.string(),\n      payload: z.object({ taskId: z.string() }),\n      timestamp: z.number(),\n    }),\n  ],\n);\n\nexport type ExtensionBridgeControlChannelMessage = z.infer<\n  typeof extensionBridgeControlChannelMessageSchema\n>;\n\n/**\n * TaskBridgeChannel\n */\n\nexport enum TaskBridgeChannel {\n  Control = 'control',\n  Events = 'events',\n}\n\n/**\n * TaskBridgeEventChannelMessage\n */\n\nexport enum TaskBridgeEventChannelMessageType {\n  TaskStarted = 'task_started',\n  TaskCompleted = 'task_completed',\n  TaskAborted = 'task_aborted',\n  TaskFocused = 'task_focused',\n  TaskUnfocused = 'task_unfocused',\n  TaskActive = 'task_active',\n  TaskIdle = 'task_idle',\n}\n\nexport const taskBridgeEventChannelMessageSchema = z.discriminatedUnion(\n  'type',\n  [\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskStarted),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskCompleted),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n        tokenUsage: tokenUsageSchema,\n        toolUsage: toolUsageSchema,\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskAborted),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskFocused),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskUnfocused),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskActive),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n    z.object({\n      type: z.literal(TaskBridgeEventChannelMessageType.TaskIdle),\n      payload: z.object({\n        taskId: z.string(),\n        taskStatus: z.nativeEnum(TaskStatus),\n      }),\n      timestamp: z.number(),\n    }),\n  ],\n);\n\nexport type TaskBridgeEventChannelMessage = z.infer<\n  typeof taskBridgeEventChannelMessageSchema\n>;\n\n/**\n * TaskBridgeControlChannelMessage\n */\n\nexport enum TaskBridgeControlChannelMessageType {\n  Message = 'message',\n}\n\nexport const taskBridgeControlChannelMessageSchema = z.discriminatedUnion(\n  'type',\n  [\n    z.object({\n      type: z.literal(TaskBridgeControlChannelMessageType.Message),\n      taskId: z.string(),\n      payload: z.object({\n        text: z.string(),\n        images: z.array(z.string()).optional(),\n      }),\n      timestamp: z.number(),\n    }),\n  ],\n);\n\nexport type TaskBridgeControlChannelMessage = z.infer<\n  typeof taskBridgeControlChannelMessageSchema\n>;\n","export const PRODUCTION_CLERK_BASE_URL = 'https://clerk.roocode.com';\nexport const PRODUCTION_ROO_CODE_API_URL = 'https://app.roocode.com';\n\nexport const getClerkBaseUrl = () =>\n  process.env.CLERK_BASE_URL || PRODUCTION_CLERK_BASE_URL;\n\nexport const getRooCodeApiUrl = () =>\n  process.env.ROO_CODE_API_URL || PRODUCTION_ROO_CODE_API_URL;\n","import type { ExtensionContext } from 'vscode';\n\nexport function getUserAgent(context?: ExtensionContext): string {\n  return `Roo-Code ${context?.extension?.packageJSON?.version || 'unknown'}`;\n}\n","export class CloudAPIError extends Error {\n  constructor(\n    message: string,\n    public statusCode?: number,\n    public responseBody?: unknown,\n  ) {\n    super(message);\n    this.name = 'CloudAPIError';\n    Object.setPrototypeOf(this, CloudAPIError.prototype);\n  }\n}\n\nexport class TaskNotFoundError extends CloudAPIError {\n  constructor(taskId?: string) {\n    super(taskId ? `Task '${taskId}' not found` : 'Task not found', 404);\n    this.name = 'TaskNotFoundError';\n    Object.setPrototypeOf(this, TaskNotFoundError.prototype);\n  }\n}\n\nexport class AuthenticationError extends CloudAPIError {\n  constructor(message = 'Authentication required') {\n    super(message, 401);\n    this.name = 'AuthenticationError';\n    Object.setPrototypeOf(this, AuthenticationError.prototype);\n  }\n}\n\nexport class NetworkError extends CloudAPIError {\n  constructor(message = 'Network error occurred') {\n    super(message);\n    this.name = 'NetworkError';\n    Object.setPrototypeOf(this, NetworkError.prototype);\n  }\n}\n\nexport class InvalidClientTokenError extends Error {\n  constructor() {\n    super('Invalid/Expired client token');\n    Object.setPrototypeOf(this, InvalidClientTokenError.prototype);\n  }\n}\n","import { z } from 'zod';\n\nimport {\n  type ShareVisibility,\n  type ShareResponse,\n  shareResponseSchema,\n} from '@roo-code/types';\n\nimport { getRooCodeApiUrl } from './config.js';\nimport type { AuthService } from './auth/index.js';\nimport { getUserAgent } from './utils.js';\nimport {\n  AuthenticationError,\n  CloudAPIError,\n  NetworkError,\n  TaskNotFoundError,\n} from './errors.js';\n\ninterface CloudAPIRequestOptions extends Omit<RequestInit, 'headers'> {\n  timeout?: number;\n  headers?: Record<string, string>;\n}\n\nexport class CloudAPI {\n  private authService: AuthService;\n  private log: (...args: unknown[]) => void;\n  private baseUrl: string;\n\n  constructor(authService: AuthService, log?: (...args: unknown[]) => void) {\n    this.authService = authService;\n    this.log = log || console.log;\n    this.baseUrl = getRooCodeApiUrl();\n  }\n\n  private async request<T>(\n    endpoint: string,\n    options: CloudAPIRequestOptions & {\n      parseResponse?: (data: unknown) => T;\n    } = {},\n  ): Promise<T> {\n    const {\n      timeout = 30_000,\n      parseResponse,\n      headers = {},\n      ...fetchOptions\n    } = options;\n\n    const sessionToken = this.authService.getSessionToken();\n\n    if (!sessionToken) {\n      throw new AuthenticationError();\n    }\n\n    const url = `${this.baseUrl}${endpoint}`;\n\n    const requestHeaders = {\n      'Content-Type': 'application/json',\n      Authorization: `Bearer ${sessionToken}`,\n      'User-Agent': getUserAgent(),\n      ...headers,\n    };\n\n    try {\n      const response = await fetch(url, {\n        ...fetchOptions,\n        headers: requestHeaders,\n        signal: AbortSignal.timeout(timeout),\n      });\n\n      if (!response.ok) {\n        await this.handleErrorResponse(response, endpoint);\n      }\n\n      const data = await response.json();\n\n      if (parseResponse) {\n        return parseResponse(data);\n      }\n\n      return data as T;\n    } catch (error) {\n      if (error instanceof TypeError && error.message.includes('fetch')) {\n        throw new NetworkError(`Network error while calling ${endpoint}`);\n      }\n\n      if (error instanceof CloudAPIError) {\n        throw error;\n      }\n\n      if (error instanceof Error && error.name === 'AbortError') {\n        throw new CloudAPIError(\n          `Request to ${endpoint} timed out`,\n          undefined,\n          undefined,\n        );\n      }\n\n      throw new CloudAPIError(\n        `Unexpected error while calling ${endpoint}: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  private async handleErrorResponse(\n    response: Response,\n    endpoint: string,\n  ): Promise<never> {\n    let responseBody: unknown;\n\n    try {\n      responseBody = await response.json();\n    } catch {\n      responseBody = await response.text();\n    }\n\n    switch (response.status) {\n      case 401:\n        throw new AuthenticationError();\n      case 404:\n        if (endpoint.includes('/share')) {\n          throw new TaskNotFoundError();\n        }\n        throw new CloudAPIError(\n          `Resource not found: ${endpoint}`,\n          404,\n          responseBody,\n        );\n      default:\n        throw new CloudAPIError(\n          `HTTP ${response.status}: ${response.statusText}`,\n          response.status,\n          responseBody,\n        );\n    }\n  }\n\n  async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n  ): Promise<ShareResponse> {\n    this.log(\n      `[CloudAPI] Sharing task ${taskId} with visibility: ${visibility}`,\n    );\n\n    const response = await this.request('/api/extension/share', {\n      method: 'POST',\n      body: JSON.stringify({ taskId, visibility }),\n      parseResponse: (data) => shareResponseSchema.parse(data),\n    });\n\n    this.log('[CloudAPI] Share response:', response);\n    return response;\n  }\n\n  async bridgeConfig() {\n    return this.request('/api/extension/bridge/config', {\n      method: 'GET',\n      parseResponse: (data) =>\n        z\n          .object({\n            userId: z.string(),\n            socketBridgeUrl: z.string(),\n            token: z.string(),\n          })\n          .parse(data),\n    });\n  }\n}\n","/**\n * RefreshTimer - A utility for executing a callback with configurable retry behavior\n *\n * This timer executes a callback function and schedules the next execution based on the result:\n * - If the callback succeeds (returns true), it schedules the next attempt after a fixed interval\n * - If the callback fails (returns false), it uses exponential backoff up to a maximum interval\n */\n\n/**\n * Configuration options for the RefreshTimer\n */\nexport interface RefreshTimerOptions {\n  /**\n   * The callback function to execute\n   * Should return a Promise that resolves to a boolean indicating success (true) or failure (false)\n   */\n  callback: () => Promise<boolean>;\n\n  /**\n   * Time in milliseconds to wait before next attempt after success\n   * @default 50000 (50 seconds)\n   */\n  successInterval?: number;\n\n  /**\n   * Initial backoff time in milliseconds for the first failure\n   * @default 1000 (1 second)\n   */\n  initialBackoffMs?: number;\n\n  /**\n   * Maximum backoff time in milliseconds\n   * @default 300000 (5 minutes)\n   */\n  maxBackoffMs?: number;\n}\n\n/**\n * A timer utility that executes a callback with configurable retry behavior\n */\nexport class RefreshTimer {\n  private callback: () => Promise<boolean>;\n  private successInterval: number;\n  private initialBackoffMs: number;\n  private maxBackoffMs: number;\n  private currentBackoffMs: number;\n  private attemptCount: number;\n  private timerId: NodeJS.Timeout | null;\n  private isRunning: boolean;\n\n  /**\n   * Creates a new RefreshTimer\n   *\n   * @param options Configuration options for the timer\n   */\n  constructor(options: RefreshTimerOptions) {\n    this.callback = options.callback;\n    this.successInterval = options.successInterval ?? 50000; // 50 seconds\n    this.initialBackoffMs = options.initialBackoffMs ?? 1000; // 1 second\n    this.maxBackoffMs = options.maxBackoffMs ?? 300000; // 5 minutes\n    this.currentBackoffMs = this.initialBackoffMs;\n    this.attemptCount = 0;\n    this.timerId = null;\n    this.isRunning = false;\n  }\n\n  /**\n   * Starts the timer and executes the callback immediately\n   */\n  public start(): void {\n    if (this.isRunning) {\n      return;\n    }\n\n    this.isRunning = true;\n\n    // Execute the callback immediately\n    this.executeCallback();\n  }\n\n  /**\n   * Stops the timer and cancels any pending execution\n   */\n  public stop(): void {\n    if (!this.isRunning) {\n      return;\n    }\n\n    if (this.timerId) {\n      clearTimeout(this.timerId);\n      this.timerId = null;\n    }\n\n    this.isRunning = false;\n  }\n\n  /**\n   * Resets the backoff state and attempt count\n   * Does not affect whether the timer is running\n   */\n  public reset(): void {\n    this.currentBackoffMs = this.initialBackoffMs;\n    this.attemptCount = 0;\n  }\n\n  /**\n   * Schedules the next attempt based on the success/failure of the current attempt\n   *\n   * @param wasSuccessful Whether the current attempt was successful\n   */\n  private scheduleNextAttempt(wasSuccessful: boolean): void {\n    if (!this.isRunning) {\n      return;\n    }\n\n    if (wasSuccessful) {\n      // Reset backoff on success\n      this.currentBackoffMs = this.initialBackoffMs;\n      this.attemptCount = 0;\n\n      this.timerId = setTimeout(\n        () => this.executeCallback(),\n        this.successInterval,\n      );\n    } else {\n      // Increment attempt count\n      this.attemptCount++;\n\n      // Calculate backoff time with exponential increase\n      // Formula: initialBackoff * 2^(attemptCount - 1)\n      this.currentBackoffMs = Math.min(\n        this.initialBackoffMs * Math.pow(2, this.attemptCount - 1),\n        this.maxBackoffMs,\n      );\n\n      this.timerId = setTimeout(\n        () => this.executeCallback(),\n        this.currentBackoffMs,\n      );\n    }\n  }\n\n  /**\n   * Executes the callback and handles the result\n   */\n  private async executeCallback(): Promise<void> {\n    if (!this.isRunning) {\n      return;\n    }\n\n    try {\n      const result = await this.callback();\n\n      this.scheduleNextAttempt(result);\n    } catch (_error) {\n      // Treat errors as failed attempts\n      this.scheduleNextAttempt(false);\n    }\n  }\n}\n","/**\n * Utility for lazy-loading the VS Code module in environments where it's available.\n * This allows the SDK to be used in both VS Code extension and Node.js environments.\n */\n\nlet vscodeModule: typeof import('vscode') | undefined;\n\n/**\n * Attempts to dynamically import the VS Code module.\n * Returns undefined if not running in a VS Code extension context.\n */\nexport async function getVscode(): Promise<\n  typeof import('vscode') | undefined\n> {\n  try {\n    // Lazy dynamic import so Node environments without VS Code don't fail.\n    return (vscodeModule ??= await import('vscode'));\n  } catch {\n    return undefined;\n  }\n}\n","import crypto from 'crypto';\nimport EventEmitter from 'events';\n\nimport type { ExtensionContext } from 'vscode';\nimport { z } from 'zod';\n\nimport type {\n  CloudUserInfo,\n  CloudOrganizationMembership,\n} from '@roo-code/types';\n\nimport {\n  getClerkBaseUrl,\n  getRooCodeApiUrl,\n  PRODUCTION_CLERK_BASE_URL,\n} from '../config.js';\nimport { getUserAgent } from '../utils.js';\nimport { InvalidClientTokenError } from '../errors.js';\nimport { RefreshTimer } from '../RefreshTimer.js';\nimport { getVscode } from '../utils/vscode-loader.js';\n\nimport type {\n  AuthService,\n  AuthServiceEvents,\n  AuthState,\n} from './AuthService.js';\n\nconst AUTH_STATE_KEY = 'clerk-auth-state';\n\n/**\n * AuthCredentials\n */\n\nconst authCredentialsSchema = z.object({\n  clientToken: z.string().min(1, 'Client token cannot be empty'),\n  sessionId: z.string().min(1, 'Session ID cannot be empty'),\n  organizationId: z.string().nullable().optional(),\n});\n\ntype AuthCredentials = z.infer<typeof authCredentialsSchema>;\n\n/**\n * Clerk Schemas\n */\n\nconst clerkSignInResponseSchema = z.object({\n  response: z.object({\n    created_session_id: z.string(),\n  }),\n});\n\nconst clerkCreateSessionTokenResponseSchema = z.object({\n  jwt: z.string(),\n});\n\nconst clerkMeResponseSchema = z.object({\n  response: z.object({\n    id: z.string().optional(),\n    first_name: z.string().nullish(),\n    last_name: z.string().nullish(),\n    image_url: z.string().optional(),\n    primary_email_address_id: z.string().optional(),\n    email_addresses: z\n      .array(\n        z.object({\n          id: z.string(),\n          email_address: z.string(),\n        }),\n      )\n      .optional(),\n    public_metadata: z.record(z.any()).optional(),\n  }),\n});\n\nconst clerkOrganizationMembershipsSchema = z.object({\n  response: z.array(\n    z.object({\n      id: z.string(),\n      role: z.string(),\n      permissions: z.array(z.string()).optional(),\n      created_at: z.number().optional(),\n      updated_at: z.number().optional(),\n      organization: z.object({\n        id: z.string(),\n        name: z.string(),\n        slug: z.string().optional(),\n        image_url: z.string().optional(),\n        has_image: z.boolean().optional(),\n        created_at: z.number().optional(),\n        updated_at: z.number().optional(),\n      }),\n    }),\n  ),\n});\n\nexport class WebAuthService\n  extends EventEmitter<AuthServiceEvents>\n  implements AuthService\n{\n  private context: ExtensionContext;\n  private timer: RefreshTimer;\n  private state: AuthState = 'initializing';\n  private log: (...args: unknown[]) => void;\n  private readonly authCredentialsKey: string;\n\n  private credentials: AuthCredentials | null = null;\n  private sessionToken: string | null = null;\n  private userInfo: CloudUserInfo | null = null;\n  private isFirstRefreshAttempt: boolean = false;\n\n  constructor(context: ExtensionContext, log?: (...args: unknown[]) => void) {\n    super();\n\n    this.context = context;\n    this.log = log || console.log;\n\n    // Calculate auth credentials key based on Clerk base URL.\n    const clerkBaseUrl = getClerkBaseUrl();\n\n    if (clerkBaseUrl !== PRODUCTION_CLERK_BASE_URL) {\n      this.authCredentialsKey = `clerk-auth-credentials-${clerkBaseUrl}`;\n    } else {\n      this.authCredentialsKey = 'clerk-auth-credentials';\n    }\n\n    this.timer = new RefreshTimer({\n      callback: async () => {\n        await this.refreshSession();\n        return true;\n      },\n      successInterval: 50_000,\n      initialBackoffMs: 1_000,\n      maxBackoffMs: 300_000,\n    });\n  }\n\n  private changeState(newState: AuthState): void {\n    const previousState = this.state;\n    this.state = newState;\n    this.emit('auth-state-changed', { state: newState, previousState });\n  }\n\n  private async handleCredentialsChange(): Promise<void> {\n    try {\n      const credentials = await this.loadCredentials();\n\n      if (credentials) {\n        if (\n          this.credentials === null ||\n          this.credentials.clientToken !== credentials.clientToken ||\n          this.credentials.sessionId !== credentials.sessionId\n        ) {\n          this.transitionToAttemptingSession(credentials);\n        }\n      } else {\n        if (this.state !== 'logged-out') {\n          this.transitionToLoggedOut();\n        }\n      }\n    } catch (error) {\n      this.log('[auth] Error handling credentials change:', error);\n    }\n  }\n\n  private transitionToLoggedOut(): void {\n    this.timer.stop();\n\n    this.credentials = null;\n    this.sessionToken = null;\n    this.userInfo = null;\n\n    this.changeState('logged-out');\n\n    this.log('[auth] Transitioned to logged-out state');\n  }\n\n  private transitionToAttemptingSession(credentials: AuthCredentials): void {\n    this.credentials = credentials;\n\n    this.sessionToken = null;\n    this.userInfo = null;\n    this.isFirstRefreshAttempt = true;\n\n    this.changeState('attempting-session');\n\n    this.timer.start();\n\n    this.log('[auth] Transitioned to attempting-session state');\n  }\n\n  private transitionToInactiveSession(): void {\n    this.sessionToken = null;\n    this.userInfo = null;\n\n    this.changeState('inactive-session');\n\n    this.log('[auth] Transitioned to inactive-session state');\n  }\n\n  /**\n   * Initialize the auth state\n   *\n   * This method loads tokens from storage and determines the current auth state.\n   * It also starts the refresh timer if we have an active session.\n   */\n  public async initialize(): Promise<void> {\n    if (this.state !== 'initializing') {\n      this.log('[auth] initialize() called after already initialized');\n      return;\n    }\n\n    await this.handleCredentialsChange();\n\n    this.context.subscriptions.push(\n      this.context.secrets.onDidChange((e) => {\n        if (e.key === this.authCredentialsKey) {\n          this.handleCredentialsChange();\n        }\n      }),\n    );\n  }\n\n  private async storeCredentials(credentials: AuthCredentials): Promise<void> {\n    await this.context.secrets.store(\n      this.authCredentialsKey,\n      JSON.stringify(credentials),\n    );\n  }\n\n  private async loadCredentials(): Promise<AuthCredentials | null> {\n    const credentialsJson = await this.context.secrets.get(\n      this.authCredentialsKey,\n    );\n    if (!credentialsJson) return null;\n\n    try {\n      const parsedJson = JSON.parse(credentialsJson);\n      const credentials = authCredentialsSchema.parse(parsedJson);\n\n      // Migration: If no organizationId but we have userInfo, add it\n      if (\n        credentials.organizationId === undefined &&\n        this.userInfo?.organizationId\n      ) {\n        credentials.organizationId = this.userInfo.organizationId;\n        await this.storeCredentials(credentials);\n        this.log('[auth] Migrated credentials with organizationId');\n      }\n\n      return credentials;\n    } catch (error) {\n      if (error instanceof z.ZodError) {\n        this.log('[auth] Invalid credentials format:', error.errors);\n      } else {\n        this.log('[auth] Failed to parse stored credentials:', error);\n      }\n      return null;\n    }\n  }\n\n  private async clearCredentials(): Promise<void> {\n    await this.context.secrets.delete(this.authCredentialsKey);\n  }\n\n  /**\n   * Start the login process\n   *\n   * This method initiates the authentication flow by generating a state parameter\n   * and opening the browser to the authorization URL.\n   */\n  public async login(): Promise<void> {\n    try {\n      const vscode = await getVscode();\n\n      if (!vscode) {\n        throw new Error('VS Code API not available');\n      }\n\n      // Generate a cryptographically random state parameter.\n      const state = crypto.randomBytes(16).toString('hex');\n      await this.context.globalState.update(AUTH_STATE_KEY, state);\n      const packageJSON = this.context.extension?.packageJSON;\n      const publisher = packageJSON?.publisher ?? 'RooVeterinaryInc';\n      const name = packageJSON?.name ?? 'roo-cline';\n      const params = new URLSearchParams({\n        state,\n        auth_redirect: `${vscode.env.uriScheme}://${publisher}.${name}`,\n      });\n      const url = `${getRooCodeApiUrl()}/extension/sign-in?${params.toString()}`;\n      await vscode.env.openExternal(vscode.Uri.parse(url));\n    } catch (error) {\n      this.log(`[auth] Error initiating Roo Code Cloud auth: ${error}`);\n      throw new Error(\n        `Failed to initiate Roo Code Cloud authentication: ${error}`,\n      );\n    }\n  }\n\n  /**\n   * Handle the callback from Roo Code Cloud\n   *\n   * This method is called when the user is redirected back to the extension\n   * after authenticating with Roo Code Cloud.\n   *\n   * @param code The authorization code from the callback\n   * @param state The state parameter from the callback\n   * @param organizationId The organization ID from the callback (null for personal accounts)\n   */\n  public async handleCallback(\n    code: string | null,\n    state: string | null,\n    organizationId?: string | null,\n  ): Promise<void> {\n    if (!code || !state) {\n      const vscode = await getVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage(\n          'Invalid Roo Code Cloud sign in url',\n        );\n      }\n\n      return;\n    }\n\n    try {\n      // Validate state parameter to prevent CSRF attacks.\n      const storedState = this.context.globalState.get(AUTH_STATE_KEY);\n\n      if (state !== storedState) {\n        this.log('[auth] State mismatch in callback');\n        throw new Error(\n          'Invalid state parameter. Authentication request may have been tampered with.',\n        );\n      }\n\n      const credentials = await this.clerkSignIn(code);\n\n      // Set organizationId (null for personal accounts)\n      credentials.organizationId = organizationId || null;\n\n      await this.storeCredentials(credentials);\n\n      const vscode = await getVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage(\n          'Successfully authenticated with Roo Code Cloud',\n        );\n      }\n\n      this.log('[auth] Successfully authenticated with Roo Code Cloud');\n    } catch (error) {\n      this.log(`[auth] Error handling Roo Code Cloud callback: ${error}`);\n      this.changeState('logged-out');\n      throw new Error(`Failed to handle Roo Code Cloud callback: ${error}`);\n    }\n  }\n\n  /**\n   * Log out\n   *\n   * This method removes all stored tokens and stops the refresh timer.\n   */\n  public async logout(): Promise<void> {\n    const oldCredentials = this.credentials;\n\n    try {\n      // Clear credentials from storage - onDidChange will handle state transitions\n      await this.clearCredentials();\n      await this.context.globalState.update(AUTH_STATE_KEY, undefined);\n\n      if (oldCredentials) {\n        try {\n          await this.clerkLogout(oldCredentials);\n        } catch (error) {\n          this.log('[auth] Error calling clerkLogout:', error);\n        }\n      }\n\n      const vscode = await getVscode();\n\n      if (vscode) {\n        vscode.window.showInformationMessage('Logged out from Roo Code Cloud');\n      }\n\n      this.log('[auth] Logged out from Roo Code Cloud');\n    } catch (error) {\n      this.log(`[auth] Error logging out from Roo Code Cloud: ${error}`);\n      throw new Error(`Failed to log out from Roo Code Cloud: ${error}`);\n    }\n  }\n\n  public getState(): AuthState {\n    return this.state;\n  }\n\n  public getSessionToken(): string | undefined {\n    if (this.state === 'active-session' && this.sessionToken) {\n      return this.sessionToken;\n    }\n\n    return;\n  }\n\n  /**\n   * Check if the user is authenticated\n   *\n   * @returns True if the user is authenticated (has an active, attempting, or inactive session)\n   */\n  public isAuthenticated(): boolean {\n    return (\n      this.state === 'active-session' ||\n      this.state === 'attempting-session' ||\n      this.state === 'inactive-session'\n    );\n  }\n\n  public hasActiveSession(): boolean {\n    return this.state === 'active-session';\n  }\n\n  /**\n   * Check if the user has an active session or is currently attempting to acquire one\n   *\n   * @returns True if the user has an active session or is attempting to get one\n   */\n  public hasOrIsAcquiringActiveSession(): boolean {\n    return (\n      this.state === 'active-session' || this.state === 'attempting-session'\n    );\n  }\n\n  /**\n   * Refresh the session\n   *\n   * This method refreshes the session token using the client token.\n   */\n  private async refreshSession(): Promise<void> {\n    if (!this.credentials) {\n      this.log('[auth] Cannot refresh session: missing credentials');\n      return;\n    }\n\n    try {\n      const previousState = this.state;\n      this.sessionToken = await this.clerkCreateSessionToken();\n\n      if (previousState !== 'active-session') {\n        this.changeState('active-session');\n        this.log('[auth] Transitioned to active-session state');\n        this.fetchUserInfo();\n      } else {\n        this.state = 'active-session';\n      }\n    } catch (error) {\n      if (error instanceof InvalidClientTokenError) {\n        this.log('[auth] Invalid/Expired client token: clearing credentials');\n        this.clearCredentials();\n      } else if (\n        this.isFirstRefreshAttempt &&\n        this.state === 'attempting-session'\n      ) {\n        this.isFirstRefreshAttempt = false;\n        this.transitionToInactiveSession();\n      }\n      this.log('[auth] Failed to refresh session', error);\n      throw error;\n    }\n  }\n\n  private async fetchUserInfo(): Promise<void> {\n    if (!this.credentials) {\n      return;\n    }\n\n    this.userInfo = await this.clerkMe();\n    this.emit('user-info', { userInfo: this.userInfo });\n  }\n\n  /**\n   * Extract user information from the ID token\n   *\n   * @returns User information from ID token claims or null if no ID token available\n   */\n  public getUserInfo(): CloudUserInfo | null {\n    return this.userInfo;\n  }\n\n  /**\n   * Get the stored organization ID from credentials\n   *\n   * @returns The stored organization ID, null for personal accounts or if no credentials exist\n   */\n  public getStoredOrganizationId(): string | null {\n    return this.credentials?.organizationId || null;\n  }\n\n  private async clerkSignIn(ticket: string): Promise<AuthCredentials> {\n    const formData = new URLSearchParams();\n    formData.append('strategy', 'ticket');\n    formData.append('ticket', ticket);\n\n    const response = await fetch(`${getClerkBaseUrl()}/v1/client/sign_ins`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'User-Agent': this.userAgent(),\n      },\n      body: formData.toString(),\n      signal: AbortSignal.timeout(10000),\n    });\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const {\n      response: { created_session_id: sessionId },\n    } = clerkSignInResponseSchema.parse(await response.json());\n\n    // 3. Extract the client token from the Authorization header.\n    const clientToken = response.headers.get('authorization');\n\n    if (!clientToken) {\n      throw new Error('No authorization header found in the response');\n    }\n\n    return authCredentialsSchema.parse({ clientToken, sessionId });\n  }\n\n  private async clerkCreateSessionToken(): Promise<string> {\n    const formData = new URLSearchParams();\n    formData.append('_is_native', '1');\n\n    // Handle 3 cases for organization_id:\n    // 1. Have an org id: organization_id=THE_ORG_ID\n    // 2. Have a personal account: organization_id= (empty string)\n    // 3. Don't know if you have an org id (old style credentials): don't send organization_id param at all\n    const organizationId = this.getStoredOrganizationId();\n    if (this.credentials?.organizationId !== undefined) {\n      // We have organization context info (either org id or personal account)\n      formData.append('organization_id', organizationId || '');\n    }\n    // If organizationId is undefined, don't send the param at all (old credentials)\n\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/client/sessions/${this.credentials!.sessionId}/tokens`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded',\n          Authorization: `Bearer ${this.credentials!.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        body: formData.toString(),\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    if (response.status === 401 || response.status === 404) {\n      throw new InvalidClientTokenError();\n    } else if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const data = clerkCreateSessionTokenResponseSchema.parse(\n      await response.json(),\n    );\n\n    return data.jwt;\n  }\n\n  private async clerkMe(): Promise<CloudUserInfo> {\n    const response = await fetch(`${getClerkBaseUrl()}/v1/me`, {\n      headers: {\n        Authorization: `Bearer ${this.credentials!.clientToken}`,\n        'User-Agent': this.userAgent(),\n      },\n      signal: AbortSignal.timeout(10000),\n    });\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n\n    const payload = await response.json();\n    const { response: userData } = clerkMeResponseSchema.parse(payload);\n\n    const userInfo: CloudUserInfo = {\n      id: userData.id,\n      picture: userData.image_url,\n    };\n\n    const names = [userData.first_name, userData.last_name].filter(\n      (name) => !!name,\n    );\n    userInfo.name = names.length > 0 ? names.join(' ') : undefined;\n    const primaryEmailAddressId = userData.primary_email_address_id;\n    const emailAddresses = userData.email_addresses;\n\n    if (primaryEmailAddressId && emailAddresses) {\n      userInfo.email = emailAddresses.find(\n        (email: { id: string }) => primaryEmailAddressId === email.id,\n      )?.email_address;\n    }\n\n    // Check for extension_bridge_enabled in user's public metadata\n    let extensionBridgeEnabled = false;\n    if (userData.public_metadata?.extension_bridge_enabled === true) {\n      extensionBridgeEnabled = true;\n    }\n\n    // Fetch organization info if user is in organization context\n    try {\n      const storedOrgId = this.getStoredOrganizationId();\n\n      if (this.credentials?.organizationId !== undefined) {\n        // We have organization context info\n        if (storedOrgId !== null) {\n          // User is in organization context - fetch user's memberships and filter\n          const orgMemberships = await this.clerkGetOrganizationMemberships();\n          const userMembership = this.findOrganizationMembership(\n            orgMemberships,\n            storedOrgId,\n          );\n\n          if (userMembership) {\n            this.setUserOrganizationInfo(userInfo, userMembership);\n\n            // Check organization public metadata for extension_bridge_enabled\n            // Organization setting takes precedence over user setting\n            if (\n              await this.isExtensionBridgeEnabledForOrganization(storedOrgId)\n            ) {\n              extensionBridgeEnabled = true;\n            }\n\n            this.log('[auth] User in organization context:', {\n              id: userMembership.organization.id,\n              name: userMembership.organization.name,\n              role: userMembership.role,\n            });\n          } else {\n            this.log(\n              '[auth] Warning: User not found in stored organization:',\n              storedOrgId,\n            );\n          }\n        } else {\n          this.log(\n            '[auth] User in personal account context - not setting organization info',\n          );\n        }\n      } else {\n        // Old credentials without organization context - fetch organization info to determine context\n        const orgMemberships = await this.clerkGetOrganizationMemberships();\n        const primaryOrgMembership =\n          this.findPrimaryOrganizationMembership(orgMemberships);\n\n        if (primaryOrgMembership) {\n          this.setUserOrganizationInfo(userInfo, primaryOrgMembership);\n\n          // Check organization public metadata for extension_bridge_enabled\n          if (\n            await this.isExtensionBridgeEnabledForOrganization(\n              primaryOrgMembership.organization.id,\n            )\n          ) {\n            extensionBridgeEnabled = true;\n          }\n\n          this.log(\n            '[auth] Legacy credentials: Found organization membership:',\n            {\n              id: primaryOrgMembership.organization.id,\n              name: primaryOrgMembership.organization.name,\n              role: primaryOrgMembership.role,\n            },\n          );\n        } else {\n          this.log(\n            '[auth] Legacy credentials: No organization memberships found',\n          );\n        }\n      }\n    } catch (error) {\n      this.log('[auth] Failed to fetch organization info:', error);\n      // Don't throw - organization info is optional\n    }\n\n    // Set the extension bridge enabled flag\n    userInfo.extensionBridgeEnabled = extensionBridgeEnabled;\n\n    return userInfo;\n  }\n\n  private findOrganizationMembership(\n    memberships: CloudOrganizationMembership[],\n    organizationId: string,\n  ): CloudOrganizationMembership | undefined {\n    return memberships?.find(\n      (membership) => membership.organization.id === organizationId,\n    );\n  }\n\n  private findPrimaryOrganizationMembership(\n    memberships: CloudOrganizationMembership[],\n  ): CloudOrganizationMembership | undefined {\n    return memberships && memberships.length > 0 ? memberships[0] : undefined;\n  }\n\n  private setUserOrganizationInfo(\n    userInfo: CloudUserInfo,\n    membership: CloudOrganizationMembership,\n  ): void {\n    userInfo.organizationId = membership.organization.id;\n    userInfo.organizationName = membership.organization.name;\n    userInfo.organizationRole = membership.role;\n    userInfo.organizationImageUrl = membership.organization.image_url;\n  }\n\n  private async clerkGetOrganizationMemberships(): Promise<\n    CloudOrganizationMembership[]\n  > {\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/me/organization_memberships`,\n      {\n        headers: {\n          Authorization: `Bearer ${this.credentials!.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    return clerkOrganizationMembershipsSchema.parse(await response.json())\n      .response;\n  }\n\n  private async getOrganizationMetadata(\n    organizationId: string,\n  ): Promise<{ public_metadata?: Record<string, unknown> } | null> {\n    try {\n      const response = await fetch(\n        `${getClerkBaseUrl()}/v1/organizations/${organizationId}`,\n        {\n          headers: {\n            Authorization: `Bearer ${this.credentials!.clientToken}`,\n            'User-Agent': this.userAgent(),\n          },\n          signal: AbortSignal.timeout(10000),\n        },\n      );\n\n      if (!response.ok) {\n        this.log(\n          `[auth] Failed to fetch organization metadata: ${response.status} ${response.statusText}`,\n        );\n        return null;\n      }\n\n      const data = await response.json();\n      return data.response || data;\n    } catch (error) {\n      this.log('[auth] Error fetching organization metadata:', error);\n      return null;\n    }\n  }\n\n  private async isExtensionBridgeEnabledForOrganization(\n    organizationId: string,\n  ): Promise<boolean> {\n    const orgMetadata = await this.getOrganizationMetadata(organizationId);\n    return orgMetadata?.public_metadata?.extension_bridge_enabled === true;\n  }\n\n  private async clerkLogout(credentials: AuthCredentials): Promise<void> {\n    const formData = new URLSearchParams();\n    formData.append('_is_native', '1');\n\n    const response = await fetch(\n      `${getClerkBaseUrl()}/v1/client/sessions/${credentials.sessionId}/remove`,\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/x-www-form-urlencoded',\n          Authorization: `Bearer ${credentials.clientToken}`,\n          'User-Agent': this.userAgent(),\n        },\n        body: formData.toString(),\n        signal: AbortSignal.timeout(10000),\n      },\n    );\n\n    if (!response.ok) {\n      throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    }\n  }\n\n  private userAgent(): string {\n    return getUserAgent(this.context);\n  }\n}\n","import EventEmitter from 'events';\n\nimport type { ExtensionContext } from 'vscode';\n\nimport type { CloudUserInfo } from '@roo-code/types';\n\nimport type {\n  AuthService,\n  AuthServiceEvents,\n  AuthState,\n} from './AuthService.js';\n\nexport class StaticTokenAuthService\n  extends EventEmitter<AuthServiceEvents>\n  implements AuthService\n{\n  private state: AuthState = 'active-session';\n  private token: string;\n  private log: (...args: unknown[]) => void;\n\n  constructor(\n    context: ExtensionContext,\n    token: string,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n    this.token = token;\n    this.log = log || console.log;\n    this.log('[auth] Using static token authentication mode');\n  }\n\n  public async initialize(): Promise<void> {\n    const previousState: AuthState = 'initializing';\n    this.state = 'active-session';\n    this.emit('auth-state-changed', { state: this.state, previousState });\n    this.log(\n      '[auth] Static token auth service initialized in active-session state',\n    );\n  }\n\n  public async login(): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public async logout(): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public async handleCallback(\n    _code: string | null,\n    _state: string | null,\n    _organizationId?: string | null,\n  ): Promise<void> {\n    throw new Error(\n      'Authentication methods are disabled in StaticTokenAuthService',\n    );\n  }\n\n  public getState(): AuthState {\n    return this.state;\n  }\n\n  public getSessionToken(): string | undefined {\n    return this.token;\n  }\n\n  public isAuthenticated(): boolean {\n    return true;\n  }\n\n  public hasActiveSession(): boolean {\n    return true;\n  }\n\n  public hasOrIsAcquiringActiveSession(): boolean {\n    return true;\n  }\n\n  public getUserInfo(): CloudUserInfo | null {\n    return {};\n  }\n\n  public getStoredOrganizationId(): string | null {\n    return null;\n  }\n}\n","import type { ExtensionContext } from 'vscode';\nimport EventEmitter from 'events';\n\nimport {\n  ORGANIZATION_ALLOW_ALL,\n  OrganizationAllowList,\n  OrganizationSettings,\n  organizationSettingsSchema,\n} from '@roo-code/types';\n\nimport { getRooCodeApiUrl } from './config.js';\nimport type { AuthService, AuthState } from './auth/index.js';\nimport { RefreshTimer } from './RefreshTimer.js';\nimport type { SettingsService } from './SettingsService.js';\n\nconst ORGANIZATION_SETTINGS_CACHE_KEY = 'organization-settings';\n\nexport interface SettingsServiceEvents {\n  'settings-updated': [\n    data: {\n      settings: OrganizationSettings;\n      previousSettings: OrganizationSettings | undefined;\n    },\n  ];\n}\n\nexport class CloudSettingsService\n  extends EventEmitter<SettingsServiceEvents>\n  implements SettingsService\n{\n  private context: ExtensionContext;\n  private authService: AuthService;\n  private settings: OrganizationSettings | undefined = undefined;\n  private timer: RefreshTimer;\n  private log: (...args: unknown[]) => void;\n\n  constructor(\n    context: ExtensionContext,\n    authService: AuthService,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n\n    this.context = context;\n    this.authService = authService;\n    this.log = log || console.log;\n\n    this.timer = new RefreshTimer({\n      callback: async () => {\n        return await this.fetchSettings();\n      },\n      successInterval: 30000,\n      initialBackoffMs: 1000,\n      maxBackoffMs: 30000,\n    });\n  }\n\n  public initialize(): void {\n    this.loadCachedSettings();\n\n    // Clear cached settings if we have missed a log out.\n    if (this.authService.getState() == 'logged-out' && this.settings) {\n      this.removeSettings();\n    }\n\n    this.authService.on(\n      'auth-state-changed',\n      (data: { state: AuthState; previousState: AuthState }) => {\n        if (data.state === 'active-session') {\n          this.timer.start();\n        } else if (data.previousState === 'active-session') {\n          this.timer.stop();\n\n          if (data.state === 'logged-out') {\n            this.removeSettings();\n          }\n        }\n      },\n    );\n\n    if (this.authService.hasActiveSession()) {\n      this.timer.start();\n    }\n  }\n\n  private async fetchSettings(): Promise<boolean> {\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      return false;\n    }\n\n    try {\n      const response = await fetch(\n        `${getRooCodeApiUrl()}/api/organization-settings`,\n        {\n          headers: {\n            Authorization: `Bearer ${token}`,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        this.log(\n          '[cloud-settings] Failed to fetch organization settings:',\n          response.status,\n          response.statusText,\n        );\n        return false;\n      }\n\n      const data = await response.json();\n      const result = organizationSettingsSchema.safeParse(data);\n\n      if (!result.success) {\n        this.log(\n          '[cloud-settings] Invalid organization settings format:',\n          result.error,\n        );\n        return false;\n      }\n\n      const newSettings = result.data;\n\n      if (!this.settings || this.settings.version !== newSettings.version) {\n        const previousSettings = this.settings;\n        this.settings = newSettings;\n        await this.cacheSettings();\n\n        this.emit('settings-updated', {\n          settings: this.settings,\n          previousSettings,\n        });\n      }\n\n      return true;\n    } catch (error) {\n      this.log('[cloud-settings] Error fetching organization settings:', error);\n      return false;\n    }\n  }\n\n  private async cacheSettings(): Promise<void> {\n    await this.context.globalState.update(\n      ORGANIZATION_SETTINGS_CACHE_KEY,\n      this.settings,\n    );\n  }\n\n  private loadCachedSettings(): void {\n    this.settings = this.context.globalState.get<OrganizationSettings>(\n      ORGANIZATION_SETTINGS_CACHE_KEY,\n    );\n  }\n\n  public getAllowList(): OrganizationAllowList {\n    return this.settings?.allowList || ORGANIZATION_ALLOW_ALL;\n  }\n\n  public getSettings(): OrganizationSettings | undefined {\n    return this.settings;\n  }\n\n  private async removeSettings(): Promise<void> {\n    this.settings = undefined;\n    await this.cacheSettings();\n  }\n\n  public dispose(): void {\n    this.removeAllListeners();\n    this.timer.stop();\n  }\n}\n","import {\n  ORGANIZATION_ALLOW_ALL,\n  OrganizationAllowList,\n  OrganizationSettings,\n  organizationSettingsSchema,\n} from '@roo-code/types';\n\nimport type { SettingsService } from './SettingsService.js';\n\nexport class StaticSettingsService implements SettingsService {\n  private settings: OrganizationSettings;\n  private log: (...args: unknown[]) => void;\n\n  constructor(envValue: string, log?: (...args: unknown[]) => void) {\n    this.log = log || console.log;\n    this.settings = this.parseEnvironmentSettings(envValue);\n  }\n\n  private parseEnvironmentSettings(envValue: string): OrganizationSettings {\n    try {\n      const decodedValue = Buffer.from(envValue, 'base64').toString('utf-8');\n      const parsedJson = JSON.parse(decodedValue);\n      return organizationSettingsSchema.parse(parsedJson);\n    } catch (error) {\n      this.log(\n        `[StaticSettingsService] failed to parse static settings: ${error instanceof Error ? error.message : String(error)}`,\n        error,\n      );\n\n      throw new Error('Failed to parse static settings', { cause: error });\n    }\n  }\n\n  public getAllowList(): OrganizationAllowList {\n    return this.settings?.allowList || ORGANIZATION_ALLOW_ALL;\n  }\n\n  public getSettings(): OrganizationSettings | undefined {\n    return this.settings;\n  }\n\n  public dispose(): void {\n    // No resources to clean up for static settings.\n  }\n}\n","import {\n  type TelemetryClient,\n  type TelemetryEvent,\n  type ClineMessage,\n  TelemetryEventName,\n  rooCodeTelemetryEventSchema,\n  TelemetryPropertiesProvider,\n  TelemetryEventSubscription,\n} from '@roo-code/types';\n\nimport { getRooCodeApiUrl } from './config.js';\nimport type { AuthService } from './auth/index.js';\nimport type { SettingsService } from './SettingsService.js';\n\nabstract class BaseTelemetryClient implements TelemetryClient {\n  protected providerRef: WeakRef<TelemetryPropertiesProvider> | null = null;\n  protected telemetryEnabled: boolean = false;\n\n  constructor(\n    public readonly subscription?: TelemetryEventSubscription,\n    protected readonly debug = false,\n  ) {}\n\n  protected isEventCapturable(eventName: TelemetryEventName): boolean {\n    if (!this.subscription) {\n      return true;\n    }\n\n    return this.subscription.type === 'include'\n      ? this.subscription.events.includes(eventName)\n      : !this.subscription.events.includes(eventName);\n  }\n\n  /**\n   * Determines if a specific property should be included in telemetry events\n   * Override in subclasses to filter specific properties\n   */\n  protected isPropertyCapturable(_propertyName: string): boolean {\n    return true;\n  }\n\n  protected async getEventProperties(\n    event: TelemetryEvent,\n  ): Promise<TelemetryEvent['properties']> {\n    let providerProperties: TelemetryEvent['properties'] = {};\n    const provider = this.providerRef?.deref();\n\n    if (provider) {\n      try {\n        // Get properties from the provider\n        providerProperties = await provider.getTelemetryProperties();\n      } catch (error) {\n        // Log error but continue with capturing the event.\n        console.error(\n          `Error getting telemetry properties: ${error instanceof Error ? error.message : String(error)}`,\n        );\n      }\n    }\n\n    // Merge provider properties with event-specific properties.\n    // Event properties take precedence in case of conflicts.\n    const mergedProperties = {\n      ...providerProperties,\n      ...(event.properties || {}),\n    };\n\n    // Filter out properties that shouldn't be captured by this client\n    return Object.fromEntries(\n      Object.entries(mergedProperties).filter(([key]) =>\n        this.isPropertyCapturable(key),\n      ),\n    );\n  }\n\n  public abstract capture(event: TelemetryEvent): Promise<void>;\n\n  public setProvider(provider: TelemetryPropertiesProvider): void {\n    this.providerRef = new WeakRef(provider);\n  }\n\n  public abstract updateTelemetryState(didUserOptIn: boolean): void;\n\n  public isTelemetryEnabled(): boolean {\n    return this.telemetryEnabled;\n  }\n\n  public abstract shutdown(): Promise<void>;\n}\n\nexport class CloudTelemetryClient extends BaseTelemetryClient {\n  constructor(\n    private authService: AuthService,\n    private settingsService: SettingsService,\n    debug = false,\n  ) {\n    super(\n      {\n        type: 'exclude',\n        events: [TelemetryEventName.TASK_CONVERSATION_MESSAGE],\n      },\n      debug,\n    );\n  }\n\n  private async fetch(path: string, options: RequestInit) {\n    if (!this.authService.isAuthenticated()) {\n      return;\n    }\n\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      console.error(\n        `[TelemetryClient#fetch] Unauthorized: No session token available.`,\n      );\n      return;\n    }\n\n    const response = await fetch(`${getRooCodeApiUrl()}/api/${path}`, {\n      ...options,\n      headers: {\n        Authorization: `Bearer ${token}`,\n        'Content-Type': 'application/json',\n      },\n    });\n\n    if (!response.ok) {\n      console.error(\n        `[TelemetryClient#fetch] ${options.method} ${path} -> ${response.status} ${response.statusText}`,\n      );\n    }\n  }\n\n  public override async capture(event: TelemetryEvent) {\n    if (!this.isTelemetryEnabled() || !this.isEventCapturable(event.event)) {\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#capture] Skipping event: ${event.event}`,\n        );\n      }\n\n      return;\n    }\n\n    const payload = {\n      type: event.event,\n      properties: await this.getEventProperties(event),\n    };\n\n    if (this.debug) {\n      console.info(`[TelemetryClient#capture] ${JSON.stringify(payload)}`);\n    }\n\n    const result = rooCodeTelemetryEventSchema.safeParse(payload);\n\n    if (!result.success) {\n      console.error(\n        `[TelemetryClient#capture] Invalid telemetry event: ${result.error.message} - ${JSON.stringify(payload)}`,\n      );\n\n      return;\n    }\n\n    try {\n      await this.fetch(`events`, {\n        method: 'POST',\n        body: JSON.stringify(result.data),\n      });\n    } catch (error) {\n      console.error(\n        `[TelemetryClient#capture] Error sending telemetry event: ${error}`,\n      );\n    }\n  }\n\n  public async backfillMessages(\n    messages: ClineMessage[],\n    taskId: string,\n  ): Promise<void> {\n    if (!this.authService.isAuthenticated()) {\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Skipping: Not authenticated`,\n        );\n      }\n      return;\n    }\n\n    const token = this.authService.getSessionToken();\n\n    if (!token) {\n      console.error(\n        `[TelemetryClient#backfillMessages] Unauthorized: No session token available.`,\n      );\n      return;\n    }\n\n    try {\n      const mergedProperties = await this.getEventProperties({\n        event: TelemetryEventName.TASK_MESSAGE,\n        properties: { taskId },\n      });\n\n      const formData = new FormData();\n      formData.append('taskId', taskId);\n      formData.append('properties', JSON.stringify(mergedProperties));\n\n      formData.append(\n        'file',\n        new File([JSON.stringify(messages)], 'task.json', {\n          type: 'application/json',\n        }),\n      );\n\n      if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Uploading ${messages.length} messages for task ${taskId}`,\n        );\n      }\n\n      // Custom fetch for multipart - don't set Content-Type header (let browser set it)\n      const response = await fetch(\n        `${getRooCodeApiUrl()}/api/events/backfill`,\n        {\n          method: 'POST',\n          headers: {\n            Authorization: `Bearer ${token}`,\n            // Note: No Content-Type header - browser will set multipart/form-data with boundary\n          },\n          body: formData,\n        },\n      );\n\n      if (!response.ok) {\n        console.error(\n          `[TelemetryClient#backfillMessages] POST events/backfill -> ${response.status} ${response.statusText}`,\n        );\n      } else if (this.debug) {\n        console.info(\n          `[TelemetryClient#backfillMessages] Successfully uploaded messages for task ${taskId}`,\n        );\n      }\n    } catch (error) {\n      console.error(\n        `[TelemetryClient#backfillMessages] Error uploading messages: ${error}`,\n      );\n    }\n  }\n\n  public override updateTelemetryState(_didUserOptIn: boolean) {}\n\n  public override isTelemetryEnabled(): boolean {\n    return true;\n  }\n\n  protected override isEventCapturable(eventName: TelemetryEventName): boolean {\n    // Ensure that this event type is supported by the telemetry client\n    if (!super.isEventCapturable(eventName)) {\n      return false;\n    }\n\n    // Only record message telemetry if a cloud account is present and explicitly configured to record messages\n    if (eventName === TelemetryEventName.TASK_MESSAGE) {\n      return (\n        this.settingsService.getSettings()?.cloudSettings?.recordTaskMessages ||\n        false\n      );\n    }\n\n    // Other telemetry types are capturable at this point\n    return true;\n  }\n\n  public override async shutdown() {}\n}\n","import type { ShareResponse, ShareVisibility } from '@roo-code/types';\n\nimport type { CloudAPI } from './CloudAPI.js';\nimport type { SettingsService } from './SettingsService.js';\nimport { getVscode } from './utils/vscode-loader.js';\n\nexport class CloudShareService {\n  private cloudAPI: CloudAPI;\n  private settingsService: SettingsService;\n  private log: (...args: unknown[]) => void;\n\n  constructor(\n    cloudAPI: CloudAPI,\n    settingsService: SettingsService,\n    log?: (...args: unknown[]) => void,\n  ) {\n    this.cloudAPI = cloudAPI;\n    this.settingsService = settingsService;\n    this.log = log || console.log;\n  }\n\n  async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n  ): Promise<ShareResponse> {\n    try {\n      const response = await this.cloudAPI.shareTask(taskId, visibility);\n\n      if (response.success && response.shareUrl) {\n        const vscode = await getVscode();\n\n        if (vscode?.env?.clipboard?.writeText) {\n          try {\n            await vscode.env.clipboard.writeText(response.shareUrl);\n          } catch (copyErr) {\n            this.log(\n              '[ShareService] Clipboard write failed (non-fatal):',\n              copyErr,\n            );\n          }\n        } else {\n          this.log(\n            '[ShareService] VS Code clipboard unavailable; running outside extension host.',\n          );\n        }\n      }\n\n      return response;\n    } catch (error) {\n      this.log('[ShareService] Error sharing task:', error);\n      throw error;\n    }\n  }\n\n  async canShareTask(): Promise<boolean> {\n    try {\n      return !!this.settingsService.getSettings()?.cloudSettings\n        ?.enableTaskSharing;\n    } catch (error) {\n      this.log('[ShareService] Error checking if task can be shared:', error);\n      return false;\n    }\n  }\n}\n","import type { Disposable, ExtensionContext } from 'vscode';\nimport EventEmitter from 'events';\n\nimport type {\n  CloudUserInfo,\n  TelemetryEvent,\n  OrganizationAllowList,\n  OrganizationSettings,\n  ClineMessage,\n  ShareVisibility,\n} from '@roo-code/types';\n\nimport { CloudServiceEvents } from './types.js';\nimport { TaskNotFoundError } from './errors.js';\nimport type { AuthService } from './auth/index.js';\nimport { WebAuthService, StaticTokenAuthService } from './auth/index.js';\nimport type { SettingsService } from './SettingsService.js';\nimport { CloudSettingsService } from './CloudSettingsService.js';\nimport { StaticSettingsService } from './StaticSettingsService.js';\nimport { CloudTelemetryClient as TelemetryClient } from './TelemetryClient.js';\nimport { CloudShareService } from './CloudShareService.js';\nimport { CloudAPI } from './CloudAPI.js';\n\ntype AuthStateChangedPayload = CloudServiceEvents['auth-state-changed'][0];\ntype AuthUserInfoPayload = CloudServiceEvents['user-info'][0];\ntype SettingsPayload = CloudServiceEvents['settings-updated'][0];\n\nexport class CloudService\n  extends EventEmitter<CloudServiceEvents>\n  implements Disposable\n{\n  private static _instance: CloudService | null = null;\n\n  private context: ExtensionContext;\n  private authStateListener: (data: AuthStateChangedPayload) => void;\n  private authUserInfoListener: (data: AuthUserInfoPayload) => void;\n  private settingsListener: (data: SettingsPayload) => void;\n\n  private isInitialized = false;\n  private log: (...args: unknown[]) => void;\n\n  /**\n   * Services\n   */\n\n  private _authService: AuthService | null = null;\n\n  public get authService() {\n    return this._authService;\n  }\n\n  private _settingsService: SettingsService | null = null;\n\n  public get settingsService() {\n    return this._settingsService;\n  }\n\n  private _telemetryClient: TelemetryClient | null = null;\n\n  public get telemetryClient() {\n    return this._telemetryClient;\n  }\n\n  private _shareService: CloudShareService | null = null;\n\n  public get shareService() {\n    return this._shareService;\n  }\n\n  private _cloudAPI: CloudAPI | null = null;\n\n  public get cloudAPI() {\n    return this._cloudAPI;\n  }\n\n  private constructor(\n    context: ExtensionContext,\n    log?: (...args: unknown[]) => void,\n  ) {\n    super();\n\n    this.context = context;\n    this.log = log || console.log;\n\n    this.authStateListener = (data: AuthStateChangedPayload) => {\n      this.emit('auth-state-changed', data);\n    };\n\n    this.authUserInfoListener = (data: AuthUserInfoPayload) => {\n      this.emit('user-info', data);\n    };\n\n    this.settingsListener = (data: SettingsPayload) => {\n      this.emit('settings-updated', data);\n    };\n  }\n\n  public async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      return;\n    }\n\n    try {\n      const cloudToken = process.env.ROO_CODE_CLOUD_TOKEN;\n\n      if (cloudToken && cloudToken.length > 0) {\n        this._authService = new StaticTokenAuthService(\n          this.context,\n          cloudToken,\n          this.log,\n        );\n      } else {\n        this._authService = new WebAuthService(this.context, this.log);\n      }\n\n      await this._authService.initialize();\n\n      this._authService.on('auth-state-changed', this.authStateListener);\n      this._authService.on('user-info', this.authUserInfoListener);\n\n      // Check for static settings environment variable.\n      const staticOrgSettings = process.env.ROO_CODE_CLOUD_ORG_SETTINGS;\n\n      if (staticOrgSettings && staticOrgSettings.length > 0) {\n        this._settingsService = new StaticSettingsService(\n          staticOrgSettings,\n          this.log,\n        );\n      } else {\n        const cloudSettingsService = new CloudSettingsService(\n          this.context,\n          this._authService,\n          this.log,\n        );\n\n        cloudSettingsService.initialize();\n\n        cloudSettingsService.on('settings-updated', this.settingsListener);\n\n        this._settingsService = cloudSettingsService;\n      }\n\n      this._cloudAPI = new CloudAPI(this._authService, this.log);\n\n      this._telemetryClient = new TelemetryClient(\n        this._authService,\n        this._settingsService,\n      );\n\n      this._shareService = new CloudShareService(\n        this._cloudAPI,\n        this._settingsService,\n        this.log,\n      );\n\n      this.isInitialized = true;\n    } catch (error) {\n      this.log('[CloudService] Failed to initialize:', error);\n      throw new Error(`Failed to initialize CloudService: ${error}`);\n    }\n  }\n\n  // AuthService\n\n  public async login(): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.login();\n  }\n\n  public async logout(): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.logout();\n  }\n\n  public isAuthenticated(): boolean {\n    this.ensureInitialized();\n    return this.authService!.isAuthenticated();\n  }\n\n  public hasActiveSession(): boolean {\n    this.ensureInitialized();\n    return this.authService!.hasActiveSession();\n  }\n\n  public hasOrIsAcquiringActiveSession(): boolean {\n    this.ensureInitialized();\n    return this.authService!.hasOrIsAcquiringActiveSession();\n  }\n\n  public getUserInfo(): CloudUserInfo | null {\n    this.ensureInitialized();\n    return this.authService!.getUserInfo();\n  }\n\n  public getOrganizationId(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationId || null;\n  }\n\n  public getOrganizationName(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationName || null;\n  }\n\n  public getOrganizationRole(): string | null {\n    this.ensureInitialized();\n    const userInfo = this.authService!.getUserInfo();\n    return userInfo?.organizationRole || null;\n  }\n\n  public hasStoredOrganizationId(): boolean {\n    this.ensureInitialized();\n    return this.authService!.getStoredOrganizationId() !== null;\n  }\n\n  public getStoredOrganizationId(): string | null {\n    this.ensureInitialized();\n    return this.authService!.getStoredOrganizationId();\n  }\n\n  public getAuthState(): string {\n    this.ensureInitialized();\n    return this.authService!.getState();\n  }\n\n  public async handleAuthCallback(\n    code: string | null,\n    state: string | null,\n    organizationId?: string | null,\n  ): Promise<void> {\n    this.ensureInitialized();\n    return this.authService!.handleCallback(code, state, organizationId);\n  }\n\n  // SettingsService\n\n  public getAllowList(): OrganizationAllowList {\n    this.ensureInitialized();\n    return this.settingsService!.getAllowList();\n  }\n\n  public getOrganizationSettings(): OrganizationSettings | undefined {\n    this.ensureInitialized();\n    return this.settingsService!.getSettings();\n  }\n\n  // TelemetryClient\n\n  public captureEvent(event: TelemetryEvent): void {\n    this.ensureInitialized();\n    this.telemetryClient!.capture(event);\n  }\n\n  // ShareService\n\n  public async shareTask(\n    taskId: string,\n    visibility: ShareVisibility = 'organization',\n    clineMessages?: ClineMessage[],\n  ) {\n    this.ensureInitialized();\n\n    try {\n      return await this.shareService!.shareTask(taskId, visibility);\n    } catch (error) {\n      if (error instanceof TaskNotFoundError && clineMessages) {\n        // Backfill messages and retry.\n        await this.telemetryClient!.backfillMessages(clineMessages, taskId);\n        return await this.shareService!.shareTask(taskId, visibility);\n      }\n      throw error;\n    }\n  }\n\n  public async canShareTask(): Promise<boolean> {\n    this.ensureInitialized();\n    return this.shareService!.canShareTask();\n  }\n\n  // Lifecycle\n\n  public dispose(): void {\n    if (this.authService) {\n      this.authService.off('auth-state-changed', this.authStateListener);\n      this.authService.off('user-info', this.authUserInfoListener);\n    }\n\n    if (this.settingsService) {\n      if (this.settingsService instanceof CloudSettingsService) {\n        this.settingsService.off('settings-updated', this.settingsListener);\n      }\n\n      this.settingsService.dispose();\n    }\n\n    this.isInitialized = false;\n  }\n\n  private ensureInitialized(): void {\n    if (!this.isInitialized) {\n      throw new Error('CloudService not initialized.');\n    }\n  }\n\n  static get instance(): CloudService {\n    if (!this._instance) {\n      throw new Error('CloudService not initialized');\n    }\n\n    return this._instance;\n  }\n\n  static async createInstance(\n    context: ExtensionContext,\n    log?: (...args: unknown[]) => void,\n  ): Promise<CloudService> {\n    if (this._instance) {\n      throw new Error('CloudService instance already created');\n    }\n\n    this._instance = new CloudService(context, log);\n    await this._instance.initialize();\n    return this._instance;\n  }\n\n  static hasInstance(): boolean {\n    return this._instance !== null && this._instance.isInitialized;\n  }\n\n  static resetInstance(): void {\n    if (this._instance) {\n      this._instance.dispose();\n      this._instance = null;\n    }\n  }\n\n  static isEnabled(): boolean {\n    return !!this._instance?.isAuthenticated();\n  }\n}\n","import { io, type Socket } from 'socket.io-client';\n\nimport { ConnectionState, type RetryConfig } from '../types.js';\n\nexport interface SocketConnectionOptions {\n  url: string;\n  socketOptions: Record<string, unknown>;\n  onConnect?: () => void | Promise<void>;\n  onDisconnect?: (reason: string) => void;\n  onReconnect?: (attemptNumber: number) => void | Promise<void>;\n  onError?: (error: Error) => void;\n  logger?: {\n    log: (message: string, ...args: unknown[]) => void;\n    error: (message: string, ...args: unknown[]) => void;\n    warn: (message: string, ...args: unknown[]) => void;\n  };\n}\n\nexport class SocketConnectionManager {\n  private socket: Socket | null = null;\n  private connectionState: ConnectionState = ConnectionState.DISCONNECTED;\n  private retryAttempt: number = 0;\n  private retryTimeout: NodeJS.Timeout | null = null;\n  private hasConnectedOnce: boolean = false;\n\n  private readonly retryConfig: RetryConfig = {\n    maxInitialAttempts: 10,\n    initialDelay: 1_000,\n    maxDelay: 15_000,\n    backoffMultiplier: 2,\n  };\n\n  private readonly CONNECTION_TIMEOUT = 2_000;\n  private readonly serviceName: string;\n  private readonly options: SocketConnectionOptions;\n  private readonly logger: NonNullable<SocketConnectionOptions['logger']>;\n\n  constructor(\n    serviceName: string,\n    options: SocketConnectionOptions,\n    retryConfig?: Partial<RetryConfig>,\n  ) {\n    this.serviceName = serviceName;\n    this.options = options;\n    this.logger = options.logger || console;\n\n    if (retryConfig) {\n      this.retryConfig = { ...this.retryConfig, ...retryConfig };\n    }\n  }\n\n  public async connect(): Promise<void> {\n    if (this.connectionState === ConnectionState.CONNECTED) {\n      this.logger.log(`[${this.serviceName}] Already connected`);\n      return;\n    }\n\n    if (\n      this.connectionState === ConnectionState.CONNECTING ||\n      this.connectionState === ConnectionState.RETRYING\n    ) {\n      this.logger.log(\n        `[${this.serviceName}] Connection attempt already in progress`,\n      );\n\n      return;\n    }\n\n    this.logger.log(\n      `[${this.serviceName}] Starting connection process to Socket.IO bridge at:`,\n      this.options.url,\n    );\n\n    // Start connection attempt without blocking.\n    this.startConnectionAttempt();\n  }\n\n  private async startConnectionAttempt() {\n    this.retryAttempt = 0;\n\n    try {\n      await this.connectWithRetry();\n    } catch (error) {\n      this.logger.error(\n        `[${this.serviceName}] Initial connection attempts failed:`,\n        error,\n      );\n\n      // If we've never connected successfully, we've exhausted our retry attempts\n      // The user will need to manually retry or fix the issue\n      this.connectionState = ConnectionState.FAILED;\n    }\n  }\n\n  private async connectWithRetry(): Promise<void> {\n    let delay = this.retryConfig.initialDelay;\n\n    while (this.retryAttempt < this.retryConfig.maxInitialAttempts) {\n      try {\n        this.connectionState =\n          this.retryAttempt === 0\n            ? ConnectionState.CONNECTING\n            : ConnectionState.RETRYING;\n\n        this.logger.log(\n          `[${this.serviceName}] Connection attempt ${this.retryAttempt + 1}/${this.retryConfig.maxInitialAttempts}`,\n        );\n\n        await this.connectSocket();\n\n        this.connectionState = ConnectionState.CONNECTED;\n        this.retryAttempt = 0;\n\n        this.logger.log(\n          `[${this.serviceName}] Successfully connected to Socket.IO bridge`,\n        );\n\n        this.clearRetryTimeouts();\n\n        if (this.options.onConnect) {\n          await this.options.onConnect();\n        }\n\n        return;\n      } catch (error) {\n        this.retryAttempt++;\n\n        this.logger.error(\n          `[${this.serviceName}] Connection attempt ${this.retryAttempt} failed:`,\n          error,\n        );\n\n        if (this.socket) {\n          this.socket.disconnect();\n          this.socket = null;\n        }\n\n        if (this.retryAttempt >= this.retryConfig.maxInitialAttempts) {\n          this.connectionState = ConnectionState.FAILED;\n\n          throw new Error(\n            `Failed to connect after ${this.retryConfig.maxInitialAttempts} attempts`,\n          );\n        }\n\n        this.logger.log(\n          `[${this.serviceName}] Waiting ${delay}ms before retry...`,\n        );\n\n        await this.delay(delay);\n\n        delay = Math.min(\n          delay * this.retryConfig.backoffMultiplier,\n          this.retryConfig.maxDelay,\n        );\n      }\n    }\n  }\n\n  private async connectSocket(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      this.logger.log(\n        `[${this.serviceName}] Creating Socket.IO connection (${this.options.url})...`,\n      );\n\n      this.socket = io(this.options.url, this.options.socketOptions);\n\n      // Log the actual socket options being used.\n      this.logger.log(`[${this.serviceName}] Socket.IO options:`, {\n        reconnection: this.socket.io.opts.reconnection,\n        reconnectionAttempts: this.socket.io.opts.reconnectionAttempts,\n        reconnectionDelay: this.socket.io.opts.reconnectionDelay,\n        reconnectionDelayMax: this.socket.io.opts.reconnectionDelayMax,\n      });\n\n      const connectionTimeout = setTimeout(() => {\n        this.logger.error(`[${this.serviceName}] Connection timeout`);\n\n        if (this.connectionState !== ConnectionState.CONNECTED) {\n          this.socket?.disconnect();\n          reject(new Error('Connection timeout'));\n        }\n      }, this.CONNECTION_TIMEOUT);\n\n      this.socket.on('connect', async () => {\n        clearTimeout(connectionTimeout);\n\n        const isReconnection = this.hasConnectedOnce;\n\n        // Socket ID might not be immediately available, wait a tick\n        setTimeout(() => {\n          this.logger.log(`[${this.serviceName}] Socket connected:`, {\n            socketId: this.socket?.id,\n            firstConnection: !isReconnection,\n            isReconnection,\n          });\n        }, 0);\n\n        // If this is a reconnection (not the first connect), treat it as a reconnect\n        // This handles server restarts where 'reconnect' event might not fire\n        if (isReconnection) {\n          this.logger.log(\n            `[${this.serviceName}] Treating connect as reconnection (server may have restarted)`,\n          );\n          this.connectionState = ConnectionState.CONNECTED;\n\n          if (this.options.onReconnect) {\n            // Call onReconnect to re-register instance\n            await this.options.onReconnect(0);\n          }\n        }\n\n        this.hasConnectedOnce = true;\n        resolve();\n      });\n\n      this.socket.on('disconnect', (reason: string) => {\n        this.logger.log(`[${this.serviceName}] Socket disconnected:`, {\n          reason,\n          socketId: this.socket?.id,\n        });\n\n        this.connectionState = ConnectionState.DISCONNECTED;\n\n        if (this.options.onDisconnect) {\n          this.options.onDisconnect(reason);\n        }\n\n        // Don't attempt to reconnect if we're manually disconnecting.\n        const isManualDisconnect = reason === 'io client disconnect';\n\n        if (!isManualDisconnect && this.hasConnectedOnce) {\n          // After successful initial connection, rely entirely on Socket.IO's reconnection\n          this.logger.log(\n            `[${this.serviceName}] Socket.IO will handle reconnection (reason: ${reason})`,\n          );\n        }\n      });\n\n      // Listen for reconnection attempts.\n      this.socket.on('reconnect_attempt', (attemptNumber: number) => {\n        this.logger.log(`[${this.serviceName}] Socket.IO reconnect attempt:`, {\n          attemptNumber,\n        });\n      });\n\n      this.socket.on('reconnect', (attemptNumber: number) => {\n        this.logger.log(`[${this.serviceName}] Socket reconnected:`, {\n          attemptNumber,\n          socketId: this.socket?.id,\n        });\n\n        this.connectionState = ConnectionState.CONNECTED;\n\n        if (this.options.onReconnect) {\n          this.options.onReconnect(attemptNumber);\n        }\n      });\n\n      this.socket.on('reconnect_error', (error: Error) => {\n        this.logger.error(\n          `[${this.serviceName}] Socket.IO reconnect error:`,\n          error,\n        );\n      });\n\n      this.socket.on('reconnect_failed', () => {\n        this.logger.error(\n          `[${this.serviceName}] Socket.IO reconnection failed after all attempts`,\n        );\n\n        this.connectionState = ConnectionState.FAILED;\n\n        // Socket.IO has exhausted its reconnection attempts\n        // The connection is now permanently failed until manual intervention\n      });\n\n      this.socket.on('error', (error) => {\n        this.logger.error(`[${this.serviceName}] Socket error:`, error);\n\n        if (this.connectionState !== ConnectionState.CONNECTED) {\n          clearTimeout(connectionTimeout);\n          reject(error);\n        }\n\n        if (this.options.onError) {\n          this.options.onError(error);\n        }\n      });\n\n      this.socket.on('auth_error', (error) => {\n        this.logger.error(`[${this.serviceName}] Authentication error:`, error);\n        clearTimeout(connectionTimeout);\n        reject(new Error(error.message || 'Authentication failed'));\n      });\n    });\n  }\n\n  private delay(ms: number): Promise<void> {\n    return new Promise((resolve) => {\n      this.retryTimeout = setTimeout(resolve, ms);\n    });\n  }\n\n  // 1. Custom retry for initial connection attempts.\n  // 2. Socket.IO's built-in reconnection after successful initial connection.\n\n  private clearRetryTimeouts() {\n    if (this.retryTimeout) {\n      clearTimeout(this.retryTimeout);\n      this.retryTimeout = null;\n    }\n  }\n\n  public async disconnect(): Promise<void> {\n    this.logger.log(`[${this.serviceName}] Disconnecting...`);\n\n    this.clearRetryTimeouts();\n\n    if (this.socket) {\n      this.socket.removeAllListeners();\n      this.socket.disconnect();\n      this.socket = null;\n    }\n\n    this.connectionState = ConnectionState.DISCONNECTED;\n\n    this.logger.log(`[${this.serviceName}] Disconnected`);\n  }\n\n  public getSocket(): Socket | null {\n    return this.socket;\n  }\n\n  public getConnectionState(): ConnectionState {\n    return this.connectionState;\n  }\n\n  public isConnected(): boolean {\n    return (\n      this.connectionState === ConnectionState.CONNECTED &&\n      this.socket?.connected === true\n    );\n  }\n\n  public async reconnect(): Promise<void> {\n    if (this.connectionState === ConnectionState.CONNECTED) {\n      this.logger.log(`[${this.serviceName}] Already connected`);\n      return;\n    }\n\n    this.logger.log(`[${this.serviceName}] Manual reconnection requested`);\n\n    this.hasConnectedOnce = false;\n\n    await this.disconnect();\n    await this.connect();\n  }\n}\n","import type { Socket } from 'socket.io-client';\nimport {\n  type TaskProviderLike,\n  type TokenUsage,\n  type ToolUsage,\n  RooCodeEventName,\n} from '@roo-code/types';\nimport {\n  type ExtensionInstance,\n  type ExtensionBridgeControlChannelMessage,\n  type ExtensionBridgeEventChannelMessage,\n  TaskStatus,\n  ExtensionBridgeControlChannelMessageType,\n  ExtensionBridgeEventChannelMessageType,\n  HEARTBEAT_INTERVAL_MS,\n} from '../types.js';\n\nexport class ExtensionManager {\n  private instanceId: string;\n  private userId: string;\n  private provider: TaskProviderLike;\n  private publishEvent: (\n    message: ExtensionBridgeEventChannelMessage,\n  ) => Promise<boolean>;\n\n  private extensionInstance: ExtensionInstance;\n  private heartbeatInterval: NodeJS.Timeout | null = null;\n\n  constructor(\n    instanceId: string,\n    userId: string,\n    provider: TaskProviderLike,\n    publishEvent: (\n      message: ExtensionBridgeEventChannelMessage,\n    ) => Promise<boolean>,\n  ) {\n    this.instanceId = instanceId;\n    this.userId = userId;\n    this.provider = provider;\n    this.publishEvent = publishEvent;\n\n    this.extensionInstance = {\n      instanceId: this.instanceId,\n      userId: this.userId,\n      workspacePath: this.provider.cwd,\n      extensionVersion:\n        this.provider.context?.extension?.packageJSON?.version || 'unknown',\n      lastHeartbeat: Date.now(),\n      ...this.getCurrentTask(),\n    };\n\n    this.setupProviderListeners();\n  }\n\n  public async onConnect(socket: Socket): Promise<void> {\n    await this.registerInstance(socket);\n    this.startHeartbeat(socket);\n  }\n\n  public onDisconnect(): void {\n    this.stopHeartbeat();\n  }\n\n  public async onReconnect(socket: Socket): Promise<void> {\n    await this.registerInstance(socket);\n    this.startHeartbeat(socket);\n  }\n\n  public async cleanup(socket: Socket | null): Promise<void> {\n    this.stopHeartbeat();\n\n    if (socket) {\n      await this.unregisterInstance(socket);\n    }\n  }\n\n  public getExtensionInstance(): ExtensionInstance {\n    return this.extensionInstance;\n  }\n\n  public updateTask(taskId: string, status: TaskStatus): void {\n    this.extensionInstance.taskId = taskId;\n    this.extensionInstance.taskStatus = status;\n  }\n\n  public handleControlMessage(\n    message: ExtensionBridgeControlChannelMessage,\n  ): void {\n    if (message.instanceId !== this.instanceId) {\n      console.log(\n        '[ExtensionManager] Ignoring control message for different instance:',\n        {\n          messageInstanceId: message.instanceId,\n          ourInstanceId: this.instanceId,\n        },\n      );\n\n      return;\n    }\n\n    console.log('[ExtensionManager] Processing control message:', {\n      type: message.type,\n      instanceId: message.instanceId,\n    });\n\n    switch (message.type) {\n      case ExtensionBridgeControlChannelMessageType.StartTask: {\n        console.log('[ExtensionManager] Starting task with:', {\n          text: message.payload.text?.substring(0, 100) + '...',\n          hasImages: !!message.payload.images,\n        });\n\n        this.provider.initClineWithTask(\n          message.payload.text,\n          message.payload.images,\n        );\n\n        break;\n      }\n      case ExtensionBridgeControlChannelMessageType.StopTask: {\n        console.log('[ExtensionManager] Stopping task');\n        const { taskId, taskStatus } = this.getCurrentTask();\n\n        if (taskStatus === TaskStatus.Running) {\n          console.log('[ExtensionManager] Canceling running task');\n          this.provider.cancelTask();\n          this.provider.postStateToWebview();\n        } else if (taskId) {\n          console.log('[ExtensionManager] Clearing task');\n          this.provider.clearTask();\n          this.provider.postStateToWebview();\n        }\n        break;\n      }\n    }\n  }\n\n  private async registerInstance(socket: Socket): Promise<void> {\n    console.log('[ExtensionManager] Registering instance:', {\n      instanceId: this.instanceId,\n      userId: this.userId,\n      taskId: this.extensionInstance.taskId,\n      taskStatus: this.extensionInstance.taskStatus,\n    });\n\n    this.extensionInstance = {\n      ...this.extensionInstance,\n      lastHeartbeat: Date.now(),\n      ...this.getCurrentTask(),\n    };\n\n    try {\n      socket.emit('extension:register', this.extensionInstance);\n      console.log('[ExtensionManager] emit() -> extension:register');\n    } catch (error) {\n      console.error(\n        `[ExtensionManager] emit() failed -> extension:register: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n      return;\n    }\n\n    await this.publishEvent({\n      type: ExtensionBridgeEventChannelMessageType.InstanceRegistered,\n      instanceId: this.instanceId,\n      payload: { instance: this.extensionInstance },\n      timestamp: Date.now(),\n    });\n  }\n\n  private async unregisterInstance(socket: Socket): Promise<void> {\n    console.log('[ExtensionManager] Unregistering instance:', this.instanceId);\n\n    await this.publishEvent({\n      type: ExtensionBridgeEventChannelMessageType.InstanceUnregistered,\n      instanceId: this.instanceId,\n      payload: { instanceId: this.instanceId },\n      timestamp: Date.now(),\n    });\n\n    try {\n      socket.emit('extension:unregister', { instanceId: this.instanceId });\n      console.log('[ExtensionManager] emit() -> extension:unregister');\n    } catch (error) {\n      console.error(\n        `[ExtensionManager] emit() failed -> extension:unregister: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  private startHeartbeat(socket: Socket): void {\n    this.stopHeartbeat();\n    console.log('[ExtensionManager] Starting heartbeat interval');\n\n    this.heartbeatInterval = setInterval(async () => {\n      this.extensionInstance.lastHeartbeat = Date.now();\n      const { taskId, taskStatus } = this.getCurrentTask();\n      this.extensionInstance.taskId = taskId;\n      this.extensionInstance.taskStatus = taskStatus;\n\n      try {\n        socket.emit('extension:heartbeat', this.extensionInstance);\n        console.log('[ExtensionManager] emit() -> extension:heartbeat');\n      } catch (error) {\n        console.error(\n          `[ExtensionManager] emit() failed -> extension:heartbeat: ${\n            error instanceof Error ? error.message : String(error)\n          }`,\n        );\n      }\n\n      await this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.HeartbeatUpdated,\n        instanceId: this.instanceId,\n        payload: { instance: this.extensionInstance },\n        timestamp: Date.now(),\n      });\n    }, HEARTBEAT_INTERVAL_MS);\n  }\n\n  private stopHeartbeat(): void {\n    if (this.heartbeatInterval) {\n      console.log('[ExtensionManager] Stopping heartbeat interval');\n      clearInterval(this.heartbeatInterval);\n      this.heartbeatInterval = null;\n    }\n  }\n\n  private setupProviderListeners(): void {\n    console.log('[ExtensionManager] Setting up provider event listeners');\n\n    this.provider.on(RooCodeEventName.TaskCreated, async (_task) => {\n      console.log('[ExtensionManager] Task created event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskCreated,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(RooCodeEventName.TaskStarted, async (_taskId) => {\n      console.log('[ExtensionManager] Task started event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskStarted,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(\n      RooCodeEventName.TaskCompleted,\n      async (_taskId: string, tokenUsage: TokenUsage, toolUsage: ToolUsage) => {\n        console.log('[ExtensionManager] Task completed event');\n        const payload = this.getCurrentTask();\n\n        this.publishEvent({\n          type: ExtensionBridgeEventChannelMessageType.TaskCompleted,\n          instanceId: this.instanceId,\n          payload: { ...payload, tokenUsage, toolUsage },\n          timestamp: Date.now(),\n        });\n      },\n    );\n\n    this.provider.on(RooCodeEventName.TaskAborted, async () => {\n      console.log('[ExtensionManager] Task aborted event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskAborted,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(RooCodeEventName.TaskFocused, async (_taskId) => {\n      console.log('[ExtensionManager] Task focused event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskFocused,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(RooCodeEventName.TaskUnfocused, async (_taskId) => {\n      console.log('[ExtensionManager] Task unfocused event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskUnfocused,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(RooCodeEventName.TaskActive, async (_taskId) => {\n      console.log('[ExtensionManager] Task active event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskActive,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    this.provider.on(RooCodeEventName.TaskIdle, async (_taskId) => {\n      console.log('[ExtensionManager] Task idle event');\n      const payload = this.getCurrentTask();\n\n      this.publishEvent({\n        type: ExtensionBridgeEventChannelMessageType.TaskIdle,\n        instanceId: this.instanceId,\n        payload,\n        timestamp: Date.now(),\n      });\n    });\n\n    console.log('[ExtensionManager] Provider listeners setup complete');\n  }\n\n  private getCurrentTask(): { taskId: string; taskStatus: TaskStatus } {\n    const task = this.provider?.getCurrentCline();\n\n    if (task) {\n      return {\n        taskId: task.taskId,\n        taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n      };\n    } else {\n      return { taskId: '', taskStatus: TaskStatus.None };\n    }\n  }\n}\n","import type { Socket } from 'socket.io-client';\nimport {\n  type TaskLike,\n  type TaskEvents,\n  type TokenUsage,\n  type ToolUsage,\n  RooCodeEventName,\n} from '@roo-code/types';\nimport {\n  type TaskBridgeControlChannelMessage,\n  type TaskBridgeEventChannelMessage,\n  TaskStatus,\n  TaskBridgeEventChannelMessageType,\n} from '../types.js';\n\ntype TaskEventListener = {\n  [K in keyof TaskEvents]: (...args: TaskEvents[K]) => void | Promise<void>;\n}[keyof TaskEvents];\n\nexport class TaskManager {\n  private subscribedTasks: Map<string, TaskLike> = new Map();\n  private taskListeners: Map<string, Map<keyof TaskEvents, TaskEventListener>> =\n    new Map();\n  private publishEvent: (\n    message: TaskBridgeEventChannelMessage,\n  ) => Promise<boolean>;\n  private pendingTasks: Map<string, TaskLike> = new Map();\n\n  constructor(\n    publishEvent: (message: TaskBridgeEventChannelMessage) => Promise<boolean>,\n  ) {\n    this.publishEvent = publishEvent;\n  }\n\n  public async onConnect(socket: Socket): Promise<void> {\n    // Rejoin all subscribed tasks\n    for (const taskId of this.subscribedTasks.keys()) {\n      console.log('[TaskManager] Rejoining task room:', taskId);\n      socket.emit('task:join', { taskId });\n    }\n\n    // Subscribe to any pending tasks\n    for (const task of this.pendingTasks.values()) {\n      await this.subscribeToTask(task, socket);\n    }\n    this.pendingTasks.clear();\n  }\n\n  public onDisconnect(): void {\n    // No specific action needed on disconnect\n  }\n\n  public async onReconnect(socket: Socket): Promise<void> {\n    // Rejoin all subscribed tasks\n    for (const taskId of this.subscribedTasks.keys()) {\n      console.log('[TaskManager] Rejoining task room after reconnect:', taskId);\n      socket.emit('task:join', { taskId });\n    }\n  }\n\n  public async cleanup(socket: Socket | null): Promise<void> {\n    if (!socket) return;\n\n    const unsubscribePromises = [];\n    for (const taskId of this.subscribedTasks.keys()) {\n      unsubscribePromises.push(this.unsubscribeFromTask(taskId, socket));\n    }\n\n    await Promise.allSettled(unsubscribePromises);\n    this.subscribedTasks.clear();\n    this.taskListeners.clear();\n    this.pendingTasks.clear();\n  }\n\n  public addPendingTask(task: TaskLike): void {\n    this.pendingTasks.set(task.taskId, task);\n  }\n\n  public async subscribeToTask(task: TaskLike, socket: Socket): Promise<void> {\n    const taskId = task.taskId;\n    console.log('[TaskManager] Subscribing to task:', taskId);\n\n    this.subscribedTasks.set(taskId, task);\n    this.setupTaskListeners(task);\n\n    try {\n      socket.emit('task:join', { taskId });\n      console.log('[TaskManager] Successfully subscribed to task:', taskId);\n    } catch (error) {\n      console.error(\n        `[TaskManager] emit() failed -> task:join: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  public async unsubscribeFromTask(\n    taskId: string,\n    socket: Socket,\n  ): Promise<void> {\n    console.log('[TaskManager] Unsubscribing from task:', taskId);\n\n    const task = this.subscribedTasks.get(taskId);\n    if (task) {\n      this.removeTaskListeners(task);\n      this.subscribedTasks.delete(taskId);\n    }\n\n    try {\n      socket.emit('task:leave', { taskId });\n      console.log('[TaskManager] emit() -> task:leave', taskId);\n    } catch (error) {\n      console.error(\n        `[TaskManager] emit() failed -> task:leave: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n    }\n  }\n\n  public getSubscribedTasks(): Map<string, TaskLike> {\n    return this.subscribedTasks;\n  }\n\n  public handleControlMessage(message: TaskBridgeControlChannelMessage): void {\n    const { taskId } = message;\n    console.log('[TaskManager] Handling control message for task:', taskId);\n\n    const task = this.subscribedTasks.get(taskId);\n\n    if (!task) {\n      console.warn(\n        `[TaskManager#${taskId}] Cannot deliver message: task not found`,\n      );\n\n      return;\n    }\n\n    console.log(`[TaskManager#${taskId}] delivering message to webview`);\n    task.submitUserMessage(message.payload.text, message.payload.images);\n  }\n\n  private setupTaskListeners(task: TaskLike): void {\n    if (this.taskListeners.has(task.taskId)) {\n      console.warn(\n        '[TaskManager] Listeners already exist for task, removing old listeners:',\n        task.taskId,\n      );\n      this.removeTaskListeners(task);\n    }\n\n    console.log('[TaskManager] Setting up task listeners for:', task.taskId);\n\n    const listeners = new Map<keyof TaskEvents, TaskEventListener>();\n\n    // Setup all task event listeners\n    const taskStartedListener = () => {\n      console.log('[TaskManager] Task started:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskStarted,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskStarted, taskStartedListener);\n    task.on(RooCodeEventName.TaskStarted, taskStartedListener);\n\n    const taskCompletedListener = (\n      _taskId: string,\n      tokenUsage: TokenUsage,\n      toolUsage: ToolUsage,\n    ) => {\n      console.log('[TaskManager] Task completed:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskCompleted,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n          tokenUsage,\n          toolUsage,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskCompleted, taskCompletedListener);\n    task.on(RooCodeEventName.TaskCompleted, taskCompletedListener);\n\n    const taskAbortedListener = async () => {\n      console.log('[TaskManager] Task aborted:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskAborted,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskAborted, taskAbortedListener);\n    task.on(RooCodeEventName.TaskAborted, taskAbortedListener);\n\n    const taskFocusedListener = () => {\n      console.log('[TaskManager] Task focused:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskFocused,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskFocused, taskFocusedListener);\n    task.on(RooCodeEventName.TaskFocused, taskFocusedListener);\n\n    const taskUnfocusedListener = () => {\n      console.log('[TaskManager] Task unfocused:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskUnfocused,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskUnfocused, taskUnfocusedListener);\n    task.on(RooCodeEventName.TaskUnfocused, taskUnfocusedListener);\n\n    const taskActiveListener = async () => {\n      console.log('[TaskManager] Task active:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskActive,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskActive, taskActiveListener);\n    task.on(RooCodeEventName.TaskActive, taskActiveListener);\n\n    const taskIdleListener = () => {\n      console.log('[TaskManager] Task idle:', task.taskId);\n\n      this.publishEvent({\n        type: TaskBridgeEventChannelMessageType.TaskIdle,\n        payload: {\n          taskId: task.taskId,\n          taskStatus: task.blockingAsk ? TaskStatus.Idle : TaskStatus.Running,\n        },\n        timestamp: Date.now(),\n      });\n    };\n\n    listeners.set(RooCodeEventName.TaskIdle, taskIdleListener);\n    task.on(RooCodeEventName.TaskIdle, taskIdleListener);\n\n    this.taskListeners.set(task.taskId, listeners);\n\n    console.log(\n      '[TaskManager] Task listeners setup complete for:',\n      task.taskId,\n    );\n  }\n\n  private removeTaskListeners(task: TaskLike): void {\n    const listeners = this.taskListeners.get(task.taskId);\n    if (!listeners) return;\n\n    console.log('[TaskManager] Removing task listeners for:', task.taskId);\n\n    listeners.forEach((listener, eventName) => {\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        task.off(eventName, listener as any);\n      } catch (error) {\n        console.error(\n          `[TaskManager] Error removing listener for ${String(eventName)} on task ${\n            task.taskId\n          }:`,\n          error,\n        );\n      }\n    });\n\n    this.taskListeners.delete(task.taskId);\n  }\n}\n","import crypto from 'crypto';\n\nimport {\n  type TaskProviderLike,\n  type TaskLike,\n  type CloudUserInfo,\n} from '@roo-code/types';\n\nimport {\n  type ExtensionInstance,\n  type ExtensionBridgeControlChannelMessage,\n  type ExtensionBridgeEventChannelMessage,\n  type TaskBridgeControlChannelMessage,\n  type TaskBridgeEventChannelMessage,\n  TaskStatus,\n  ConnectionState,\n} from './types.js';\nimport { SocketConnectionManager } from './utils/SocketConnectionManager.js';\nimport { ExtensionManager } from './managers/ExtensionManager.js';\nimport { TaskManager } from './managers/TaskManager.js';\n\nexport interface UnifiedBridgeOptions {\n  userId: string;\n  socketBridgeUrl: string;\n  token: string;\n  provider: TaskProviderLike;\n}\n\nexport class UnifiedBridgeService {\n  private static instance: UnifiedBridgeService | null = null;\n\n  // Core\n  private readonly userId: string;\n  private readonly socketBridgeUrl: string;\n  private readonly token: string;\n  private readonly provider: TaskProviderLike;\n  private readonly instanceId: string;\n\n  // Managers\n  private connectionManager: SocketConnectionManager;\n  private extensionManager: ExtensionManager | null = null;\n  private taskManager: TaskManager | null = null;\n\n  // Reconnection\n  private readonly MAX_RECONNECT_ATTEMPTS = Infinity;\n  private readonly RECONNECT_DELAY = 1_000;\n  private readonly RECONNECT_DELAY_MAX = 30_000;\n\n  public static getInstance(): UnifiedBridgeService | null {\n    return UnifiedBridgeService.instance;\n  }\n\n  public static async createInstance(options: UnifiedBridgeOptions) {\n    console.log('[UnifiedBridgeService] Creating new instance');\n    UnifiedBridgeService.instance = new UnifiedBridgeService(options);\n    await UnifiedBridgeService.instance.initialize();\n    return UnifiedBridgeService.instance;\n  }\n\n  public static resetInstance() {\n    if (UnifiedBridgeService.instance) {\n      console.log('[UnifiedBridgeService] Resetting instance');\n      UnifiedBridgeService.instance.disconnect().catch(() => {});\n      UnifiedBridgeService.instance = null;\n    }\n  }\n\n  private constructor(options: UnifiedBridgeOptions) {\n    this.userId = options.userId;\n    this.socketBridgeUrl = options.socketBridgeUrl;\n    this.token = options.token;\n    this.provider = options.provider;\n    this.instanceId = crypto.randomUUID();\n\n    console.log('[UnifiedBridgeService] Initialized with:', {\n      userId: this.userId,\n      socketBridgeUrl: this.socketBridgeUrl,\n      instanceId: this.instanceId,\n    });\n\n    this.connectionManager = new SocketConnectionManager(\n      'UnifiedBridgeService',\n      {\n        url: this.socketBridgeUrl,\n        socketOptions: {\n          query: {\n            token: this.token,\n            clientType: 'extension',\n            instanceId: this.instanceId,\n          },\n          transports: ['websocket', 'polling'],\n          reconnection: true,\n          reconnectionAttempts: this.MAX_RECONNECT_ATTEMPTS,\n          reconnectionDelay: this.RECONNECT_DELAY,\n          reconnectionDelayMax: this.RECONNECT_DELAY_MAX,\n        },\n        onConnect: async () => {\n          await this.handleConnect();\n        },\n        onDisconnect: () => {\n          this.handleDisconnect();\n        },\n        onReconnect: async (attemptNumber) => {\n          await this.handleReconnect(attemptNumber);\n        },\n      },\n    );\n\n    this.extensionManager = new ExtensionManager(\n      this.instanceId,\n      this.userId,\n      this.provider,\n      (message: ExtensionBridgeEventChannelMessage) =>\n        this.publishExtensionEvent(message),\n    );\n\n    this.taskManager = new TaskManager(\n      (message: TaskBridgeEventChannelMessage) =>\n        this.publishTaskEvent(message),\n    );\n  }\n\n  private async initialize() {\n    await this.connectionManager.connect();\n    this.setupSocketListeners();\n  }\n\n  private setupSocketListeners() {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error('[UnifiedBridgeService] Socket not available');\n      return;\n    }\n\n    // Remove any existing listeners first to prevent duplicates\n    socket.off('extension:control:message');\n    socket.off('task:control:message');\n    socket.off('connected');\n\n    socket.on(\n      'extension:control:message',\n      (message: ExtensionBridgeControlChannelMessage) => {\n        console.log(\n          '[UnifiedBridgeService] Received extension control message:',\n          {\n            type: message.type,\n            instanceId: message.instanceId,\n          },\n        );\n\n        this.extensionManager?.handleControlMessage(message);\n      },\n    );\n\n    socket.on(\n      'task:control:message',\n      (message: TaskBridgeControlChannelMessage) => {\n        console.log('[UnifiedBridgeService] Received task control message:', {\n          type: message.type,\n          taskId: message.taskId,\n        });\n\n        this.taskManager?.handleControlMessage(message);\n      },\n    );\n\n    // socket.on(\n    //   'task:event:message',\n    //   (message: TaskBridgeEventChannelMessage) => {\n    //     console.log('[UnifiedBridgeService] Received task event message:', {\n    //       type: message.type,\n    //       taskId: message.payload.taskId,\n    //     });\n    //   },\n    // );\n\n    socket.on('connected', (data) => {\n      console.log('[UnifiedBridgeService] Connection confirmed:', data);\n    });\n  }\n\n  private async handleConnect() {\n    console.log('[UnifiedBridgeService] Connected');\n\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error(\n        '[UnifiedBridgeService] Socket not available after connect',\n      );\n\n      return;\n    }\n\n    if (this.extensionManager) {\n      await this.extensionManager.onConnect(socket);\n    }\n\n    if (this.taskManager) {\n      await this.taskManager.onConnect(socket);\n    }\n  }\n\n  private handleDisconnect() {\n    console.log('[UnifiedBridgeService] Disconnected');\n\n    if (this.extensionManager) {\n      this.extensionManager.onDisconnect();\n    }\n\n    if (this.taskManager) {\n      this.taskManager.onDisconnect();\n    }\n  }\n\n  private async handleReconnect(attemptNumber: number) {\n    console.log(\n      '[UnifiedBridgeService] Reconnected after',\n      attemptNumber,\n      'attempts',\n    );\n\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket) {\n      console.error(\n        '[UnifiedBridgeService] Socket not available after reconnect',\n      );\n\n      return;\n    }\n\n    // Re-setup socket listeners to ensure they're properly configured\n    // after automatic reconnection (Socket.IO's built-in reconnection)\n    // The socket.off() calls in setupSocketListeners prevent duplicates\n    this.setupSocketListeners();\n\n    if (this.extensionManager) {\n      await this.extensionManager.onReconnect(socket);\n    }\n\n    if (this.taskManager) {\n      await this.taskManager.onReconnect(socket);\n    }\n  }\n\n  // Extension API\n\n  public getExtensionInstance(): ExtensionInstance | null {\n    return this.extensionManager?.getExtensionInstance() ?? null;\n  }\n\n  public updateExtensionTask(taskId: string, status: TaskStatus): void {\n    this.extensionManager?.updateTask(taskId, status);\n  }\n\n  // Task API\n\n  public async subscribeToTask(task: TaskLike): Promise<void> {\n    if (!this.taskManager) {\n      throw new Error('Task management is not enabled');\n    }\n\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket || !this.connectionManager.isConnected()) {\n      console.warn(\n        '[UnifiedBridgeService] Cannot subscribe to task: not connected. Will retry when connected.',\n      );\n\n      this.taskManager.addPendingTask(task);\n\n      const state = this.connectionManager.getConnectionState();\n\n      if (\n        state === ConnectionState.DISCONNECTED ||\n        state === ConnectionState.FAILED\n      ) {\n        this.initialize();\n      }\n\n      return;\n    }\n\n    await this.taskManager.subscribeToTask(task, socket);\n  }\n\n  public async unsubscribeFromTask(taskId: string): Promise<void> {\n    if (!this.taskManager) {\n      throw new Error('Task management is not enabled');\n    }\n\n    const socket = this.connectionManager.getSocket();\n    if (!socket) {\n      return;\n    }\n\n    await this.taskManager.unsubscribeFromTask(taskId, socket);\n  }\n\n  public getSubscribedTasks(): Map<string, TaskLike> {\n    return this.taskManager?.getSubscribedTasks() ?? new Map();\n  }\n\n  // Publish\n\n  private async publishExtensionEvent(\n    message: ExtensionBridgeEventChannelMessage,\n  ): Promise<boolean> {\n    const socket = this.connectionManager.getSocket();\n\n    if (!socket || !this.connectionManager.isConnected()) {\n      console.error(\n        '[UnifiedBridgeService] Cannot publish extension event: not connected',\n      );\n\n      return false;\n    }\n\n    try {\n      socket.emit('extension:event', message);\n\n      console.log(\n        '[UnifiedBridgeService] Published extension event:',\n        message.type,\n      );\n\n      return true;\n    } catch (error) {\n      console.error(\n        '[UnifiedBridgeService] Failed to publish extension event:',\n        error,\n      );\n\n      return false;\n    }\n  }\n\n  private async publishTaskEvent(\n    message: TaskBridgeEventChannelMessage,\n  ): Promise<boolean> {\n    const socket = this.connectionManager.getSocket();\n    if (!socket || !this.connectionManager.isConnected()) {\n      console.error(\n        '[UnifiedBridgeService] Cannot publish task event: not connected',\n      );\n\n      return false;\n    }\n\n    try {\n      socket.emit('task:event', message);\n      console.log('[UnifiedBridgeService] Published task event:', message.type);\n      return true;\n    } catch (error) {\n      console.error(\n        '[UnifiedBridgeService] Failed to publish task event:',\n        error,\n      );\n\n      return false;\n    }\n  }\n\n  // Shared API\n\n  public getConnectionState(): ConnectionState {\n    return this.connectionManager.getConnectionState();\n  }\n\n  public async disconnect(): Promise<void> {\n    console.log('[UnifiedBridgeService] Disconnecting...');\n\n    if (this.extensionManager) {\n      await this.extensionManager.cleanup(this.connectionManager.getSocket());\n    }\n\n    if (this.taskManager) {\n      await this.taskManager.cleanup(this.connectionManager.getSocket());\n    }\n\n    await this.connectionManager.disconnect();\n    UnifiedBridgeService.instance = null;\n\n    console.log('[UnifiedBridgeService] Disconnected');\n  }\n\n  public async reconnect(): Promise<void> {\n    await this.connectionManager.reconnect();\n    // After a manual reconnect, we have a new socket instance\n    // so we need to set up listeners again\n    this.setupSocketListeners();\n  }\n\n  public get connected(): boolean {\n    return this.connectionManager.isConnected();\n  }\n\n  public get subscribedTaskCount(): number {\n    return this.taskManager?.getSubscribedTasks().size ?? 0;\n  }\n\n  public static async handleRemoteControlState(\n    userInfo: CloudUserInfo | null,\n    remoteControlEnabled: boolean | undefined,\n    options: UnifiedBridgeOptions,\n    logger?: (message: string) => void,\n  ) {\n    if (userInfo?.extensionBridgeEnabled && remoteControlEnabled) {\n      const existingService = UnifiedBridgeService.getInstance();\n\n      if (!existingService) {\n        try {\n          const service = await UnifiedBridgeService.createInstance(options);\n          const state = service.getConnectionState();\n\n          logger?.(\n            `[UnifiedBridgeService#handleRemoteControlState] Instance created (state: ${state})`,\n          );\n\n          if (state !== ConnectionState.CONNECTED) {\n            logger?.(\n              `[UnifiedBridgeService#handleRemoteControlState] Service is not connected yet, will retry in background`,\n            );\n          }\n        } catch (error) {\n          const message = `[UnifiedBridgeService#handleRemoteControlState] Failed to create instance: ${\n            error instanceof Error ? error.message : String(error)\n          }`;\n\n          logger?.(message);\n          console.error(message);\n        }\n      } else {\n        const state = existingService.getConnectionState();\n        if (\n          state === ConnectionState.FAILED ||\n          state === ConnectionState.DISCONNECTED\n        ) {\n          logger?.(\n            `[UnifiedBridgeService#handleRemoteControlState] Existing service is ${state}, attempting reconnection`,\n          );\n          existingService.reconnect().catch((error) => {\n            const message = `[UnifiedBridgeService#handleRemoteControlState] Reconnection failed: ${\n              error instanceof Error ? error.message : String(error)\n            }`;\n            logger?.(message);\n            console.error(message);\n          });\n        }\n      }\n    } else {\n      const existingService = UnifiedBridgeService.getInstance();\n\n      if (existingService) {\n        try {\n          await existingService.disconnect();\n          UnifiedBridgeService.resetInstance();\n\n          logger?.(\n            `[UnifiedBridgeService#handleRemoteControlState] Service disconnected and reset`,\n          );\n        } catch (error) {\n          const message = `[UnifiedBridgeService#handleRemoteControlState] Failed to disconnect and reset instance: ${\n            error instanceof Error ? error.message : String(error)\n          }`;\n          logger?.(message);\n          console.error(message);\n        }\n      }\n    }\n  }\n}\n"]}