web-sdk-pp-detection 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/input/decode-image.ts","../src/detection/nms.ts","../src/detection/decode-output.ts","../src/detection/preprocess.ts","../src/detection/detector.ts","../src/model/manifest.ts","../src/model/public-manifest.ts","../src/cache/indexeddb-cache.ts","../src/cache/memory-cache.ts","../src/cache/model-cache.ts","../src/model/integrity.ts","../src/model/download.ts","../src/model/source-resolver.ts","../src/model/model-manager.ts","../src/runtime/ort-session.ts","../src/runtime/capabilities.ts","../src/runtime/select-plan.ts","../src/runtime/protocol.ts","../src/runtime/worker-bridge.ts","../src/index.ts"],"names":["source","tensor","resizeMode","interpolation","nowDefault","throwIfAborted","value","SHA256_PATTERN","BACKENDS","PRECISIONS","record","invalid","text","nonNegativeIntegerOrNull","variant","bytes","sourceKind","now","url"],"mappings":";AAcO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,YACkB,IAAA,EAChB,OAAA,EACgB,OAAA,GAA6C,IAC7D,OAAA,EACA;AACA,IAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AALN,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAIhB,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AAAA,EAPkB,IAAA;AAAA,EAEA,OAAA;AAMpB;;;ACOA,SAAS,UAAA,GAAqB;AAC5B,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,eAAe,MAAA,EAA4B;AAClD,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,iBAAiB,SAAA,EAAW,4CAAA,EAAW,EAAE,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC5E;AACF;AAEA,SAAS,gBAAgB,KAAA,EAKvB;AACA,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,WAAW,KAAA,IACX,QAAA,IAAY,KAAA,KACV,MAAA,IAAU,SAAS,KAAA,CAAM,IAAA,YAAgB,qBACxC,MAAA,IAAU,KAAA,IAAS,MAAM,IAAA,YAAgB,iBAAA,CAAA;AAEhD;AAEA,SAAS,eAAe,MAAA,EAAkC;AACxD,EAAA,IACE,CAAC,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,KAAK,KAC9B,CAAC,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,IAC/B,OAAO,KAAA,IAAS,CAAA,IAChB,MAAA,CAAO,MAAA,IAAU,CAAA,IACjB,MAAA,CAAO,IAAA,CAAK,MAAA,KAAW,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EACtD;AACA,IAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,8DAAA,EAAmB;AAAA,MAC7D,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,UAAA,EAAY,OAAO,IAAA,CAAK;AAAA,KACzB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAWA,OAAAA,EAA0D;AAC5E,EAAA,OAAO;AAAA,IACL,KAAA,EAAOA,QAAO,YAAA,IAAgBA,OAAAA,CAAO,cAAcA,OAAAA,CAAO,YAAA,IAAgBA,QAAO,KAAA,IAAS,CAAA;AAAA,IAC1F,MAAA,EAAQA,QAAO,aAAA,IAAiBA,OAAAA,CAAO,eAAeA,OAAAA,CAAO,aAAA,IAAiBA,QAAO,MAAA,IAAU;AAAA,GACjG;AACF;AAEA,SAAS,mBAAA,CAAoB,OAAe,MAAA,EAA8B;AACxE,EAAA,IAAI,OAAO,eAAA,KAAoB,UAAA,SAAmB,IAAI,eAAA,CAAgB,OAAO,MAAM,CAAA;AACnF,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACf,IAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,+EAAwB,CAAA;AACtE;AAEA,SAAS,cAAc,KAAA,EAAkC;AACvD,EAAA,IAAI,KAAA,YAAiB,kBAAkB,OAAO,KAAA;AAC9C,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,MAAM,IAAA,GACH,OAAO,YAAA,KAAiB,WAAA,IACvB,KAAA,YAAiB,YAAA,IACjB,KAAA,CAAM,IAAA,KAAS,eAAA,IACjB,mCAAA,CAAoC,IAAA,CAAK,OAAO,CAAA;AAClD,EAAA,OAAO,IAAI,gBAAA;AAAA,IACT,eAAA;AAAA,IACA,OAAO,8IAAA,GAAwC,oEAAA;AAAA,IAC/C,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAQ;AAAA,IAC9B,EAAE,OAAO,KAAA;AAAM,GACjB;AACF;AAEA,eAAsB,iBAAA,CACpB,KAAA,EACA,WAAA,GAAsC,EAAC,EAChB;AACvB,EAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,IAAO,UAAA;AACjC,EAAA,MAAM,YAAY,KAAA,EAAM;AACxB,EAAA,cAAA,CAAe,YAAY,MAAM,CAAA;AAEjC,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,MAAM,SAAS,cAAA,CAAe;AAAA,MAC5B,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,MAAM,IAAI,iBAAA,CAAkB,KAAA,CAAM,IAAA,IAAQ,MAAM,IAAK;AAAA,KACtD,CAAA;AACD,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,EAAM,GAAI,SAAS,CAAA,EAAE;AAAA,EACjE;AAEA,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAIA,OAAAA;AACJ,IAAA,IAAI,OAAO,IAAA,KAAS,WAAA,IAAe,KAAA,YAAiB,IAAA,EAAM;AACxD,MAAA,MAAM,YAAA,GAAe,WAAA,CAAY,iBAAA,IAAqB,UAAA,CAAW,iBAAA;AACjE,MAAA,IAAI,OAAO,iBAAiB,UAAA,EAAY;AACtC,QAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,0EAAmB,CAAA;AAAA,MACjE;AACA,MAAA,WAAA,GAAc,MAAM,aAAa,KAAK,CAAA;AACtC,MAAAA,OAAAA,GAAS,WAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAAA,OAAAA,GAAS,KAAA;AAAA,IACX;AAEA,IAAA,cAAA,CAAe,YAAY,MAAM,CAAA;AACjC,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,WAAWA,OAAM,CAAA;AAC3C,IAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,IAAK,KAAA,IAAS,CAAA,IAAK,UAAU,CAAA,EAAG;AACtF,MAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,gEAAc,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC7E;AACA,IAAA,MAAM,MAAA,GAAA,CAAU,WAAA,CAAY,YAAA,IAAgB,mBAAA,EAAqB,OAAO,MAAM,CAAA;AAC9E,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,MAAM,EAAE,kBAAA,EAAoB,MAAM,CAAA;AACpE,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,iBAAiB,uDAAoB,CAAA;AAG9E,IAAA,OAAA,CAAQ,SAAA,CAAUA,OAAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAI,iBAAA,CAAkB,OAAA,CAAQ,YAAA,CAAa,GAAG,CAAA,EAAG,KAAA,EAAO,MAAM,CAAA,CAAE,IAAI,CAAA;AACjF,IAAA,cAAA,CAAe,YAAY,MAAM,CAAA;AACjC,IAAA,MAAM,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA;AACrD,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,EAAM,GAAI,SAAS,CAAA,EAAE;AAAA,EACjE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,cAAc,KAAK,CAAA;AAAA,EAC3B,CAAA,SAAE;AACA,IAAA,WAAA,EAAa,KAAA,IAAQ;AAAA,EACvB;AACF;;;ACjJA,SAAS,KAAK,GAAA,EAAqB;AACjC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,OAAO,GAAA,CAAI,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,IAAA,GAAO,IAAI,IAAI,CAAA;AAC3E;AAEO,SAAS,qBAAA,CAAsB,MAAc,KAAA,EAAuB;AACzE,EAAA,MAAM,YAAA,GACJ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAM,KAAA,CAAM,IAAI,CAAC,CAAA,GAC7E,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAA,GAAI,KAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,KAAA,CAAM,IAAI,CAAC,CAAA;AAC/E,EAAA,MAAM,QAAQ,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA,GAAI,YAAA;AACzC,EAAA,OAAO,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,YAAA,GAAe,KAAA;AACzC;AAEO,SAAS,qBAAA,CACd,YACA,YAAA,EACK;AACL,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,UAAU,CAAA,CAAE,IAAA;AAAA,IAC7B,CAAC,MAAM,KAAA,KAAU,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM;AAAA,GAClE;AACA,EAAA,MAAM,WAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,aAAa,MAAA,EAAQ;AAC9B,IAAA,MAAM,aAAa,QAAA,CAAS,IAAA;AAAA,MAC1B,CAAC,IAAA,KACC,IAAA,CAAK,OAAA,KAAY,SAAA,CAAU,OAAA,IAC3B,qBAAA,CAAsB,IAAA,CAAK,GAAA,EAAK,SAAA,CAAU,GAAG,CAAA,GAAI;AAAA,KACrD;AACA,IAAA,IAAI,CAAC,UAAA,EAAY,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,QAAA;AACT;;;ACnBA,SAAS,UAAU,KAAA,EAA8C;AAC/D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,oEAAa,CAAA;AAAA,EAC9D;AACA,EAAA,MAAM,OAAA,GAAU,KAAA;AAChB,EAAA,KAAA,MAAW,CAAC,IAAA,EAAMC,OAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpD,IAAA,MAAM,OAAQA,OAAAA,EAAmD,IAAA;AACjE,IAAA,MAAM,OAAQA,OAAAA,EAAsC,IAAA;AACpD,IAAA,IACE,OAAOA,OAAAA,KAAW,QAAA,IAClBA,OAAAA,KAAW,IAAA,IACX,EAAE,MAAA,IAAUA,OAAAA,CAAAA,IACZ,EAAE,MAAA,IAAUA,OAAAA,CAAAA,IACZ,CAAC,MAAM,OAAA,CAAQ,IAAI,CAAA,IACnB,IAAA,CAAK,MAAA,KAAW,CAAA,IAChB,CAAC,IAAA,CAAK,KAAA,CAAM,CAAC,SAAA,KAAc,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,IAAM,SAAA,IAAwB,CAAC,CAAA,IACpF,OAAO,IAAA,EAAM,WAAW,QAAA,IACxB,CAAC,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,MAAM,KACjC,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,CAAO,CAAC,IAAA,EAAM,SAAA,KAAc,IAAA,GAAO,MAAA,CAAO,SAAS,CAAA,EAAG,CAAC,CAAA,EAC5E;AACA,MAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,8DAAA,EAAc,EAAE,MAAM,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAA,CAAa,SAAiB,OAAA,EAAyC;AAC9E,EAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,IAAK,OAAO,OAAO,CAAA;AACvD,EAAA,OAAO,OAAA,CAAQ,eAAA,GAAkB,KAAK,CAAA,IAAK,OAAA,CAAQ,cAAA;AACrD;AAEA,SAAS,QAAQ,KAAA,EAAuB;AACtC,EAAA,OAAO,SAAS,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,KAAK,CAAA,CAAA,GAAK,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,CAAA,GAAI,IAAA,CAAK,IAAI,KAAK,CAAA,CAAA;AACxF;AAEA,SAAS,eAAA,CAAgBA,SAAsB,QAAA,EAAmC;AAChF,EAAA,OACEA,OAAAA,CAAO,IAAA,KAAS,MAAA,IAChBA,OAAAA,CAAO,IAAA,CAAK,WAAW,QAAA,CAAS,KAAA,CAAM,MAAA,IACtCA,OAAAA,CAAO,IAAA,CAAK,KAAA;AAAA,IACV,CAAC,SAAA,EAAW,KAAA,KAAU,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,KAAM,EAAA,IAAM,SAAA,KAAc,QAAA,CAAS,KAAA,CAAM,KAAK;AAAA,GAC1F;AAEJ;AAEA,SAAS,cAAA,CACP,OAAA,EACA,SAAA,EACA,SAAA,EAC0B;AAC1B,EAAA,IAAI,SAAA,KAAc,QAAW,OAAO,MAAA;AACpC,EAAA,MAAM,UAAU,SAAA,CACb,MAAA,CAAO,SAAS,CAAA,CAChB,GAAA,CAAI,CAAC,QAAA,KAAa;AACjB,IAAA,MAAMA,OAAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AACpC,IAAA,OAAOA,OAAAA,IAAU,eAAA,CAAgBA,OAAAA,EAAQ,QAAQ,IAAIA,OAAAA,GAAS,MAAA;AAAA,EAChE,CAAC,CAAA,CACA,MAAA,CAAO,CAACA,OAAAA,KAAmCA,YAAW,MAAS,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAC7C;AAEA,SAAS,gBAAA,CACP,SACA,OAAA,EAC4B;AAC5B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,IAAA,MAAA,GAAS,cAAA,CAAe,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAACA,OAAAA,KAAWA,OAAAA,CAAO,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,KAAM,CAAC,CAAA;AAAA,EACzF,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,OAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,GAAGA,OAAM,CAAA,KAAMA,QAAO,IAAA,EAAM,EAAA,CAAG,EAAE,CAAA,KAAM,CAAC,IAAI,CAAC,CAAA;AAAA,EACtF;AACA,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,EAAA,MAAM,aAA6B,EAAC;AACpC,EAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,MAAA,IAAU,CAAA,EAAG,KAAA,IAAS,CAAA,EAAG;AACjF,IAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACrC,IAAA,IAAI,CAAC,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,GAAQ,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA,EAAG;AACvE,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,CAAC,CAAA;AAC1E,IAAA,IAAI,CAAC,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,UAAA,GAAa,QAAQ,iBAAA,KAAsB,YAAA;AACjD,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,KAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA,EAAK;AAAA,QACH,MAAM,WAAA,CAAY,CAAC,KAAK,UAAA,GAAa,OAAA,CAAQ,UAAU,UAAA,GAAa,CAAA,CAAA;AAAA,QACpE,MAAM,WAAA,CAAY,CAAC,KAAK,UAAA,GAAa,OAAA,CAAQ,UAAU,WAAA,GAAc,CAAA,CAAA;AAAA,QACrE,MAAM,WAAA,CAAY,CAAC,KAAK,UAAA,GAAa,OAAA,CAAQ,UAAU,UAAA,GAAa,CAAA,CAAA;AAAA,QACpE,MAAM,WAAA,CAAY,CAAC,KAAK,UAAA,GAAa,OAAA,CAAQ,UAAU,WAAA,GAAc,CAAA;AAAA;AACvE,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,UAAA,CACP,SACA,UAAA,EAC0B;AAC1B,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,KAAK,CAAC,CAAC,IAAI,CAAA,KAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,IAAI,CAAC,CAAA;AAC5E;AAEA,SAAS,eAAA,CACP,SACA,OAAA,EAC4B;AAC5B,EAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA,GAClB,eAAe,OAAA,EAAS,OAAA,CAAQ,SAAS,CAACA,OAAAA,KAAWA,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAA,KAAM,CAAC,CAAA,GAC9E,UAAA,CAAW,SAAS,kBAAkB,CAAA;AAC1C,EAAA,MAAM,uBAAA,GAA0B,QAAQ,OAAA,EAAS,MAAA;AAAA,IAC/C,CAACA,OAAAA,KAAWA,OAAAA,CAAO,KAAA,CAAM,EAAA,CAAG,EAAE,CAAA,KAAM,CAAA,IAAKA,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAA,KAAM,CAAA,IAAKA,OAAAA,CAAO,MAAM,MAAA,IAAU;AAAA,GAC/F;AACA,EAAA,MAAM,MAAA,GAAS,QAAQ,OAAA,GAClB,cAAA;AAAA,IACC,OAAA;AAAA,IACA,uBAAA;AAAA,IACA,CAACA,OAAAA,KACCA,OAAAA,CAAO,KAAA,CAAM,GAAG,EAAE,CAAA,KAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,CAAC,qBAAA,CAAsB,IAAA,CAAKA,QAAO,IAAI;AAAA,GAC5F,KACC,uBAAA,EAAyB,MAAA,KAAW,CAAA,GACjC,cAAA,CAAe,OAAA,EAAS,uBAAA,EAAyB,MAAM,IAAI,CAAA,GAC3D,MAAA,CAAA,GACJ,UAAA,CAAW,SAAS,cAAc,CAAA;AACtC,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,KAAA,EAAO,OAAO,MAAA;AAC9B,EAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AACjD,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,OAAO,EAAC;AAC5B,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,EAAM,EAAA,CAAG,EAAE,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAA,GAAS,QAAQ,CAAA;AACvF,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,OAAA,CAAQ,OAAO,MAAM,CAAA;AAC/D,EAAA,IAAI,OAAA,IAAW,CAAA,EAAG,OAAO,EAAC;AAC1B,EAAA,MAAM,aAA6B,EAAC;AACpC,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,QAAA,EAAU,SAAS,CAAA,EAAG;AAChD,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,KAAA,GAAQ,CAAA,QAAA;AACZ,IAAA,KAAA,IAAS,cAAA,GAAiB,CAAA,EAAG,cAAA,GAAiB,OAAA,EAAS,kBAAkB,CAAA,EAAG;AAC1E,MAAA,MAAM,cAAA,GAAiB,QAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,GAAQ,eAAA,GAAkB,cAAc,CAAC,CAAC,CAAA;AAC5F,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,KAAA,GAAQ,cAAA;AACR,QAAA,OAAA,GAAU,cAAA;AAAA,MACZ;AAAA,IACF;AACA,IAAA,IAAI,KAAA,GAAQ,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA,EAAG;AAC5C,IAAA,MAAM,SAAS,KAAA,GAAQ,CAAA;AACvB,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,MACzB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,MAC7B,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,MAC7B,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC;AAAA,KAC/B;AACA,IAAA,IAAI,CAAC,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EAAG;AACjC,IAAA,MAAM,UAAA,GAAa,QAAQ,gBAAA,KAAqB,QAAA;AAChD,IAAA,MAAM,MAAA,GAAS,UAAA,GAAa,OAAA,CAAQ,SAAA,CAAU,UAAA,GAAa,CAAA;AAC3D,IAAA,MAAM,MAAA,GAAS,UAAA,GAAa,OAAA,CAAQ,SAAA,CAAU,WAAA,GAAc,CAAA;AAC5D,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,cAAA,KAAmB,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,cAAA,KAAmB,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,cAAA,KAAmB,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,cAAA,KAAmB,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAC5E,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,KAAA,EAAO,KAAA;AAAA,MACP,OAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA,EAAK;AAAA,QACH,MAAM,IAAA,GAAO,MAAA;AAAA,QACb,MAAM,IAAA,GAAO,MAAA;AAAA,QACb,MAAM,IAAA,GAAO,MAAA;AAAA,QACb,MAAM,IAAA,GAAO;AAAA;AACf,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,KAAA,CAAM,KAAA,EAAe,OAAA,EAAiB,OAAA,EAAyB;AACtE,EAAA,OAAO,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,GAAA,CAAI,OAAA,EAAS,KAAK,CAAC,CAAA;AACnD;AAEA,SAAS,UAAA,CACP,KACA,SAAA,EAC0B;AAC1B,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,KAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,KAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,IAAA,GAAO,UAAU,OAAA,IAAW,MAAA,EAAQ,CAAA,EAAG,SAAA,CAAU,aAAa,CAAA;AACtF,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,IAAA,GAAO,UAAU,MAAA,IAAU,MAAA,EAAQ,CAAA,EAAG,SAAA,CAAU,cAAc,CAAA;AACtF,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,IAAA,GAAO,UAAU,OAAA,IAAW,MAAA,EAAQ,CAAA,EAAG,SAAA,CAAU,aAAa,CAAA;AACtF,EAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,IAAA,GAAO,UAAU,MAAA,IAAU,MAAA,EAAQ,CAAA,EAAG,SAAA,CAAU,cAAc,CAAA;AACtF,EAAA,IAAI,IAAA,IAAQ,IAAA,IAAQ,IAAA,IAAQ,IAAA,EAAM,OAAO,MAAA;AACzC,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,IAAA;AAAA,IACH,CAAA,EAAG,IAAA;AAAA,IACH,OAAO,IAAA,GAAO,IAAA;AAAA,IACd,QAAQ,IAAA,GAAO,IAAA;AAAA,IACf,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,sBAAA,CACd,aACA,OAAA,EACa;AACb,EAAA,MAAM,OAAA,GAAU,UAAU,WAAW,CAAA;AACrC,EAAA,MAAM,aAAa,gBAAA,CAAiB,OAAA,EAAS,OAAO,CAAA,IAAK,eAAA,CAAgB,SAAS,OAAO,CAAA;AACzF,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,sFAAA,EAAkB;AAAA,MAC/D,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,OAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AACA,EAAA,MAAM,QAAA,GAAW,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,KAAc;AACjD,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,SAAA,CAAU,GAAA,EAAK,QAAQ,SAAS,CAAA;AACvD,IAAA,OAAO,GAAA,GAAM,CAAC,EAAE,GAAG,WAAW,GAAA,EAAK,IAAI,EAAC;AAAA,EAC1C,CAAC,CAAA;AACD,EAAA,OAAO,sBAAsB,QAAA,EAAU,OAAA,CAAQ,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,MAAe;AAAA,IAC/E,OAAO,SAAA,CAAU,KAAA;AAAA,IACjB,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,KAAA,EAAO,QAAQ,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,IAAK,MAAA,CAAO,UAAU,OAAO,CAAA;AAAA,IACpE,OAAO,SAAA,CAAU,KAAA;AAAA,IACjB,KAAK,SAAA,CAAU,GAAA;AAAA,IACf,OAAA,EAAS;AAAA,MACP,EAAE,GAAG,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,SAAA,CAAU,IAAI,IAAA,EAAK;AAAA,MAC/C,EAAE,GAAG,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,SAAA,CAAU,IAAI,IAAA,EAAK;AAAA,MAC/C,EAAE,GAAG,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,SAAA,CAAU,IAAI,IAAA,EAAK;AAAA,MAC/C,EAAE,GAAG,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,EAAG,SAAA,CAAU,IAAI,IAAA;AAAK;AACjD,GACF,CAAE,CAAA;AACJ;;;ACpOA,SAAS,aAAA,CAAc,MAAA,EAAqB,CAAA,EAAW,CAAA,EAAW,OAAA,EAAyB;AACzF,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,KAAA,GAAQ,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,GAAS,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AAC1D,EAAA,OAAO,OAAO,IAAA,CAAA,CAAM,OAAA,GAAU,OAAO,KAAA,GAAQ,OAAA,IAAW,IAAI,OAAO,CAAA;AACrE;AAEA,SAAS,gBACP,MAAA,EACA,OAAA,EACA,OAAA,EACA,YAAA,EACA,eACA,OAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAA,CAAY,OAAA,GAAU,GAAA,IAAO,MAAA,CAAO,QAAS,YAAA,GAAe,GAAA;AAClE,EAAA,MAAM,OAAA,GAAA,CAAY,OAAA,GAAU,GAAA,IAAO,MAAA,CAAO,SAAU,aAAA,GAAgB,GAAA;AACpE,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC7B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC7B,EAAA,MAAM,KAAK,OAAA,GAAU,EAAA;AACrB,EAAA,MAAM,KAAK,OAAA,GAAU,EAAA;AACrB,EAAA,MAAM,GAAA,GACJ,aAAA,CAAc,MAAA,EAAQ,EAAA,EAAI,IAAI,OAAO,CAAA,IAAK,CAAA,GAAI,EAAA,CAAA,GAC9C,cAAc,MAAA,EAAQ,EAAA,GAAK,CAAA,EAAG,EAAA,EAAI,OAAO,CAAA,GAAI,EAAA;AAC/C,EAAA,MAAM,SACJ,aAAA,CAAc,MAAA,EAAQ,EAAA,EAAI,EAAA,GAAK,GAAG,OAAO,CAAA,IAAK,CAAA,GAAI,EAAA,CAAA,GAClD,cAAc,MAAA,EAAQ,EAAA,GAAK,GAAG,EAAA,GAAK,CAAA,EAAG,OAAO,CAAA,GAAI,EAAA;AACnD,EAAA,OAAO,GAAA,IAAO,CAAA,GAAI,EAAA,CAAA,GAAM,MAAA,GAAS,EAAA;AACnC;AAEA,IAAM,sBAAA,GAAyB,EAAA;AAC/B,IAAM,oBAAoB,CAAA,IAAK,sBAAA;AAC/B,IAAM,gBAAA,GAAmB,KAAM,sBAAA,GAAyB,CAAA;AAExD,SAAS,cAAc,KAAA,EAAuB;AAC5C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AACxB,EAAA,IAAI,CAAA,GAAI,GAAG,OAAA,CAAA,CAAS,IAAA,GAAO,KAAK,CAAA,IAAK,IAAA,GAAO,CAAA,CAAA,IAAM,CAAA,GAAI,CAAA,GAAI,CAAA;AAC1D,EAAA,IAAI,CAAA,GAAI,GAAG,OAAA,CAAA,CAAA,CAAU,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,IAAK,IAAA;AAChD,EAAA,OAAO,CAAA;AACT;AAOA,SAAS,iBAAA,CAAkB,WAAmB,UAAA,EAAkC;AAC9E,EAAA,MAAM,QAAQ,SAAA,GAAY,UAAA;AAC1B,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA;AACrC,EAAA,MAAM,UAAU,CAAA,GAAI,WAAA;AACpB,EAAA,MAAM,OAAoE,EAAC;AAE3E,EAAA,KAAA,IAAS,MAAA,GAAS,CAAA,EAAG,MAAA,GAAS,UAAA,EAAY,UAAU,CAAA,EAAG;AACrD,IAAA,MAAM,MAAA,GAAA,CAAU,SAAS,GAAA,IAAO,KAAA;AAChC,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAC7C,IAAA,IAAI,KAAA,GAAQ,GAAG,KAAA,GAAQ,CAAA;AACvB,IAAA,IAAI,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAC3C,IAAA,IAAI,GAAA,GAAM,WAAW,GAAA,GAAM,SAAA;AAC3B,IAAA,GAAA,IAAO,KAAA;AAEP,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,GAAA,EAAK,SAAS,CAAA,EAAG;AAC3C,MAAA,MAAM,SAAS,aAAA,CAAA,CAAe,KAAA,GAAQ,KAAA,GAAQ,MAAA,GAAS,OAAO,WAAW,CAAA;AACzE,MAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,KAAA,IAAS,MAAA;AAAA,IACX;AACA,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA,EAAG;AACtD,QAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,MAAA,EAAQ,CAAC,KAAA,EAAO,GAAG,CAAA;AAAA,MACnB,cAAc,OAAA,CAAQ,GAAA;AAAA,QAAI,CAAC,WACzB,IAAA,CAAK,KAAA;AAAA,UACH,SAAS,CAAA,GAAI,IAAA,GAAO,MAAA,GAAS,iBAAA,GAAoB,MAAM,MAAA,GAAS;AAAA;AAClE;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,EAAE,MAAA,OAAa,MAAM,CAAA;AAAA,IACvC,cAAc,IAAA,CAAK,GAAA,CAAI,CAAC,EAAE,YAAA,OAAmB,YAAY;AAAA,GAC3D;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,MAAM,UAAU,KAAA,IAAS,sBAAA;AACzB,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,OAAO,CAAC,CAAA;AAC3C;AAEA,SAAS,cAAA,CACP,MAAA,EACA,YAAA,EACA,aAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,MAAA,CAAO,KAAA,EAAO,YAAY,CAAA;AAC/D,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,MAAA,CAAO,MAAA,EAAQ,aAAa,CAAA;AAC/D,EAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAW,MAAA,CAAO,SAAS,YAAY,CAAA;AAChE,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,EAAc,KAAK,CAAA,EAAG;AACxC,MAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,UAAA,CAAW,OAAO,CAAC,CAAA;AAC1C,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,YAAA,CAAa,CAAC,CAAA;AAC9C,MAAA,IAAI,GAAA,GAAM,gBAAA;AACV,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,SAAS,CAAA,EAAG;AAC7C,QAAA,GAAA,IAAO,MAAA,CAAO,IAAA,CAAA,CAAM,CAAA,GAAI,MAAA,CAAO,KAAA,GAAQ,KAAA,GAAQ,KAAA,IAAS,CAAA,GAAI,OAAO,CAAA,GAAI,YAAA,CAAa,KAAK,CAAA;AAAA,MAC3F;AACA,MAAA,YAAA,CAAa,CAAA,GAAI,YAAA,GAAe,CAAC,CAAA,GAAI,YAAY,GAAG,CAAA;AAAA,IACtD;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,YAAA,GAAe,aAAa,CAAA;AAC1D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,EAAe,KAAK,CAAA,EAAG;AACzC,IAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,QAAA,CAAS,OAAO,CAAC,CAAA;AACxC,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,YAAA,CAAa,CAAC,CAAA;AAC5C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,EAAc,KAAK,CAAA,EAAG;AACxC,MAAA,IAAI,GAAA,GAAM,gBAAA;AACV,MAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,KAAA,EAAO,SAAS,CAAA,EAAG;AAC7C,QAAA,GAAA,IAAO,cAAc,KAAA,GAAQ,KAAA,IAAS,eAAe,CAAC,CAAA,GAAI,aAAa,KAAK,CAAA;AAAA,MAC9E;AACA,MAAA,MAAA,CAAO,CAAA,GAAI,YAAA,GAAe,CAAC,CAAA,GAAI,YAAY,GAAG,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,eAAA,CACd,QACA,aAAA,EACmB;AACnB,EAAA,MAAM,UAAA,GAAa,cAAc,IAAA,CAAK,KAAA;AACtC,EAAA,MAAM,WAAA,GAAc,cAAc,IAAA,CAAK,MAAA;AACvC,EAAA,MAAM,QAAA,GAAW,cAAc,QAAA,IAAY,IAAA;AAC3C,EAAA,IAAI,CAAC,QAAA,KAAa,MAAA,CAAO,QAAQ,UAAA,IAAc,MAAA,CAAO,SAAS,WAAA,CAAA,EAAc;AAC3E,IAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,sIAAA,EAA0B;AAAA,MACpE,SAAA,EAAW,EAAE,KAAA,EAAO,UAAA,EAAY,QAAQ,WAAA,EAAY;AAAA,MACpD,WAAW,EAAE,KAAA,EAAO,OAAO,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAAO,KACzD,CAAA;AAAA,EACH;AACA,EAAA,MAAMC,WAAAA,GAAa,cAAc,UAAA,IAAc,WAAA;AAC/C,EAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,UAAA,GAAa,OAAO,KAAA,EAAO,WAAA,GAAc,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA;AAC5F,EAAA,MAAM,YAAA,GAAe,WACjBA,WAAAA,KAAe,SAAA,GACb,aACA,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,KAAK,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,KAAK,CAAC,CAAC,IACpE,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,MAAA,CAAO,KAAK,CAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,WAClBA,WAAAA,KAAe,SAAA,GACb,cACA,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,KAAK,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,KAAK,CAAC,CAAC,IACtE,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,MAAA,CAAO,MAAM,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,eAAe,MAAA,CAAO,KAAA;AACrC,EAAA,MAAM,MAAA,GAAS,gBAAgB,MAAA,CAAO,MAAA;AACtC,EAAA,MAAM,OAAA,GAAUA,gBAAe,SAAA,GAAY,CAAA,GAAI,KAAK,KAAA,CAAA,CAAO,UAAA,GAAa,gBAAgB,CAAC,CAAA;AACzF,EAAA,MAAM,MAAA,GAASA,gBAAe,SAAA,GAAY,CAAA,GAAI,KAAK,KAAA,CAAA,CAAO,WAAA,GAAc,iBAAiB,CAAC,CAAA;AAC1F,EAAA,MAAM,QAAQ,UAAA,GAAa,WAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,IAAI,YAAA,CAAa,KAAA,GAAQ,CAAC,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,cAAc,WAAA,IAAe,IAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,cAAc,SAAA,IAAa,IAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,SAAA,GAAa,aAAA,CAAc,IAAA,IAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACrE,EAAA,MAAM,GAAA,GAAM,SAAA,GAAa,aAAA,CAAc,GAAA,IAAO,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAK,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACnE,EAAA,MAAMC,cAAAA,GAAgB,cAAc,aAAA,IAAiB,UAAA;AAErD,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,CAAA,EAAG,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,OAAA,GAAU,SAAA,IAAa,IAAA,CAAK,OAAO,CAAA,KAAM,CAAA,GAAI,CAAC,IAAA,CAAK,OAAO,CAAA,GAAI,GAAA,CAAI,OAAO,CAAA,GAAI,CAAA;AACnF,IAAA,IAAA,CAAK,KAAK,OAAA,EAAS,OAAA,GAAU,KAAA,EAAA,CAAQ,OAAA,GAAU,KAAK,KAAK,CAAA;AACzD,IAAA,MAAM,OAAA,GACJ,YAAYA,cAAAA,KAAkB,SAAA,GAC1B,eAAe,MAAA,EAAQ,YAAA,EAAc,aAAA,EAAe,OAAO,CAAA,GAC3D,MAAA;AACN,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,aAAA,EAAe,KAAK,CAAA,EAAG;AACzC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,EAAc,KAAK,CAAA,EAAG;AACxC,QAAA,MAAM,KAAA,GAAQ,UACV,OAAA,CAAQ,CAAA,GAAI,eAAe,CAAC,CAAA,GAC5B,WACE,eAAA,CAAgB,MAAA,EAAQ,GAAG,CAAA,EAAG,YAAA,EAAc,eAAe,OAAO,CAAA,GAClE,cAAc,MAAA,EAAQ,CAAA,EAAG,GAAG,OAAO,CAAA;AACzC,QAAA,MAAM,MAAA,GAAS,OAAA,GAAU,KAAA,GAAQ,aAAA,CAAc,aAAA,GAAgB,KAAA;AAC/D,QAAA,IAAA,CAAK,OAAA,GAAU,KAAA,GAAA,CAAS,CAAA,GAAI,MAAA,IAAU,aAAa,CAAA,GAAI,OAAO,CAAA,GAAI,SAAA,GAAA,CAC7D,SAAS,IAAA,CAAK,OAAO,CAAA,IAAK,GAAA,CAAI,OAAO,CAAA,GACtC,MAAA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAA,EAAM,CAAC,CAAA,EAAG,CAAA,EAAG,aAAa,UAAU,CAAA;AAAA,IACpC,SAAA,EAAW;AAAA,MACT,UAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAe,MAAA,CAAO,KAAA;AAAA,MACtB,gBAAgB,MAAA,CAAO,MAAA;AAAA,MACvB,YAAA;AAAA,MACA,aAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;;;ACzLA,SAASC,WAAAA,GAAqB;AAC5B,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,OAAA,CAAQ,OAAqB,SAAA,EAA2B;AAC/D,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,KAAU,SAAS,CAAA;AACxC;AAEA,SAASC,gBAAe,MAAA,EAA4B;AAClD,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,iBAAiB,SAAA,EAAW,gCAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC1E;AACF;AAEA,SAAS,iBAAA,CAAkB,OAAe,IAAA,EAAoB;AAC5D,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,GAAQ,CAAA,IAAK,QAAQ,CAAA,EAAG;AACrD,IAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,CAAA,EAAG,IAAI,CAAA,6DAAA,CAAA,EAAoB;AAAA,MACrE,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACF;AAEA,SAAS,qBAAA,CAAsB,QAA2B,OAAA,EAA8B;AACtF,EAAA,IAAI,QAAQ,SAAA,KAAc,MAAA,EAAW,iBAAA,CAAkB,OAAA,CAAQ,WAAW,WAAW,CAAA;AACrF,EAAA,IAAI,OAAA,CAAQ,oBAAoB,MAAA,EAAW;AAC3C,EAAA,KAAA,MAAW,CAAC,OAAO,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,eAAe,CAAA,EAAG;AACpE,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,gBAAA,CAAiB,eAAA,EAAiB,CAAA,qDAAA,EAA0B,KAAK,CAAA,CAAA,EAAI;AAAA,QAC7E;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,iBAAA,CAAkB,KAAA,EAAO,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAE,CAAA;AAAA,EACrD;AACF;AAEO,IAAM,oCAAN,MAAwC;AAAA,EAa7C,YAA6B,OAAA,EAAqC;AAArC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAC3B,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,YAAA;AAC5B,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,GAAA,IAAOD,WAAAA;AAAA,EAC9B;AAAA,EAP6B,OAAA;AAAA,EAZpB,YAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACQ,KAAA;AAAA,EACT,QAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA,GAAuB,QAAQ,OAAA,EAAQ;AAAA,EACvC,QAAA,GAAW,KAAA;AAAA,EAWnB,MAAM,IAAA,CAAK,OAAA,GAAoC,EAAC,EAAkB;AAChE,IAAA,IAAI,KAAK,QAAA,EAAU,MAAM,IAAI,gBAAA,CAAiB,YAAY,sCAAQ,CAAA;AAClE,IAAAC,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,IAAA,CAAK,WAAA,KAAgB,KAAK,OAAA,CAAQ,YAAA,CAAa,QAAQ,MAAM,CAAA,CAAE,IAAA,CAAK,OAAO,QAAA,KAAa;AACtF,MAAA,IAAI,KAAK,QAAA,EAAU;AACjB,QAAA,MAAM,SAAS,OAAA,EAAQ;AACvB,QAAA,MAAM,IAAI,gBAAA,CAAiB,UAAA,EAAY,sCAAQ,CAAA;AAAA,MACjD;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,WAAA;AAAA,IACb,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AACnB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAA,CAAO,KAAA,EAAoB,OAAA,GAAyB,EAAC,EAA+B;AAClF,IAAA,IAAI,IAAA,CAAK,UAAU,OAAO,OAAA,CAAQ,OAAO,IAAI,gBAAA,CAAiB,UAAA,EAAY,sCAAQ,CAAC,CAAA;AACnF,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,OAAO,QAAQ,MAAA,CAAO,IAAI,gBAAA,CAAiB,uBAAA,EAAyB,4CAAS,CAAC,CAAA;AAAA,IAChF;AACA,IAAA,IAAI;AACF,MAAA,qBAAA,CAAsB,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACrD,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,QACb,KAAA,YAAiB,QAAQ,KAAA,GAAQ,IAAI,iBAAiB,eAAA,EAAiB,MAAA,CAAO,KAAK,CAAC;AAAA,OACtF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,IAAA,CAAK,MAAM,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,OAAO,CAAC,CAAA;AACvE,IAAA,IAAA,CAAK,QAAQ,SAAA,CAAU,IAAA;AAAA,MACrB,MAAM,MAAA;AAAA,MACN,MAAM;AAAA,KACR;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,gBAAA,GAAgE;AAC9D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,IAAmB,IAAK,OAAA,CAAQ,OAAA,CAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,EACtF;AAAA,EAEA,sBAAA,GAAwC;AACtC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,sBAAA,IAAyB,IAAK,QAAQ,OAAA,EAAQ;AAAA,EACpE;AAAA,EAEA,aAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,IAAgB,IAAK,QAAQ,OAAA,EAAQ;AAAA,EAC3D;AAAA,EAEA,eAAA,GAAiC;AAC/B,IAAA,OAAO,KAAK,sBAAA,EAAuB;AAAA,EACrC;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAO,MAAM,IAAA,CAAK,cAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,kBAAkB,YAAY;AACjC,MAAA,MAAM,IAAA,CAAK,KAAA;AACX,MAAA,MAAM,IAAA,CAAK,UAAU,OAAA,EAAQ;AAC7B,MAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAChB,MAAA,MAAM,IAAA,CAAK,QAAQ,gBAAA,IAAmB;AAAA,IACxC,CAAA,GAAG;AACH,IAAA,MAAM,IAAA,CAAK,cAAA;AAAA,EACb;AAAA,EAEA,MAAc,UAAA,CAAW,KAAA,EAAoB,OAAA,EAAoD;AAC/F,IAAA,IAAI,KAAK,QAAA,EAAU,MAAM,IAAI,gBAAA,CAAiB,YAAY,sCAAQ,CAAA;AAClE,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,gBAAA,CAAiB,yBAAyB,4CAAS,CAAA;AAC5E,IAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,IAAA,MAAM,cAAA,GAAiB,KAAK,KAAA,EAAM;AAElC,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,KAAA,EAAO;AAAA,MAC7C,GAAG,KAAK,OAAA,CAAQ,iBAAA;AAAA,MAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AACD,IAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAE7B,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,YAAA,EAAc,MAAA,EAAQ,SAAS,CAAA;AAClE,IAAA,MAAM,mBAAA,GAAsB,KAAK,KAAA,EAAM;AACvC,IAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,OAAA,EAAS,IAAA,CAAK,SAAS,aAAa,CAAA;AACzE,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,mBAAmB,CAAA;AAC5D,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,YAAA,EAAc,MAAA,EAAQ,YAAY,CAAA;AAErE,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,WAAA,EAAa,MAAA,EAAQ,SAAS,CAAA;AACjE,IAAA,MAAM,kBAAA,GAAqB,KAAK,KAAA,EAAM;AACtC,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,GAAA;AAAA,MAC7B;AAAA,QACE,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA;AAAA,QAC/B,MAAM,YAAA,CAAa,IAAA;AAAA,QACnB,MAAM,YAAA,CAAa;AAAA,OACrB;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,kBAAkB,CAAA;AAC1D,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,WAAA,EAAa,MAAA,EAAQ,YAAY,CAAA;AACpE,IAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAE7B,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,aAAA,EAAe,MAAA,EAAQ,SAAS,CAAA;AACnE,IAAA,MAAM,oBAAA,GAAuB,KAAK,KAAA,EAAM;AACxC,IAAA,MAAM,UAAA,GAAa,uBAAuB,OAAA,EAAS;AAAA,MACjD,MAAA,EAAQ,KAAK,QAAA,CAAS,MAAA;AAAA,MACtB,cAAA,EAAgB,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,SAAS,cAAA,CAAe,cAAA;AAAA,MAClE,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,YAAA,EAAc,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,YAAA;AAAA,MAC3C,WAAW,YAAA,CAAa,SAAA;AAAA,MACxB,OAAA,EAAS,KAAK,QAAA,CAAS,OAAA;AAAA,MACvB,iBAAA,EAAmB,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,iBAAA;AAAA,MAChD,gBAAA,EAAkB,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,gBAAA;AAAA,MAC/C,cAAA,EAAgB,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe;AAAA,KAC9C,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,oBAAoB,CAAA;AAC9D,IAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,EAAE,OAAO,aAAA,EAAe,MAAA,EAAQ,YAAY,CAAA;AAEtE,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,IAAA;AAAA,QACnC,UAAU,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA;AAAO,OAC3D;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAA,EAAS;AAAA,QACP,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,YAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,OAAA,EAAS,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,cAAc;AAAA,OAC7C;AAAA,MACA,GAAI,OAAA,CAAQ,WAAA,KAAgB,UAAa,OAAA,CAAQ,QAAA,KAAa,SAC1D,EAAC,GACD,EAAE,KAAA,EAAO,EAAE,WAAA,EAAa,OAAA,CAAQ,aAAa,QAAA,EAAU,OAAA,CAAQ,UAAS;AAAE,KAChF;AAAA,EACF;AACF,CAAA;;;AClOA,IAAM,YAAA,uBAAmB,GAAA,CAAqB,CAAC,WAAW,aAAA,EAAe,YAAA,EAAc,QAAQ,CAAC,CAAA;AAChG,IAAM,2BAAW,IAAI,GAAA,CAAa,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AACpD,IAAM,UAAA,uBAAiB,GAAA,CAAe,CAAC,QAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC7E,IAAM,gBAAA,GAAmB,sBAAA;AACzB,IAAM,cAAA,GAAiB,mBAAA;AAEvB,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,OAAA,CAAQ,MAAc,OAAA,EAAwB;AACrD,EAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,CAAA,yBAAA,EAAQ,IAAI,IAAI,OAAO,CAAA,CAAA,EAAI,EAAE,IAAA,EAAM,CAAA;AACpF;AAEA,SAAS,MAAA,CAAO,OAAgB,IAAA,EAAuC;AACrE,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAA,CAAQ,MAAM,gCAAO,CAAA;AAC3C,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,IAAA,CAAK,OAAgB,IAAA,EAAsB;AAClD,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,MAAK,KAAM,EAAA,EAAI,OAAA,CAAQ,IAAA,EAAM,kDAAU,CAAA;AAC9E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAgB,IAAA,EAAsB;AAC7D,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,KAAK,KAAM,KAAA,IAAoB,CAAA,EAAG,OAAA,CAAQ,IAAA,EAAM,sCAAQ,CAAA;AAC9E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAA,CAAyB,OAAgB,IAAA,EAA6B;AAC7E,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,KAAK,KAAM,KAAA,GAAmB,CAAA,EAAG,OAAA,CAAQ,IAAA,EAAM,uDAAe,CAAA;AACpF,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,SAAA,CAAU,OAAgB,IAAA,EAAsB;AACvD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,SAAS,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,CAAA;AAC/E,IAAA,OAAA,CAAQ,MAAM,8DAAiB,CAAA;AACjC,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,OAAgB,IAAA,EAAmD;AAC7F,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,UAAU,OAAO,QAAA;AAC/B,EAAA,IAAI,KAAA,KAAU,cAAc,OAAO,YAAA;AACnC,EAAA,OAAA,CAAQ,MAAM,6CAAyB,CAAA;AACzC;AAEA,SAAS,iBAAA,CAAkB,OAAgB,IAAA,EAA6C;AACtF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,UAAU,OAAO,QAAA;AAC/B,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,MAAA;AAC7B,EAAA,OAAA,CAAQ,MAAM,uCAAmB,CAAA;AACnC;AAEA,SAAS,kBAAA,CAAmB,OAAgB,IAAA,EAAmD;AAC7F,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AACzD,EAAA,OAAA,CAAQ,MAAM,6CAAyB,CAAA;AACzC;AAEA,SAAS,qBAAA,CAAsB,OAAgB,IAAA,EAAkD;AAC/F,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,UAAA,IAAc,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AACxD,EAAA,OAAA,CAAQ,MAAM,4CAAwB,CAAA;AACxC;AAEA,SAAS,qBAAA,CAAsB,OAAgB,IAAA,EAA6C;AAC1F,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IACE,CAAC,MAAM,OAAA,CAAQ,KAAK,KACpB,KAAA,CAAM,MAAA,KAAW,KACjB,CAAC,KAAA,CAAM,MAAM,CAAC,IAAA,KAAS,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,QAAA,CAAS,IAAI,CAAC,CAAA,EACxE;AACA,IAAA,OAAA,CAAQ,MAAM,0EAAc,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS,IAAc,CAAA;AAC3C;AAEA,SAAS,MAAA,CAAO,KAAA,EAAgB,IAAA,EAAc,YAAA,GAAe,KAAA,EAAuB;AAClF,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA;AACxB,EAAA,IACE,CAAC,MAAM,OAAA,CAAQ,KAAK,KACpB,KAAA,CAAM,MAAA,KAAW,CAAA,IACjB,CAAC,KAAA,CAAM,KAAA;AAAA,IACL,CAAC,cACC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,KAAM,SAAA,GAAY,CAAA,IAAM,YAAA,IAAgB,SAAA,KAAc,EAAA;AAAA,GACpF,EACA;AACA,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU,oEAAa,CAAA;AAAA,EACxC;AACA,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAA;AAAA,IACzC,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,cAAc,SAAmB,CAAA;AAAA,IACnD,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ;AAAA,GAC9C;AACF;AAEA,SAAS,MAAA,CAAO,KAAA,EAAgB,IAAA,EAAc,YAAA,EAAmC;AAC/E,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA,IAAI,OAAO,UAAU,IAAA,KAAS,QAAA,IAAY,CAAC,YAAA,CAAa,GAAA,CAAI,UAAU,IAAuB,CAAA;AAC3F,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA,EAAS,0BAAM,CAAA;AAChC,EAAA,MAAM,WAAW,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,CAAA,EAAG,IAAI,CAAA,SAAA,CAAW,CAAA;AAC5D,EAAA,IAAI,CAAC,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,SAAA,CAAA,EAAa,2FAA+B,CAAA;AAC7D,EAAA,MAAM,cAAc,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,CAAA,EAAG,IAAI,CAAA,YAAA,CAAc,CAAA;AACrE,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,SAAA,GAAY,IAAI,IAAI,WAAW,CAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,YAAA,CAAA,EAAgB,oCAAW,CAAA;AAAA,EAC5C;AACA,EAAA,IACG,SAAA,CAAU,aAAa,OAAA,IAAW,SAAA,CAAU,aAAa,QAAA,IAC1D,SAAA,CAAU,aAAa,EAAA,EACvB;AACA,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,YAAA,CAAA,EAAgB,wDAAqB,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,QAAQ,eAAA,CAAgB,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAC9D,EAAA,IAAI,UAAU,YAAA,EAAc,OAAA,CAAQ,CAAA,EAAG,IAAI,UAAU,wDAAW,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,CAAU,MAAA,EAAQ,GAAG,IAAI,CAAA,OAAA,CAAS,EAAE,WAAA,EAAY;AACpE,EAAA,IAAI,CAAC,eAAe,IAAA,CAAK,MAAM,GAAG,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,OAAA,CAAA,EAAW,kEAAgB,CAAA;AAC5E,EAAA,OAAO;AAAA,IACL,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,YAAY,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,CAAA,EAAG,IAAI,CAAA,WAAA,CAAa,CAAA;AAAA,IAC3D,QAAA;AAAA,IACA,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAA;AAAA,IACzC,WAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CAAQ,OAAgB,IAAA,EAAqC;AACpE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA,IAAI,OAAO,UAAU,SAAA,KAAc,QAAA,IAAY,CAAC,UAAA,CAAW,GAAA,CAAI,UAAU,SAAsB,CAAA;AAC7F,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,UAAA,CAAA,EAAc,0BAAM,CAAA;AACrC,EAAA,IACE,SAAA,CAAU,YAAA,KAAiB,IAAA,KAC1B,OAAO,SAAA,CAAU,YAAA,KAAiB,QAAA,IAAY,SAAA,CAAU,YAAA,CAAa,IAAA,EAAK,KAAM,EAAA,CAAA,EACjF;AACA,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,EAAiB,6DAAgB,CAAA;AAAA,EAClD;AACA,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA,IACjC,SAAA,CAAU,QAAA,CAAS,MAAA,KAAW,CAAA,IAC9B,CAAC,SAAA,CAAU,QAAA,CAAS,KAAA;AAAA,IAClB,CAAC,OAAA,KAAY,OAAO,YAAY,QAAA,IAAY,QAAA,CAAS,IAAI,OAAkB;AAAA,GAC7E,EACA;AACA,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,SAAA,CAAA,EAAa,+DAAuB,CAAA;AAAA,EACrD;AACA,EAAA,MAAM,QAAQ,eAAA,CAAgB,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAC9D,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,IAAK,SAAA,CAAU,QAAQ,MAAA,KAAW,CAAA;AACpE,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,QAAA,CAAA,EAAY,4CAAS,CAAA;AACtC,EAAA,MAAM,OAAA,GAAU,UAAU,OAAA,CAAQ,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KAC3C,MAAA,CAAO,IAAA,EAAM,GAAG,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAA,EAAK,KAAK;AAAA,GACjD;AACA,EAAA,IAAI,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,IAAA,KAAS,OAAA,CAAQ,MAAA;AAC7D,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,QAAA,CAAA,EAAY,gFAAoB,CAAA;AACjD,EAAA,MAAM,WAAW,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,YAAY,OAAkB,CAAA;AACvE,EAAA,MAAM,SAAS,SAAA,CAAU,MAAA;AACzB,EAAA,IAAI,WAAW,MAAA,IAAa,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,UAAU,MAAA,KAAW,SAAA;AACjF,IAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,OAAA,CAAA,EAAW,0BAAM,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK,CAAA;AAAA,IACnC,WAAW,SAAA,CAAU,SAAA;AAAA,IACrB,YAAA,EAAc,SAAA,CAAU,YAAA,KAAiB,IAAA,GAAO,OAAO,SAAA,CAAU,YAAA;AAAA,IACjE,OAAO,eAAA,CAAgB,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAAA,IACvD,KAAA;AAAA,IACA,gBAAgB,wBAAA,CAAyB,SAAA,CAAU,cAAA,EAAgB,CAAA,EAAG,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,IAC3F,QAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAI,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA;AAAO,GAC3C;AACF;AAEO,SAAS,uBAAuB,KAAA,EAA0C;AAC/E,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,EAAO,oBAAK,CAAA;AACrC,EAAA,IAAI,SAAA,CAAU,aAAA,KAAkB,CAAA,EAAG,OAAA,CAAQ,iBAAiB,sBAAO,CAAA;AACnE,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AAClD,EAAA,MAAM,KAAA,GAAuB;AAAA,IAC3B,EAAA,EAAI,IAAA,CAAK,UAAA,CAAW,EAAA,EAAI,UAAU,CAAA;AAAA,IAClC,OAAA,EAAS,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,eAAe;AAAA,GACnD;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,IAAK,SAAA,CAAU,QAAQ,MAAA,KAAW,CAAA;AACpE,IAAA,OAAA,CAAQ,WAAW,4CAAS,CAAA;AAC9B,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,SAAA,CAAU,aAAA,EAAe,eAAe,CAAA;AACrE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,oBAAoB,CAAA;AAC5D,EAAA,IACE,OAAO,aAAA,CAAc,aAAA,KAAkB,QAAA,IACvC,CAAC,MAAA,CAAO,QAAA,CAAS,aAAA,CAAc,aAAa,CAAA,IAC5C,aAAA,CAAc,aAAA,IAAiB,CAAA,EAC/B;AACA,IAAA,OAAA,CAAQ,+BAA+B,kDAAU,CAAA;AAAA,EACnD;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,CAAC,UAAA,EAAY,WAAA,EAAa,aAAa,CAAA,EAAY;AACrE,IAAA,IAAI,cAAc,KAAK,CAAA,KAAM,UAAa,OAAO,aAAA,CAAc,KAAK,CAAA,KAAM,SAAA;AACxE,MAAA,OAAA,CAAQ,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAA,EAAI,sCAAQ,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,SAAA,CAAU,cAAA,EAAgB,gBAAgB,CAAA;AACxE,EAAA,IAAI,cAAA,CAAe,IAAA,KAAS,KAAA,EAAO,OAAA,CAAQ,uBAAuB,oCAAW,CAAA;AAC7E,EAAA,MAAM,iBAAA,GAAoB,kBAAA;AAAA,IACxB,cAAA,CAAe,iBAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAmB,kBAAA;AAAA,IACvB,cAAA,CAAe,gBAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,MAAM,cAAA,GAAiB,iBAAA;AAAA,IACrB,cAAA,CAAe,cAAA;AAAA,IACf;AAAA,GACF;AACA,EAAA,MAAMH,WAAAA,GAAa,kBAAA,CAAmB,aAAA,CAAc,UAAA,EAAY,0BAA0B,CAAA;AAC1F,EAAA,MAAMC,cAAAA,GAAgB,qBAAA;AAAA,IACpB,aAAA,CAAc,aAAA;AAAA,IACd;AAAA,GACF;AACA,EAAA,IACE,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,IAC/B,SAAA,CAAU,MAAA,CAAO,MAAA,KAAW,CAAA,IAC5B,CAAC,UAAU,MAAA,CAAO,KAAA,CAAM,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,IAAA,EAAK,KAAM,EAAE,CAAA,EACnF;AACA,IAAA,OAAA,CAAQ,UAAU,8DAAY,CAAA;AAAA,EAChC;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA,IAAK,SAAA,CAAU,SAAS,MAAA,KAAW,CAAA;AACtE,IAAA,OAAA,CAAQ,YAAY,4CAAS,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,OAAA,CAAQ,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;AAC5F,EAAA,IAAI,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,IAAA,KAAS,QAAA,CAAS,MAAA;AAC7D,IAAA,OAAA,CAAQ,YAAY,0CAAY,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,aAAA,CAAc,IAAA,EAAM,oBAAoB,CAAA;AAC3E,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,aAAA,CAAc,GAAA,EAAK,mBAAmB,CAAA;AACxE,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC9B,EAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,CAAK,MAAA,KAAW,QAAA;AACxC,IAAA,OAAA,CAAQ,sBAAsB,0EAAc,CAAA;AAC9C,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,CAAI,MAAA,KAAW,QAAA;AACtC,IAAA,OAAA,CAAQ,qBAAqB,0EAAc,CAAA;AAC7C,EAAA,IAAI,GAAA,EAAK,KAAK,CAACG,MAAAA,KAAUA,UAAS,CAAC,CAAA,EAAG,OAAA,CAAQ,mBAAA,EAAqB,4CAAS,CAAA;AAC5E,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,CAAA;AAAA,IACf,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,MAAA,CAAO,IAAA,EAAM,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,CAAA,EAAK,IAAI,CAAC,CAAA;AAAA,IACvF,aAAA,EAAe;AAAA,MACb,IAAA,EAAM;AAAA,QACJ,KAAA,EAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,EAAO,0BAA0B,CAAA;AAAA,QAC7D,MAAA,EAAQ,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,2BAA2B;AAAA,OAClE;AAAA,MACA,eAAe,aAAA,CAAc,aAAA;AAAA,MAC7B,GAAIJ,WAAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,YAAAA,WAAAA,EAAW;AAAA,MACjD,GAAIC,cAAAA,KAAkB,MAAA,GAAY,EAAC,GAAI,EAAE,eAAAA,cAAAA,EAAc;AAAA,MACvD,GAAI,OAAO,aAAA,CAAc,QAAA,KAAa,SAAA,GAAY,EAAE,QAAA,EAAU,aAAA,CAAc,QAAA,EAAS,GAAI,EAAC;AAAA,MAC1F,GAAI,OAAO,aAAA,CAAc,SAAA,KAAc,SAAA,GACnC,EAAE,SAAA,EAAW,aAAA,CAAc,SAAA,EAAU,GACrC,EAAC;AAAA,MACL,GAAI,OAAO,aAAA,CAAc,WAAA,KAAgB,SAAA,GACrC,EAAE,WAAA,EAAa,aAAA,CAAc,WAAA,EAAY,GACzC,EAAC;AAAA,MACL,GAAI,IAAA,KAAS,MAAA,GAAY,EAAC,GAAI,EAAE,IAAA,EAAK;AAAA,MACrC,GAAI,GAAA,KAAQ,MAAA,GAAY,EAAC,GAAI,EAAE,GAAA;AAAI,KACrC;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,IAAA,EAAM,KAAA;AAAA,MACN,cAAA,EAAgB,SAAA,CAAU,cAAA,CAAe,cAAA,EAAgB,+BAA+B,CAAA;AAAA,MACxF,YAAA,EAAc,SAAA,CAAU,cAAA,CAAe,YAAA,EAAc,6BAA6B,CAAA;AAAA,MAClF,GAAI,iBAAA,KAAsB,MAAA,GAAY,EAAC,GAAI,EAAE,iBAAA,EAAkB;AAAA,MAC/D,GAAI,gBAAA,KAAqB,MAAA,GAAY,EAAC,GAAI,EAAE,gBAAA,EAAiB;AAAA,MAC7D,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAC,GAAI,EAAE,cAAA;AAAe,KAC3D;AAAA,IACA,QAAQ,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,KAAe,CAAA;AAAA,IACvD;AAAA,GACF;AACF;;;ACnRA,IAAMI,eAAAA,GAAiB,mBAAA;AACvB,IAAMC,4BAAW,IAAI,GAAA,CAAa,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AACpD,IAAMC,WAAAA,uBAAiB,GAAA,CAAe,CAAC,QAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAE7E,SAASC,OAAAA,CAAO,OAAgB,IAAA,EAAuC;AACrE,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,MAAM,IAAI,iBAAiB,kBAAA,EAAoB,CAAA,yBAAA,EAAQ,IAAI,CAAA,+BAAA,CAAA,EAAU,EAAE,MAAM,CAAA;AAAA,EAC/E;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAASC,QAAAA,CAAQ,MAAc,OAAA,EAAwB;AACrD,EAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,CAAA,yBAAA,EAAQ,IAAI,IAAI,OAAO,CAAA,CAAA,EAAI,EAAE,IAAA,EAAM,CAAA;AACpF;AAEA,SAASC,KAAAA,CAAK,OAAgB,IAAA,EAAsB;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,OAAW,EAAA,EAAID,QAAAA,CAAQ,IAAA,EAAM,kDAAU,CAAA;AAC9E,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,OAAA,CAAQ,KAAA,EAAgB,IAAA,EAAc,SAAA,GAAY,KAAA,EAAe;AACxE,EAAA,IAAI,CAAC,OAAO,SAAA,CAAU,KAAK,MAAM,SAAA,GAAa,KAAA,GAAmB,CAAA,GAAK,KAAA,IAAoB,CAAA,CAAA,EAAI;AAC5F,IAAAA,QAAAA,CAAQ,IAAA,EAAM,SAAA,GAAY,4CAAA,GAAY,sCAAQ,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAASE,yBAAAA,CAAyB,OAAgB,IAAA,EAA6B;AAC7E,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,EAAA,OAAO,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AAClC;AAEA,SAAS,MAAA,CAAO,OAAgB,IAAA,EAAsB;AACpD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAGF,QAAAA,CAAQ,IAAA,EAAM,4CAAS,CAAA;AACjF,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,OAAA,CAAQ,OAAgB,IAAA,EAAuB;AACtD,EAAA,IAAI,OAAO,KAAA,KAAU,SAAA,EAAWA,QAAAA,CAAQ,MAAM,sCAAQ,CAAA;AACtD,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,UAAA,CAAW,OAAgB,IAAA,EAAmD;AACrF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AACzD,EAAAA,QAAAA,CAAQ,MAAM,6CAAyB,CAAA;AACzC;AAEA,SAAS,aAAA,CAAc,OAAgB,IAAA,EAAkD;AACvF,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,IAAI,KAAA,KAAU,UAAA,IAAc,KAAA,KAAU,SAAA,EAAW,OAAO,KAAA;AACxD,EAAAA,QAAAA,CAAQ,MAAM,4CAAwB,CAAA;AACxC;AAEA,SAAS,QAAA,CAAS,OAAgB,IAAA,EAAqB;AACrD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,CAAA,IAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACzC,EAAAA,QAAAA,CAAQ,MAAM,gEAAkC,CAAA;AAClD;AAEA,SAAS,GAAA,CAAI,OAAgB,IAAA,EAAsB;AACjD,EAAA,MAAM,MAAA,GAASC,KAAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AAC/B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAM,CAAA;AAC7B,IAAA,IAAI,CAAC,CAAC,OAAA,EAAS,QAAQ,EAAE,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,EAAU,MAAM,IAAI,KAAA,EAAM;AAAA,EAC1F,CAAA,CAAA,MAAQ;AACN,IAAAD,QAAAA,CAAQ,MAAM,wDAAqB,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAASV,OAAAA,CAAO,KAAA,EAAgB,IAAA,EAAc,YAAA,GAAe,KAAA,EAAuB;AAClF,EAAA,MAAM,SAAA,GAAYS,OAAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,KAAK,CAAA,IAC9B,SAAA,CAAU,KAAA,CAAM,MAAA,KAAW,CAAA,IAC3B,CAAC,SAAA,CAAU,KAAA,CAAM,KAAA;AAAA,IACf,CAAC,cACC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,KAAM,SAAA,GAAY,CAAA,IAAM,YAAA,IAAgB,SAAA,KAAc,EAAA;AAAA,GACpF,EACA;AACA,IAAAC,QAAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU,kDAAU,CAAA;AAAA,EACrC;AACA,EAAA,OAAO;AAAA,IACL,MAAMC,KAAAA,CAAK,SAAA,CAAU,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,KAAA,CAAO,CAAA;AAAA,IACzC,OAAOA,KAAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC5C,KAAA,EAAO,SAAA,CAAU,KAAA,CAAM,GAAA,CAAI,MAAM;AAAA,GACnC;AACF;AAEA,SAAS,MAAA,CAAO,KAAA,EAAgB,IAAA,EAAc,QAAA,GAAW,KAAA,EAAiC;AACxF,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAAGD,QAAAA,CAAQ,IAAA,EAAM,+CAAY,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAU,MAAA,CAAO,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA;AAC3E,EAAA,IAAI,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,IAAQ,CAAC,CAAA,EAAGA,QAAAA,CAAQ,IAAA,EAAM,4CAAS,CAAA;AACzE,EAAA,OAAO,MAAA;AACT;AAEA,SAASG,QAAAA,CAAQ,OAAgB,IAAA,EAAoC;AACnE,EAAA,MAAM,SAAA,GAAYJ,OAAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,oBAAoB,CAAA,IAC7C,SAAA,CAAU,oBAAA,CAAqB,MAAA,KAAW,CAAA,IAC1C,CAAC,SAAA,CAAU,oBAAA,CAAqB,KAAA;AAAA,IAC9B,CAAC,OAAA,KAAY,OAAO,YAAY,QAAA,IAAYF,SAAAA,CAAS,IAAI,OAAkB;AAAA,GAC7E,EACA;AACA,IAAAG,QAAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,qBAAA,CAAA,EAAyB,+DAAuB,CAAA;AAAA,EACjE;AACA,EAAA,IACE,OAAO,UAAU,SAAA,KAAc,QAAA,IAC/B,CAACF,WAAAA,CAAW,GAAA,CAAI,SAAA,CAAU,SAAsB,CAAA,EAChD;AACA,IAAAE,QAAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,UAAA,CAAA,EAAc,0BAAM,CAAA;AAAA,EACrC;AACA,EAAA,IACE,SAAA,CAAU,YAAA,KAAiB,MAAA,IAC3B,SAAA,CAAU,iBAAiB,IAAA,KAC1B,OAAO,SAAA,CAAU,YAAA,KAAiB,QAAA,IAAY,SAAA,CAAU,YAAA,CAAa,IAAA,OAAW,EAAA,CAAA,EACjF;AACA,IAAAA,QAAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,aAAA,CAAA,EAAiB,6DAAgB,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,MAAA,GAASC,MAAK,SAAA,CAAU,MAAA,EAAQ,GAAG,IAAI,CAAA,OAAA,CAAS,EAAE,WAAA,EAAY;AACpE,EAAA,IAAI,CAACL,eAAAA,CAAe,IAAA,CAAK,MAAM,CAAA,EAAGI,QAAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,OAAA,CAAA,EAAW,kEAAgB,CAAA;AAC5E,EAAA,MAAM,aAAaD,OAAAA,CAAO,SAAA,CAAU,UAAA,EAAY,CAAA,EAAG,IAAI,CAAA,WAAA,CAAa,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,sBAAsB,SAAA,CAAU,oBAAA,CAAqB,GAAA,CAAI,CAAC,YAAY,OAAkB,CAAA;AAAA,IACxF,OAAO,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC/C,UAAUE,KAAAA,CAAK,SAAA,CAAU,QAAA,EAAU,CAAA,EAAG,IAAI,CAAA,SAAA,CAAW,CAAA;AAAA,IACrD,IAAIA,KAAAA,CAAK,SAAA,CAAU,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK,CAAA;AAAA,IACnC,OAAO,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC/C,WAAW,SAAA,CAAU,SAAA;AAAA,IACrB,YAAA,EAAc,SAAA,CAAU,YAAA,KAAiB,MAAA,GAAY,OAAO,SAAA,CAAU,YAAA;AAAA,IACtE,MAAA;AAAA,IACA,KAAK,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,IAAI,CAAA,IAAA,CAAM,CAAA;AAAA,IACrC,UAAA,EAAY;AAAA,MACV,UAAU,OAAA,CAAQ,UAAA,CAAW,QAAA,EAAU,CAAA,EAAG,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAAA,MACpE,MAAM,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,gBAAA,CAAkB,CAAA;AAAA,MACxD,QAAQA,KAAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,CAAA,EAAG,IAAI,CAAA,kBAAA,CAAoB;AAAA;AAC7D,GACF;AACF;AAEO,SAAS,mBAAmB,KAAA,EAA+B;AAChE,EAAA,MAAM,SAAA,GAAYF,OAAAA,CAAO,KAAA,EAAO,oBAAK,CAAA;AACrC,EAAA,IAAI,UAAU,aAAA,KAAkB,CAAA,EAAGC,QAAAA,CAAQ,iBAAiB,sBAAO,CAAA;AACnE,EAAA,MAAM,KAAA,GAAQD,OAAAA,CAAO,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgBA,OAAAA,CAAO,SAAA,CAAU,aAAA,EAAe,eAAe,CAAA;AACrE,EAAA,MAAM,IAAA,GAAOA,OAAAA,CAAO,aAAA,CAAc,IAAA,EAAM,oBAAoB,CAAA;AAC5D,EAAA,MAAMV,OAAAA,GAASU,OAAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,QAAQ,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQA,OAAAA,CAAOV,OAAAA,CAAO,KAAA,EAAO,cAAc,CAAA;AACjD,EAAA,MAAM,0BAAA,GAA6B,aAAA;AAAA,IACjC,aAAA,CAAc,aAAA;AAAA,IACd;AAAA,GACF;AACA,EAAA,MAAM,qBAAA,GAAwB,QAAA,CAAS,aAAA,CAAc,QAAA,EAAU,wBAAwB,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQC,OAAAA,CAAO,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA;AAC7C,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,MAAM,CAAA,EAAG;AAC5E,IAAAU,QAAAA,CAAQ,eAAe,0CAAiB,CAAA;AAAA,EAC1C;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAA,IAAK,SAAA,CAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACvE,IAAAA,QAAAA,CAAQ,WAAW,4CAAS,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,UAAU,MAAA,CAAO,MAAA;AACxD,IAAAA,QAAAA,CAAQ,UAAU,4CAAS,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAUC,KAAAA,CAAK,KAAA,EAAO,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;AACrF,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA,IAAK,CAAC,SAAA,CAAU,QAAA,CAAS,MAAA,EAAQ;AACpE,IAAAD,QAAAA,CAAQ,YAAY,4CAAS,CAAA;AAAA,EAC/B;AACA,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAUG,QAAAA,CAAQ,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;AAC5F,EAAA,IAAI,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,IAAA,KAAS,QAAA,CAAS,MAAA;AAC7D,IAAAH,QAAAA,CAAQ,YAAY,6BAAS,CAAA;AAC/B,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,SAAA,CAAU,eAAe,CAAA,IAAK,CAAC,SAAA,CAAU,eAAA,CAAgB,MAAA,EAAQ;AAClF,IAAAA,QAAAA,CAAQ,mBAAmB,4CAAS,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,CAAgB,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KAC3DC,MAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,CAAG;AAAA,GACxC;AACA,EAAA,IAAI,eAAA,CAAgB,IAAA,CAAK,CAAC,EAAA,KAAO,CAAC,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,EAAA,KAAO,EAAE,CAAC,CAAA,EAAG;AAC1E,IAAAD,QAAAA,CAAQ,mBAAmB,wDAAW,CAAA;AAAA,EACxC;AACA,EAAA,MAAM,kBAAkB,MAAA,CAAO,WAAA;AAAA,IAC7B,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAC1C,MAAA,MAAM,aAAaC,KAAAA,CAAK,IAAA,EAAM,gBAAgB,IAAI,CAAA,CAAE,EAAE,WAAA,EAAY;AAClE,MAAA,IAAI,CAACL,eAAAA,CAAe,IAAA,CAAK,UAAU,CAAA,EAAGI,QAAAA,CAAQ,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA,EAAI,4BAAa,CAAA;AACnF,MAAA,OAAO,CAAC,MAAM,UAAU,CAAA;AAAA,IAC1B,CAAC;AAAA,GACH;AACA,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,CAAA;AAAA,IACf,aAAA,EAAeC,KAAAA,CAAK,SAAA,CAAU,aAAA,EAAe,eAAe,CAAA;AAAA,IAC5D,KAAA,EAAO;AAAA,MACL,YAAA,EAAcA,KAAAA,CAAK,KAAA,CAAM,YAAA,EAAc,oBAAoB,CAAA;AAAA,MAC3D,EAAA,EAAIA,KAAAA,CAAK,KAAA,CAAM,EAAA,EAAI,UAAU,CAAA;AAAA,MAC7B,SAAA,EAAWA,KAAAA,CAAK,KAAA,CAAM,SAAA,EAAW,iBAAiB,CAAA;AAAA,MAClD,cAAA,EAAgBC,yBAAAA,CAAyB,KAAA,CAAM,cAAA,EAAgB,sBAAsB,CAAA;AAAA,MACrF,OAAA,EAASD,KAAAA,CAAK,KAAA,CAAM,OAAA,EAAS,eAAe;AAAA,KAC9C;AAAA,IACA,KAAA;AAAA,IACA,OAAA,EAAS,SAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,KAAUX,OAAAA,CAAO,IAAA,EAAM,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,CAAA,EAAK,IAAI,CAAC,CAAA;AAAA,IACvF,aAAA,EAAe;AAAA,MACb,WAAA,EAAa,OAAA,CAAQ,aAAA,CAAc,WAAA,EAAa,2BAA2B,CAAA;AAAA,MAC3E,SAAA,EAAW,OAAA,CAAQ,aAAA,CAAc,SAAA,EAAW,yBAAyB,CAAA;AAAA,MACrE,QAAA,EAAU,OAAA,CAAQ,aAAA,CAAc,QAAA,EAAU,wBAAwB,CAAA;AAAA,MAClE,GAAI,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,0BAA0B,CAAA,KAAM,MAAA,GACrE,EAAC,GACD,EAAE,UAAA,EAAY,UAAA,CAAW,aAAA,CAAc,UAAA,EAAY,0BAA0B,CAAA,EAAE;AAAA,MACnF,GAAI,0BAAA,KAA+B,MAAA,GAC/B,EAAC,GACD,EAAE,eAAe,0BAAA,EAA2B;AAAA,MAChD,SAAA,EAAW,MAAA,CAAO,aAAA,CAAc,SAAA,EAAW,yBAAyB,CAAA;AAAA,MACpE,QAAA,EAAU,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,0BAA0B,IAAI,CAAA;AAAA,MACvE,QAAA,EAAU,qBAAA;AAAA,MACV,aAAA,EAAe,MAAA,CAAO,aAAA,CAAc,aAAA,EAAe,6BAA6B,CAAA;AAAA,MAChF,IAAA,EAAM;AAAA,QACJ,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,2BAA2B,CAAA;AAAA,QACxD,KAAA,EAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,0BAA0B;AAAA;AACvD,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,eAAA;AAAA,MACP,OAAA,EAASW,KAAAA,CAAKZ,OAAAA,CAAO,OAAA,EAAS,gBAAgB,CAAA;AAAA,MAC9C,IAAA,EAAMY,KAAAA,CAAKZ,OAAAA,CAAO,IAAA,EAAM,aAAa,CAAA;AAAA,MACrC,GAAA,EAAK,GAAA,CAAIA,OAAAA,CAAO,GAAA,EAAK,YAAY;AAAA,KACnC;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,WAAW,WAAA,EAAsC;AACxD,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,WAAW,CAAA,CAAE,SAAS,WAAA,EAAY;AAC3D,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,gBAAgB,CAAA,EAAG,OAAO,aAAA;AAChD,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,YAAA;AAC5C,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,mBAAmB,QAAA,EAAmD;AACpF,EAAA,MAAM,qBAAA,GAAwB,QAAA,CAAS,QAAA,CAAS,aAAA,CAAc,UAAU,wBAAwB,CAAA;AAChG,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,QAAA,CAAS,eAAA,CAAgB,GAAA,CAAI,CAAC,EAAA,EAAI,KAAA,KAAU,CAAC,EAAA,EAAI,KAAK,CAAC,CAAC,CAAA;AACjF,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,QAAA,CAAS,QAAQ,CAAA,CAAE,IAAA;AAAA,IACtC,CAAC,IAAA,EAAM,KAAA,KAAA,CACJ,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,IAAK,QAAA,CAAS,eAAA,CAAgB,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA,KACzF,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,QAAA,CAAS,eAAA,CAAgB,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA;AAAA,GAChG;AACA,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,aAAA,EAAe,CAAA;AAAA,IACf,KAAA,EAAO,EAAE,EAAA,EAAI,QAAA,CAAS,MAAM,EAAA,EAAI,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,OAAA,EAAQ;AAAA,IAChE,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,SAAS,aAAA,CAAc,IAAA;AAAA,MAC7B,aAAA,EAAe,SAAS,aAAA,CAAc,aAAA;AAAA,MACtC,QAAA,EAAU,SAAS,aAAA,CAAc,QAAA;AAAA,MACjC,UAAA,EAAY,SAAS,aAAA,CAAc,UAAA;AAAA,MACnC,eACE,QAAA,CAAS,aAAA,CAAc,aAAA,KACtB,qBAAA,KAA0B,IAAI,SAAA,GAAY,UAAA,CAAA;AAAA,MAC7C,SAAA,EAAW,SAAS,aAAA,CAAc,SAAA;AAAA,MAClC,WAAA,EAAa,SAAS,aAAA,CAAc,WAAA;AAAA,MACpC,IAAA,EAAM,SAAS,aAAA,CAAc,SAAA;AAAA,MAC7B,GAAA,EAAK,SAAS,aAAA,CAAc;AAAA,KAC9B;AAAA,IACA,gBAAgB,EAAE,IAAA,EAAM,OAAO,cAAA,EAAgB,GAAA,EAAK,cAAc,GAAA,EAAI;AAAA,IACtE,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAACc,QAAAA,MAAa;AAAA,MACnC,IAAIA,QAAAA,CAAQ,EAAA;AAAA,MACZ,WAAWA,QAAAA,CAAQ,SAAA;AAAA,MACnB,YAAA,EAAcA,SAAQ,YAAA,IAAgB,IAAA;AAAA,MACtC,OAAOA,QAAAA,CAAQ,KAAA;AAAA,MACf,OAAOA,QAAAA,CAAQ,KAAA;AAAA,MACf,cAAA,EAAgB,SAAS,KAAA,CAAM,cAAA;AAAA,MAC/B,UAAUA,QAAAA,CAAQ,oBAAA;AAAA,MAClB,QAAQA,QAAAA,CAAQ,UAAA,CAAW,YAAYA,QAAAA,CAAQ,UAAA,CAAW,OAAO,QAAA,GAAW,SAAA;AAAA,MAC5E,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,UAAA,CAAWA,QAAAA,CAAQ,GAAG,CAAA;AAAA,UAC5B,UAAA,EAAY,SAAS,MAAA,CAAO,GAAA;AAAA,UAC5B,UAAUA,QAAAA,CAAQ,MAAA;AAAA,UAClB,MAAMA,QAAAA,CAAQ,QAAA;AAAA,UACd,aAAaA,QAAAA,CAAQ,GAAA;AAAA,UACrB,OAAOA,QAAAA,CAAQ,KAAA;AAAA,UACf,QAAQA,QAAAA,CAAQ;AAAA;AAClB;AACF,KACF,CAAE;AAAA,GACH,CAAA;AACH;;;AC9RO,IAAM,sBAAN,MAAgD;AAAA,EACpC,OAAA;AAAA,EACA,YAAA;AAAA,EACT,QAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAAsC,EAAC,EAAG;AACpD,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,SAAA,IAAa,UAAA,CAAW,SAAA;AAChD,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,sDAAmB,CAAA;AACjD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,YAAA,IAAgB,gCAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,IAAI,GAAA,EAA+C;AACvD,IAAA,MAAMJ,OAAAA,GAAS,MAAM,IAAA,CAAK,OAAA;AAAA,MACxB,UAAA;AAAA,MACA,CAAC,KAAA,KAAU,KAAA,CAAM,GAAA,CAAI,GAAG;AAAA,KAC1B;AACA,IAAA,OAAOA,OAAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,GAAA,CAAI,GAAA,EAAa,KAAA,EAAmC;AACxD,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC5B,IAAA,MAAM,IAAA,CAAK,OAAA;AAAA,MAAQ,WAAA;AAAA,MAAa,CAAC,KAAA,KAC/B,KAAA,CAAM,GAAA,CAAI,EAAE,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM,MAAA,CAAO,UAAA,EAAuC;AAAA,KACtF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,GAAA,EAA4B;AAC7C,IAAA,MAAM,IAAA,CAAK,QAAQ,WAAA,EAAa,CAAC,UAAU,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,KAAK,OAAA,CAAQ,WAAA,EAAa,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,QAAA,GAAmC;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,EAAK;AACjC,IAAA,OAAO,MAAM,IAAI,OAAA,CAAuB,CAAC,SAAS,MAAA,KAAW;AAC3D,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,WAAA,CAAY,QAAA,EAAU,UAAU,CAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,WAAA,CAAY,WAAA,CAAY,QAAQ,EAAE,UAAA,EAAW;AAC7D,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,OAAA,GAAU,CAAA;AACd,MAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,MAAA,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,IAAI,KAAA,CAAM,iDAAmB,CAAC,CAAA;AAC9E,MAAA,OAAA,CAAQ,YAAY,MAAM;AACxB,QAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,cAAA,GAAiB,IAAA;AACjB,UAAA;AAAA,QACF;AACA,QAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,QAAA,KAAA,IAAS,OAAO,KAAA,CAAM,IAAA,KAAS,WAAW,KAAA,CAAM,IAAA,GAAO,MAAM,KAAA,CAAM,UAAA;AACnE,QAAA,OAAA,IAAW,CAAA;AACX,QAAA,MAAA,CAAO,QAAA,EAAS;AAAA,MAClB,CAAA;AACA,MAAA,WAAA,CAAY,aAAa,MAAM;AAC7B,QAAA,IAAI,cAAA,EAAgB,OAAA,CAAQ,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,aACzC,MAAA,CAAO,IAAI,KAAA,CAAM,sDAAmB,CAAC,CAAA;AAAA,MAC5C,CAAA;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,MAAM,MAAA,CAAO,WAAA,CAAY,SAAS,IAAI,KAAA,CAAM,gDAAkB,CAAC,CAAA;AAAA,IACvF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AACpB,IAAA,CAAC,MAAM,IAAA,CAAK,QAAA,EAAU,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,EAClB;AAAA,EAEQ,IAAA,GAA6B;AACnC,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAC/B,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,OAAA,CAAQ,CAAC,SAAS,MAAA,KAAW;AAC/C,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,cAAc,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,kBAAkB,MAAM;AAC9B,QAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,gBAAA,CAAiB,SAAS,QAAQ,CAAA;AACpD,UAAA,OAAA,CAAQ,OAAO,iBAAA,CAAkB,QAAA,EAAU,EAAE,OAAA,EAAS,OAAO,CAAA;AAAA,MACjE,CAAA;AACA,MAAA,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,IAAI,KAAA,CAAM,iDAAmB,CAAC,CAAA;AAC9E,MAAA,OAAA,CAAQ,SAAA,GAAY,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAChD,MAAA,OAAA,CAAQ,YAAY,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,sDAAmB,CAAC,CAAA;AAAA,IACjE,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,CAAS,MAAM,MAAM;AACxB,MAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,MAAc,OAAA,CACZ,IAAA,EACA,SAAA,EACY;AACZ,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,EAAK;AACjC,IAAA,OAAO,MAAM,IAAI,OAAA,CAAW,CAAC,SAAS,MAAA,KAAW;AAC/C,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,WAAA,CAAY,QAAA,EAAU,IAAI,CAAA;AACvD,MAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,WAAA,CAAY,QAAQ,CAAC,CAAA;AAC3D,MAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,MAAA,IAAI,MAAA;AACJ,MAAA,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,IAAI,KAAA,CAAM,gDAAkB,CAAC,CAAA;AAC7E,MAAA,OAAA,CAAQ,YAAY,MAAM;AACxB,QAAA,eAAA,GAAkB,IAAA;AAClB,QAAA,MAAA,GAAS,OAAA,CAAQ,MAAA;AAAA,MACnB,CAAA;AACA,MAAA,WAAA,CAAY,aAAa,MAAM;AAC7B,QAAA,IAAI,eAAA,UAAyB,MAAM,CAAA;AAAA,aAC9B,MAAA,CAAO,IAAI,KAAA,CAAM,sDAAmB,CAAC,CAAA;AAAA,MAC5C,CAAA;AACA,MAAA,WAAA,CAAY,OAAA,GAAU,MAAM,MAAA,CAAO,WAAA,CAAY,SAAS,IAAI,KAAA,CAAM,gDAAkB,CAAC,CAAA;AAAA,IACvF,CAAC,CAAA;AAAA,EACH;AACF;;;ACxHA,SAAS,MAAM,KAAA,EAAiC;AAC9C,EAAA,OAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AACtB;AAEO,IAAM,mBAAN,MAA6C;AAAA,EACjC,OAAA,uBAAc,GAAA,EAAyB;AAAA,EAExD,IAAI,GAAA,EAA+C;AACjD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,OAAO,QAAQ,OAAA,CAAQ,KAAA,GAAQ,KAAA,CAAM,KAAK,IAAI,MAAS,CAAA;AAAA,EACzD;AAAA,EAEA,GAAA,CAAI,KAAa,KAAA,EAAmC;AAClD,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAClC,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,aAAa,GAAA,EAA4B;AACvC,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,QAAA,GAA0B;AACxB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAAA,EAEA,QAAA,GAAmC;AACjC,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,SAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,WAAY,KAAA,CAAM,UAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,QAAQ,EAAE,KAAA,EAAO,SAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,EAC9D;AAAA,EAEA,KAAA,GAAuB;AACrB,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AACF;;;ACzBO,IAAM,mBAAN,MAA6C;AAAA,EAClD,WAAA,CACmB,QACA,UAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAChB;AAAA,EAFgB,MAAA;AAAA,EACA,UAAA;AAAA,EAGnB,MAAM,IAAI,GAAA,EAA+C;AACvD,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,GAAG,CAAA;AAC7C,IAAA,IAAI,aAAa,OAAO,WAAA;AACxB,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,UAAA,EAAY,IAAI,GAAG,CAAA;AACtD,IAAA,IAAI,iBAAiB,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,eAAe,CAAA;AAC/D,IAAA,OAAO,eAAA;AAAA,EACT;AAAA,EAEA,MAAM,GAAA,CAAI,GAAA,EAAa,KAAA,EAAmC;AACxD,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAChC,IAAA,MAAM,IAAA,CAAK,UAAA,EAAY,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EACvC;AAAA,EAEA,MAAM,aAAa,GAAA,EAA4B;AAC7C,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,GAAG,CAAA;AAClC,IAAA,MAAM,IAAA,CAAK,UAAA,EAAY,YAAA,CAAa,GAAG,CAAA;AAAA,EACzC;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,IAAA,CAAK,OAAO,QAAA,EAAS;AAC3B,IAAA,MAAM,IAAA,CAAK,YAAY,QAAA,EAAS;AAAA,EAClC;AAAA,EAEA,QAAA,GAAmC;AACjC,IAAA,OAAO,KAAK,UAAA,EAAY,QAAA,EAAS,IAAK,IAAA,CAAK,OAAO,QAAA,EAAS;AAAA,EAC7D;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,OAAO,KAAA,IAAQ;AAC1B,IAAA,MAAM,IAAA,CAAK,YAAY,KAAA,IAAQ;AAAA,EACjC;AACF,CAAA;;;ACjDA,SAAS,cAAc,MAAA,EAA4B;AACjD,EAAA,IAAI,QAAQ,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,WAAW,8DAAY,CAAA;AACzE;AAEA,eAAsB,eAAA,CAAgB,OAAoB,MAAA,EAAuC;AAC/F,EAAA,aAAA,CAAc,MAAM,CAAA;AACpB,EAAA,IAAI,CAAC,UAAA,CAAW,MAAA,EAAQ,MAAA,EAAQ;AAC9B,IAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,mFAAA,EAAyB;AAAA,MAC5E,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AACA,EAAA,MAAM,SAAS,MAAM,UAAA,CAAW,OAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AACrE,EAAA,aAAA,CAAc,MAAM,CAAA;AACpB,EAAA,OAAO,MAAM,IAAA,CAAK,IAAI,UAAA,CAAW,MAAM,GAAG,CAAC,KAAA,KAAU,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,IAAA;AAAA,IACxF;AAAA,GACF;AACF;AAEA,eAAsB,oBAAA,CACpB,KAAA,EACA,QAAA,EACA,MAAA,EACe;AACf,EAAA,aAAA,CAAc,MAAM,CAAA;AACpB,EAAA,IAAI,KAAA,CAAM,UAAA,KAAe,QAAA,CAAS,KAAA,EAAO;AACvC,IAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,0EAAA,EAAgB;AAAA,MACnE,eAAe,QAAA,CAAS,KAAA;AAAA,MACxB,aAAa,KAAA,CAAM;AAAA,KACpB,CAAA;AAAA,EACH;AACA,EAAA,MAAM,YAAA,GAAe,MAAM,eAAA,CAAgB,KAAA,EAAO,MAAM,CAAA;AACxD,EAAA,IAAI,YAAA,KAAiB,QAAA,CAAS,MAAA,CAAO,WAAA,EAAY,EAAG;AAClD,IAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,2DAAA,EAAqB;AAAA,MACxE,cAAA,EAAgB,QAAA,CAAS,MAAA,CAAO,WAAA,EAAY;AAAA,MAC5C;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AChBA,SAAS,GAAA,GAAc;AACrB,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,OAAA,CAAQ,OAAgB,MAAA,EAA+B;AAC9D,EAAA,OACE,MAAA,EAAQ,OAAA,KAAY,IAAA,IACnB,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,IAChD,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA;AAE9C;AAEA,SAASL,gBAAe,MAAA,EAA4B;AAClD,EAAA,IAAI,QAAQ,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,WAAW,4CAAS,CAAA;AACtE;AAEA,SAAS,aAAA,CAAc,UAAoB,aAAA,EAA+B;AACxE,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AACjD,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,aAAA;AACzB,EAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,EAAA,IAAI,CAAC,OAAO,aAAA,CAAc,MAAM,KAAK,MAAA,GAAS,CAAA,IAAK,WAAW,aAAA,EAAe;AAC3E,IAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,kEAAA,EAA4B;AAAA,MAC/E,aAAA,EAAe,GAAA;AAAA,MACf;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,uBAAA,CAAwB,UAAoB,aAAA,EAA6B;AAChF,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC7B,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,GAAA,EAAK,KAAA,CAAM,6BAA6B,CAAA;AACtD,EAAA,IACE,CAAC,SACD,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,KAAM,KACrB,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,KAAM,gBAAgB,CAAA,IACrC,MAAA,CAAO,MAAM,CAAC,CAAC,MAAM,aAAA,EACrB;AACA,IAAA,MAAM,IAAI,gBAAA,CAAiB,uBAAA,EAAyB,wEAAA,EAAmB;AAAA,MACrE,YAAA,EAAc,GAAA;AAAA,MACd,oBAAA,EAAsB,CAAA,QAAA,EAAW,aAAA,GAAgB,CAAC,IAAI,aAAa,CAAA;AAAA,KACpE,CAAA;AAAA,EACH;AACF;AAEA,eAAe,YAAA,CACb,QAAA,EACA,aAAA,EACA,MAAA,EACA,UAAA,EACsB;AACtB,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,QAAA,EAAU,aAAa,CAAA;AACxD,EAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,IAAA,MAAMU,MAAAA,GAAQ,MAAM,QAAA,CAAS,WAAA,EAAY;AACzC,IAAAV,gBAAe,MAAM,CAAA;AACrB,IAAA,UAAA,GAAa,EAAE,WAAA,EAAaU,MAAAA,CAAM,UAAA,EAAY,YAAY,CAAA;AAC1D,IAAA,OAAOA,MAAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,IAAI,WAAA,GAAc,CAAA;AAClB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAAV,gBAAe,MAAM,CAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,IAAA,EAAK;AAChC,MAAA,IAAI,MAAM,IAAA,EAAM;AAChB,MAAA,WAAA,IAAe,MAAM,KAAA,CAAM,UAAA;AAC3B,MAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,QAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,0EAAA,EAAgB;AAAA,UACnE,aAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AACvB,MAAA,UAAA,GAAa,EAAE,WAAA,EAAa,UAAA,EAAY,CAAA;AAAA,IAC1C;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,WAAW,CAAA;AACxC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,CAAM,GAAA,CAAI,OAAO,MAAM,CAAA;AACvB,IAAA,MAAA,IAAU,KAAA,CAAM,UAAA;AAAA,EAClB;AACA,EAAA,UAAA,GAAa,EAAE,WAAA,EAAa,UAAA,EAAY,CAAA;AACxC,EAAA,OAAO,KAAA,CAAM,MAAA;AACf;AAEA,eAAsB,cAAA,CACpB,KAAA,EACA,OAAA,GAAiC,EAAC,EACb;AACrB,EAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,IAAW,UAAA,CAAW,KAAA,EAAO,KAAK,UAAU,CAAA;AACpE,EAAA,IAAI,CAAC,OAAA;AACH,IAAA,MAAM,IAAI,gBAAA,CAAiB,uBAAA,EAAyB,gDAAA,EAAoB;AAAA,MACtE,UAAA,EAAY,MAAM,MAAA,CAAO;AAAA,KAC1B,CAAA;AACH,EAAA,MAAM,kBAAkB,GAAA,EAAI;AAC5B,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,aAAa,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAAA,EAC/E,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,MAAM,CAAA;AAC/B,MAAA,MAAM,IAAI,iBAAiB,SAAA,EAAW,4CAAA,EAAW,EAAC,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AACvE,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,uBAAA;AAAA,MACA,kDAAA;AAAA,MACA;AAAA,QACE,UAAA,EAAY,MAAM,MAAA,CAAO,IAAA;AAAA,QACzB,WAAA,EAAa,MAAM,MAAA,CAAO;AAAA,OAC5B;AAAA,MACA,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,gBAAA,CAAiB,uBAAA,EAAyB,oEAAA,EAAe;AAAA,MACjE,UAAA,EAAY,MAAM,MAAA,CAAO,IAAA;AAAA,MACzB,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,YAAY,QAAA,CAAS;AAAA,KACtB,CAAA;AAAA,EACH;AACA,EAAA,uBAAA,CAAwB,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACpD,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,MAAM,aAAa,QAAA,EAAU,KAAA,CAAM,OAAO,KAAA,EAAO,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,UAAU,CAAA;AAAA,EAC7F,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiB,kBAAkB,MAAM,KAAA;AAC7C,IAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,MAAM,CAAA;AAC/B,MAAA,MAAM,IAAI,iBAAiB,SAAA,EAAW,4CAAA,EAAW,EAAC,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AACvE,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,uBAAA;AAAA,MACA,kDAAA;AAAA,MACA,EAAE,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,IAAA,EAAK;AAAA,MAChC,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACA,EAAA,MAAM,eAAA,GAAkB,KAAI,GAAI,eAAA;AAChC,EAAA,MAAM,mBAAmB,GAAA,EAAI;AAC7B,EAAA,MAAM,oBAAA,CAAqB,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAC9D,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,eAAA;AAAA,MACA,WAAA,EAAa,KAAI,GAAI;AAAA;AACvB,GACF;AACF;;;AC7JO,SAAS,mBAAA,CACd,UACA,SAAA,EACuB;AACvB,EAAA,MAAMS,QAAAA,GACJ,SAAA,KAAc,MAAA,GACV,QAAA,CAAS,SAAS,CAAC,CAAA,GACnB,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,SAAS,CAAA;AACtE,EAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,IAAA,MAAM,IAAI,gBAAA,CAAiB,oBAAA,EAAsB,8DAAA,EAAc;AAAA,MAC7D,SAAA;AAAA,MACA,mBAAmB,QAAA,CAAS,QAAA,CAAS,IAAI,CAAC,SAAA,KAAc,UAAU,EAAE;AAAA,KACrE,CAAA;AAAA,EACH;AACA,EAAA,OAAOA,QAAAA;AACT;AAEO,SAAS,mBAAA,CACdA,QAAAA,EACAE,WAAAA,GAAmC,MAAA,EACX;AAExB,EAAA,IAAIA,WAAAA,KAAe,MAAA,EAAQ,OAAOF,QAAAA,CAAQ,OAAA;AAC1C,EAAA,MAAMd,OAAAA,GAASc,SAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,SAASE,WAAU,CAAA;AAChF,EAAA,IAAI,CAAChB,OAAAA,EAAQ;AACX,IAAA,MAAM,IAAI,gBAAA,CAAiB,0BAAA,EAA4B,8DAAA,EAAc;AAAA,MACnE,UAAA,EAAAgB,WAAAA;AAAA,MACA,kBAAkBF,QAAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,SAAA,KAAc,UAAU,IAAI;AAAA,KACpE,CAAA;AAAA,EACH;AACA,EAAA,OAAO,CAACd,OAAM,CAAA;AAChB;AAEO,SAAS,iBAAA,CACd,WACA,QAAA,EACoB;AACpB,EAAA,MAAMc,QAAAA,GAAU,mBAAA,CAAoB,QAAA,EAAU,SAAA,CAAU,SAAS,CAAA;AACjE,EAAA,MAAM,CAACd,OAAM,CAAA,GAAI,mBAAA,CAAoBc,QAAAA,EAAS,UAAU,UAAU,CAAA;AAClE,EAAA,IAAI,CAACd,OAAAA;AACH,IAAA,MAAM,IAAI,gBAAA,CAAiB,0BAAA,EAA4B,8DAAA,EAAc;AAAA,MACnE,WAAWc,QAAAA,CAAQ;AAAA,KACpB,CAAA;AACH,EAAA,OAAO,EAAE,KAAA,EAAO,QAAA,CAAS,OAAO,OAAA,EAAAA,QAAAA,EAAS,QAAAd,OAAAA,EAAO;AAClD;;;AC5CA,IAAM,mBAAA,GAAsB,+BAAA;AAgC5B,SAASiB,IAAAA,GAAc;AACrB,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,YAAY,SAAA,EAAqD;AACxE,EAAA,IAAI,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU,OAAO,SAAA;AACvD,EAAA,MAAM,MAAA,GAAS,IAAI,gBAAA,EAAiB;AACpC,EAAA,IAAI,cAAc,KAAA,IAAS,SAAA,KAAc,QAAA,IAAY,OAAO,WAAW,SAAA,KAAc,WAAA;AACnF,IAAA,OAAO,MAAA;AACT,EAAA,OAAO,IAAI,gBAAA,CAAiB,MAAA,EAAQ,IAAI,qBAAqB,CAAA;AAC/D;AAEA,SAAS,aAAA,CAAcjB,SAAqB,KAAA,EAAoC;AAC9E,EAAA,OAAO;AAAA,IACL,MAAMA,OAAAA,CAAO,IAAA;AAAA,IACb,IAAA,EAAM,KAAA,YAAiB,gBAAA,GAAmB,KAAA,CAAM,IAAA,GAAO,uBAAA;AAAA,IACvD,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,GAChE;AACF;AAEA,SAASK,gBAAe,MAAA,EAA4B;AAClD,EAAA,IAAI,QAAQ,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,WAAW,4CAAS,CAAA;AACtE;AAEO,IAAM,eAAN,MAAmB;AAAA,EACP,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,IAAI,eAAA,EAAgB;AAAA,EAChC,WAAA,uBAAkB,GAAA,EAAmB;AAAA,EAC9C,UAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,cAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAA+B,EAAC,EAAG;AAC7C,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAA,CAAY,OAAA,CAAQ,KAAK,CAAA;AAAA,EACxC;AAAA,EAEA,QAAA,CACES,UACAd,OAAAA,EACA,KAAA,GAAuB,EAAE,EAAA,EAAI,SAAA,EAAW,OAAA,EAAS,SAAA,EAAU,EACnD;AACR,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,mBAAA;AAAA,MACA,KAAA,CAAM,EAAA;AAAA,MACN,KAAA,CAAM,OAAA;AAAA,MACNc,QAAAA,CAAQ,EAAA;AAAA,MACRd,OAAAA,CAAO,SAAS,WAAA,EAAY;AAAA,MAC5BA,OAAAA,CAAO,OAAO,WAAA;AAAY,KAC3B,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,OAAA,EAA+D;AACxE,IAAA,IAAI,KAAK,QAAA,EAAU,MAAM,IAAI,gBAAA,CAAiB,YAAY,kDAAU,CAAA;AACpE,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,KAAA,EAAM;AACrC,IAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AAC/D,IAAA,IAAA,CAAK,SAAA,CAAU,OAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,MAAM,CAAA;AACrE,IAAA,IAAI,QAAQ,MAAA,EAAQ,OAAA,IAAW,KAAK,SAAA,CAAU,MAAA,CAAO,SAAS,KAAA,EAAM;AACpE,IAAA,MAAM,SAAA,GAAY,KAAK,UAAA,CAAW,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,CAAA;AAC3E,IAAA,MAAM,UAAU,SAAA,CAAU,IAAA;AAAA,MACxB,MAAM,MAAA;AAAA,MACN,MAAM;AAAA,KACR;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,IAAI,OAAO,CAAA;AAC5B,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,SAAA;AAAA,IACf,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AAClD,MAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,mBAAA,CAAoB,OAAA,EAAS,KAAK,CAAA;AACxD,MAAA,IAAA,CAAK,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,OAAA,EAA+D;AACtF,IAAAK,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,OAAA,CAAQ,QAAQ,CAAA;AACxD,IAAA,MAAMS,QAAAA,GAAU,mBAAA,CAAoB,QAAA,EAAU,OAAA,CAAQ,SAAS,CAAA;AAC/D,IAAA,MAAME,WAAAA,GAAa,QAAQ,UAAA,IAAc,MAAA;AACzC,IAAA,MAAM,OAAA,GAAU,mBAAA,CAAoBF,QAAAA,EAASE,WAAU,CAAA;AACvD,IAAA,MAAM,WAAiC,EAAC;AACxC,IAAA,IAAI,SAAA;AAEJ,IAAA,KAAA,MAAWhB,WAAU,OAAA,EAAS;AAC5B,MAAAK,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,MAAA,MAAM,KAAA,GAA4B,EAAE,KAAA,EAAO,QAAA,CAAS,OAAO,OAAA,EAAAS,QAAAA,EAAS,QAAAd,OAAAA,EAAO;AAC3E,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAASc,QAAAA,EAASd,OAAAA,EAAQ,SAAS,KAAK,CAAA;AAC9D,MAAA,MAAM,eAAeiB,IAAAA,EAAI;AACzB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,MACxC,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,KAAA,CAAM,IAAA,KAAS,WAAW,MAAM,KAAA;AACzE,QAAAZ,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,MAC/B;AACA,MAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,MAAA,MAAM,gBAAA,GAAmBY,MAAI,GAAI,YAAA;AACjC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,mBAAmBA,IAAAA,EAAI;AAC7B,QAAA,IAAI;AACF,UAAA,MAAM,oBAAA,CAAqB,MAAA,EAAQjB,OAAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA;AACzD,UAAA,IAAA,CAAK,UAAA,GAAa,QAAA;AAClB,UAAA,OAAO;AAAA,YACL,KAAA,EAAO,MAAA;AAAA,YACP,QAAA;AAAA,YACA,OAAA,EAAAc,QAAAA;AAAA,YACA,MAAA,EAAAd,OAAAA;AAAA,YACA,QAAA;AAAA,YACA,SAAA,EAAW,IAAA;AAAA,YACX,QAAA;AAAA,YACA,SAAS,EAAE,gBAAA,EAAkB,WAAA,EAAaiB,IAAAA,KAAQ,gBAAA;AAAiB,WACrE;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,KAAA,CAAM,IAAA,KAAS,WAAW,MAAM,KAAA;AACzE,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA;AAAA,UACxC,SAAS,UAAA,EAAY;AACnB,YAAA,IAAI,UAAA,YAAsB,gBAAA,IAAoB,UAAA,CAAW,IAAA,KAAS,SAAA;AAChE,cAAA,MAAM,UAAA;AACR,YAAAZ,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAM,eAAe,KAAA,EAAO;AAAA,UACnC,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,YAAY,OAAA,CAAQ;AAAA,SACrB,CAAA;AAAA,MACH,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,KAAA,CAAM,IAAA,KAAS,WAAW,MAAM,KAAA;AACzE,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,QAAA,CAAS,IAAA,CAAK,aAAA,CAAcL,OAAAA,EAAQ,KAAK,CAAC,CAAA;AAC1C,QAAA,IAAIgB,gBAAe,MAAA,EAAQ;AACzB,UAAA,IAAI,KAAA,YAAiB,gBAAA,IAAoB,KAAA,CAAM,IAAA,KAAS,wBAAA;AACtD,YAAA,MAAM,KAAA;AACR,UAAA,MAAM,IAAI,gBAAA;AAAA,YACR,0BAAA;AAAA,YACA,8DAAA;AAAA,YACA;AAAA,cACE,YAAYhB,OAAAA,CAAO,IAAA;AAAA,cACnB;AAAA,aACF;AAAA,YACA,EAAE,OAAO,KAAA;AAAM,WACjB;AAAA,QACF;AACA,QAAA;AAAA,MACF;AACA,MAAAK,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,OAAO,KAAK,CAAA;AAAA,MAC7C,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAAA,eAAAA,CAAe,QAAQ,MAAM,CAAA;AAC7B,MAAA,IAAA,CAAK,UAAA,GAAa,QAAA;AAClB,MAAA,OAAO;AAAA,QACL,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,QAAA;AAAA,QACA,OAAA,EAAAS,QAAAA;AAAA,QACA,MAAA,EAAAd,OAAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA,EAAW,KAAA;AAAA,QACX,QAAA;AAAA,QACA,OAAA,EAAS,EAAE,gBAAA,EAAkB,GAAG,OAAO,OAAA;AAAQ,OACjD;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,0BAAA;AAAA,MACA,8DAAA;AAAA,MACA;AAAA,QACE,WAAWc,QAAAA,CAAQ,EAAA;AAAA,QACnB;AAAA,OACF;AAAA,MACA,EAAE,OAAO,SAAA;AAAU,KACrB;AAAA,EACF;AAAA,EAEA,QAAA,GAAmC;AACjC,IAAA,OAAO,KAAK,gBAAA,EAAiB;AAAA,EAC/B;AAAA,EAEA,gBAAA,GAA2C;AACzC,IAAA,OAAO,IAAA,CAAK,MAAM,QAAA,EAAS;AAAA,EAC7B;AAAA,EAEA,MAAM,sBAAA,GAAwC;AAC5C,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACtB,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,UAAU,CAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,aAAA,GAA+B;AACnC,IAAA,MAAM,IAAA,CAAK,MAAM,QAAA,EAAS;AAC1B,IAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAAA,EACpB;AAAA,EAEA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAO,MAAM,IAAA,CAAK,cAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,kBAAkB,YAAY;AACjC,MAAA,MAAM,QAAQ,GAAA,CAAI,CAAC,GAAG,IAAA,CAAK,WAAW,CAAC,CAAA;AACvC,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA;AAClB,MAAA,MAAM,IAAA,CAAK,MAAM,KAAA,IAAQ;AAAA,IAC3B,CAAA,GAAG;AACH,IAAA,MAAM,IAAA,CAAK,cAAA;AAAA,EACb;AACF;;;ACtOA,SAASG,IAAAA,GAAc;AACrB,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,QAAA,CAAS,OAAgB,KAAA,EAA2C;AAC3E,EAAA,IAAI,KAAA,YAAiB,kBAAkB,OAAO,KAAA;AAC9C,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,IAAI,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC9B,IAAA,OAAO,IAAI,gBAAA,CAAiB,SAAA,EAAW,gCAAA,EAAS,EAAE,OAAM,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAC7E,EAAA,IAAI,kCAAA,CAAmC,KAAK,OAAO,CAAA;AACjD,IAAA,OAAO,IAAI,gBAAA,CAAiB,eAAA,EAAiB,4CAAA,EAAW,EAAE,OAAM,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AACrF,EAAA,OAAO,IAAI,gBAAA;AAAA,IACT,KAAA,KAAU,WAAW,uBAAA,GAA0B,kBAAA;AAAA,IAC/C,KAAA,KAAU,WAAW,oDAAA,GAAyB,uCAAA;AAAA,IAC9C,EAAE,KAAA,EAAM;AAAA,IACR,EAAE,OAAO,KAAA;AAAM,GACjB;AACF;AAEA,SAAS,cAAA,CAAe,OAAgC,GAAA,EAAyC;AAC/F,EAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAC3C,MAAA,IACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,MAAA,IAAU,KAAA,IACV,MAAA,IAAU,KAAA,IACT,KAAA,CAA6B,IAAA,YAAgB,YAAA,EAC9C;AACA,QAAA,MAAM,KAAA,GAAQ,KAAA;AACd,QAAA,OAAO,CAAC,MAAM,IAAI,MAAA,CAAO,WAAW,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,MAC7D;AACA,MAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAAA,IACrB,CAAC;AAAA,GACH;AACF;AAEA,eAAe,QAAQ,OAAA,EAAsC;AAC3D,EAAA,OAAQ,OAAO,OAAA,KAAY,QAAA,GACvB,OAAO,wBAAwB,CAAA,GAC/B,OAAO,iBAAiB,CAAA,CAAA;AAC9B;AAEA,eAAsB,gBAAA,CACpB,UAAA,EACA,IAAA,EACA,OAAA,GAAmC,EAAC,EACT;AAC3B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,IAAQ,MAAA,CAAO,QAAQ,OAAA,IAAW,OAAA,EAAS,KAAK,aAAa,CAAA;AACjF,IAAA,IAAI,OAAA,CAAQ,aAAa,GAAA,CAAI,GAAA,CAAI,MAAM,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,GAAY,OAAA,CAAQ,SAAA;AACxE,IAAA,IAAI,KAAK,aAAA,KAAkB,MAAA,IAAU,GAAA,CAAI,GAAA,CAAI,QAAQ,OAAA,CAAQ,UAAA;AAC3D,MAAA,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,UAAA,GAAa,OAAA,CAAQ,UAAA;AACpC,IAAA,MAAM,iBAAiBA,IAAAA,EAAI;AAC3B,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,gBAAA,CAAiB,OAAO,UAAA,EAAY;AAAA,MAC5D,GAAG,OAAA,CAAQ,cAAA;AAAA,MACX,kBAAA,EAAoB,CAAC,IAAA,CAAK,aAAa;AAAA,KACxC,CAAA;AACD,IAAA,MAAM,SAAA,GAAYA,MAAI,GAAI,cAAA;AAC1B,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,cAAA;AACJ,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAmB;AAC1C,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAM,GAAA,CAAI,KAAA,EAAO,UAAA,GAAa,EAAC,EAAG;AAChC,QAAA,IAAI,QAAA,QAAgB,IAAI,gBAAA,CAAiB,YAAY,gCAAA,EAAS,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAC9E,QAAA,IAAI,WAAW,MAAA,EAAQ,OAAA;AACrB,UAAA,MAAM,IAAI,gBAAA,CAAiB,SAAA,EAAW,kCAAS,EAAE,KAAA,EAAO,OAAO,CAAA;AACjE,QAAA,MAAM,gBAAyC,EAAC;AAChD,QAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,MAAA,EAAQ,aAAA,CAAc,SAAA,GAAY,KAAA;AAC7D,QAAA,IAAI,SAAA,GAAY,KAAA;AAChB,QAAA,MAAM,UAAU,MAAM;AACpB,UAAA,SAAA,GAAY,IAAA;AAAA,QACd,CAAA;AACA,QAAA,UAAA,CAAW,QAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACpE,QAAA,MAAM,aAAa,YAAY;AAC7B,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,cAC3B,QAAQ,GAAA,CAAI,cAAA,CAAe,KAAA,EAAO,GAAG,GAAG,aAAa;AAAA,aACvD;AACA,YAAA,IAAI,SAAA,QAAiB,IAAI,gBAAA,CAAiB,WAAW,gCAAA,EAAS,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAC9E,YAAA,OAAO,MAAA;AAAA,UACT,SAAS,KAAA,EAAO;AACd,YAAA,IAAI,SAAA;AACF,cAAA,MAAM,IAAI,gBAAA;AAAA,gBACR,SAAA;AAAA,gBACA,gCAAA;AAAA,gBACA,EAAE,OAAO,KAAA,EAAM;AAAA,gBACf,EAAE,OAAO,KAAA;AAAM,eACjB;AACF,YAAA,MAAM,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,UAC7B,CAAA,SAAE;AACA,YAAA,UAAA,CAAW,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AAAA,UACzD;AAAA,QACF,CAAA,GAAG;AACH,QAAA,MAAM,UAAU,SAAA,CAAU,IAAA;AAAA,UACxB,MAAM,KAAA,CAAA;AAAA,UACN,MAAM,KAAA;AAAA,SACR;AACA,QAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,QAAA,IAAI;AACF,UAAA,OAAO,MAAM,SAAA;AAAA,QACf,CAAA,SAAE;AACA,UAAA,UAAA,CAAW,OAAO,OAAO,CAAA;AAAA,QAC3B;AAAA,MACF,CAAA;AAAA,MACA,MAAM,OAAA,GAAU;AACd,QAAA,IAAI,cAAA,SAAuB,MAAM,cAAA;AACjC,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,cAAA,GAAA,CAAkB,YAAY;AAC5B,UAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAG,UAAU,CAAC,CAAA;AACjC,UAAA,MAAM,QAAQ,OAAA,IAAU;AAAA,QAC1B,CAAA,GAAG;AACH,QAAA,MAAM,cAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,QAAA,CAAS,OAAO,QAAQ,CAAA;AAAA,EAChC;AACF;;;AC3JA,IAAM,eAAA,GAAkB,IAAI,UAAA,CAAW;AAAA,EACrC,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAC1F,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM,CAAA;AAAA,EAAM;AAChF,CAAC,CAAA;AAED,SAAS,YAAY,KAAA,EAAmC;AACtD,EAAA,IAAI;AACF,IAAA,OAAO,OAAO,KAAA,CAAM,WAAA,KAAgB,eAAe,KAAA,CAAM,WAAA,CAAY,SAAS,eAAe,CAAA;AAAA,EAC/F,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,eAAe,KAAA,EAAmC;AACzD,EAAA,IAAI;AACF,IAAA,OACE,OAAO,MAAM,iBAAA,KAAsB,WAAA,IACnC,OAAO,KAAA,CAAM,OAAA,KAAY,WAAA,IACzB,KAAA,CAAM,mBAAA,KAAwB,IAAA;AAAA,EAElC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAMO,SAAS,iBAAA,CAAkB,OAAA,GAAkC,EAAC,EAA0B;AAC7F,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAA,IAAU,UAAA;AAChC,EAAA,MAAM,iBAAiB,KAAA,CAAM,SAAA;AAC7B,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,cAAA,IAAkB,KAAA,IAAS,cAAA,IAAkB,eAAe,GAAG,CAAA;AAAA,IAC/E,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA,KAAW,UAAA;AAAA,IAChC,eAAA,EAAiB,OAAO,KAAA,CAAM,eAAA,KAAoB,UAAA;AAAA,IAClD,QAAA,EAAU,YAAY,KAAK,CAAA;AAAA,IAC3B,WAAA,EAAa,eAAe,KAAK;AAAA,GACnC;AACF;;;ACXA,SAAS,IAAA,CACP,IAAA,EACA,OAAA,EACA,OAAA,EACO;AACP,EAAA,MAAM,IAAI,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AACnD;AAEA,SAAS,oBAAA,CACP,SAAA,EACA,YAAA,EACA,aAAA,EACW;AACX,EAAA,IAAI,SAAA,KAAc,MAAA,EAAQ,OAAO,CAAC,MAAM,CAAA;AACxC,EAAA,IAAI,SAAA,KAAc,QAAA;AAChB,IAAA,OAAO,YAAA,CAAa,MAAA,GAChB,CAAC,QAAQ,CAAA,GACT,IAAA,CAAK,wBAAA,EAA0B,8CAAA,EAAkB,EAAE,gBAAA,EAAkB,SAAA,EAAW,CAAA;AACtF,EAAA,MAAM,YAAuB,EAAC;AAC9B,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAChD,EAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AACrB,EAAA,IAAI,CAAC,aAAA,EAAe,OAAO,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA;AAC/C,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,mBAAA,CACd,OAAA,EACA,YAAA,EACA,QAAA,EACe;AACf,EAAA,MAAM,gBAAA,GAAmB,QAAQ,OAAA,IAAW,MAAA;AAC5C,EAAA,MAAM,kBAAA,GAAqB,QAAQ,SAAA,IAAa,MAAA;AAChD,EAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,IAAiB,MAAA;AAC/C,EAAA,IAAI,aAAA,KAAkB,QAAA,IAAY,CAAC,YAAA,CAAa,MAAA,EAAQ;AACtD,IAAA,IAAA,CAAK,wBAAA,EAA0B,8CAAA,EAAkB,EAAE,aAAA,EAAe,CAAA;AAAA,EACpE;AACA,EAAA,MAAMH,QAAAA,GAAU,SAAS,QAAA,EAAU,IAAA;AAAA,IACjC,CAAC,cACC,SAAA,CAAU,SAAA,KAAc,sBACxB,SAAA,CAAU,MAAA,KAAW,MAAA,IACrB,SAAA,CAAU,MAAA,KAAW;AAAA,GACzB;AACA,EAAA,IAAI,CAACA,QAAAA,EAAS;AACZ,IAAA,IAAA,CAAK,oBAAA,EAAsB,CAAA,wCAAA,EAAkB,kBAAkB,CAAA,yBAAA,CAAA,EAAS;AAAA,MACtE;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,IACjB,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAQ,aAAA,KAAkB;AAAA,GAC5B,CAAE,OAAO,CAAC,OAAA,KAAYA,SAAQ,QAAA,CAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AACxD,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,IAAA,CAAK,0BAA0B,sFAAA,EAAkB;AAAA,MAC/C,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAmBA,QAAAA,CAAQ;AAAA,KAC5B,CAAA;AAAA,EACH;AACA,EAAA,MAAM,aAAA,GAAgB,WAAW,CAAC,CAAA;AAClC,EAAA,OAAO;AAAA,IACL,WAAWA,QAAAA,CAAQ,EAAA;AAAA,IACnB,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAiBA,QAAAA,CAAQ,SAAA;AAAA,IACzB,aAAA;AAAA,IACA,UAAA,EAAY,UAAA,CAAW,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACvC,WAAWA,QAAAA,CAAQ,EAAA;AAAA,MACnB,OAAA;AAAA,MACA,WAAWA,QAAAA,CAAQ,SAAA;AAAA,MACnB;AAAA,KACF,CAAE;AAAA,GACJ;AACF;;;ACjEO,SAAS,mBAAmB,KAAA,EAAgC;AACjE,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAiB;AAC3C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,KAAA,GAAQ,CAAC,SAAA,KAA6B;AAC1C,IAAA,IAAI,CAAC,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AACjD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACzB,IAAA,IAAA,CAAK,IAAI,SAAS,CAAA;AAClB,IAAA,IAAI,qBAAqB,WAAA,EAAa;AACpC,MAAA,aAAA,CAAc,IAAI,SAAS,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA,EAAG;AACjC,MAAA,IAAI,UAAU,MAAA,YAAkB,WAAA,EAAa,aAAA,CAAc,GAAA,CAAI,UAAU,MAAM,CAAA;AAC/E,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,QAAS,KAAK,CAAA;AAAA,EAC3D,CAAA;AACA,EAAA,KAAA,CAAM,KAAK,CAAA;AACX,EAAA,OAAO,CAAC,GAAG,aAAa,CAAA;AAC1B;;;ACtBO,IAAM,eAAN,MAAmB;AAAA,EAOxB,YAA6B,MAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAC3B,IAAA,MAAA,CAAO,YAAY,CAAC,KAAA,KAAU,IAAA,CAAK,cAAA,CAAe,MAAM,IAAI,CAAA;AAC5D,IAAA,MAAA,CAAO,OAAA,GAAU,CAAC,KAAA,KAChB,IAAA,CAAK,QAAA;AAAA,MACH,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,KAAA,CAAM,WAAW,iCAAA,EAAe;AAAA,QACvE,MAAA,EAAQ;AAAA,OACT;AAAA,KACH;AAAA,EACJ;AAAA,EAR6B,MAAA;AAAA,EANZ,OAAA,uBAAc,GAAA,EAA4B;AAAA,EACnD,KAAA,GAA6C,QAAA;AAAA,EAC7C,cAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,CAAA;AAAA,EAYnB,IAAA,CACE,UAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EACZ;AAClB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,MAAM,GAAI,OAAA,CAAQ,GAAA,GAAM,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI,GAAI,EAAC,EAAG;AAAA,MAC/E,CAAC,UAAU,CAAA;AAAA,MACX;AAAA,KACF;AAAA,EACF;AAAA,EAEA,GAAA,CAAI,KAAA,EAAgB,OAAA,GAAgC,EAAC,EAAqB;AACxE,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,IAAA,EAAM,OAAO,KAAA,EAAM,EAAG,kBAAA,CAAmB,KAAK,CAAA,EAAG;AAAA,MACrE,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACH;AAAA,EAEA,OAAA,GAAyB;AACvB,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAO,IAAA,CAAK,cAAA;AACrC,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,UAAA,EAAY,OAAO,QAAQ,OAAA,EAAQ;AACtD,IAAA,IAAA,CAAK,KAAA,GAAQ,WAAA;AACb,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,EAAC,EAAG,EAAE,kBAAA,EAAoB,IAAA,EAAM,CAAA,CACrF,IAAA,CAAK,MAAM,MAAS,CAAA,CACpB,OAAA,CAAQ,MAAM,IAAA,CAAK,QAAA,CAAS,IAAI,gBAAA,CAAiB,UAAA,EAAY,2BAAY,CAAC,CAAC,CAAA;AAC9E,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEQ,OAAA,CACN,OAAA,EACA,QAAA,EACA,OAAA,GAA4E,EAAC,EAC3D;AAClB,IAAA,IAAI,IAAA,CAAK,UAAU,QAAA,IAAY,EAAE,QAAQ,kBAAA,IAAsB,IAAA,CAAK,UAAU,WAAA,CAAA,EAAc;AAC1F,MAAA,OAAO,QAAQ,MAAA,CAAO,IAAI,gBAAA,CAAiB,UAAA,EAAY,2BAAY,CAAC,CAAA;AAAA,IACtE;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ,OAAA;AAClB,MAAA,OAAO,QAAQ,MAAA,CAAO,IAAI,gBAAA,CAAiB,SAAA,EAAW,uCAAc,CAAC,CAAA;AACvE,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,EAAE,IAAA,CAAK,QAAQ,CAAA;AACjC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,MAAA,EAAQ,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC1E,MAAA,MAAM,UAAU,MAAM;AACpB,QAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAA,EAAG;AAC9B,QAAA,OAAA,EAAQ;AACR,QAAA,IAAI,UAAU,OAAA,CAAQ,IAAA,KAAS,KAAA,EAAO,IAAA,CAAK,WAAW,EAAE,CAAA;AACxD,QAAA,MAAA,CAAO,IAAI,gBAAA,CAAiB,SAAA,EAAW,uCAAc,CAAC,CAAA;AAAA,MACxD,CAAA;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,EAAE,OAAA,EAAS,QAAQ,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,CAAA;AACjF,MAAA,OAAA,CAAQ,QAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AACjE,MAAA,IAAI,OAAA,CAAQ,QAAQ,OAAA,EAAS;AAC3B,QAAA,OAAA,EAAQ;AACR,QAAA;AAAA,MACF;AACA,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,OAAO,WAAA,CAAY,EAAE,IAAI,GAAG,OAAA,IAAW,QAAQ,CAAA;AACpD,QAAA,MAAA,GAAS,IAAA;AAAA,MACX,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtB,QAAA,OAAA,EAAQ;AACR,QAAA,MAAA;AAAA,UACE,IAAI,gBAAA;AAAA,YACF,kBAAA;AAAA,YACA,oDAAA;AAAA,YACA,EAAE,WAAA,EAAa,OAAA,CAAQ,IAAA,EAAK;AAAA,YAC5B,EAAE,OAAO,KAAA;AAAM;AACjB,SACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEQ,WAAW,SAAA,EAAyB;AAC1C,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,EAAE,EAAA,EAAI,OAAO,EAAE,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,EAAG,EAAE,CAAA;AAAA,IACxF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,eAAe,QAAA,EAAgC;AACrD,IAAA,IAAI,QAAA,CAAS,SAAS,UAAA,EAAY;AAChC,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,EAAE,GAAG,UAAA,GAAa;AAAA,QAC1C,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,GAAI,SAAS,WAAA,KAAgB,MAAA,GAAY,EAAC,GAAI,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA,EAAY;AAAA,QAClF,GAAI,SAAS,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAY,QAAA,CAAS,UAAA;AAAW,OAChF,CAAA;AACD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,SAAS,EAAE,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,QAAA,CAAS,EAAE,CAAA;AAC/B,IAAA,OAAA,CAAQ,OAAA,EAAQ;AAChB,IAAA,IAAI,SAAS,IAAA,KAAS,QAAA,EAAU,OAAA,CAAQ,OAAA,CAAQ,SAAS,MAAM,CAAA;AAAA;AAE7D,MAAA,OAAA,CAAQ,MAAA;AAAA,QACN,IAAI,gBAAA;AAAA,UACF,SAAS,KAAA,CAAM,IAAA;AAAA,UACf,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,QAAA,CAAS,KAAA,CAAM,OAAA,IAAW;AAAC;AAC7B,OACF;AAAA,EACJ;AAAA,EAEQ,QAAQ,KAAA,EAA+B;AAC7C,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,EAAG;AAC3C,MAAA,OAAA,CAAQ,OAAA,EAAQ;AAChB,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IACtB;AACA,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EACrB;AAAA,EAEQ,SAAS,KAAA,EAA+B;AAC9C,IAAA,IAAA,CAAK,KAAA,GAAQ,UAAA;AACb,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,OAAO,SAAA,EAAU;AAAA,IACxB;AACA,IAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EACpB;AACF,CAAA;;;ACtJO,IAAM,mBAAA,GAAsB;AA+C5B,SAAS,4BAAA,CACd,OAAA,GAAmE,EAAC,EACpE;AACA,EAAA,OAAO,kBAAkB,OAAO,CAAA;AAClC;AAqCA,SAASG,IAAAA,GAAc;AACrB,EAAA,OAAO,UAAA,CAAW,WAAA,EAAa,GAAA,EAAI,IAAK,KAAK,GAAA,EAAI;AACnD;AAEA,SAAS,kBAAkB,KAAA,EAAmD;AAC5E,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,EAAE,gBAAA,IAAoB,QAAQ,OAAO,KAAA;AACxF,EAAA,MAAM,WAAY,KAAA,CAAiC,QAAA;AACnD,EAAA,OACE,MAAM,OAAA,CAAQ,QAAQ,KACrB,QAAA,CAAS,CAAC,GAAyC,OAAA,KAAY,MAAA;AAEpE;AAEA,SAAS,YAAY,KAAA,EAGlB;AACD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,MAAA,IAAU,SAAS,UAAA,IAAc,KAAA;AACzF;AAEA,eAAe,SAAA,CAAUC,MAAa,MAAA,EAAwC;AAC5E,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,KAAA,CAAMA,IAAAA,EAAK,EAAE,QAAQ,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAA,IACE,MAAA,EAAQ,OAAA,IACP,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,IAChD,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAC1C;AACA,MAAA,MAAM,IAAI,gBAAA,CAAiB,SAAA,EAAW,wDAAA,EAAa,EAAE,GAAA,EAAAA,IAAAA,EAAI,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,IAC9E;AACA,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,0BAAA;AAAA,MACA,kDAAA;AAAA,MACA,EAAE,KAAAA,IAAAA,EAAI;AAAA,MACN,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACA,EAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,WAAW,wDAAA,EAAa,EAAE,GAAA,EAAAA,IAAAA,EAAK,CAAA;AAC/E,EAAA,IAAI,CAAC,QAAA,CAAS,EAAA;AACZ,IAAA,MAAM,IAAI,gBAAA,CAAiB,0BAAA,EAA4B,oEAAA,EAAe;AAAA,MACpE,GAAA,EAAAA,IAAAA;AAAA,MACA,QAAQ,QAAA,CAAS;AAAA,KAClB,CAAA;AACH,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAiB,MAAM,QAAA,CAAS,IAAA,EAAK;AAC3C,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,MAAM,IAAI,gBAAA,CAAiB,WAAW,wDAAA,EAAa,EAAE,GAAA,EAAAA,IAAAA,EAAK,CAAA;AAC/E,IAAA,OAAO,KAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiB,kBAAkB,MAAM,KAAA;AAC7C,IAAA,IACE,MAAA,EAAQ,OAAA,IACP,KAAA,YAAiB,YAAA,IAAgB,KAAA,CAAM,IAAA,KAAS,YAAA,IAChD,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAC1C;AACA,MAAA,MAAM,IAAI,gBAAA,CAAiB,SAAA,EAAW,wDAAA,EAAa,EAAE,GAAA,EAAAA,IAAAA,EAAI,EAAG,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA;AAAA,IAC9E;AACA,IAAA,MAAM,IAAI,gBAAA;AAAA,MACR,kBAAA;AAAA,MACA,wDAAA;AAAA,MACA,EAAE,KAAAA,IAAAA,EAAI;AAAA,MACN,EAAE,OAAO,KAAA;AAAM,KACjB;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,KAAA,EAA0C;AACnE,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,GAC1B,sBAAA,CAAuB,KAAK,CAAA,GAC5B,kBAAA,CAAmB,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAClD;AAEA,SAAS,eAAe,OAAA,EAAsD;AAC5E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,QAAQ,KAAA,CAAM,EAAA;AAAA,IAClB,OAAA,EAAS,QAAQ,KAAA,CAAM,OAAA;AAAA,IACvB,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAACJ,QAAAA,MAAa;AAAA,MAC3C,IAAIA,QAAAA,CAAQ,EAAA;AAAA,MACZ,WAAWA,QAAAA,CAAQ,SAAA;AAAA,MACnB,cAAcA,QAAAA,CAAQ,YAAA;AAAA,MACtB,UAAUA,QAAAA,CAAQ,QAAA;AAAA,MAClB,QAAQA,QAAAA,CAAQ;AAAA,KAClB,CAAE;AAAA,GACJ;AACF;AAEA,SAAS,SAAA,CAAU,OAAA,EAAmC,SAAA,EAAmBd,OAAAA,EAAqB;AAC5F,EAAA,MAAMc,QAAAA,GAAU,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,OAAO,SAAS,CAAA;AAC/E,EAAA,IAAI,CAACA,QAAAA;AACH,IAAA,MAAM,IAAI,gBAAA,CAAiB,oBAAA,EAAsB,8DAAA,EAAc,EAAE,WAAW,CAAA;AAC9E,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,QAAQ,KAAA,CAAM,EAAA;AAAA,IAClB,OAAA,EAAS,QAAQ,KAAA,CAAM,OAAA;AAAA,IACvB,WAAWA,QAAAA,CAAQ,EAAA;AAAA,IACnB,WAAWA,QAAAA,CAAQ,SAAA;AAAA,IACnB,OAAOA,QAAAA,CAAQ,KAAA;AAAA,IACf,gBAAgBA,QAAAA,CAAQ,cAAA;AAAA,IACxB,OAAOA,QAAAA,CAAQ,KAAA;AAAA,IACf,MAAA,EAAQ;AAAA,MACN,MAAMd,OAAAA,CAAO,IAAA;AAAA,MACb,UAAUA,OAAAA,CAAO,QAAA;AAAA,MACjB,OAAOA,OAAAA,CAAO,KAAA;AAAA,MACd,QAAQA,OAAAA,CAAO;AAAA;AACjB,GACF;AACF;AAEA,SAAS,SAAA,GAAiB;AACxB,EAAA,MAAM,YAAY,UAAA,CAAW,0BAAA;AAC7B,EAAA,IAAI,SAAA,EAAW,OAAO,IAAI,GAAA,CAAI,yBAAyB,SAAS,CAAA;AAChE,EAAA,OAAO,IAAI,GAAA,CAAI,uBAAA,EAAyB,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AACzD;AAEA,eAAsB,iBAAA,CACpB,OAAA,GAAoC,EAAC,EACO;AAC5C,EAAA,IAAI,OAAA,CAAQ,KAAA,KAAU,MAAA,IAAa,OAAA,CAAQ,QAAA,KAAa,MAAA;AACtD,IAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAA,EAAoB,yEAAsC,CAAA;AACvF,EAAA,MAAM,eAAe,iBAAA,EAAkB;AACvC,EAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,cAAA,EAAgB,MAAA,EAAQ,YAAY,CAAA;AAClE,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,QAAA;AAChD,EAAA,IAAI,eAAA;AACJ,EAAA,IAAI,UAAA;AACJ,EAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,SAAS,CAAA;AAC3D,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,IAAA,eAAA,GAAkB,kBAAkB,MAAM,SAAA,CAAU,cAAA,EAAgB,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EACrF,CAAA,MAAA,IAAW,WAAA,CAAY,cAAc,CAAA,EAAG;AACtC,IAAA,eAAA,GAAkB,iBAAA,CAAkB,eAAe,QAAQ,CAAA;AAC3D,IAAA,UAAA,GAAa,cAAA,CAAe,IAAA;AAAA,EAC9B,CAAA,MAAO;AACL,IAAA,eAAA,GAAkB,kBAAkB,cAAc,CAAA;AAAA,EACpD;AACA,EAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,YAAY,CAAA;AAE9D,EAAA,MAAM,IAAA,GAAO,mBAAA;AAAA,IACX;AAAA,MACE,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,SAAA,EAAW,OAAA,CAAQ,SAAA,KAAc,MAAA,GAAS,SAAY,OAAA,CAAQ,SAAA;AAAA,MAC9D,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,eAAe,OAAA,CAAQ;AAAA,KACzB;AAAA,IACA,YAAA;AAAA,IACA,eAAe,eAAe;AAAA,GAChC;AACA,EAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa;AAAA,IACpC,KAAA,EAAO,QAAQ,KAAA,KAAU,KAAA,GAAQ,QAAQ,OAAA,CAAQ,KAAA,KAAU,WAAW,QAAA,GAAW;AAAA,GAClF,CAAA;AACD,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,gBAAgBiB,IAAAA,EAAI;AAC1B,IAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,SAAS,CAAA;AACxD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,YAAA;AACJ,IAAA,IAAIH,QAAAA,GAAU,gBAAgB,QAAA,CAAS,IAAA,CAAK,CAAC,SAAA,KAAc,SAAA,CAAU,EAAA,KAAO,IAAA,CAAK,SAAS,CAAA;AAC1F,IAAA,IAAI,WAAA;AAOJ,IAAA,IAAI,eAAe,KAAA,CAAA,EAAW;AAC5B,MAAA,MAAM,CAACd,OAAM,CAAA,GAAI,oBAAoBc,QAAAA,EAAS,OAAA,CAAQ,UAAU,MAAM,CAAA;AACtE,MAAA,IAAI,CAACd,OAAAA;AACH,QAAA,MAAM,IAAI,gBAAA,CAAiB,0BAAA,EAA4B,8DAAA,EAAc;AAAA,UACnE,WAAWc,QAAAA,CAAQ;AAAA,SACpB,CAAA;AACH,MAAA,MAAM,oBAAA,CAAqB,UAAA,EAAYd,OAAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA;AAC7D,MAAA,UAAA,GAAa,UAAA;AACb,MAAA,YAAA,GAAeA,OAAAA;AACf,MAAA,WAAA,GAAc,EAAE,WAAW,CAAA,EAAG,OAAA,EAASiB,MAAI,GAAI,aAAA,EAAe,aAAa,CAAA,EAAE;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,IAAA,CAAK;AAAA,QACrC,QAAA,EAAU,eAAA;AAAA,QACV,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,UAAA,EAAY,QAAQ,MAAA,IAAU,MAAA;AAAA,QAC9B,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,UAAA,EAAY,CAAC,QAAA,KACX,OAAA,CAAQ,UAAA,GAAa,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,GAAG,QAAA,EAAU;AAAA,OAC3E,CAAA;AACD,MAAA,UAAA,GAAa,MAAA,CAAO,KAAA;AACpB,MAAAH,WAAU,MAAA,CAAO,OAAA;AACjB,MAAA,YAAA,GAAe,MAAA,CAAO,MAAA;AACtB,MAAA,WAAA,GAAc,EAAE,GAAG,MAAA,CAAO,OAAA,EAAS,WAAW,CAAA,EAAG,OAAA,EAASG,IAAAA,EAAI,GAAI,aAAA,EAAc;AAAA,IAClF;AACA,IAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,YAAY,CAAA;AAC3D,IAAA,MAAM,YAQD,EAAC;AACN,IAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,GAAG,IAAA;AAAA,QACH,WAAW,SAAA,CAAU,SAAA;AAAA,QACrB,eAAe,SAAA,CAAU,OAAA;AAAA,QACzB,iBAAiB,SAAA,CAAU,SAAA;AAAA,QAC3B,eAAe,SAAA,CAAU,aAAA;AAAA,QACzB,UAAA,EAAY,CAAC,SAAS;AAAA,OACxB;AACA,MAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,SAAS,CAAA;AAC1D,MAAA,IAAI;AACF,QAAA,IAAI,SAAA,CAAU,kBAAkB,QAAA,EAAU;AACxC,UAAA,IAAI,OAAO,MAAA,KAAW,UAAA;AACpB,YAAA,MAAM,IAAI,gBAAA,CAAiB,wBAAA,EAA0B,mDAAgB,CAAA;AACvE,UAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,SAAA,EAAU,EAAG;AAAA,YACrC,IAAA,EAAM;AAAA,WACP,CAAA;AACD,UAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,MAAM,CAAA;AACtC,UAAA,YAAA,GAAe,MAAA;AACf,UAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAC3C,UAAA,MAAM,MAAA,CAAO,IAAA,CAAK,gBAAA,EAAkB,aAAA,EAAe;AAAA,YACjD,UAAA,EAAY,CAAC,KAAA,KACX,OAAA,CAAQ,UAAA,GAAa;AAAA,cACnB,KAAA,EAAO,SAAA;AAAA,cACP,QAAQ,KAAA,CAAM;AAAA,aACf,CAAA;AAAA,YACH,GAAA,EAAK;AAAA,cACH,SAAA,EAAW,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,KAAA;AAAA,cAC9B,UAAA,EAAY,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM;AAAA;AACjC,WACD,CAAA;AACD,UAAA,QAAA,GAAW;AAAA,YACT,GAAA,CAAI,OAAO,MAAA,EAAQ;AACjB,cAAA,OAAO,MAAA,CAAO,GAAA;AAAA,gBACZ,EAAE,CAAC,KAAA,CAAM,SAAS,GAAG,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,EAAE;AAAA,gBAC5D,EAAE,MAAA;AAAO,eACX;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAS,MAAM,MAAA,CAAO,OAAA;AAAQ,WAChC;AACA,UAAA,YAAA,GAAe,KAAA,CAAA;AAAA,QACjB,CAAA,MAAO;AACL,UAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,UAAA,EAAY,aAAA,EAAe;AAAA,YAChE,GAAA,EAAK,QAAQ,GAAA,EAAK,MAAA;AAAA,YAClB,SAAA,EAAW,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM,KAAA;AAAA,YAC9B,UAAA,EAAY,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAM;AAAA,WAChC,CAAA;AACD,UAAA,SAAA,GAAY,OAAA,CAAQ,SAAA;AACpB,UAAA,QAAA,GAAW;AAAA,YACT,GAAA,CAAI,OAAO,MAAA,EAAQ;AACjB,cAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,gBACb,EAAE,CAAC,KAAA,CAAM,SAAS,GAAG,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,EAAE;AAAA,gBAC5D,EAAE,MAAA;AAAO,eACX;AAAA,YACF,CAAA;AAAA,YACA,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAQ,WACjC;AAAA,QACF;AACA,QAAA,YAAA,GAAe,aAAA;AACf,QAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA;AAC7D,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,MAAA,GACJ,iBAAiB,gBAAA,GACb,KAAA,GACA,IAAI,gBAAA,CAAiB,uBAAA,EAAyB,MAAA,CAAO,KAAK,CAAC,CAAA;AACjE,QAAA,MAAM,OAAA,GAAU,QAAQ,aAAA,KAAkB,IAAA,IAAQ,cAAc,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,CAAE,CAAA;AACrF,QAAA,IAAI;AACF,UAAA,MAAM,UAAU,OAAA,EAAQ;AAAA,QAC1B,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,QAAA,GAAW,KAAA,CAAA;AACX,QAAA,IAAI;AACF,UAAA,MAAM,cAAc,OAAA,EAAQ;AAAA,QAC9B,CAAA,CAAA,MAAQ;AAAA,QAER;AACA,QAAA,YAAA,GAAe,KAAA,CAAA;AACf,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,MAAM,MAAA;AAAA,QACR;AACA,QAAA,MAAM,QAAA,GAAW;AAAA,UACf,KAAA,EAAO,OAAO,KAAA,IAAS,MAAA;AAAA,UACvB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,UAAU,SAAA,CAAU,OAAA;AAAA,UACpB,KAAA,EAAO,SAAA;AAAA,UACP,WAAW,SAAA,CAAU;AAAA,SACvB;AACA,QAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AACvB,QAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,YAAY,MAAA,EAAQ,UAAA,EAAY,UAAU,CAAA;AAAA,MAC1E;AAAA,IACF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,gBAAA,CAAiB,yBAAyB,8CAAgB,CAAA;AACnF,IAAA,MAAM,cAAA,GAAiB,QAAA;AACvB,IAAA,WAAA,GAAc,EAAE,GAAG,WAAA,EAAa,WAAW,OAAA,EAASA,IAAAA,KAAQ,aAAA,EAAc;AAC1E,IAAA,MAAM,QAAA,GAAW,IAAI,iCAAA,CAAkC;AAAA,MACrD,YAAA;AAAA,MACA,QAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO,SAAA,CAAU,eAAA,EAAiBH,QAAAA,CAAQ,IAAI,YAAY,CAAA;AAAA,MAC1D,OAAA,EAAS;AAAA,QACP,gBAAA,EAAkB,QAAQ,OAAA,IAAW,MAAA;AAAA,QACrC,SAAS,YAAA,CAAa,aAAA;AAAA,QACtB,WAAW,YAAA,CAAa,eAAA;AAAA,QACxB,MAAM,YAAA,CAAa,aAAA;AAAA,QACnB,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA;AAAA,MACA,YAAA,EAAc,MAAM,OAAA,CAAQ,OAAA,CAAQ,cAAc,CAAA;AAAA,MAClD,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,sBAAA,EAAwB,MAAM,YAAA,CAAa,sBAAA,EAAuB;AAAA,MAClE,aAAA,EAAe,MAAM,YAAA,CAAa,aAAA,EAAc;AAAA,MAChD,gBAAA,EAAkB,MAAM,YAAA,CAAa,gBAAA,EAAiB;AAAA,MACtD,gBAAA,EAAkB,MAAM,YAAA,CAAa,OAAA;AAAQ,KAC9C,CAAA;AACD,IAAA,MAAM,SAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAQ,CAAA;AAC9C,IAAA,OAAA,CAAQ,aAAa,EAAE,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,YAAY,CAAA;AAC3D,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,OAAA,EAAQ;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,OAAA,EAAQ;AAAA,IAC9B,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI;AACF,MAAA,MAAM,aAAa,OAAA,EAAQ;AAAA,IAC7B,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEA,eAAsB,eAAA,GAAiC;AACrD,EAAA,MAAM,OAAA,GAAU,IAAI,YAAA,EAAa;AACjC,EAAA,MAAM,QAAQ,aAAA,EAAc;AAC5B,EAAA,MAAM,QAAQ,OAAA,EAAQ;AACxB","file":"index.js","sourcesContent":["export type PPDetectionErrorCode =\n | \"CAPABILITY_UNSUPPORTED\"\n | \"INVALID_INPUT\"\n | \"INVALID_MANIFEST\"\n | \"MODEL_INCOMPATIBLE\"\n | \"MODEL_SOURCE_UNAVAILABLE\"\n | \"MODEL_DOWNLOAD_FAILED\"\n | \"MODEL_INTEGRITY_FAILED\"\n | \"SESSION_CREATE_FAILED\"\n | \"INFERENCE_FAILED\"\n | \"OUT_OF_MEMORY\"\n | \"ABORTED\"\n | \"DISPOSED\";\n\nexport class PPDetectionError extends Error {\n constructor(\n public readonly code: PPDetectionErrorCode,\n message: string,\n public readonly details: Readonly<Record<string, unknown>> = {},\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = \"PPDetectionError\";\n }\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { DecodedImage, ImageRaster, ImageSource } from \"./image-source\";\n\ninterface DrawableImage {\n readonly width?: number;\n readonly height?: number;\n readonly naturalWidth?: number;\n readonly naturalHeight?: number;\n readonly videoWidth?: number;\n readonly videoHeight?: number;\n readonly displayWidth?: number;\n readonly displayHeight?: number;\n close?(): void;\n}\n\ninterface RasterContext {\n drawImage(source: unknown, dx: number, dy: number): void;\n getImageData(x: number, y: number, width: number, height: number): { data: Uint8ClampedArray };\n}\n\ninterface RasterCanvas {\n getContext(type: \"2d\", options?: CanvasRenderingContext2DSettings): RasterContext | null;\n}\n\nexport interface DecodeImageEnvironment {\n readonly createCanvas?: (width: number, height: number) => RasterCanvas;\n readonly createImageBitmap?: (source: Blob) => Promise<DrawableImage>;\n readonly signal?: AbortSignal;\n readonly now?: () => number;\n}\n\nfunction nowDefault(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new PPDetectionError(\"ABORTED\", \"图片解码已取消\", { reason: signal.reason });\n }\n}\n\nfunction isImageDataLike(value: unknown): value is {\n width: number;\n height: number;\n data?: Uint8ClampedArray;\n rgba?: Uint8ClampedArray;\n} {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"width\" in value &&\n \"height\" in value &&\n ((\"data\" in value && value.data instanceof Uint8ClampedArray) ||\n (\"rgba\" in value && value.rgba instanceof Uint8ClampedArray))\n );\n}\n\nfunction validateRaster(raster: ImageRaster): ImageRaster {\n if (\n !Number.isInteger(raster.width) ||\n !Number.isInteger(raster.height) ||\n raster.width <= 0 ||\n raster.height <= 0 ||\n raster.rgba.length !== raster.width * raster.height * 4\n ) {\n throw new PPDetectionError(\"INVALID_INPUT\", \"图片尺寸或 RGBA 数据无效\", {\n width: raster.width,\n height: raster.height,\n rgbaLength: raster.rgba.length\n });\n }\n return raster;\n}\n\nfunction dimensions(source: DrawableImage): { width: number; height: number } {\n return {\n width: source.naturalWidth ?? source.videoWidth ?? source.displayWidth ?? source.width ?? 0,\n height: source.naturalHeight ?? source.videoHeight ?? source.displayHeight ?? source.height ?? 0\n };\n}\n\nfunction defaultCreateCanvas(width: number, height: number): RasterCanvas {\n if (typeof OffscreenCanvas === \"function\") return new OffscreenCanvas(width, height);\n if (typeof document === \"object\") {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n throw new PPDetectionError(\"INVALID_INPUT\", \"当前环境没有可用的 Canvas 2D 实现\");\n}\n\nfunction invalidDecode(error: unknown): PPDetectionError {\n if (error instanceof PPDetectionError) return error;\n const message = error instanceof Error ? error.message : String(error);\n const cors =\n (typeof DOMException !== \"undefined\" &&\n error instanceof DOMException &&\n error.name === \"SecurityError\") ||\n /cors|cross.origin|taint|security/i.test(message);\n return new PPDetectionError(\n \"INVALID_INPUT\",\n cors ? \"无法从媒体读取像素,请检查 CORS 响应头和 Canvas 跨域限制\" : \"无法解码或读取图片像素\",\n { cors, causeMessage: message },\n { cause: error }\n );\n}\n\nexport async function decodeImageSource(\n input: ImageSource,\n environment: DecodeImageEnvironment = {}\n): Promise<DecodedImage> {\n const clock = environment.now ?? nowDefault;\n const startedAt = clock();\n throwIfAborted(environment.signal);\n\n if (isImageDataLike(input)) {\n const raster = validateRaster({\n width: input.width,\n height: input.height,\n rgba: new Uint8ClampedArray(input.data ?? input.rgba!)\n });\n return { ...raster, decodeMs: Math.max(0, clock() - startedAt) };\n }\n\n let ownedBitmap: DrawableImage | undefined;\n try {\n let source: DrawableImage;\n if (typeof Blob !== \"undefined\" && input instanceof Blob) {\n const createBitmap = environment.createImageBitmap ?? globalThis.createImageBitmap;\n if (typeof createBitmap !== \"function\") {\n throw new PPDetectionError(\"INVALID_INPUT\", \"当前环境不支持 Blob 图片解码\");\n }\n ownedBitmap = await createBitmap(input);\n source = ownedBitmap;\n } else {\n source = input as DrawableImage;\n }\n\n throwIfAborted(environment.signal);\n const { width, height } = dimensions(source);\n if (!Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {\n throw new PPDetectionError(\"INVALID_INPUT\", \"图片宽高必须是正整数\", { width, height });\n }\n const canvas = (environment.createCanvas ?? defaultCreateCanvas)(width, height);\n const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n if (!context) throw new PPDetectionError(\"INVALID_INPUT\", \"无法创建 Canvas 2D 上下文\");\n\n // VideoFrame 的所有权始终属于调用方;这里只绘制一次,不调用 close()。\n context.drawImage(source, 0, 0);\n const rgba = new Uint8ClampedArray(context.getImageData(0, 0, width, height).data);\n throwIfAborted(environment.signal);\n const raster = validateRaster({ width, height, rgba });\n return { ...raster, decodeMs: Math.max(0, clock() - startedAt) };\n } catch (error) {\n throw invalidDecode(error);\n } finally {\n ownedBitmap?.close?.();\n }\n}\n","export interface NmsBox {\n readonly xMin: number;\n readonly yMin: number;\n readonly xMax: number;\n readonly yMax: number;\n}\n\nexport interface NmsCandidate {\n readonly index: number;\n readonly classId: number;\n readonly score: number;\n readonly box: NmsBox;\n}\n\nfunction area(box: NmsBox): number {\n return Math.max(0, box.xMax - box.xMin) * Math.max(0, box.yMax - box.yMin);\n}\n\nexport function intersectionOverUnion(left: NmsBox, right: NmsBox): number {\n const intersection =\n Math.max(0, Math.min(left.xMax, right.xMax) - Math.max(left.xMin, right.xMin)) *\n Math.max(0, Math.min(left.yMax, right.yMax) - Math.max(left.yMin, right.yMin));\n const union = area(left) + area(right) - intersection;\n return union <= 0 ? 0 : intersection / union;\n}\n\nexport function nonMaximumSuppression<T extends NmsCandidate>(\n candidates: readonly T[],\n iouThreshold: number\n): T[] {\n const sorted = [...candidates].sort(\n (left, right) => right.score - left.score || left.index - right.index\n );\n const selected: T[] = [];\n for (const candidate of sorted) {\n const suppressed = selected.some(\n (kept) =>\n kept.classId === candidate.classId &&\n intersectionOverUnion(kept.box, candidate.box) > iouThreshold\n );\n if (!suppressed) selected.push(candidate);\n }\n return selected;\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { Detection, DetectionBox, TensorContract } from \"../types\";\nimport { nonMaximumSuppression, type NmsCandidate } from \"./nms\";\nimport type { LetterboxTransform } from \"./preprocess\";\n\nexport interface OutputTensor {\n readonly data: ArrayLike<number>;\n readonly dims?: readonly number[];\n}\n\nexport interface DecodeDetectionOptions {\n readonly labels: readonly string[];\n readonly scoreThreshold: number;\n readonly classThresholds?: Readonly<Record<string, number>>;\n readonly iouThreshold: number;\n readonly transform: LetterboxTransform;\n readonly outputs?: readonly TensorContract[];\n readonly matrixCoordinates?: \"pixels\" | \"normalized\";\n readonly queryCoordinates?: \"pixels\" | \"normalized\";\n readonly queryBoxFormat?: \"cxcywh\" | \"xyxy\";\n}\n\ntype RawDetection = NmsCandidate;\n\nfunction tensorMap(value: unknown): Record<string, OutputTensor> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new PPDetectionError(\"INFERENCE_FAILED\", \"模型输出必须是张量映射\");\n }\n const outputs = value as Record<string, unknown>;\n for (const [name, tensor] of Object.entries(outputs)) {\n const data = (tensor as { data?: { length?: unknown } } | null)?.data;\n const dims = (tensor as { dims?: unknown } | null)?.dims;\n if (\n typeof tensor !== \"object\" ||\n tensor === null ||\n !(\"data\" in tensor) ||\n !(\"dims\" in tensor) ||\n !Array.isArray(dims) ||\n dims.length === 0 ||\n !dims.every((dimension) => Number.isInteger(dimension) && (dimension as number) >= 0) ||\n typeof data?.length !== \"number\" ||\n !Number.isSafeInteger(data.length) ||\n data.length !== dims.reduce((size, dimension) => size * Number(dimension), 1)\n ) {\n throw new PPDetectionError(\"INFERENCE_FAILED\", \"模型输出张量结构无效\", { name });\n }\n }\n return outputs as Record<string, OutputTensor>;\n}\n\nfunction thresholdFor(classId: number, options: DecodeDetectionOptions): number {\n const label = options.labels[classId] ?? String(classId);\n return options.classThresholds?.[label] ?? options.scoreThreshold;\n}\n\nfunction sigmoid(value: number): number {\n return value >= 0 ? 1 / (1 + Math.exp(-value)) : Math.exp(value) / (1 + Math.exp(value));\n}\n\nfunction matchesContract(tensor: OutputTensor, contract: TensorContract): boolean {\n return (\n tensor.dims !== undefined &&\n tensor.dims.length === contract.shape.length &&\n tensor.dims.every(\n (dimension, index) => contract.shape[index] === -1 || dimension === contract.shape[index]\n )\n );\n}\n\nfunction declaredTensor(\n outputs: Record<string, OutputTensor>,\n contracts: readonly TensorContract[] | undefined,\n predicate: (contract: TensorContract) => boolean\n): OutputTensor | undefined {\n if (contracts === undefined) return undefined;\n const matches = contracts\n .filter(predicate)\n .map((contract) => {\n const tensor = outputs[contract.name];\n return tensor && matchesContract(tensor, contract) ? tensor : undefined;\n })\n .filter((tensor): tensor is OutputTensor => tensor !== undefined);\n return matches.length === 1 ? matches[0] : undefined;\n}\n\nfunction matrixCandidates(\n outputs: Record<string, OutputTensor>,\n options: DecodeDetectionOptions\n): RawDetection[] | undefined {\n let output: OutputTensor | undefined;\n if (options.outputs !== undefined) {\n output = declaredTensor(outputs, options.outputs, (tensor) => tensor.shape.at(-1) === 6);\n } else {\n output = Object.entries(outputs).find(([, tensor]) => tensor.dims?.at(-1) === 6)?.[1];\n }\n if (!output) return undefined;\n const data = output.data;\n const candidates: RawDetection[] = [];\n for (let offset = 0, index = 0; offset + 5 < data.length; offset += 6, index += 1) {\n const classId = Math.trunc(Number(data[offset]));\n const score = Number(data[offset + 1]);\n if (!Number.isFinite(score) || score < thresholdFor(classId, options)) continue;\n const coordinates = [2, 3, 4, 5].map((item) => Number(data[offset + item]));\n if (!coordinates.every(Number.isFinite)) continue;\n const normalized = options.matrixCoordinates === \"normalized\";\n candidates.push({\n index,\n classId,\n score,\n box: {\n xMin: coordinates[0] * (normalized ? options.transform.inputWidth : 1),\n yMin: coordinates[1] * (normalized ? options.transform.inputHeight : 1),\n xMax: coordinates[2] * (normalized ? options.transform.inputWidth : 1),\n yMax: coordinates[3] * (normalized ? options.transform.inputHeight : 1)\n }\n });\n }\n return candidates;\n}\n\nfunction findOutput(\n outputs: Record<string, OutputTensor>,\n expression: RegExp\n): OutputTensor | undefined {\n return Object.entries(outputs).find(([name]) => expression.test(name))?.[1];\n}\n\nfunction queryCandidates(\n outputs: Record<string, OutputTensor>,\n options: DecodeDetectionOptions\n): RawDetection[] | undefined {\n const boxes = options.outputs\n ? declaredTensor(outputs, options.outputs, (tensor) => tensor.shape.at(-1) === 4)\n : findOutput(outputs, /pred.*box|boxes/i);\n const declaredLogitCandidates = options.outputs?.filter(\n (tensor) => tensor.shape.at(-1) !== 4 && tensor.shape.at(-1) !== 6 && tensor.shape.length >= 2\n );\n const logits = options.outputs\n ? (declaredTensor(\n outputs,\n declaredLogitCandidates,\n (tensor) =>\n tensor.shape.at(-1) === options.labels.length && !/(?:order|mask|aux)/i.test(tensor.name)\n ) ??\n (declaredLogitCandidates?.length === 1\n ? declaredTensor(outputs, declaredLogitCandidates, () => true)\n : undefined))\n : findOutput(outputs, /logit|score/i);\n if (!logits || !boxes) return undefined;\n const boxCount = Math.floor(boxes.data.length / 4);\n if (boxCount === 0) return [];\n const declaredClasses = logits.dims?.at(-1) ?? Math.floor(logits.data.length / boxCount);\n const classes = Math.min(declaredClasses, options.labels.length);\n if (classes <= 0) return [];\n const candidates: RawDetection[] = [];\n for (let query = 0; query < boxCount; query += 1) {\n let classId = 0;\n let score = -Infinity;\n for (let candidateClass = 0; candidateClass < classes; candidateClass += 1) {\n const candidateScore = sigmoid(Number(logits.data[query * declaredClasses + candidateClass]));\n if (candidateScore > score) {\n score = candidateScore;\n classId = candidateClass;\n }\n }\n if (score < thresholdFor(classId, options)) continue;\n const offset = query * 4;\n const raw = [\n Number(boxes.data[offset]),\n Number(boxes.data[offset + 1]),\n Number(boxes.data[offset + 2]),\n Number(boxes.data[offset + 3])\n ];\n if (!raw.every(Number.isFinite)) continue;\n const normalized = options.queryCoordinates !== \"pixels\";\n const xScale = normalized ? options.transform.inputWidth : 1;\n const yScale = normalized ? options.transform.inputHeight : 1;\n const xMin = options.queryBoxFormat === \"xyxy\" ? raw[0] : raw[0] - raw[2] / 2;\n const yMin = options.queryBoxFormat === \"xyxy\" ? raw[1] : raw[1] - raw[3] / 2;\n const xMax = options.queryBoxFormat === \"xyxy\" ? raw[2] : raw[0] + raw[2] / 2;\n const yMax = options.queryBoxFormat === \"xyxy\" ? raw[3] : raw[1] + raw[3] / 2;\n candidates.push({\n index: query,\n classId,\n score,\n box: {\n xMin: xMin * xScale,\n yMin: yMin * yScale,\n xMax: xMax * xScale,\n yMax: yMax * yScale\n }\n });\n }\n return candidates;\n}\n\nfunction clamp(value: number, minimum: number, maximum: number): number {\n return Math.min(maximum, Math.max(minimum, value));\n}\n\nfunction restoreBox(\n box: NmsCandidate[\"box\"],\n transform: LetterboxTransform\n): DetectionBox | undefined {\n const scaleX = transform.scaleX ?? transform.scale;\n const scaleY = transform.scaleY ?? transform.scale;\n const xMin = clamp((box.xMin - transform.padLeft) / scaleX, 0, transform.originalWidth);\n const yMin = clamp((box.yMin - transform.padTop) / scaleY, 0, transform.originalHeight);\n const xMax = clamp((box.xMax - transform.padLeft) / scaleX, 0, transform.originalWidth);\n const yMax = clamp((box.yMax - transform.padTop) / scaleY, 0, transform.originalHeight);\n if (xMax <= xMin || yMax <= yMin) return undefined;\n return {\n x: xMin,\n y: yMin,\n width: xMax - xMin,\n height: yMax - yMin,\n xMin,\n yMin,\n xMax,\n yMax\n };\n}\n\nexport function decodeDetectionOutputs(\n outputValue: unknown,\n options: DecodeDetectionOptions\n): Detection[] {\n const outputs = tensorMap(outputValue);\n const candidates = matrixCandidates(outputs, options) ?? queryCandidates(outputs, options);\n if (!candidates) {\n throw new PPDetectionError(\"INFERENCE_FAILED\", \"不支持当前模型的检测输出签名\", {\n outputs: Object.keys(outputs)\n });\n }\n const restored = candidates.flatMap((candidate) => {\n const box = restoreBox(candidate.box, options.transform);\n return box ? [{ ...candidate, box }] : [];\n });\n return nonMaximumSuppression(restored, options.iouThreshold).map((candidate) => ({\n index: candidate.index,\n classId: candidate.classId,\n labelId: candidate.classId,\n label: options.labels[candidate.classId] ?? String(candidate.classId),\n score: candidate.score,\n box: candidate.box,\n polygon: [\n { x: candidate.box.xMin, y: candidate.box.yMin },\n { x: candidate.box.xMax, y: candidate.box.yMin },\n { x: candidate.box.xMax, y: candidate.box.yMax },\n { x: candidate.box.xMin, y: candidate.box.yMax }\n ]\n }));\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { ImageRaster } from \"../input/image-source\";\nimport type { DetectionPreprocessing } from \"../types\";\n\nexport interface LetterboxTransform {\n readonly inputWidth: number;\n readonly inputHeight: number;\n readonly originalWidth: number;\n readonly originalHeight: number;\n readonly resizedWidth: number;\n readonly resizedHeight: number;\n readonly scale: number;\n readonly scaleX?: number;\n readonly scaleY?: number;\n readonly padLeft: number;\n readonly padTop: number;\n}\n\nexport interface PreprocessedImage {\n readonly data: Float32Array;\n readonly dims: readonly [1, 3, number, number];\n readonly transform: LetterboxTransform;\n}\n\nfunction sampleChannel(raster: ImageRaster, x: number, y: number, channel: number): number {\n const sourceX = Math.min(raster.width - 1, Math.max(0, x));\n const sourceY = Math.min(raster.height - 1, Math.max(0, y));\n return raster.rgba[(sourceY * raster.width + sourceX) * 4 + channel];\n}\n\nfunction bilinearChannel(\n raster: ImageRaster,\n targetX: number,\n targetY: number,\n resizedWidth: number,\n resizedHeight: number,\n channel: number\n): number {\n const sourceX = ((targetX + 0.5) * raster.width) / resizedWidth - 0.5;\n const sourceY = ((targetY + 0.5) * raster.height) / resizedHeight - 0.5;\n const x0 = Math.floor(sourceX);\n const y0 = Math.floor(sourceY);\n const dx = sourceX - x0;\n const dy = sourceY - y0;\n const top =\n sampleChannel(raster, x0, y0, channel) * (1 - dx) +\n sampleChannel(raster, x0 + 1, y0, channel) * dx;\n const bottom =\n sampleChannel(raster, x0, y0 + 1, channel) * (1 - dx) +\n sampleChannel(raster, x0 + 1, y0 + 1, channel) * dx;\n return top * (1 - dy) + bottom * dy;\n}\n\nconst BICUBIC_PRECISION_BITS = 22;\nconst BICUBIC_PRECISION = 1 << BICUBIC_PRECISION_BITS;\nconst BICUBIC_ROUNDING = 1 << (BICUBIC_PRECISION_BITS - 1);\n\nfunction bicubicFilter(value: number): number {\n const x = Math.abs(value);\n if (x < 1) return ((-0.5 + 2) * x - (-0.5 + 3)) * x * x + 1;\n if (x < 2) return (((x - 5) * x + 8) * x - 4) * -0.5;\n return 0;\n}\n\ninterface ResampleAxis {\n readonly bounds: readonly [number, number][];\n readonly coefficients: readonly number[][];\n}\n\nfunction createBicubicAxis(inputSize: number, outputSize: number): ResampleAxis {\n const scale = inputSize / outputSize;\n const filterScale = Math.max(scale, 1);\n const support = 2 * filterScale;\n const axis: Array<{ bounds: [number, number]; coefficients: number[] }> = [];\n\n for (let output = 0; output < outputSize; output += 1) {\n const center = (output + 0.5) * scale;\n let start = Math.trunc(center - support + 0.5);\n if (start < 0) start = 0;\n let end = Math.trunc(center + support + 0.5);\n if (end > inputSize) end = inputSize;\n end -= start;\n\n const weights: number[] = [];\n let total = 0;\n for (let index = 0; index < end; index += 1) {\n const weight = bicubicFilter((index + start - center + 0.5) / filterScale);\n weights.push(weight);\n total += weight;\n }\n if (total !== 0) {\n for (let index = 0; index < weights.length; index += 1) {\n weights[index] = weights[index] / total;\n }\n }\n axis.push({\n bounds: [start, end],\n coefficients: weights.map((weight) =>\n Math.trunc(\n weight < 0 ? -0.5 + weight * BICUBIC_PRECISION : 0.5 + weight * BICUBIC_PRECISION\n )\n )\n });\n }\n\n return {\n bounds: axis.map(({ bounds }) => bounds),\n coefficients: axis.map(({ coefficients }) => coefficients)\n };\n}\n\nfunction clipBicubic(value: number): number {\n const rounded = value >> BICUBIC_PRECISION_BITS;\n return Math.max(0, Math.min(255, rounded));\n}\n\nfunction bicubicChannel(\n raster: ImageRaster,\n resizedWidth: number,\n resizedHeight: number,\n channel: number\n): Uint8Array {\n const horizontal = createBicubicAxis(raster.width, resizedWidth);\n const vertical = createBicubicAxis(raster.height, resizedHeight);\n const intermediate = new Uint8Array(raster.height * resizedWidth);\n for (let y = 0; y < raster.height; y += 1) {\n for (let x = 0; x < resizedWidth; x += 1) {\n const [start, count] = horizontal.bounds[x];\n const coefficients = horizontal.coefficients[x];\n let sum = BICUBIC_ROUNDING;\n for (let index = 0; index < count; index += 1) {\n sum += raster.rgba[(y * raster.width + start + index) * 4 + channel] * coefficients[index];\n }\n intermediate[y * resizedWidth + x] = clipBicubic(sum);\n }\n }\n\n const output = new Uint8Array(resizedWidth * resizedHeight);\n for (let y = 0; y < resizedHeight; y += 1) {\n const [start, count] = vertical.bounds[y];\n const coefficients = vertical.coefficients[y];\n for (let x = 0; x < resizedWidth; x += 1) {\n let sum = BICUBIC_ROUNDING;\n for (let index = 0; index < count; index += 1) {\n sum += intermediate[(start + index) * resizedWidth + x] * coefficients[index];\n }\n output[y * resizedWidth + x] = clipBicubic(sum);\n }\n }\n return output;\n}\n\nexport function preprocessImage(\n raster: ImageRaster,\n preprocessing: DetectionPreprocessing\n): PreprocessedImage {\n const inputWidth = preprocessing.size.width;\n const inputHeight = preprocessing.size.height;\n const doResize = preprocessing.doResize ?? true;\n if (!doResize && (raster.width > inputWidth || raster.height > inputHeight)) {\n throw new PPDetectionError(\"INVALID_INPUT\", \"禁用缩放时,输入图像尺寸不能超过模型输入尺寸\", {\n inputSize: { width: inputWidth, height: inputHeight },\n imageSize: { width: raster.width, height: raster.height }\n });\n }\n const resizeMode = preprocessing.resizeMode ?? \"letterbox\";\n const scale = doResize ? Math.min(inputWidth / raster.width, inputHeight / raster.height) : 1;\n const resizedWidth = doResize\n ? resizeMode === \"stretch\"\n ? inputWidth\n : Math.max(1, Math.min(inputWidth, Math.round(raster.width * scale)))\n : Math.min(inputWidth, raster.width);\n const resizedHeight = doResize\n ? resizeMode === \"stretch\"\n ? inputHeight\n : Math.max(1, Math.min(inputHeight, Math.round(raster.height * scale)))\n : Math.min(inputHeight, raster.height);\n const scaleX = resizedWidth / raster.width;\n const scaleY = resizedHeight / raster.height;\n const padLeft = resizeMode === \"stretch\" ? 0 : Math.floor((inputWidth - resizedWidth) / 2);\n const padTop = resizeMode === \"stretch\" ? 0 : Math.floor((inputHeight - resizedHeight) / 2);\n const plane = inputWidth * inputHeight;\n const data = new Float32Array(plane * 3);\n const normalize = preprocessing.doNormalize ?? true;\n const rescale = preprocessing.doRescale ?? true;\n const mean = normalize ? (preprocessing.mean ?? [0, 0, 0]) : [0, 0, 0];\n const std = normalize ? (preprocessing.std ?? [1, 1, 1]) : [1, 1, 1];\n const interpolation = preprocessing.interpolation ?? \"bilinear\";\n\n for (let channel = 0; channel < 3; channel += 1) {\n const padding = normalize && mean[channel] !== 0 ? -mean[channel] / std[channel] : 0;\n data.fill(padding, channel * plane, (channel + 1) * plane);\n const bicubic =\n doResize && interpolation === \"bicubic\"\n ? bicubicChannel(raster, resizedWidth, resizedHeight, channel)\n : undefined;\n for (let y = 0; y < resizedHeight; y += 1) {\n for (let x = 0; x < resizedWidth; x += 1) {\n const pixel = bicubic\n ? bicubic[y * resizedWidth + x]\n : doResize\n ? bilinearChannel(raster, x, y, resizedWidth, resizedHeight, channel)\n : sampleChannel(raster, x, y, channel);\n const scaled = rescale ? pixel * preprocessing.rescaleFactor : pixel;\n data[channel * plane + (y + padTop) * inputWidth + x + padLeft] = normalize\n ? (scaled - mean[channel]) / std[channel]\n : scaled;\n }\n }\n }\n\n return {\n data,\n dims: [1, 3, inputHeight, inputWidth],\n transform: {\n inputWidth,\n inputHeight,\n originalWidth: raster.width,\n originalHeight: raster.height,\n resizedWidth,\n resizedHeight,\n scale,\n scaleX,\n scaleY,\n padLeft,\n padTop\n }\n };\n}\n","import { PPDetectionError } from \"../errors\";\nimport { decodeImageSource, type DecodeImageEnvironment } from \"../input/decode-image\";\nimport type { ImageSource } from \"../input/image-source\";\nimport type {\n DetectOptions,\n DetectionCapabilities,\n PPDetectionLoadTimings,\n PPDetectionModelInfo,\n PPDetectionProgressEvent,\n PPDetectionResult,\n PPDetectionRuntimeInfo,\n RuntimeDetectionManifest\n} from \"../types\";\nimport { decodeDetectionOutputs } from \"./decode-output\";\nimport { preprocessImage } from \"./preprocess\";\n\nexport interface InferenceInput {\n readonly inputName: string;\n readonly data: Float32Array;\n readonly dims: readonly number[];\n}\n\nexport interface DetectionExecutor {\n run(input: InferenceInput, signal?: AbortSignal): Promise<unknown>;\n dispose(): Promise<void>;\n}\n\nexport interface PPDetectionDetectorOptions {\n readonly capabilities: DetectionCapabilities;\n readonly manifest: RuntimeDetectionManifest;\n readonly model: PPDetectionModelInfo;\n readonly runtime: PPDetectionRuntimeInfo;\n readonly loadTimings: PPDetectionLoadTimings;\n readonly loadExecutor: (signal?: AbortSignal) => Promise<DetectionExecutor>;\n readonly decodeEnvironment?: Omit<DecodeImageEnvironment, \"signal\">;\n readonly now?: () => number;\n readonly onProgress?: (event: PPDetectionProgressEvent) => void;\n readonly clearCurrentModelCache?: () => Promise<void>;\n readonly clearAllCache?: () => Promise<void>;\n readonly getCacheEstimate?: () => Promise<{ bytes: number; entries: number }>;\n readonly disposeResources?: () => Promise<void> | void;\n}\n\nfunction nowDefault(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction elapsed(clock: () => number, startedAt: number): number {\n return Math.max(0, clock() - startedAt);\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new PPDetectionError(\"ABORTED\", \"检测已取消\", { reason: signal.reason });\n }\n}\n\nfunction validateThreshold(value: number, path: string): void {\n if (!Number.isFinite(value) || value < 0 || value > 1) {\n throw new PPDetectionError(\"INVALID_INPUT\", `${path} 必须是 0 到 1 的有限数值`, {\n path,\n value\n });\n }\n}\n\nfunction validateDetectOptions(labels: readonly string[], options: DetectOptions): void {\n if (options.threshold !== undefined) validateThreshold(options.threshold, \"threshold\");\n if (options.classThresholds === undefined) return;\n for (const [label, value] of Object.entries(options.classThresholds)) {\n if (!labels.includes(label)) {\n throw new PPDetectionError(\"INVALID_INPUT\", `classThresholds 包含未知类别 ${label}`, {\n label\n });\n }\n validateThreshold(value, `classThresholds.${label}`);\n }\n}\n\nexport class PPDetectionDetectorImplementation {\n readonly capabilities: DetectionCapabilities;\n readonly manifest: RuntimeDetectionManifest;\n readonly model: PPDetectionModelInfo;\n readonly runtime: PPDetectionRuntimeInfo;\n readonly loadTimings: PPDetectionLoadTimings;\n private readonly clock: () => number;\n private executor?: DetectionExecutor;\n private loadPromise?: Promise<void>;\n private disposePromise?: Promise<void>;\n private queue: Promise<void> = Promise.resolve();\n private disposed = false;\n\n constructor(private readonly options: PPDetectionDetectorOptions) {\n this.capabilities = options.capabilities;\n this.manifest = options.manifest;\n this.model = options.model;\n this.runtime = options.runtime;\n this.loadTimings = options.loadTimings;\n this.clock = options.now ?? nowDefault;\n }\n\n async load(options: { signal?: AbortSignal } = {}): Promise<void> {\n if (this.disposed) throw new PPDetectionError(\"DISPOSED\", \"检测器已释放\");\n throwIfAborted(options.signal);\n if (this.executor) return;\n this.loadPromise ??= this.options.loadExecutor(options.signal).then(async (executor) => {\n if (this.disposed) {\n await executor.dispose();\n throw new PPDetectionError(\"DISPOSED\", \"检测器已释放\");\n }\n this.executor = executor;\n });\n try {\n await this.loadPromise;\n } catch (error) {\n this.loadPromise = undefined;\n throw error;\n }\n }\n\n detect(input: ImageSource, options: DetectOptions = {}): Promise<PPDetectionResult> {\n if (this.disposed) return Promise.reject(new PPDetectionError(\"DISPOSED\", \"检测器已释放\"));\n if (!this.executor) {\n return Promise.reject(new PPDetectionError(\"SESSION_CREATE_FAILED\", \"检测器尚未加载\"));\n }\n try {\n validateDetectOptions(this.manifest.labels, options);\n } catch (error) {\n return Promise.reject(\n error instanceof Error ? error : new PPDetectionError(\"INVALID_INPUT\", String(error))\n );\n }\n const operation = this.queue.then(() => this.detectOnce(input, options));\n this.queue = operation.then(\n () => undefined,\n () => undefined\n );\n return operation;\n }\n\n getCacheEstimate(): Promise<{ bytes: number; entries: number }> {\n return this.options.getCacheEstimate?.() ?? Promise.resolve({ bytes: 0, entries: 0 });\n }\n\n clearCurrentModelCache(): Promise<void> {\n return this.options.clearCurrentModelCache?.() ?? Promise.resolve();\n }\n\n clearAllCache(): Promise<void> {\n return this.options.clearAllCache?.() ?? Promise.resolve();\n }\n\n clearModelCache(): Promise<void> {\n return this.clearCurrentModelCache();\n }\n\n async dispose(): Promise<void> {\n if (this.disposePromise) return await this.disposePromise;\n this.disposed = true;\n this.disposePromise = (async () => {\n await this.queue;\n await this.executor?.dispose();\n this.executor = undefined;\n await this.options.disposeResources?.();\n })();\n await this.disposePromise;\n }\n\n private async detectOnce(input: ImageSource, options: DetectOptions): Promise<PPDetectionResult> {\n if (this.disposed) throw new PPDetectionError(\"DISPOSED\", \"检测器已释放\");\n const executor = this.executor;\n if (!executor) throw new PPDetectionError(\"SESSION_CREATE_FAILED\", \"检测器尚未加载\");\n throwIfAborted(options.signal);\n const totalStartedAt = this.clock();\n\n const decoded = await decodeImageSource(input, {\n ...this.options.decodeEnvironment,\n signal: options.signal,\n now: this.clock\n });\n throwIfAborted(options.signal);\n\n this.options.onProgress?.({ phase: \"preprocess\", status: \"start\" });\n const preprocessStartedAt = this.clock();\n const preprocessed = preprocessImage(decoded, this.manifest.preprocessing);\n const preprocessMs = elapsed(this.clock, preprocessStartedAt);\n this.options.onProgress?.({ phase: \"preprocess\", status: \"complete\" });\n\n this.options.onProgress?.({ phase: \"inference\", status: \"start\" });\n const inferenceStartedAt = this.clock();\n const outputs = await executor.run(\n {\n inputName: this.manifest.input.name,\n data: preprocessed.data,\n dims: preprocessed.dims\n },\n options.signal\n );\n const inferenceMs = elapsed(this.clock, inferenceStartedAt);\n this.options.onProgress?.({ phase: \"inference\", status: \"complete\" });\n throwIfAborted(options.signal);\n\n this.options.onProgress?.({ phase: \"postprocess\", status: \"start\" });\n const postprocessStartedAt = this.clock();\n const detections = decodeDetectionOutputs(outputs, {\n labels: this.manifest.labels,\n scoreThreshold: options.threshold ?? this.manifest.postprocessing.scoreThreshold,\n classThresholds: options.classThresholds,\n iouThreshold: this.manifest.postprocessing.iouThreshold,\n transform: preprocessed.transform,\n outputs: this.manifest.outputs,\n matrixCoordinates: this.manifest.postprocessing.matrixCoordinates,\n queryCoordinates: this.manifest.postprocessing.queryCoordinates,\n queryBoxFormat: this.manifest.postprocessing.queryBoxFormat\n });\n const postprocessMs = elapsed(this.clock, postprocessStartedAt);\n this.options.onProgress?.({ phase: \"postprocess\", status: \"complete\" });\n\n return {\n detections,\n image: {\n input: this.manifest.preprocessing.size,\n original: { width: decoded.width, height: decoded.height }\n },\n model: this.model,\n runtime: this.runtime,\n timings: {\n decodeMs: decoded.decodeMs,\n preprocessMs,\n inferenceMs,\n postprocessMs,\n totalMs: elapsed(this.clock, totalStartedAt)\n },\n ...(options.timestampMs === undefined && options.metadata === undefined\n ? {}\n : { frame: { timestampMs: options.timestampMs, metadata: options.metadata } })\n };\n }\n}\n\nexport type PPDetectionDetector = PPDetectionDetectorImplementation;\n","import { PPDetectionError } from \"../errors\";\nimport type {\n Backend,\n DetectionModelVariant,\n ModelIdentity,\n ModelSource,\n ModelSourceKind,\n Precision,\n RuntimeDetectionManifest,\n TensorContract\n} from \"../types\";\n\nconst SOURCE_KINDS = new Set<ModelSourceKind>([\"git-lfs\", \"huggingface\", \"modelscope\", \"custom\"]);\nconst BACKENDS = new Set<Backend>([\"wasm\", \"webgpu\"]);\nconst PRECISIONS = new Set<Precision>([\"fp32\", \"fp16\", \"int8\", \"int4\", \"fp8\"]);\nconst REVISION_PATTERN = /^[a-fA-F0-9]{40,64}$/;\nconst SHA256_PATTERN = /^[a-fA-F0-9]{64}$/;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction invalid(path: string, message: string): never {\n throw new PPDetectionError(\"INVALID_MANIFEST\", `模型清单 ${path} ${message}`, { path });\n}\n\nfunction record(value: unknown, path: string): Record<string, unknown> {\n if (!isRecord(value)) invalid(path, \"必须是对象\");\n return value;\n}\n\nfunction text(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim() === \"\") invalid(path, \"必须是非空字符串\");\n return value;\n}\n\nfunction positiveInteger(value: unknown, path: string): number {\n if (!Number.isInteger(value) || (value as number) <= 0) invalid(path, \"必须是正整数\");\n return value as number;\n}\n\nfunction nonNegativeIntegerOrNull(value: unknown, path: string): number | null {\n if (value === null) return null;\n if (!Number.isInteger(value) || (value as number) < 0) invalid(path, \"必须是非负整数或 null\");\n return value as number;\n}\n\nfunction threshold(value: unknown, path: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0 || value > 1)\n invalid(path, \"必须是 0 到 1 的有限数值\");\n return value;\n}\n\nfunction optionalCoordinate(value: unknown, path: string): \"pixels\" | \"normalized\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"pixels\") return \"pixels\";\n if (value === \"normalized\") return \"normalized\";\n invalid(path, \"必须是 pixels 或 normalized\");\n}\n\nfunction optionalBoxFormat(value: unknown, path: string): \"cxcywh\" | \"xyxy\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"cxcywh\") return \"cxcywh\";\n if (value === \"xyxy\") return \"xyxy\";\n invalid(path, \"必须是 cxcywh 或 xyxy\");\n}\n\nfunction optionalResizeMode(value: unknown, path: string): \"letterbox\" | \"stretch\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"letterbox\" || value === \"stretch\") return value;\n invalid(path, \"必须是 letterbox 或 stretch\");\n}\n\nfunction optionalInterpolation(value: unknown, path: string): \"bilinear\" | \"bicubic\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"bilinear\" || value === \"bicubic\") return value;\n invalid(path, \"必须是 bilinear 或 bicubic\");\n}\n\nfunction optionalFiniteNumbers(value: unknown, path: string): readonly number[] | undefined {\n if (value === undefined) return undefined;\n if (\n !Array.isArray(value) ||\n value.length === 0 ||\n !value.every((item) => typeof item === \"number\" && Number.isFinite(item))\n ) {\n invalid(path, \"必须是非空的有限数值数组\");\n }\n return value.map((item) => item as number);\n}\n\nfunction tensor(value: unknown, path: string, allowDynamic = false): TensorContract {\n const candidate = record(value, path);\n const shape = candidate.shape;\n if (\n !Array.isArray(shape) ||\n shape.length === 0 ||\n !shape.every(\n (dimension) =>\n Number.isInteger(dimension) && (dimension > 0 || (allowDynamic && dimension === -1))\n )\n ) {\n invalid(`${path}.shape`, \"必须是非空的正整数数组\");\n }\n return {\n name: text(candidate.name, `${path}.name`),\n shape: shape.map((dimension) => dimension as number),\n dtype: text(candidate.dtype, `${path}.dtype`)\n };\n}\n\nfunction source(value: unknown, path: string, variantBytes: number): ModelSource {\n const candidate = record(value, path);\n if (typeof candidate.kind !== \"string\" || !SOURCE_KINDS.has(candidate.kind as ModelSourceKind))\n invalid(`${path}.kind`, \"不受支持\");\n const revision = text(candidate.revision, `${path}.revision`);\n if (!REVISION_PATTERN.test(revision))\n invalid(`${path}.revision`, \"必须是 40 至 64 位十六进制不可变 revision\");\n const downloadUrl = text(candidate.downloadUrl, `${path}.downloadUrl`);\n let parsedUrl: URL;\n try {\n parsedUrl = new URL(downloadUrl);\n } catch {\n invalid(`${path}.downloadUrl`, \"必须是有效 URL\");\n }\n if (\n (parsedUrl.protocol !== \"http:\" && parsedUrl.protocol !== \"https:\") ||\n parsedUrl.hostname === \"\"\n ) {\n invalid(`${path}.downloadUrl`, \"必须是含主机的 HTTP(S) URL\");\n }\n const bytes = positiveInteger(candidate.bytes, `${path}.bytes`);\n if (bytes !== variantBytes) invalid(`${path}.bytes`, \"必须与变体大小一致\");\n const sha256 = text(candidate.sha256, `${path}.sha256`).toLowerCase();\n if (!SHA256_PATTERN.test(sha256)) invalid(`${path}.sha256`, \"必须是 64 位十六进制摘要\");\n return {\n kind: candidate.kind as ModelSourceKind,\n repository: text(candidate.repository, `${path}.repository`),\n revision,\n path: text(candidate.path, `${path}.path`),\n downloadUrl,\n bytes,\n sha256\n };\n}\n\nfunction variant(value: unknown, path: string): DetectionModelVariant {\n const candidate = record(value, path);\n if (typeof candidate.precision !== \"string\" || !PRECISIONS.has(candidate.precision as Precision))\n invalid(`${path}.precision`, \"不受支持\");\n if (\n candidate.quantization !== null &&\n (typeof candidate.quantization !== \"string\" || candidate.quantization.trim() === \"\")\n ) {\n invalid(`${path}.quantization`, \"必须是非空字符串或 null\");\n }\n if (\n !Array.isArray(candidate.backends) ||\n candidate.backends.length === 0 ||\n !candidate.backends.every(\n (backend) => typeof backend === \"string\" && BACKENDS.has(backend as Backend)\n )\n ) {\n invalid(`${path}.backends`, \"必须是非空的 wasm/webgpu 数组\");\n }\n const bytes = positiveInteger(candidate.bytes, `${path}.bytes`);\n if (!Array.isArray(candidate.sources) || candidate.sources.length === 0)\n invalid(`${path}.sources`, \"必须是非空数组\");\n const sources = candidate.sources.map((item, index) =>\n source(item, `${path}.sources[${index}]`, bytes)\n );\n if (new Set(sources.map((item) => item.kind)).size !== sources.length)\n invalid(`${path}.sources`, \"同一变体中的来源 kind 不得重复\");\n const backends = candidate.backends.map((backend) => backend as Backend);\n const status = candidate.status;\n if (status !== undefined && status !== \"stable\" && status !== \"labs\" && status !== \"blocked\")\n invalid(`${path}.status`, \"不受支持\");\n return {\n id: text(candidate.id, `${path}.id`),\n precision: candidate.precision as Precision,\n quantization: candidate.quantization === null ? null : candidate.quantization,\n opset: positiveInteger(candidate.opset, `${path}.opset`),\n bytes,\n parameterCount: nonNegativeIntegerOrNull(candidate.parameterCount, `${path}.parameterCount`),\n backends,\n sources,\n ...(status === undefined ? {} : { status })\n };\n}\n\nexport function parseDetectionManifest(value: unknown): RuntimeDetectionManifest {\n const candidate = record(value, \"根节点\");\n if (candidate.schemaVersion !== 1) invalid(\"schemaVersion\", \"必须是 1\");\n const modelValue = record(candidate.model, \"model\");\n const model: ModelIdentity = {\n id: text(modelValue.id, \"model.id\"),\n version: text(modelValue.version, \"model.version\")\n };\n if (!Array.isArray(candidate.outputs) || candidate.outputs.length === 0)\n invalid(\"outputs\", \"必须是非空数组\");\n const preprocessing = record(candidate.preprocessing, \"preprocessing\");\n const size = record(preprocessing.size, \"preprocessing.size\");\n if (\n typeof preprocessing.rescaleFactor !== \"number\" ||\n !Number.isFinite(preprocessing.rescaleFactor) ||\n preprocessing.rescaleFactor <= 0\n ) {\n invalid(\"preprocessing.rescaleFactor\", \"必须是正有限数值\");\n }\n for (const field of [\"doResize\", \"doRescale\", \"doNormalize\"] as const) {\n if (preprocessing[field] !== undefined && typeof preprocessing[field] !== \"boolean\")\n invalid(`preprocessing.${field}`, \"必须是布尔值\");\n }\n const postprocessing = record(candidate.postprocessing, \"postprocessing\");\n if (postprocessing.type !== \"nms\") invalid(\"postprocessing.type\", \"目前只支持 nms\");\n const matrixCoordinates = optionalCoordinate(\n postprocessing.matrixCoordinates,\n \"postprocessing.matrixCoordinates\"\n );\n const queryCoordinates = optionalCoordinate(\n postprocessing.queryCoordinates,\n \"postprocessing.queryCoordinates\"\n );\n const queryBoxFormat = optionalBoxFormat(\n postprocessing.queryBoxFormat,\n \"postprocessing.queryBoxFormat\"\n );\n const resizeMode = optionalResizeMode(preprocessing.resizeMode, \"preprocessing.resizeMode\");\n const interpolation = optionalInterpolation(\n preprocessing.interpolation,\n \"preprocessing.interpolation\"\n );\n if (\n !Array.isArray(candidate.labels) ||\n candidate.labels.length === 0 ||\n !candidate.labels.every((label) => typeof label === \"string\" && label.trim() !== \"\")\n ) {\n invalid(\"labels\", \"必须是非空字符串数组\");\n }\n if (!Array.isArray(candidate.variants) || candidate.variants.length === 0)\n invalid(\"variants\", \"必须是非空数组\");\n const variants = candidate.variants.map((item, index) => variant(item, `variants[${index}]`));\n if (new Set(variants.map((item) => item.id)).size !== variants.length)\n invalid(\"variants\", \"变体 id 不得重复\");\n const input = tensor(candidate.input, \"input\");\n const mean = optionalFiniteNumbers(preprocessing.mean, \"preprocessing.mean\");\n const std = optionalFiniteNumbers(preprocessing.std, \"preprocessing.std\");\n const channels = input.shape[1];\n if (mean !== undefined && mean.length !== channels)\n invalid(\"preprocessing.mean\", \"长度必须与输入通道数一致\");\n if (std !== undefined && std.length !== channels)\n invalid(\"preprocessing.std\", \"长度必须与输入通道数一致\");\n if (std?.some((value) => value <= 0)) invalid(\"preprocessing.std\", \"必须全部大于零\");\n return {\n schemaVersion: 1,\n model,\n input,\n outputs: candidate.outputs.map((item, index) => tensor(item, `outputs[${index}]`, true)),\n preprocessing: {\n size: {\n width: positiveInteger(size.width, \"preprocessing.size.width\"),\n height: positiveInteger(size.height, \"preprocessing.size.height\")\n },\n rescaleFactor: preprocessing.rescaleFactor,\n ...(resizeMode === undefined ? {} : { resizeMode }),\n ...(interpolation === undefined ? {} : { interpolation }),\n ...(typeof preprocessing.doResize === \"boolean\" ? { doResize: preprocessing.doResize } : {}),\n ...(typeof preprocessing.doRescale === \"boolean\"\n ? { doRescale: preprocessing.doRescale }\n : {}),\n ...(typeof preprocessing.doNormalize === \"boolean\"\n ? { doNormalize: preprocessing.doNormalize }\n : {}),\n ...(mean === undefined ? {} : { mean }),\n ...(std === undefined ? {} : { std })\n },\n postprocessing: {\n type: \"nms\",\n scoreThreshold: threshold(postprocessing.scoreThreshold, \"postprocessing.scoreThreshold\"),\n iouThreshold: threshold(postprocessing.iouThreshold, \"postprocessing.iouThreshold\"),\n ...(matrixCoordinates === undefined ? {} : { matrixCoordinates }),\n ...(queryCoordinates === undefined ? {} : { queryCoordinates }),\n ...(queryBoxFormat === undefined ? {} : { queryBoxFormat })\n },\n labels: candidate.labels.map((label) => label as string),\n variants\n };\n}\n","import { PPDetectionError } from \"../errors\";\nimport type {\n Backend,\n ModelManifest,\n ModelManifestVariant,\n ModelSourceKind,\n Precision,\n RuntimeDetectionManifest,\n TensorContract\n} from \"../types\";\nimport { parseDetectionManifest } from \"./manifest\";\n\nconst SHA256_PATTERN = /^[a-fA-F0-9]{64}$/;\nconst BACKENDS = new Set<Backend>([\"wasm\", \"webgpu\"]);\nconst PRECISIONS = new Set<Precision>([\"fp32\", \"fp16\", \"int8\", \"int4\", \"fp8\"]);\n\nfunction record(value: unknown, path: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new PPDetectionError(\"INVALID_MANIFEST\", `模型清单 ${path} 必须是对象`, { path });\n }\n return value as Record<string, unknown>;\n}\n\nfunction invalid(path: string, message: string): never {\n throw new PPDetectionError(\"INVALID_MANIFEST\", `模型清单 ${path} ${message}`, { path });\n}\n\nfunction text(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim() === \"\") invalid(path, \"必须是非空字符串\");\n return value;\n}\n\nfunction integer(value: unknown, path: string, allowZero = false): number {\n if (!Number.isInteger(value) || (allowZero ? (value as number) < 0 : (value as number) <= 0)) {\n invalid(path, allowZero ? \"必须是非负整数\" : \"必须是正整数\");\n }\n return value as number;\n}\n\nfunction nonNegativeIntegerOrNull(value: unknown, path: string): number | null {\n if (value === null) return null;\n return integer(value, path, true);\n}\n\nfunction finite(value: unknown, path: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) invalid(path, \"必须是有限数值\");\n return value;\n}\n\nfunction boolean(value: unknown, path: string): boolean {\n if (typeof value !== \"boolean\") invalid(path, \"必须是布尔值\");\n return value;\n}\n\nfunction resizeMode(value: unknown, path: string): \"letterbox\" | \"stretch\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"letterbox\" || value === \"stretch\") return value;\n invalid(path, \"必须是 letterbox 或 stretch\");\n}\n\nfunction interpolation(value: unknown, path: string): \"bilinear\" | \"bicubic\" | undefined {\n if (value === undefined) return undefined;\n if (value === \"bilinear\" || value === \"bicubic\") return value;\n invalid(path, \"必须是 bilinear 或 bicubic\");\n}\n\nfunction resample(value: unknown, path: string): 2 | 3 {\n const result = integer(value, path, true);\n if (result === 2 || result === 3) return result;\n invalid(path, \"目前只支持 2 (bilinear) 或 3 (bicubic)\");\n}\n\nfunction url(value: unknown, path: string): string {\n const result = text(value, path);\n try {\n const parsed = new URL(result);\n if (![\"http:\", \"https:\"].includes(parsed.protocol) || !parsed.hostname) throw new Error();\n } catch {\n invalid(path, \"必须是含主机的 HTTP(S) URL\");\n }\n return result;\n}\n\nfunction tensor(value: unknown, path: string, allowDynamic = false): TensorContract {\n const candidate = record(value, path);\n if (\n !Array.isArray(candidate.shape) ||\n candidate.shape.length === 0 ||\n !candidate.shape.every(\n (dimension) =>\n Number.isInteger(dimension) && (dimension > 0 || (allowDynamic && dimension === -1))\n )\n ) {\n invalid(`${path}.shape`, \"必须是正整数数组\");\n }\n return {\n name: text(candidate.name, `${path}.name`),\n dtype: text(candidate.dtype, `${path}.dtype`),\n shape: candidate.shape.map(Number)\n };\n}\n\nfunction triple(value: unknown, path: string, positive = false): [number, number, number] {\n if (!Array.isArray(value) || value.length !== 3) invalid(path, \"必须包含 3 个数值\");\n const result = value.map((item, index) => finite(item, `${path}[${index}]`));\n if (positive && result.some((item) => item <= 0)) invalid(path, \"必须全部大于零\");\n return result as [number, number, number];\n}\n\nfunction variant(value: unknown, path: string): ModelManifestVariant {\n const candidate = record(value, path);\n if (\n !Array.isArray(candidate.backendCompatibility) ||\n candidate.backendCompatibility.length === 0 ||\n !candidate.backendCompatibility.every(\n (backend) => typeof backend === \"string\" && BACKENDS.has(backend as Backend)\n )\n ) {\n invalid(`${path}.backendCompatibility`, \"必须是非空的 wasm/webgpu 数组\");\n }\n if (\n typeof candidate.precision !== \"string\" ||\n !PRECISIONS.has(candidate.precision as Precision)\n ) {\n invalid(`${path}.precision`, \"不受支持\");\n }\n if (\n candidate.quantization !== undefined &&\n candidate.quantization !== null &&\n (typeof candidate.quantization !== \"string\" || candidate.quantization.trim() === \"\")\n ) {\n invalid(`${path}.quantization`, \"必须是非空字符串或 null\");\n }\n const sha256 = text(candidate.sha256, `${path}.sha256`).toLowerCase();\n if (!SHA256_PATTERN.test(sha256)) invalid(`${path}.sha256`, \"必须是 64 位十六进制摘要\");\n const validation = record(candidate.validation, `${path}.validation`);\n return {\n backendCompatibility: candidate.backendCompatibility.map((backend) => backend as Backend),\n bytes: integer(candidate.bytes, `${path}.bytes`),\n filename: text(candidate.filename, `${path}.filename`),\n id: text(candidate.id, `${path}.id`),\n opset: integer(candidate.opset, `${path}.opset`),\n precision: candidate.precision as Precision,\n quantization: candidate.quantization === undefined ? null : candidate.quantization,\n sha256,\n url: url(candidate.url, `${path}.url`),\n validation: {\n included: boolean(validation.included, `${path}.validation.included`),\n pass: boolean(validation.pass, `${path}.validation.pass`),\n report: text(validation.report, `${path}.validation.report`)\n }\n };\n}\n\nexport function parseModelManifest(value: unknown): ModelManifest {\n const candidate = record(value, \"根节点\");\n if (candidate.schemaVersion !== 1) invalid(\"schemaVersion\", \"必须是 1\");\n const model = record(candidate.model, \"model\");\n const preprocessing = record(candidate.preprocessing, \"preprocessing\");\n const size = record(preprocessing.size, \"preprocessing.size\");\n const source = record(candidate.source, \"source\");\n const files = record(source.files, \"source.files\");\n const preprocessingInterpolation = interpolation(\n preprocessing.interpolation,\n \"preprocessing.interpolation\"\n );\n const preprocessingResample = resample(preprocessing.resample, \"preprocessing.resample\");\n const input = tensor(candidate.input, \"input\");\n if (input.shape.length !== 4 || input.shape[0] !== 1 || input.shape[1] !== 3) {\n invalid(\"input.shape\", \"目前只支持 [1,3,H,W]\");\n }\n if (!Array.isArray(candidate.outputs) || candidate.outputs.length === 0) {\n invalid(\"outputs\", \"必须是非空数组\");\n }\n if (!Array.isArray(candidate.labels) || !candidate.labels.length)\n invalid(\"labels\", \"必须是非空数组\");\n const labels = candidate.labels.map((label, index) => text(label, `labels[${index}]`));\n if (!Array.isArray(candidate.variants) || !candidate.variants.length) {\n invalid(\"variants\", \"必须是非空数组\");\n }\n const variants = candidate.variants.map((item, index) => variant(item, `variants[${index}]`));\n if (new Set(variants.map((item) => item.id)).size !== variants.length)\n invalid(\"variants\", \"id 不得重复\");\n if (!Array.isArray(candidate.variantPriority) || !candidate.variantPriority.length) {\n invalid(\"variantPriority\", \"必须是非空数组\");\n }\n const variantPriority = candidate.variantPriority.map((item, index) =>\n text(item, `variantPriority[${index}]`)\n );\n if (variantPriority.some((id) => !variants.some((item) => item.id === id))) {\n invalid(\"variantPriority\", \"引用了不存在的变体\");\n }\n const normalizedFiles = Object.fromEntries(\n Object.entries(files).map(([name, hash]) => {\n const normalized = text(hash, `source.files.${name}`).toLowerCase();\n if (!SHA256_PATTERN.test(normalized)) invalid(`source.files.${name}`, \"必须是 SHA-256\");\n return [name, normalized];\n })\n );\n return {\n schemaVersion: 1,\n minSdkVersion: text(candidate.minSdkVersion, \"minSdkVersion\"),\n model: {\n architecture: text(model.architecture, \"model.architecture\"),\n id: text(model.id, \"model.id\"),\n modelType: text(model.modelType, \"model.modelType\"),\n parameterCount: nonNegativeIntegerOrNull(model.parameterCount, \"model.parameterCount\"),\n version: text(model.version, \"model.version\")\n },\n input,\n outputs: candidate.outputs.map((item, index) => tensor(item, `outputs[${index}]`, true)),\n preprocessing: {\n doNormalize: boolean(preprocessing.doNormalize, \"preprocessing.doNormalize\"),\n doRescale: boolean(preprocessing.doRescale, \"preprocessing.doRescale\"),\n doResize: boolean(preprocessing.doResize, \"preprocessing.doResize\"),\n ...(resizeMode(preprocessing.resizeMode, \"preprocessing.resizeMode\") === undefined\n ? {}\n : { resizeMode: resizeMode(preprocessing.resizeMode, \"preprocessing.resizeMode\") }),\n ...(preprocessingInterpolation === undefined\n ? {}\n : { interpolation: preprocessingInterpolation }),\n imageMean: triple(preprocessing.imageMean, \"preprocessing.imageMean\"),\n imageStd: triple(preprocessing.imageStd, \"preprocessing.imageStd\", true),\n resample: preprocessingResample,\n rescaleFactor: finite(preprocessing.rescaleFactor, \"preprocessing.rescaleFactor\"),\n size: {\n height: integer(size.height, \"preprocessing.size.height\"),\n width: integer(size.width, \"preprocessing.size.width\")\n }\n },\n source: {\n files: normalizedFiles,\n license: text(source.license, \"source.license\"),\n name: text(source.name, \"source.name\"),\n url: url(source.url, \"source.url\")\n },\n labels,\n variantPriority,\n variants\n };\n}\n\nfunction sourceKind(downloadUrl: string): ModelSourceKind {\n const hostname = new URL(downloadUrl).hostname.toLowerCase();\n if (hostname.includes(\"huggingface.co\")) return \"huggingface\";\n if (hostname.includes(\"modelscope\")) return \"modelscope\";\n return \"custom\";\n}\n\nexport function adaptModelManifest(manifest: ModelManifest): RuntimeDetectionManifest {\n const preprocessingResample = resample(manifest.preprocessing.resample, \"preprocessing.resample\");\n const priority = new Map(manifest.variantPriority.map((id, index) => [id, index]));\n const variants = [...manifest.variants].sort(\n (left, right) =>\n (priority.get(left.id) ?? manifest.variantPriority.length + manifest.variants.indexOf(left)) -\n (priority.get(right.id) ?? manifest.variantPriority.length + manifest.variants.indexOf(right))\n );\n return parseDetectionManifest({\n schemaVersion: 1,\n model: { id: manifest.model.id, version: manifest.model.version },\n input: manifest.input,\n outputs: manifest.outputs,\n preprocessing: {\n size: manifest.preprocessing.size,\n rescaleFactor: manifest.preprocessing.rescaleFactor,\n doResize: manifest.preprocessing.doResize,\n resizeMode: manifest.preprocessing.resizeMode,\n interpolation:\n manifest.preprocessing.interpolation ??\n (preprocessingResample === 3 ? \"bicubic\" : \"bilinear\"),\n doRescale: manifest.preprocessing.doRescale,\n doNormalize: manifest.preprocessing.doNormalize,\n mean: manifest.preprocessing.imageMean,\n std: manifest.preprocessing.imageStd\n },\n postprocessing: { type: \"nms\", scoreThreshold: 0.5, iouThreshold: 0.5 },\n labels: manifest.labels,\n variants: variants.map((variant) => ({\n id: variant.id,\n precision: variant.precision,\n quantization: variant.quantization ?? null,\n opset: variant.opset,\n bytes: variant.bytes,\n parameterCount: manifest.model.parameterCount,\n backends: variant.backendCompatibility,\n status: variant.validation.included && variant.validation.pass ? \"stable\" : \"blocked\",\n sources: [\n {\n kind: sourceKind(variant.url),\n repository: manifest.source.url,\n revision: variant.sha256,\n path: variant.filename,\n downloadUrl: variant.url,\n bytes: variant.bytes,\n sha256: variant.sha256\n }\n ]\n }))\n });\n}\n","import type { CacheEstimate, ModelCache } from \"./model-cache\";\n\ninterface ModelCacheRecord {\n readonly key: string;\n readonly bytes: ArrayBuffer;\n readonly size: number;\n}\n\nexport interface IndexedDBModelCacheOptions {\n readonly indexedDB?: IDBFactory;\n readonly databaseName?: string;\n}\n\nexport class IndexedDBModelCache implements ModelCache {\n private readonly factory: IDBFactory;\n private readonly databaseName: string;\n private database?: Promise<IDBDatabase>;\n\n constructor(options: IndexedDBModelCacheOptions = {}) {\n const factory = options.indexedDB ?? globalThis.indexedDB;\n if (!factory) throw new Error(\"当前环境不支持 IndexedDB\");\n this.factory = factory;\n this.databaseName = options.databaseName ?? \"web-sdk-pp-detection-models-v1\";\n }\n\n async get(key: string): Promise<ArrayBuffer | undefined> {\n const record = await this.request<ModelCacheRecord | undefined>(\n \"readonly\",\n (store) => store.get(key) as IDBRequest<ModelCacheRecord | undefined>\n );\n return record?.bytes.slice(0);\n }\n\n async put(key: string, bytes: ArrayBuffer): Promise<void> {\n const stored = bytes.slice(0);\n await this.request(\"readwrite\", (store) =>\n store.put({ key, bytes: stored, size: stored.byteLength } satisfies ModelCacheRecord)\n );\n }\n\n async clearCurrent(key: string): Promise<void> {\n await this.request(\"readwrite\", (store) => store.delete(key));\n }\n\n async clearAll(): Promise<void> {\n await this.request(\"readwrite\", (store) => store.clear());\n }\n\n async estimate(): Promise<CacheEstimate> {\n const database = await this.open();\n return await new Promise<CacheEstimate>((resolve, reject) => {\n const transaction = database.transaction(\"models\", \"readonly\");\n const request = transaction.objectStore(\"models\").openCursor();\n let bytes = 0;\n let entries = 0;\n let cursorFinished = false;\n request.onerror = () => reject(request.error ?? new Error(\"读取 IndexedDB 缓存失败\"));\n request.onsuccess = () => {\n const cursor = request.result;\n if (!cursor) {\n cursorFinished = true;\n return;\n }\n const value = cursor.value as ModelCacheRecord;\n bytes += typeof value.size === \"number\" ? value.size : value.bytes.byteLength;\n entries += 1;\n cursor.continue();\n };\n transaction.oncomplete = () => {\n if (cursorFinished) resolve({ bytes, entries });\n else reject(new Error(\"IndexedDB 缓存游标未完成\"));\n };\n transaction.onabort = () => reject(transaction.error ?? new Error(\"IndexedDB 缓存事务中止\"));\n });\n }\n\n async close(): Promise<void> {\n if (!this.database) return;\n (await this.database).close();\n this.database = undefined;\n }\n\n private open(): Promise<IDBDatabase> {\n if (this.database) return this.database;\n this.database = new Promise((resolve, reject) => {\n const request = this.factory.open(this.databaseName, 1);\n request.onupgradeneeded = () => {\n if (!request.result.objectStoreNames.contains(\"models\"))\n request.result.createObjectStore(\"models\", { keyPath: \"key\" });\n };\n request.onerror = () => reject(request.error ?? new Error(\"打开 IndexedDB 缓存失败\"));\n request.onsuccess = () => resolve(request.result);\n request.onblocked = () => reject(new Error(\"IndexedDB 缓存升级被阻塞\"));\n });\n this.database.catch(() => {\n this.database = undefined;\n });\n return this.database;\n }\n\n private async request<T = undefined>(\n mode: IDBTransactionMode,\n operation: (store: IDBObjectStore) => IDBRequest<T>\n ): Promise<T> {\n const database = await this.open();\n return await new Promise<T>((resolve, reject) => {\n const transaction = database.transaction(\"models\", mode);\n const request = operation(transaction.objectStore(\"models\"));\n let requestFinished = false;\n let result: T;\n request.onerror = () => reject(request.error ?? new Error(\"IndexedDB 缓存操作失败\"));\n request.onsuccess = () => {\n requestFinished = true;\n result = request.result;\n };\n transaction.oncomplete = () => {\n if (requestFinished) resolve(result);\n else reject(new Error(\"IndexedDB 缓存请求未完成\"));\n };\n transaction.onabort = () => reject(transaction.error ?? new Error(\"IndexedDB 缓存事务中止\"));\n });\n }\n}\n","import type { CacheEstimate, ModelCache } from \"./model-cache\";\n\nfunction clone(bytes: ArrayBuffer): ArrayBuffer {\n return bytes.slice(0);\n}\n\nexport class MemoryModelCache implements ModelCache {\n private readonly entries = new Map<string, ArrayBuffer>();\n\n get(key: string): Promise<ArrayBuffer | undefined> {\n const value = this.entries.get(key);\n return Promise.resolve(value ? clone(value) : undefined);\n }\n\n put(key: string, bytes: ArrayBuffer): Promise<void> {\n this.entries.set(key, clone(bytes));\n return Promise.resolve();\n }\n\n clearCurrent(key: string): Promise<void> {\n this.entries.delete(key);\n return Promise.resolve();\n }\n\n clearAll(): Promise<void> {\n this.entries.clear();\n return Promise.resolve();\n }\n\n estimate(): Promise<CacheEstimate> {\n let bytes = 0;\n for (const value of this.entries.values()) bytes += value.byteLength;\n return Promise.resolve({ bytes, entries: this.entries.size });\n }\n\n close(): Promise<void> {\n this.entries.clear();\n return Promise.resolve();\n }\n}\n","export interface CacheEstimate {\n readonly bytes: number;\n readonly entries: number;\n}\n\nexport interface ModelCache {\n get(key: string): Promise<ArrayBuffer | undefined>;\n put(key: string, bytes: ArrayBuffer): Promise<void>;\n clearCurrent(key: string): Promise<void>;\n clearAll(): Promise<void>;\n estimate(): Promise<CacheEstimate>;\n close?(): Promise<void> | void;\n}\n\nexport class TieredModelCache implements ModelCache {\n constructor(\n private readonly memory: ModelCache,\n private readonly persistent?: ModelCache\n ) {}\n\n async get(key: string): Promise<ArrayBuffer | undefined> {\n const memoryValue = await this.memory.get(key);\n if (memoryValue) return memoryValue;\n const persistentValue = await this.persistent?.get(key);\n if (persistentValue) await this.memory.put(key, persistentValue);\n return persistentValue;\n }\n\n async put(key: string, bytes: ArrayBuffer): Promise<void> {\n await this.memory.put(key, bytes);\n await this.persistent?.put(key, bytes);\n }\n\n async clearCurrent(key: string): Promise<void> {\n await this.memory.clearCurrent(key);\n await this.persistent?.clearCurrent(key);\n }\n\n async clearAll(): Promise<void> {\n await this.memory.clearAll();\n await this.persistent?.clearAll();\n }\n\n estimate(): Promise<CacheEstimate> {\n return this.persistent?.estimate() ?? this.memory.estimate();\n }\n\n async close(): Promise<void> {\n await this.memory.close?.();\n await this.persistent?.close?.();\n }\n}\n","import { PPDetectionError } from \"../errors\";\n\nfunction abortIfNeeded(signal?: AbortSignal): void {\n if (signal?.aborted) throw new PPDetectionError(\"ABORTED\", \"模型完整性校验已取消\");\n}\n\nexport async function calculateSha256(bytes: ArrayBuffer, signal?: AbortSignal): Promise<string> {\n abortIfNeeded(signal);\n if (!globalThis.crypto?.subtle) {\n throw new PPDetectionError(\"MODEL_INTEGRITY_FAILED\", \"当前环境不支持 SHA-256 完整性校验\", {\n algorithm: \"SHA-256\"\n });\n }\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n abortIfNeeded(signal);\n return Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, \"0\")).join(\n \"\"\n );\n}\n\nexport async function verifyModelIntegrity(\n bytes: ArrayBuffer,\n expected: { readonly bytes: number; readonly sha256: string },\n signal?: AbortSignal\n): Promise<void> {\n abortIfNeeded(signal);\n if (bytes.byteLength !== expected.bytes) {\n throw new PPDetectionError(\"MODEL_INTEGRITY_FAILED\", \"模型文件大小与清单不一致\", {\n expectedBytes: expected.bytes,\n actualBytes: bytes.byteLength\n });\n }\n const actualSha256 = await calculateSha256(bytes, signal);\n if (actualSha256 !== expected.sha256.toLowerCase()) {\n throw new PPDetectionError(\"MODEL_INTEGRITY_FAILED\", \"模型 SHA-256 与清单不一致\", {\n expectedSha256: expected.sha256.toLowerCase(),\n actualSha256\n });\n }\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { TimingBreakdown } from \"../types\";\nimport { verifyModelIntegrity } from \"./integrity\";\nimport type { ResolvedModelAsset } from \"./source-resolver\";\n\nexport type ModelFetcher = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n\nexport interface ModelDownloadProgress {\n readonly loadedBytes: number;\n readonly totalBytes?: number;\n}\n\nexport interface LoadModelAssetOptions {\n readonly fetcher?: ModelFetcher;\n readonly signal?: AbortSignal;\n readonly onProgress?: (progress: ModelDownloadProgress) => void;\n}\n\nexport interface ModelBytes {\n readonly bytes: ArrayBuffer;\n readonly timings: Pick<TimingBreakdown, \"modelDownloadMs\" | \"integrityMs\">;\n}\n\nfunction now(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction aborted(error: unknown, signal?: AbortSignal): boolean {\n return (\n signal?.aborted === true ||\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error && error.name === \"AbortError\")\n );\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) throw new PPDetectionError(\"ABORTED\", \"模型下载已取消\");\n}\n\nfunction contentLength(response: Response, expectedBytes: number): number {\n const raw = response.headers.get(\"content-length\");\n if (raw === null) return expectedBytes;\n const actual = Number(raw);\n if (!Number.isSafeInteger(actual) || actual < 0 || actual !== expectedBytes) {\n throw new PPDetectionError(\"MODEL_INTEGRITY_FAILED\", \"响应 Content-Length 与清单不一致\", {\n contentLength: raw,\n expectedBytes\n });\n }\n return actual;\n}\n\nfunction validatePartialResponse(response: Response, expectedBytes: number): void {\n if (response.status !== 206) return;\n const raw = response.headers.get(\"content-range\");\n const match = raw?.match(/^bytes (\\d+)-(\\d+)\\/(\\d+)$/i);\n if (\n !match ||\n Number(match[1]) !== 0 ||\n Number(match[2]) !== expectedBytes - 1 ||\n Number(match[3]) !== expectedBytes\n ) {\n throw new PPDetectionError(\"MODEL_DOWNLOAD_FAILED\", \"206 响应未覆盖完整模型范围\", {\n contentRange: raw,\n expectedContentRange: `bytes 0-${expectedBytes - 1}/${expectedBytes}`\n });\n }\n}\n\nasync function readResponse(\n response: Response,\n expectedBytes: number,\n signal?: AbortSignal,\n onProgress?: (progress: ModelDownloadProgress) => void\n): Promise<ArrayBuffer> {\n const totalBytes = contentLength(response, expectedBytes);\n if (!response.body) {\n const bytes = await response.arrayBuffer();\n throwIfAborted(signal);\n onProgress?.({ loadedBytes: bytes.byteLength, totalBytes });\n return bytes;\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let loadedBytes = 0;\n try {\n while (true) {\n throwIfAborted(signal);\n const chunk = await reader.read();\n if (chunk.done) break;\n loadedBytes += chunk.value.byteLength;\n if (loadedBytes > expectedBytes) {\n throw new PPDetectionError(\"MODEL_INTEGRITY_FAILED\", \"模型响应超过清单声明大小\", {\n expectedBytes,\n loadedBytes\n });\n }\n chunks.push(chunk.value);\n onProgress?.({ loadedBytes, totalBytes });\n }\n } catch (error) {\n try {\n await reader.cancel(error);\n } catch {\n // 保留原始读取或完整性错误。\n }\n throw error;\n } finally {\n reader.releaseLock();\n }\n const bytes = new Uint8Array(loadedBytes);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n onProgress?.({ loadedBytes, totalBytes });\n return bytes.buffer;\n}\n\nexport async function loadModelAsset(\n asset: ResolvedModelAsset,\n options: LoadModelAssetOptions = {}\n): Promise<ModelBytes> {\n throwIfAborted(options.signal);\n const fetcher = options.fetcher ?? globalThis.fetch?.bind(globalThis);\n if (!fetcher)\n throw new PPDetectionError(\"MODEL_DOWNLOAD_FAILED\", \"当前环境没有 fetch API\", {\n sourceKind: asset.source.kind\n });\n const downloadStarted = now();\n let response: Response;\n try {\n response = await fetcher(asset.source.downloadUrl, { signal: options.signal });\n } catch (error) {\n if (aborted(error, options.signal))\n throw new PPDetectionError(\"ABORTED\", \"模型下载已取消\", {}, { cause: error });\n throw new PPDetectionError(\n \"MODEL_DOWNLOAD_FAILED\",\n \"模型下载请求失败\",\n {\n sourceKind: asset.source.kind,\n downloadUrl: asset.source.downloadUrl\n },\n { cause: error }\n );\n }\n if (!response.ok) {\n throw new PPDetectionError(\"MODEL_DOWNLOAD_FAILED\", \"模型下载返回非成功状态\", {\n sourceKind: asset.source.kind,\n status: response.status,\n statusText: response.statusText\n });\n }\n validatePartialResponse(response, asset.source.bytes);\n let bytes: ArrayBuffer;\n try {\n bytes = await readResponse(response, asset.source.bytes, options.signal, options.onProgress);\n } catch (error) {\n if (error instanceof PPDetectionError) throw error;\n if (aborted(error, options.signal))\n throw new PPDetectionError(\"ABORTED\", \"模型下载已取消\", {}, { cause: error });\n throw new PPDetectionError(\n \"MODEL_DOWNLOAD_FAILED\",\n \"读取模型响应失败\",\n { sourceKind: asset.source.kind },\n { cause: error }\n );\n }\n const modelDownloadMs = now() - downloadStarted;\n const integrityStarted = now();\n await verifyModelIntegrity(bytes, asset.source, options.signal);\n return {\n bytes,\n timings: {\n modelDownloadMs,\n integrityMs: now() - integrityStarted\n }\n };\n}\n","import { PPDetectionError } from \"../errors\";\nimport type {\n DetectionModelVariant,\n ModelIdentity,\n ModelSource,\n ModelSourceKind,\n RuntimeDetectionManifest\n} from \"../types\";\n\nexport type ModelSourceSelection = ModelSourceKind | \"auto\";\n\nexport interface ResolveModelAssetSelection {\n readonly variantId?: string;\n readonly sourceKind?: ModelSourceSelection;\n}\n\nexport interface ResolvedModelAsset {\n readonly model: ModelIdentity;\n readonly variant: DetectionModelVariant;\n readonly source: ModelSource;\n}\n\nexport function resolveModelVariant(\n manifest: RuntimeDetectionManifest,\n variantId?: string\n): DetectionModelVariant {\n const variant =\n variantId === undefined\n ? manifest.variants[0]\n : manifest.variants.find((candidate) => candidate.id === variantId);\n if (!variant) {\n throw new PPDetectionError(\"MODEL_INCOMPATIBLE\", \"请求的模型变体不存在\", {\n variantId,\n availableVariants: manifest.variants.map((candidate) => candidate.id)\n });\n }\n return variant;\n}\n\nexport function resolveModelSources(\n variant: DetectionModelVariant,\n sourceKind: ModelSourceSelection = \"auto\"\n): readonly ModelSource[] {\n // auto 严格遵循 manifest 中的来源顺序;只有显式来源才限制为单一候选。\n if (sourceKind === \"auto\") return variant.sources;\n const source = variant.sources.find((candidate) => candidate.kind === sourceKind);\n if (!source) {\n throw new PPDetectionError(\"MODEL_SOURCE_UNAVAILABLE\", \"请求的模型来源不存在\", {\n sourceKind,\n availableSources: variant.sources.map((candidate) => candidate.kind)\n });\n }\n return [source];\n}\n\nexport function resolveModelAsset(\n selection: ResolveModelAssetSelection,\n manifest: RuntimeDetectionManifest\n): ResolvedModelAsset {\n const variant = resolveModelVariant(manifest, selection.variantId);\n const [source] = resolveModelSources(variant, selection.sourceKind);\n if (!source)\n throw new PPDetectionError(\"MODEL_SOURCE_UNAVAILABLE\", \"模型变体没有可用来源\", {\n variantId: variant.id\n });\n return { model: manifest.model, variant, source };\n}\n","import { IndexedDBModelCache } from \"../cache/indexeddb-cache\";\nimport { MemoryModelCache } from \"../cache/memory-cache\";\nimport { TieredModelCache, type CacheEstimate, type ModelCache } from \"../cache/model-cache\";\nimport { PPDetectionError } from \"../errors\";\nimport type {\n DetectionModelVariant,\n ModelIdentity,\n ModelSource,\n ModelSourceKind,\n RuntimeDetectionManifest,\n TimingBreakdown\n} from \"../types\";\nimport { loadModelAsset, type ModelDownloadProgress, type ModelFetcher } from \"./download\";\nimport { verifyModelIntegrity } from \"./integrity\";\nimport { parseDetectionManifest } from \"./manifest\";\nimport {\n resolveModelSources,\n resolveModelVariant,\n type ModelSourceSelection,\n type ResolvedModelAsset\n} from \"./source-resolver\";\n\nconst SDK_CACHE_NAMESPACE = \"web-sdk-pp-detection:cache-v1\";\n\nexport interface ModelManagerOptions {\n readonly fetcher?: ModelFetcher;\n readonly cache?: \"memory\" | \"indexeddb\" | false | ModelCache;\n}\n\nexport interface LoadManagedModelOptions {\n readonly manifest: unknown;\n readonly variantId?: string;\n readonly sourceKind?: ModelSourceSelection;\n readonly signal?: AbortSignal;\n readonly onProgress?: (progress: ModelDownloadProgress) => void;\n}\n\nexport interface ModelSourceFailure {\n readonly kind: ModelSourceKind;\n readonly code: string;\n readonly message: string;\n}\n\nexport interface LoadedManagedModel {\n readonly bytes: ArrayBuffer;\n readonly manifest: RuntimeDetectionManifest;\n readonly variant: DetectionModelVariant;\n readonly source: ModelSource;\n readonly cacheKey: string;\n readonly fromCache: boolean;\n readonly failures: readonly ModelSourceFailure[];\n readonly timings: TimingBreakdown;\n}\n\nfunction now(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction createCache(selection: ModelManagerOptions[\"cache\"]): ModelCache {\n if (selection && typeof selection === \"object\") return selection;\n const memory = new MemoryModelCache();\n if (selection === false || selection === \"memory\" || typeof globalThis.indexedDB === \"undefined\")\n return memory;\n return new TieredModelCache(memory, new IndexedDBModelCache());\n}\n\nfunction sourceFailure(source: ModelSource, error: unknown): ModelSourceFailure {\n return {\n kind: source.kind,\n code: error instanceof PPDetectionError ? error.code : \"MODEL_DOWNLOAD_FAILED\",\n message: error instanceof Error ? error.message : String(error)\n };\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) throw new PPDetectionError(\"ABORTED\", \"模型加载已取消\");\n}\n\nexport class ModelManager {\n private readonly fetcher?: ModelFetcher;\n private readonly cache: ModelCache;\n private readonly lifecycle = new AbortController();\n private readonly activeLoads = new Set<Promise<void>>();\n private currentKey?: string;\n private disposed = false;\n private disposePromise?: Promise<void>;\n\n constructor(options: ModelManagerOptions = {}) {\n this.fetcher = options.fetcher;\n this.cache = createCache(options.cache);\n }\n\n cacheKey(\n variant: DetectionModelVariant,\n source: ModelSource,\n model: ModelIdentity = { id: \"unknown\", version: \"unknown\" }\n ): string {\n return JSON.stringify([\n SDK_CACHE_NAMESPACE,\n model.id,\n model.version,\n variant.id,\n source.revision.toLowerCase(),\n source.sha256.toLowerCase()\n ]);\n }\n\n async load(options: LoadManagedModelOptions): Promise<LoadedManagedModel> {\n if (this.disposed) throw new PPDetectionError(\"DISPOSED\", \"模型管理器已释放\");\n const controller = new AbortController();\n const abort = () => controller.abort();\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n this.lifecycle.signal.addEventListener(\"abort\", abort, { once: true });\n if (options.signal?.aborted || this.lifecycle.signal.aborted) abort();\n const operation = this.loadActive({ ...options, signal: controller.signal });\n const tracked = operation.then(\n () => undefined,\n () => undefined\n );\n this.activeLoads.add(tracked);\n try {\n return await operation;\n } finally {\n options.signal?.removeEventListener(\"abort\", abort);\n this.lifecycle.signal.removeEventListener(\"abort\", abort);\n this.activeLoads.delete(tracked);\n }\n }\n\n private async loadActive(options: LoadManagedModelOptions): Promise<LoadedManagedModel> {\n throwIfAborted(options.signal);\n const manifest = parseDetectionManifest(options.manifest);\n const variant = resolveModelVariant(manifest, options.variantId);\n const sourceKind = options.sourceKind ?? \"auto\";\n const sources = resolveModelSources(variant, sourceKind);\n const failures: ModelSourceFailure[] = [];\n let lastError: unknown;\n\n for (const source of sources) {\n throwIfAborted(options.signal);\n const asset: ResolvedModelAsset = { model: manifest.model, variant, source };\n const cacheKey = this.cacheKey(variant, source, manifest.model);\n const cacheStarted = now();\n let cached: ArrayBuffer | undefined;\n try {\n cached = await this.cache.get(cacheKey);\n } catch (error) {\n if (error instanceof PPDetectionError && error.code === \"ABORTED\") throw error;\n throwIfAborted(options.signal);\n }\n throwIfAborted(options.signal);\n const modelCacheReadMs = now() - cacheStarted;\n if (cached) {\n const integrityStarted = now();\n try {\n await verifyModelIntegrity(cached, source, options.signal);\n this.currentKey = cacheKey;\n return {\n bytes: cached,\n manifest,\n variant,\n source,\n cacheKey,\n fromCache: true,\n failures,\n timings: { modelCacheReadMs, integrityMs: now() - integrityStarted }\n };\n } catch (error) {\n if (error instanceof PPDetectionError && error.code === \"ABORTED\") throw error;\n try {\n await this.cache.clearCurrent(cacheKey);\n } catch (clearError) {\n if (clearError instanceof PPDetectionError && clearError.code === \"ABORTED\")\n throw clearError;\n throwIfAborted(options.signal);\n }\n }\n }\n\n let loaded;\n try {\n loaded = await loadModelAsset(asset, {\n fetcher: this.fetcher,\n signal: options.signal,\n onProgress: options.onProgress\n });\n } catch (error) {\n if (error instanceof PPDetectionError && error.code === \"ABORTED\") throw error;\n lastError = error;\n failures.push(sourceFailure(source, error));\n if (sourceKind !== \"auto\") {\n if (error instanceof PPDetectionError && error.code === \"MODEL_INTEGRITY_FAILED\")\n throw error;\n throw new PPDetectionError(\n \"MODEL_SOURCE_UNAVAILABLE\",\n \"请求的模型来源不可用\",\n {\n sourceKind: source.kind,\n failures\n },\n { cause: error }\n );\n }\n continue;\n }\n throwIfAborted(options.signal);\n try {\n await this.cache.put(cacheKey, loaded.bytes);\n } catch {\n // 缓存是加速层;配额或事务失败不改变已校验模型的可用性。\n }\n throwIfAborted(options.signal);\n this.currentKey = cacheKey;\n return {\n bytes: loaded.bytes,\n manifest,\n variant,\n source,\n cacheKey,\n fromCache: false,\n failures,\n timings: { modelCacheReadMs, ...loaded.timings }\n };\n }\n\n throw new PPDetectionError(\n \"MODEL_SOURCE_UNAVAILABLE\",\n \"所有模型来源均不可用\",\n {\n variantId: variant.id,\n failures\n },\n { cause: lastError }\n );\n }\n\n estimate(): Promise<CacheEstimate> {\n return this.getCacheEstimate();\n }\n\n getCacheEstimate(): Promise<CacheEstimate> {\n return this.cache.estimate();\n }\n\n async clearCurrentModelCache(): Promise<void> {\n if (!this.currentKey) return;\n await this.cache.clearCurrent(this.currentKey);\n }\n\n async clearAllCache(): Promise<void> {\n await this.cache.clearAll();\n this.currentKey = undefined;\n }\n\n async dispose(): Promise<void> {\n if (this.disposePromise) return await this.disposePromise;\n this.disposed = true;\n this.lifecycle.abort();\n this.disposePromise = (async () => {\n await Promise.all([...this.activeLoads]);\n this.currentKey = undefined;\n await this.cache.close?.();\n })();\n await this.disposePromise;\n }\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { Backend } from \"../types\";\nimport type { ExecutionPlan } from \"./select-plan\";\n\nexport interface OrtInferenceSession {\n run(feeds: Record<string, unknown>, options?: Record<string, unknown>): Promise<unknown>;\n release?(): Promise<void> | void;\n}\n\nexport interface OrtModule {\n readonly env: { readonly wasm?: Record<string, unknown> };\n readonly InferenceSession: {\n create(model: ArrayBuffer, options: Record<string, unknown>): Promise<OrtInferenceSession>;\n };\n readonly Tensor?: new (type: string, data: unknown, dims: readonly number[]) => unknown;\n}\n\nexport interface OrtSessionHandle {\n readonly plan: ExecutionPlan;\n readonly sessionMs: number;\n run(\n feeds: Record<string, unknown>,\n options?: { readonly signal?: AbortSignal }\n ): Promise<unknown>;\n dispose(): Promise<void>;\n}\n\nexport interface CreateOrtSessionOptions {\n readonly ort?: OrtModule;\n readonly loadOrt?: () => Promise<OrtModule>;\n readonly wasmPaths?: string;\n readonly numThreads?: number;\n readonly sessionOptions?: Readonly<Record<string, unknown>>;\n}\n\nfunction now(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction mapError(error: unknown, phase: \"create\" | \"run\"): PPDetectionError {\n if (error instanceof PPDetectionError) return error;\n const message = error instanceof Error ? error.message : String(error);\n if (/abort|cancel/i.test(message))\n return new PPDetectionError(\"ABORTED\", \"推理已取消\", { phase }, { cause: error });\n if (/memory|out.of.memory|allocation/i.test(message))\n return new PPDetectionError(\"OUT_OF_MEMORY\", \"运行时内存不足\", { phase }, { cause: error });\n return new PPDetectionError(\n phase === \"create\" ? \"SESSION_CREATE_FAILED\" : \"INFERENCE_FAILED\",\n phase === \"create\" ? \"创建 ONNX Runtime 会话失败\" : \"ONNX Runtime 推理失败\",\n { phase },\n { cause: error }\n );\n}\n\nfunction normalizeFeeds(feeds: Record<string, unknown>, ort: OrtModule): Record<string, unknown> {\n const Tensor = ort.Tensor;\n if (!Tensor) return feeds;\n return Object.fromEntries(\n Object.entries(feeds).map(([name, value]) => {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"data\" in value &&\n \"dims\" in value &&\n (value as { data?: unknown }).data instanceof Float32Array\n ) {\n const input = value as { data: Float32Array; dims: readonly number[] };\n return [name, new Tensor(\"float32\", input.data, input.dims)];\n }\n return [name, value];\n })\n );\n}\n\nasync function loadOrt(backend: Backend): Promise<OrtModule> {\n return (await (backend === \"webgpu\"\n ? import(\"onnxruntime-web/webgpu\")\n : import(\"onnxruntime-web\"))) as unknown as OrtModule;\n}\n\nexport async function createOrtSession(\n modelBytes: ArrayBuffer,\n plan: ExecutionPlan,\n options: CreateOrtSessionOptions = {}\n): Promise<OrtSessionHandle> {\n try {\n const ort = options.ort ?? (await (options.loadOrt ?? loadOrt)(plan.actualBackend));\n if (options.wasmPaths && ort.env.wasm) ort.env.wasm.wasmPaths = options.wasmPaths;\n if (plan.actualBackend === \"wasm\" && ort.env.wasm && options.numThreads)\n ort.env.wasm.numThreads = options.numThreads;\n const sessionStarted = now();\n const session = await ort.InferenceSession.create(modelBytes, {\n ...options.sessionOptions,\n executionProviders: [plan.actualBackend]\n });\n const sessionMs = now() - sessionStarted;\n let disposed = false;\n let disposePromise: Promise<void> | undefined;\n const activeRuns = new Set<Promise<void>>();\n return {\n plan,\n sessionMs,\n async run(feeds, runOptions = {}) {\n if (disposed) throw new PPDetectionError(\"DISPOSED\", \"会话已释放\", { phase: \"run\" });\n if (runOptions.signal?.aborted)\n throw new PPDetectionError(\"ABORTED\", \"推理已取消\", { phase: \"run\" });\n const ortRunOptions: Record<string, unknown> = {};\n if (plan.actualBackend === \"wasm\") ortRunOptions.terminate = false;\n let cancelled = false;\n const onAbort = () => {\n cancelled = true;\n };\n runOptions.signal?.addEventListener(\"abort\", onAbort, { once: true });\n const operation = (async () => {\n try {\n const result = await Promise.resolve(\n session.run(normalizeFeeds(feeds, ort), ortRunOptions)\n );\n if (cancelled) throw new PPDetectionError(\"ABORTED\", \"推理已取消\", { phase: \"run\" });\n return result;\n } catch (error) {\n if (cancelled)\n throw new PPDetectionError(\n \"ABORTED\",\n \"推理已取消\",\n { phase: \"run\" },\n { cause: error }\n );\n throw mapError(error, \"run\");\n } finally {\n runOptions.signal?.removeEventListener(\"abort\", onAbort);\n }\n })();\n const tracked = operation.then(\n () => undefined,\n () => undefined\n );\n activeRuns.add(tracked);\n try {\n return await operation;\n } finally {\n activeRuns.delete(tracked);\n }\n },\n async dispose() {\n if (disposePromise) return await disposePromise;\n disposed = true;\n disposePromise = (async () => {\n await Promise.all([...activeRuns]);\n await session.release?.();\n })();\n await disposePromise;\n }\n };\n } catch (error) {\n throw mapError(error, \"create\");\n }\n}\n","import type { DetectionCapabilities } from \"../types\";\n\nconst WASM_SIMD_PROBE = new Uint8Array([\n 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x05, 0x01, 0x60, 0x00, 0x01, 0x7b, 0x03,\n 0x02, 0x01, 0x00, 0x0a, 0x0a, 0x01, 0x08, 0x00, 0xfd, 0x0f, 0x00, 0x00, 0x00, 0x0b\n]);\n\nfunction hasWasmSimd(scope: typeof globalThis): boolean {\n try {\n return typeof scope.WebAssembly !== \"undefined\" && scope.WebAssembly.validate(WASM_SIMD_PROBE);\n } catch {\n return false;\n }\n}\n\nfunction hasWasmThreads(scope: typeof globalThis): boolean {\n try {\n return (\n typeof scope.SharedArrayBuffer !== \"undefined\" &&\n typeof scope.Atomics !== \"undefined\" &&\n scope.crossOriginIsolated === true\n );\n } catch {\n return false;\n }\n}\n\nexport interface CapabilityProbeOptions {\n readonly global?: typeof globalThis;\n}\n\nexport function probeCapabilities(options: CapabilityProbeOptions = {}): DetectionCapabilities {\n const scope = options.global ?? globalThis;\n const navigatorValue = scope.navigator;\n return {\n webgpu: Boolean(navigatorValue && \"gpu\" in navigatorValue && navigatorValue.gpu),\n worker: typeof scope.Worker === \"function\",\n offscreenCanvas: typeof scope.OffscreenCanvas === \"function\",\n wasmSimd: hasWasmSimd(scope),\n wasmThreads: hasWasmThreads(scope)\n };\n}\n","import { PPDetectionError } from \"../errors\";\nimport type {\n Backend,\n BackendPreference,\n DetectionCapabilities,\n DetectionManifest,\n ExecutionMode,\n Precision,\n RuntimeInfo\n} from \"../types\";\n\nexport interface SelectExecutionOptions {\n readonly backend?: BackendPreference;\n readonly precision?: Precision;\n readonly executionMode?: ExecutionMode;\n readonly allowFallback?: boolean;\n}\n\nexport interface ExecutionCandidate {\n readonly variantId: string;\n readonly backend: Backend;\n readonly precision: Precision;\n readonly executionMode: ExecutionMode;\n}\n\nexport type ExecutionPlan = RuntimeInfo & {\n readonly variantId: string;\n readonly candidates: readonly ExecutionCandidate[];\n};\n\nfunction fail(\n code: \"CAPABILITY_UNSUPPORTED\" | \"MODEL_INCOMPATIBLE\",\n message: string,\n details: Record<string, unknown>\n): never {\n throw new PPDetectionError(code, message, details);\n}\n\nfunction candidatesForBackend(\n requested: BackendPreference,\n capabilities: DetectionCapabilities,\n allowFallback: boolean\n): Backend[] {\n if (requested === \"wasm\") return [\"wasm\"];\n if (requested === \"webgpu\")\n return capabilities.webgpu\n ? [\"webgpu\"]\n : fail(\"CAPABILITY_UNSUPPORTED\", \"请求的 webgpu 不可用\", { requestedBackend: requested });\n const available: Backend[] = [];\n if (capabilities.webgpu) available.push(\"webgpu\");\n available.push(\"wasm\");\n if (!allowFallback) return available.slice(0, 1);\n return available;\n}\n\nexport function selectExecutionPlan(\n options: SelectExecutionOptions,\n capabilities: DetectionCapabilities,\n manifest: DetectionManifest\n): ExecutionPlan {\n const requestedBackend = options.backend ?? \"auto\";\n const requestedPrecision = options.precision ?? \"fp32\";\n const executionMode = options.executionMode ?? \"main\";\n if (executionMode === \"worker\" && !capabilities.worker) {\n fail(\"CAPABILITY_UNSUPPORTED\", \"请求的 worker 不可用\", { executionMode });\n }\n const variant = manifest.variants?.find(\n (candidate) =>\n candidate.precision === requestedPrecision &&\n candidate.status !== \"labs\" &&\n candidate.status !== \"blocked\"\n );\n if (!variant) {\n fail(\"MODEL_INCOMPATIBLE\", `manifest 没有可用的 ${requestedPrecision} 稳定变体`, {\n requestedPrecision\n });\n }\n const candidates = candidatesForBackend(\n requestedBackend,\n capabilities,\n options.allowFallback === true\n ).filter((backend) => variant.backends.includes(backend));\n if (candidates.length === 0) {\n fail(\"CAPABILITY_UNSUPPORTED\", \"没有与模型变体匹配的可用后端\", {\n requestedBackend,\n requestedPrecision,\n availableBackends: variant.backends\n });\n }\n const actualBackend = candidates[0];\n return {\n variantId: variant.id,\n requestedBackend,\n actualBackend,\n requestedPrecision,\n actualPrecision: variant.precision,\n executionMode,\n candidates: candidates.map((backend) => ({\n variantId: variant.id,\n backend,\n precision: variant.precision,\n executionMode\n }))\n };\n}\n","import type { ExecutionPlan } from \"./select-plan\";\n\nexport interface WorkerOrtOptions {\n readonly wasmPaths?: string;\n readonly numThreads?: number;\n}\n\nexport type WorkerRequest =\n | {\n readonly id: string;\n readonly type: \"load\";\n readonly modelBytes: ArrayBuffer;\n readonly plan: ExecutionPlan;\n readonly ort?: WorkerOrtOptions;\n }\n | { readonly id: string; readonly type: \"run\"; readonly input: unknown }\n | { readonly id: string; readonly type: \"cancel\"; readonly requestId: string }\n | { readonly id: string; readonly type: \"dispose\" };\n\nexport type WorkerResponse =\n | {\n readonly id: string;\n readonly type: \"progress\";\n readonly phase: string;\n readonly status: string;\n readonly loadedBytes?: number;\n readonly totalBytes?: number;\n }\n | { readonly id: string; readonly type: \"result\"; readonly result: unknown }\n | {\n readonly id: string;\n readonly type: \"error\";\n readonly error: {\n readonly code: string;\n readonly message: string;\n readonly details?: Record<string, unknown>;\n };\n };\n\nexport function transferableValues(value: unknown): Transferable[] {\n const transferables = new Set<ArrayBuffer>();\n const seen = new Set<object>();\n const visit = (candidate: unknown): void => {\n if (!candidate || typeof candidate !== \"object\") return;\n if (seen.has(candidate)) return;\n seen.add(candidate);\n if (candidate instanceof ArrayBuffer) {\n transferables.add(candidate);\n return;\n }\n if (ArrayBuffer.isView(candidate)) {\n if (candidate.buffer instanceof ArrayBuffer) transferables.add(candidate.buffer);\n return;\n }\n for (const child of Object.values(candidate)) visit(child);\n };\n visit(value);\n return [...transferables];\n}\n","import { PPDetectionError } from \"../errors\";\nimport type { PPDetectionErrorCode } from \"../errors\";\nimport type { ExecutionPlan } from \"./select-plan\";\nimport { transferableValues, type WorkerOrtOptions, type WorkerResponse } from \"./protocol\";\n\ninterface WorkerLike {\n onmessage: ((event: MessageEvent<WorkerResponse>) => void) | null;\n onerror: ((event: ErrorEvent) => void) | null;\n postMessage(message: unknown, transfer: Transferable[]): void;\n terminate(): void;\n}\n\ninterface PendingRequest {\n readonly resolve: (value: unknown) => void;\n readonly reject: (reason: unknown) => void;\n readonly cleanup: () => void;\n readonly onProgress?: (progress: WorkerProgress) => void;\n}\n\nexport interface WorkerProgress {\n readonly phase: string;\n readonly status: string;\n readonly loadedBytes?: number;\n readonly totalBytes?: number;\n}\n\nexport interface WorkerRequestOptions {\n readonly signal?: AbortSignal;\n readonly onProgress?: (progress: WorkerProgress) => void;\n}\n\nexport interface WorkerLoadOptions {\n readonly onProgress?: (progress: WorkerProgress) => void;\n readonly ort?: WorkerOrtOptions;\n}\n\nexport class WorkerBridge {\n private readonly pending = new Map<string, PendingRequest>();\n private state: \"active\" | \"disposing\" | \"disposed\" = \"active\";\n private disposePromise?: Promise<void>;\n private terminated = false;\n private sequence = 0;\n\n constructor(private readonly worker: WorkerLike) {\n worker.onmessage = (event) => this.handleResponse(event.data);\n worker.onerror = (event) =>\n this.shutdown(\n new PPDetectionError(\"INFERENCE_FAILED\", event.message || \"Worker 执行失败\", {\n source: \"worker\"\n })\n );\n }\n\n load(\n modelBytes: ArrayBuffer,\n plan: ExecutionPlan,\n options: WorkerLoadOptions = {}\n ): Promise<unknown> {\n return this.request(\n { type: \"load\", modelBytes, plan, ...(options.ort ? { ort: options.ort } : {}) },\n [modelBytes],\n options\n );\n }\n\n run(input: unknown, options: WorkerRequestOptions = {}): Promise<unknown> {\n return this.request({ type: \"run\", input }, transferableValues(input), {\n signal: options.signal,\n onProgress: options.onProgress\n });\n }\n\n dispose(): Promise<void> {\n if (this.disposePromise) return this.disposePromise;\n if (this.state === \"disposed\") return Promise.resolve();\n this.state = \"disposing\";\n this.disposePromise = this.request({ type: \"dispose\" }, [], { allowDuringDispose: true })\n .then(() => undefined)\n .finally(() => this.shutdown(new PPDetectionError(\"DISPOSED\", \"Worker 已释放\")));\n return this.disposePromise;\n }\n\n private request(\n payload: Record<string, unknown>,\n transfer: Transferable[],\n options: WorkerRequestOptions & { readonly allowDuringDispose?: boolean } = {}\n ): Promise<unknown> {\n if (this.state !== \"active\" && !(options.allowDuringDispose && this.state === \"disposing\")) {\n return Promise.reject(new PPDetectionError(\"DISPOSED\", \"Worker 已释放\"));\n }\n if (options.signal?.aborted)\n return Promise.reject(new PPDetectionError(\"ABORTED\", \"Worker 推理已取消\"));\n const id = String(++this.sequence);\n return new Promise((resolve, reject) => {\n let posted = false;\n const cleanup = () => options.signal?.removeEventListener(\"abort\", onAbort);\n const onAbort = () => {\n if (!this.pending.delete(id)) return;\n cleanup();\n if (posted && payload.type === \"run\") this.sendCancel(id);\n reject(new PPDetectionError(\"ABORTED\", \"Worker 推理已取消\"));\n };\n this.pending.set(id, { resolve, reject, cleanup, onProgress: options.onProgress });\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted) {\n onAbort();\n return;\n }\n try {\n this.worker.postMessage({ id, ...payload }, transfer);\n posted = true;\n } catch (error) {\n this.pending.delete(id);\n cleanup();\n reject(\n new PPDetectionError(\n \"INFERENCE_FAILED\",\n \"向 Worker 发送消息失败\",\n { requestType: payload.type },\n { cause: error }\n )\n );\n }\n });\n }\n\n private sendCancel(requestId: string): void {\n try {\n this.worker.postMessage({ id: String(++this.sequence), type: \"cancel\", requestId }, []);\n } catch {\n // 原请求已在调用方取消;失效 Worker 将由 onerror 或 dispose 收敛。\n }\n }\n\n private handleResponse(response: WorkerResponse): void {\n if (response.type === \"progress\") {\n this.pending.get(response.id)?.onProgress?.({\n phase: response.phase,\n status: response.status,\n ...(response.loadedBytes === undefined ? {} : { loadedBytes: response.loadedBytes }),\n ...(response.totalBytes === undefined ? {} : { totalBytes: response.totalBytes })\n });\n return;\n }\n const request = this.pending.get(response.id);\n if (!request) return;\n this.pending.delete(response.id);\n request.cleanup();\n if (response.type === \"result\") request.resolve(response.result);\n else\n request.reject(\n new PPDetectionError(\n response.error.code as PPDetectionErrorCode,\n response.error.message,\n response.error.details ?? {}\n )\n );\n }\n\n private failAll(error: PPDetectionError): void {\n for (const request of this.pending.values()) {\n request.cleanup();\n request.reject(error);\n }\n this.pending.clear();\n }\n\n private shutdown(error: PPDetectionError): void {\n this.state = \"disposed\";\n if (!this.terminated) {\n this.terminated = true;\n this.worker.terminate();\n }\n this.failAll(error);\n }\n}\n","import { PPDetectionError } from \"./errors\";\nimport { PPDetectionDetectorImplementation, type DetectionExecutor } from \"./detection/detector\";\nimport { parseDetectionManifest } from \"./model/manifest\";\nimport { adaptModelManifest, parseModelManifest } from \"./model/public-manifest\";\nimport { ModelManager } from \"./model/model-manager\";\nimport { verifyModelIntegrity } from \"./model/integrity\";\nimport { resolveModelSources } from \"./model/source-resolver\";\nimport { createOrtSession, type OrtModule } from \"./runtime/ort-session\";\nimport { probeCapabilities } from \"./runtime/capabilities\";\nimport { selectExecutionPlan } from \"./runtime/select-plan\";\nimport { WorkerBridge } from \"./runtime/worker-bridge\";\nimport type { ExecutionPlan } from \"./runtime/select-plan\";\nimport type {\n Backend,\n CreatePPDetectionOptions,\n DetectionManifest,\n PPDetectionModel,\n ModelSource,\n RuntimeDetectionManifest\n} from \"./types\";\n\ndeclare global {\n var __PPDETECTION_SCRIPT_URL__: string | undefined;\n}\n\nexport const CURRENT_SDK_VERSION = \"0.1.0\";\n\nexport type {\n Backend,\n BackendPreference,\n CreatePPDetectionOptions,\n Detection,\n DetectionBox,\n DetectionCapabilities,\n DetectionManifest,\n DetectionModelVariant,\n DetectionPoint,\n DetectionPostprocessing,\n DetectionPreprocessing,\n DetectionTimings,\n DetectOptions,\n ExecutionMode,\n ModelBackend,\n ModelInfo,\n ModelManifest,\n ModelManifestMetadata,\n ModelManifestSource,\n ModelManifestVariant,\n ModelPrecision,\n ModelSource,\n ModelSourceKind,\n ModelVariant,\n PPDetectionFallback,\n PPDetectionLoadTimings,\n PPDetectionModel,\n PPDetectionModelInfo,\n PPDetectionModelSourceInfo,\n PPDetectionProgressEvent,\n PPDetectionResult,\n PPDetectionRuntimeInfo,\n Precision,\n RuntimeDetectionManifest,\n RuntimeInfo,\n TensorContract,\n TimingBreakdown\n} from \"./types\";\nexport type { ImageSource, ImageRaster, DecodedImage } from \"./input/image-source\";\nexport type { PPDetectionDetector } from \"./detection/detector\";\nexport { PPDetectionError } from \"./errors\";\nexport type { PPDetectionErrorCode } from \"./errors\";\nexport { probeCapabilities } from \"./runtime/capabilities\";\nexport type { CapabilityProbeOptions } from \"./runtime/capabilities\";\nexport function probePPDetectionCapabilities(\n options: import(\"./runtime/capabilities\").CapabilityProbeOptions = {}\n) {\n return probeCapabilities(options);\n}\nexport { selectExecutionPlan } from \"./runtime/select-plan\";\nexport type {\n ExecutionCandidate,\n ExecutionPlan,\n SelectExecutionOptions\n} from \"./runtime/select-plan\";\nexport { createOrtSession } from \"./runtime/ort-session\";\nexport type { CreateOrtSessionOptions, OrtModule, OrtSessionHandle } from \"./runtime/ort-session\";\nexport type { WorkerOrtOptions, WorkerRequest, WorkerResponse } from \"./runtime/protocol\";\nexport { parseDetectionManifest } from \"./model/manifest\";\nexport { parseModelManifest, adaptModelManifest } from \"./model/public-manifest\";\nexport { resolveModelAsset } from \"./model/source-resolver\";\nexport type {\n ModelSourceSelection,\n ResolveModelAssetSelection,\n ResolvedModelAsset\n} from \"./model/source-resolver\";\nexport { loadModelAsset } from \"./model/download\";\nexport type {\n LoadModelAssetOptions,\n ModelBytes,\n ModelDownloadProgress,\n ModelFetcher\n} from \"./model/download\";\nexport { ModelManager } from \"./model/model-manager\";\nexport type {\n LoadedManagedModel,\n LoadManagedModelOptions,\n ModelManagerOptions,\n ModelSourceFailure\n} from \"./model/model-manager\";\nexport { MemoryModelCache } from \"./cache/memory-cache\";\nexport { IndexedDBModelCache } from \"./cache/indexeddb-cache\";\nexport type { IndexedDBModelCacheOptions } from \"./cache/indexeddb-cache\";\nexport type { CacheEstimate, ModelCache } from \"./cache/model-cache\";\n\nfunction now(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nfunction isRuntimeManifest(value: unknown): value is RuntimeDetectionManifest {\n if (typeof value !== \"object\" || value === null || !(\"postprocessing\" in value)) return false;\n const variants = (value as { variants?: unknown }).variants;\n return (\n Array.isArray(variants) &&\n (variants[0] as { sources?: unknown } | undefined)?.sources !== undefined\n );\n}\n\nfunction isModelData(value: PPDetectionModel): value is Readonly<{\n data: ArrayBuffer;\n manifest: RuntimeDetectionManifest | import(\"./types\").ModelManifest;\n}> {\n return typeof value === \"object\" && value !== null && \"data\" in value && \"manifest\" in value;\n}\n\nasync function fetchJson(url: string, signal?: AbortSignal): Promise<unknown> {\n let response: Response;\n try {\n response = await fetch(url, { signal });\n } catch (error) {\n if (\n signal?.aborted ||\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error && error.name === \"AbortError\")\n ) {\n throw new PPDetectionError(\"ABORTED\", \"模型清单下载已取消\", { url }, { cause: error });\n }\n throw new PPDetectionError(\n \"MODEL_SOURCE_UNAVAILABLE\",\n \"模型清单下载失败\",\n { url },\n { cause: error }\n );\n }\n if (signal?.aborted) throw new PPDetectionError(\"ABORTED\", \"模型清单下载已取消\", { url });\n if (!response.ok)\n throw new PPDetectionError(\"MODEL_SOURCE_UNAVAILABLE\", \"模型清单返回非成功状态\", {\n url,\n status: response.status\n });\n try {\n const value: unknown = await response.json();\n if (signal?.aborted) throw new PPDetectionError(\"ABORTED\", \"模型清单下载已取消\", { url });\n return value;\n } catch (error) {\n if (error instanceof PPDetectionError) throw error;\n if (\n signal?.aborted ||\n (error instanceof DOMException && error.name === \"AbortError\") ||\n (error instanceof Error && error.name === \"AbortError\")\n ) {\n throw new PPDetectionError(\"ABORTED\", \"模型清单下载已取消\", { url }, { cause: error });\n }\n throw new PPDetectionError(\n \"INVALID_MANIFEST\",\n \"模型清单 JSON 无法解析\",\n { url },\n { cause: error }\n );\n }\n}\n\nfunction asRuntimeManifest(value: unknown): RuntimeDetectionManifest {\n return isRuntimeManifest(value)\n ? parseDetectionManifest(value)\n : adaptModelManifest(parseModelManifest(value));\n}\n\nfunction simpleManifest(runtime: RuntimeDetectionManifest): DetectionManifest {\n return {\n id: runtime.model.id,\n version: runtime.model.version,\n variants: runtime.variants.map((variant) => ({\n id: variant.id,\n precision: variant.precision,\n quantization: variant.quantization,\n backends: variant.backends,\n status: variant.status\n }))\n };\n}\n\nfunction modelInfo(runtime: RuntimeDetectionManifest, variantId: string, source: ModelSource) {\n const variant = runtime.variants.find((candidate) => candidate.id === variantId);\n if (!variant)\n throw new PPDetectionError(\"MODEL_INCOMPATIBLE\", \"请求的模型变体不存在\", { variantId });\n return {\n id: runtime.model.id,\n version: runtime.model.version,\n variantId: variant.id,\n precision: variant.precision,\n bytes: variant.bytes,\n parameterCount: variant.parameterCount,\n opset: variant.opset,\n source: {\n kind: source.kind,\n revision: source.revision,\n bytes: source.bytes,\n sha256: source.sha256\n }\n };\n}\n\nfunction workerUrl(): URL {\n const scriptUrl = globalThis.__PPDETECTION_SCRIPT_URL__;\n if (scriptUrl) return new URL(\"./inference.worker.js\", scriptUrl);\n return new URL(\"./inference.worker.js\", import.meta.url);\n}\n\nexport async function createPPDetection(\n options: CreatePPDetectionOptions = {}\n): Promise<PPDetectionDetectorImplementation> {\n if (options.model === undefined && options.manifest === undefined)\n throw new PPDetectionError(\"INVALID_MANIFEST\", \"创建 PPDetection 实例需要 manifest 或 model\");\n const capabilities = probeCapabilities();\n options.onProgress?.({ phase: \"capabilities\", status: \"complete\" });\n const requestedModel = options.model ?? options.manifest!;\n let runtimeManifest: RuntimeDetectionManifest;\n let memoryData: ArrayBuffer | undefined;\n options.onProgress?.({ phase: \"manifest\", status: \"start\" });\n if (typeof requestedModel === \"string\") {\n runtimeManifest = asRuntimeManifest(await fetchJson(requestedModel, options.signal));\n } else if (isModelData(requestedModel)) {\n runtimeManifest = asRuntimeManifest(requestedModel.manifest);\n memoryData = requestedModel.data;\n } else {\n runtimeManifest = asRuntimeManifest(requestedModel);\n }\n options.onProgress?.({ phase: \"manifest\", status: \"complete\" });\n\n const plan = selectExecutionPlan(\n {\n backend: options.backend,\n precision: options.precision === \"auto\" ? undefined : options.precision,\n executionMode: options.executionMode,\n allowFallback: options.allowFallback\n },\n capabilities,\n simpleManifest(runtimeManifest)\n );\n const modelManager = new ModelManager({\n cache: options.cache === false ? false : options.cache === \"memory\" ? \"memory\" : undefined\n });\n let executor: DetectionExecutor | undefined;\n let activeBridge: WorkerBridge | undefined;\n try {\n const loadStartedAt = now();\n options.onProgress?.({ phase: \"model\", status: \"start\" });\n let modelBytes: ArrayBuffer;\n let actualSource: ModelSource;\n let variant = runtimeManifest.variants.find((candidate) => candidate.id === plan.variantId)!;\n let loadTimings: {\n modelDownloadMs?: number;\n modelCacheReadMs?: number;\n integrityMs?: number;\n sessionMs: number;\n totalMs: number;\n };\n if (memoryData !== undefined) {\n const [source] = resolveModelSources(variant, options.source ?? \"auto\");\n if (!source)\n throw new PPDetectionError(\"MODEL_SOURCE_UNAVAILABLE\", \"模型变体没有可用来源\", {\n variantId: variant.id\n });\n await verifyModelIntegrity(memoryData, source, options.signal);\n modelBytes = memoryData;\n actualSource = source;\n loadTimings = { sessionMs: 0, totalMs: now() - loadStartedAt, integrityMs: 0 };\n } else {\n const loaded = await modelManager.load({\n manifest: runtimeManifest,\n variantId: plan.variantId,\n sourceKind: options.source ?? \"auto\",\n signal: options.signal,\n onProgress: (progress) =>\n options.onProgress?.({ phase: \"model\", status: \"progress\", ...progress })\n });\n modelBytes = loaded.bytes;\n variant = loaded.variant;\n actualSource = loaded.source;\n loadTimings = { ...loaded.timings, sessionMs: 0, totalMs: now() - loadStartedAt };\n }\n options.onProgress?.({ phase: \"model\", status: \"complete\" });\n const fallbacks: Array<{\n cause: unknown;\n code: string;\n message: string;\n precision: typeof plan.actualPrecision;\n provider: Backend;\n stage: string;\n variantId: string;\n }> = [];\n let selectedPlan: ExecutionPlan = plan;\n let sessionMs = 0;\n for (const candidate of plan.candidates) {\n const candidatePlan: ExecutionPlan = {\n ...plan,\n variantId: candidate.variantId,\n actualBackend: candidate.backend,\n actualPrecision: candidate.precision,\n executionMode: candidate.executionMode,\n candidates: [candidate]\n };\n options.onProgress?.({ phase: \"session\", status: \"start\" });\n try {\n if (candidate.executionMode === \"worker\") {\n if (typeof Worker !== \"function\")\n throw new PPDetectionError(\"CAPABILITY_UNSUPPORTED\", \"当前环境不支持 Worker\");\n const worker = new Worker(workerUrl(), {\n type: \"module\"\n });\n const bridge = new WorkerBridge(worker);\n activeBridge = bridge;\n const workerModelBytes = modelBytes.slice(0);\n await bridge.load(workerModelBytes, candidatePlan, {\n onProgress: (event) =>\n options.onProgress?.({\n phase: \"session\",\n status: event.status as \"start\" | \"progress\" | \"complete\"\n }),\n ort: {\n wasmPaths: options.ort?.wasm?.paths,\n numThreads: options.ort?.wasm?.numThreads\n }\n });\n executor = {\n run(input, signal) {\n return bridge.run(\n { [input.inputName]: { data: input.data, dims: input.dims } },\n { signal }\n );\n },\n dispose: () => bridge.dispose()\n };\n activeBridge = undefined;\n } else {\n const session = await createOrtSession(modelBytes, candidatePlan, {\n ort: options.ort?.module as OrtModule | undefined,\n wasmPaths: options.ort?.wasm?.paths,\n numThreads: options.ort?.wasm?.numThreads\n });\n sessionMs = session.sessionMs;\n executor = {\n run(input, signal) {\n return session.run(\n { [input.inputName]: { data: input.data, dims: input.dims } },\n { signal }\n );\n },\n dispose: () => session.dispose()\n };\n }\n selectedPlan = candidatePlan;\n options.onProgress?.({ phase: \"session\", status: \"complete\" });\n break;\n } catch (error) {\n const mapped =\n error instanceof PPDetectionError\n ? error\n : new PPDetectionError(\"SESSION_CREATE_FAILED\", String(error));\n const hasNext = options.allowFallback === true && candidate !== plan.candidates.at(-1);\n try {\n await executor?.dispose();\n } catch {\n // 清理失败不覆盖原始 Session 错误。\n }\n executor = undefined;\n try {\n await activeBridge?.dispose();\n } catch {\n // 清理失败不覆盖原始 Worker 错误。\n }\n activeBridge = undefined;\n if (!hasNext) {\n throw mapped;\n }\n const fallback = {\n cause: mapped.cause ?? mapped,\n code: mapped.code,\n message: mapped.message,\n precision: candidate.precision,\n provider: candidate.backend,\n stage: \"session\",\n variantId: candidate.variantId\n };\n fallbacks.push(fallback);\n options.onProgress?.({ phase: \"fallback\", status: \"complete\", fallback });\n }\n }\n if (!executor) throw new PPDetectionError(\"SESSION_CREATE_FAILED\", \"无法创建检测 Session\");\n const loadedExecutor = executor;\n loadTimings = { ...loadTimings, sessionMs, totalMs: now() - loadStartedAt };\n const detector = new PPDetectionDetectorImplementation({\n capabilities,\n manifest: runtimeManifest,\n model: modelInfo(runtimeManifest, variant.id, actualSource),\n runtime: {\n requestedBackend: options.backend ?? \"auto\",\n backend: selectedPlan.actualBackend,\n precision: selectedPlan.actualPrecision,\n mode: selectedPlan.executionMode,\n fallbacks,\n capabilities\n },\n loadTimings,\n loadExecutor: () => Promise.resolve(loadedExecutor),\n onProgress: options.onProgress,\n clearCurrentModelCache: () => modelManager.clearCurrentModelCache(),\n clearAllCache: () => modelManager.clearAllCache(),\n getCacheEstimate: () => modelManager.getCacheEstimate(),\n disposeResources: () => modelManager.dispose()\n });\n await detector.load({ signal: options.signal });\n options.onProgress?.({ phase: \"ready\", status: \"complete\" });\n return detector;\n } catch (error) {\n try {\n await executor?.dispose();\n } catch {\n // 清理失败不覆盖初始化错误。\n }\n try {\n await activeBridge?.dispose();\n } catch {\n // 清理失败不覆盖初始化错误。\n }\n try {\n await modelManager.dispose();\n } catch {\n // 清理失败不覆盖初始化错误。\n }\n throw error;\n }\n}\n\nexport async function clearModelCache(): Promise<void> {\n const manager = new ModelManager();\n await manager.clearAllCache();\n await manager.dispose();\n}\n"]}