@opaquecash/stellar 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.
- package/README.md +119 -0
- package/dist/crypto/index.cjs +2854 -0
- package/dist/crypto/index.cjs.map +1 -0
- package/dist/crypto/index.d.cts +345 -0
- package/dist/crypto/index.d.ts +345 -0
- package/dist/crypto/index.js +2784 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/index-Cy3ABCai.d.cts +520 -0
- package/dist/index-Dqr8RiOd.d.ts +520 -0
- package/dist/index.cjs +5146 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +822 -0
- package/dist/index.d.ts +822 -0
- package/dist/index.js +4989 -0
- package/dist/index.js.map +1 -0
- package/dist/notes-CTR_oi8Y.d.cts +56 -0
- package/dist/notes-CTR_oi8Y.d.ts +56 -0
- package/dist/relayer-protocol/index.cjs +455 -0
- package/dist/relayer-protocol/index.cjs.map +1 -0
- package/dist/relayer-protocol/index.d.cts +3 -0
- package/dist/relayer-protocol/index.d.ts +3 -0
- package/dist/relayer-protocol/index.js +431 -0
- package/dist/relayer-protocol/index.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../src/crypto/bytes.ts","../src/crypto/amount.ts","../src/crypto/dksap.ts","../src/crypto/scan.ts","../src/crypto/notes.ts","../src/crypto/schema-codec.ts","../src/crypto/backup.ts","../src/crypto/payment-link.ts","../src/crypto/memo.ts","../src/errors/index.ts","../src/config/networks.ts","../src/config/addresses.ts","../src/config/index.ts","../src/signer/index.ts","../src/logger/index.ts","../src/telemetry/index.ts","../src/rpc/scval.ts","../src/rpc/diagnostics.ts","../src/rpc/client.ts","../src/contracts/payments.ts","../src/contracts/attestations.ts","../src/contracts/verifier.ts","../src/contracts/pool.ts","../src/contracts/relayer.ts","../src/storage/index.ts","../src/artifacts/index.ts","../src/prove/serialize.ts","../src/prove/reputation.ts","../src/prove/pool.ts","../src/relayer-protocol/bytes.ts","../src/relayer-protocol/payload.ts","../src/relayer-protocol/box.ts","../src/relayer-protocol/messages.ts","../src/relayer-protocol/gateway.ts","../src/services/schemas.ts","../src/services/payments.ts","../src/services/reputation.ts","../src/services/pool.ts","../src/services/relayer.ts","../src/client/OpaqueClient.ts","../src/index.ts"],"names":["len","i","len2","Buffer","base64ToBytes","byteLength","secp256k1","hkdf","sha256","keccak_256","Keypair","buildPoseidon","StrKey","xdr","TransactionBuilder","Address","nativeToScVal","scValToNative","rpc","Horizon","Operation","Asset","BASE_FEE","Contract","loadSnarkjs","hexToBytes","bytesToHex","bytesToBase64","concatBytes","pair"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,iBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,iCAAA,CAAA,OAAA,EAAA;AAEA,IAAA,OAAA,CAAQ,UAAA,GAAa,UAAA;AACrB,IAAA,OAAA,CAAQ,WAAA,GAAc,WAAA;AACtB,IAAA,OAAA,CAAQ,aAAA,GAAgB,aAAA;AAExB,IAAA,IAAI,SAAS,EAAC;AACd,IAAA,IAAI,YAAY,EAAC;AACjB,IAAA,IAAI,GAAA,GAAM,OAAO,UAAA,KAAe,WAAA,GAAc,UAAA,GAAa,KAAA;AAE3D,IAAA,IAAI,IAAA,GAAO,kEAAA;AACX,IAAA,KAAS,CAAA,GAAI,GAAG,GAAA,GAAM,IAAA,CAAK,QAAQ,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA;AAClB,MAAA,SAAA,CAAU,IAAA,CAAK,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,CAAA;AAAA,IAClC;AAHS,IAAA,IAAA,CAAA;AAAO,IAAA,IAAA,GAAA;AAOhB,IAAA,SAAA,CAAU,GAAA,CAAI,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,EAAA;AAC/B,IAAA,SAAA,CAAU,GAAA,CAAI,UAAA,CAAW,CAAC,CAAC,CAAA,GAAI,EAAA;AAE/B,IAAA,SAAS,QAAS,GAAA,EAAK;AACrB,MAAA,IAAIA,OAAM,GAAA,CAAI,MAAA;AAEd,MAAA,IAAIA,IAAAA,GAAM,IAAI,CAAA,EAAG;AACf,QAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,MAClE;AAIA,MAAA,IAAI,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC9B,MAAA,IAAI,QAAA,KAAa,IAAI,QAAA,GAAWA,IAAAA;AAEhC,MAAA,IAAI,eAAA,GAAkB,QAAA,KAAaA,IAAAA,GAC/B,CAAA,GACA,IAAK,QAAA,GAAW,CAAA;AAEpB,MAAA,OAAO,CAAC,UAAU,eAAe,CAAA;AAAA,IACnC;AAGA,IAAA,SAAS,WAAY,GAAA,EAAK;AACxB,MAAA,IAAI,IAAA,GAAO,QAAQ,GAAG,CAAA;AACtB,MAAA,IAAI,QAAA,GAAW,KAAK,CAAC,CAAA;AACrB,MAAA,IAAI,eAAA,GAAkB,KAAK,CAAC,CAAA;AAC5B,MAAA,OAAA,CAAS,QAAA,GAAW,eAAA,IAAmB,CAAA,GAAI,CAAA,GAAK,eAAA;AAAA,IAClD;AAEA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,QAAA,EAAU,eAAA,EAAiB;AACpD,MAAA,OAAA,CAAS,QAAA,GAAW,eAAA,IAAmB,CAAA,GAAI,CAAA,GAAK,eAAA;AAAA,IAClD;AAEA,IAAA,SAAS,YAAa,GAAA,EAAK;AACzB,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,IAAA,GAAO,QAAQ,GAAG,CAAA;AACtB,MAAA,IAAI,QAAA,GAAW,KAAK,CAAC,CAAA;AACrB,MAAA,IAAI,eAAA,GAAkB,KAAK,CAAC,CAAA;AAE5B,MAAA,IAAI,MAAM,IAAI,GAAA,CAAI,YAAY,GAAA,EAAK,QAAA,EAAU,eAAe,CAAC,CAAA;AAE7D,MAAA,IAAI,OAAA,GAAU,CAAA;AAGd,MAAA,IAAIA,IAAAA,GAAM,eAAA,GAAkB,CAAA,GACxB,QAAA,GAAW,CAAA,GACX,QAAA;AAEJ,MAAA,IAAIC,EAAAA;AACJ,MAAA,KAAKA,EAAAA,GAAI,CAAA,EAAGA,EAAAA,GAAID,IAAAA,EAAKC,MAAK,CAAA,EAAG;AAC3B,QAAA,GAAA,GACG,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAC,CAAC,CAAA,IAAK,EAAA,GAChC,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAAA,GAAI,CAAC,CAAC,CAAA,IAAK,EAAA,GACpC,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAAA,GAAI,CAAC,CAAC,CAAA,IAAK,CAAA,GACrC,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAAA,GAAI,CAAC,CAAC,CAAA;AACjC,QAAA,GAAA,CAAI,OAAA,EAAS,CAAA,GAAK,GAAA,IAAO,EAAA,GAAM,GAAA;AAC/B,QAAA,GAAA,CAAI,OAAA,EAAS,CAAA,GAAK,GAAA,IAAO,CAAA,GAAK,GAAA;AAC9B,QAAA,GAAA,CAAI,OAAA,EAAS,IAAI,GAAA,GAAM,GAAA;AAAA,MACzB;AAEA,MAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,QAAA,GAAA,GACG,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAC,CAAC,CAAA,IAAK,CAAA,GAChC,SAAA,CAAU,GAAA,CAAI,UAAA,CAAWA,EAAAA,GAAI,CAAC,CAAC,CAAA,IAAK,CAAA;AACvC,QAAA,GAAA,CAAI,OAAA,EAAS,IAAI,GAAA,GAAM,GAAA;AAAA,MACzB;AAEA,MAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,QAAA,GAAA,GACG,SAAA,CAAU,IAAI,UAAA,CAAWA,EAAC,CAAC,CAAA,IAAK,EAAA,GAChC,UAAU,GAAA,CAAI,UAAA,CAAWA,KAAI,CAAC,CAAC,KAAK,CAAA,GACpC,SAAA,CAAU,IAAI,UAAA,CAAWA,EAAAA,GAAI,CAAC,CAAC,CAAA,IAAK,CAAA;AACvC,QAAA,GAAA,CAAI,OAAA,EAAS,CAAA,GAAK,GAAA,IAAO,CAAA,GAAK,GAAA;AAC9B,QAAA,GAAA,CAAI,OAAA,EAAS,IAAI,GAAA,GAAM,GAAA;AAAA,MACzB;AAEA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,gBAAiB,GAAA,EAAK;AAC7B,MAAA,OAAO,OAAO,GAAA,IAAO,EAAA,GAAK,EAAI,CAAA,GAC5B,OAAO,GAAA,IAAO,EAAA,GAAK,EAAI,CAAA,GACvB,OAAO,GAAA,IAAO,CAAA,GAAI,EAAI,CAAA,GACtB,MAAA,CAAO,MAAM,EAAI,CAAA;AAAA,IACrB;AAEA,IAAA,SAAS,WAAA,CAAa,KAAA,EAAO,KAAA,EAAO,GAAA,EAAK;AACvC,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,SAAS,EAAC;AACd,MAAA,KAAA,IAASA,EAAAA,GAAI,KAAA,EAAOA,EAAAA,GAAI,GAAA,EAAKA,MAAK,CAAA,EAAG;AACnC,QAAA,GAAA,GAAA,CACI,KAAA,CAAMA,EAAC,CAAA,IAAK,EAAA,GAAM,aAClB,KAAA,CAAMA,EAAAA,GAAI,CAAC,CAAA,IAAK,CAAA,GAAK,KAAA,CAAA,IACtB,KAAA,CAAMA,EAAAA,GAAI,CAAC,CAAA,GAAI,GAAA,CAAA;AAClB,QAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAC,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,IACvB;AAEA,IAAA,SAAS,cAAe,KAAA,EAAO;AAC7B,MAAA,IAAI,GAAA;AACJ,MAAA,IAAID,OAAM,KAAA,CAAM,MAAA;AAChB,MAAA,IAAI,aAAaA,IAAAA,GAAM,CAAA;AACvB,MAAA,IAAI,QAAQ,EAAC;AACb,MAAA,IAAI,cAAA,GAAiB,KAAA;AAGrB,MAAA,KAAA,IAASC,EAAAA,GAAI,GAAGC,KAAAA,GAAOF,IAAAA,GAAM,YAAYC,EAAAA,GAAIC,KAAAA,EAAMD,MAAK,cAAA,EAAgB;AACtE,QAAA,KAAA,CAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAOA,EAAAA,EAAIA,EAAAA,GAAI,iBAAkBC,KAAAA,GAAOA,KAAAA,GAAQD,EAAAA,GAAI,cAAe,CAAC,CAAA;AAAA,MAC7F;AAGA,MAAA,IAAI,eAAe,CAAA,EAAG;AACpB,QAAA,GAAA,GAAM,KAAA,CAAMD,OAAM,CAAC,CAAA;AACnB,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,MAAA,CAAO,OAAO,CAAC,CAAA,GACf,OAAQ,GAAA,IAAO,CAAA,GAAK,EAAI,CAAA,GACxB;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,eAAe,CAAA,EAAG;AAC3B,QAAA,GAAA,GAAA,CAAO,MAAMA,IAAAA,GAAM,CAAC,KAAK,CAAA,IAAK,KAAA,CAAMA,OAAM,CAAC,CAAA;AAC3C,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,MAAA,CAAO,GAAA,IAAO,EAAE,CAAA,GAChB,MAAA,CAAQ,GAAA,IAAO,CAAA,GAAK,EAAI,CAAA,GACxB,MAAA,CAAQ,GAAA,IAAO,CAAA,GAAK,EAAI,CAAA,GACxB;AAAA,SACF;AAAA,MACF;AAEA,MAAA,OAAO,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACtB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACrJA,IAAA,eAAA,GAAA,UAAA,CAAA;AAAA,EAAA,+BAAA,CAAA,OAAA,EAAA;AACA,IAAA,OAAA,CAAQ,OAAO,SAAU,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,MAAA,EAAQ;AAC3D,MAAA,IAAI,CAAA,EAAG,CAAA;AACP,MAAA,IAAI,IAAA,GAAQ,MAAA,GAAS,CAAA,GAAK,IAAA,GAAO,CAAA;AACjC,MAAA,IAAI,IAAA,GAAA,CAAQ,KAAK,IAAA,IAAQ,CAAA;AACzB,MAAA,IAAI,QAAQ,IAAA,IAAQ,CAAA;AACpB,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,IAAI,CAAA,GAAI,IAAA,GAAQ,MAAA,GAAS,CAAA,GAAK,CAAA;AAC9B,MAAA,IAAI,CAAA,GAAI,OAAO,EAAA,GAAK,CAAA;AACpB,MAAA,IAAI,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAEzB,MAAA,CAAA,IAAK,CAAA;AAEL,MAAA,CAAA,GAAI,CAAA,GAAA,CAAM,CAAA,IAAM,CAAC,KAAA,IAAU,CAAA;AAC3B,MAAA,CAAA,KAAO,CAAC,KAAA;AACR,MAAA,KAAA,IAAS,IAAA;AACT,MAAA,OAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAK,CAAA,GAAI,GAAA,GAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,KAAA,IAAS,CAAA,EAAG;AAAA,MAAC;AAE3E,MAAA,CAAA,GAAI,CAAA,GAAA,CAAM,CAAA,IAAM,CAAC,KAAA,IAAU,CAAA;AAC3B,MAAA,CAAA,KAAO,CAAC,KAAA;AACR,MAAA,KAAA,IAAS,IAAA;AACT,MAAA,OAAO,KAAA,GAAQ,CAAA,EAAG,CAAA,GAAK,CAAA,GAAI,GAAA,GAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,KAAA,IAAS,CAAA,EAAG;AAAA,MAAC;AAE3E,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,CAAA,GAAI,CAAA,GAAI,KAAA;AAAA,MACV,CAAA,MAAA,IAAW,MAAM,IAAA,EAAM;AACrB,QAAA,OAAO,CAAA,GAAI,GAAA,GAAA,CAAQ,CAAA,GAAI,EAAA,GAAK,CAAA,IAAK,QAAA;AAAA,MACnC,CAAA,MAAO;AACL,QAAA,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AACxB,QAAA,CAAA,GAAI,CAAA,GAAI,KAAA;AAAA,MACV;AACA,MAAA,OAAA,CAAQ,CAAA,GAAI,KAAK,CAAA,IAAK,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,IAAI,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,OAAA,CAAQ,QAAQ,SAAU,MAAA,EAAQ,OAAO,MAAA,EAAQ,IAAA,EAAM,MAAM,MAAA,EAAQ;AACnE,MAAA,IAAI,GAAG,CAAA,EAAG,CAAA;AACV,MAAA,IAAI,IAAA,GAAQ,MAAA,GAAS,CAAA,GAAK,IAAA,GAAO,CAAA;AACjC,MAAA,IAAI,IAAA,GAAA,CAAQ,KAAK,IAAA,IAAQ,CAAA;AACzB,MAAA,IAAI,QAAQ,IAAA,IAAQ,CAAA;AACpB,MAAA,IAAI,EAAA,GAAM,IAAA,KAAS,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,GAAI,CAAA;AAC9D,MAAA,IAAI,CAAA,GAAI,IAAA,GAAO,CAAA,GAAK,MAAA,GAAS,CAAA;AAC7B,MAAA,IAAI,CAAA,GAAI,OAAO,CAAA,GAAI,EAAA;AACnB,MAAA,IAAI,CAAA,GAAI,QAAQ,CAAA,IAAM,KAAA,KAAU,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAK,CAAA,GAAI,CAAA;AAE1D,MAAA,KAAA,GAAQ,IAAA,CAAK,IAAI,KAAK,CAAA;AAEtB,MAAA,IAAI,KAAA,CAAM,KAAK,CAAA,IAAK,KAAA,KAAU,QAAA,EAAU;AACtC,QAAA,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA;AACvB,QAAA,CAAA,GAAI,IAAA;AAAA,MACN,CAAA,MAAO;AACL,QAAA,CAAA,GAAI,KAAK,KAAA,CAAM,IAAA,CAAK,IAAI,KAAK,CAAA,GAAI,KAAK,GAAG,CAAA;AACzC,QAAA,IAAI,KAAA,IAAS,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAC,KAAK,CAAA,EAAG;AACrC,UAAA,CAAA,EAAA;AACA,UAAA,CAAA,IAAK,CAAA;AAAA,QACP;AACA,QAAA,IAAI,CAAA,GAAI,SAAS,CAAA,EAAG;AAClB,UAAA,KAAA,IAAS,EAAA,GAAK,CAAA;AAAA,QAChB,CAAA,MAAO;AACL,UAAA,KAAA,IAAS,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,KAAK,CAAA;AAAA,QACrC;AACA,QAAA,IAAI,KAAA,GAAQ,KAAK,CAAA,EAAG;AAClB,UAAA,CAAA,EAAA;AACA,UAAA,CAAA,IAAK,CAAA;AAAA,QACP;AAEA,QAAA,IAAI,CAAA,GAAI,SAAS,IAAA,EAAM;AACrB,UAAA,CAAA,GAAI,CAAA;AACJ,UAAA,CAAA,GAAI,IAAA;AAAA,QACN,CAAA,MAAA,IAAW,CAAA,GAAI,KAAA,IAAS,CAAA,EAAG;AACzB,UAAA,CAAA,GAAA,CAAM,QAAQ,CAAA,GAAK,CAAA,IAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA;AACxC,UAAA,CAAA,GAAI,CAAA,GAAI,KAAA;AAAA,QACV,CAAA,MAAO;AACL,UAAA,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA;AACrD,UAAA,CAAA,GAAI,CAAA;AAAA,QACN;AAAA,MACF;AAEA,MAAA,OAAO,IAAA,IAAQ,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA,EAAM,CAAA,IAAK,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,QAAQ,CAAA,EAAG;AAAA,MAAC;AAE/E,MAAA,CAAA,GAAK,KAAK,IAAA,GAAQ,CAAA;AAClB,MAAA,IAAA,IAAQ,IAAA;AACR,MAAA,OAAO,IAAA,GAAO,CAAA,EAAG,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA,EAAM,CAAA,IAAK,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,QAAQ,CAAA,EAAG;AAAA,MAAC;AAE9E,MAAA,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA,GAAI,GAAA;AAAA,IAChC,CAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACpFA,IAAA,cAAA,GAAA,UAAA,CAAA;AAAA,EAAA,8BAAA,CAAA,OAAA,EAAA;AAUA,IAAA,IAAM,MAAA,GAAS,iBAAA,EAAA;AACf,IAAA,IAAM,OAAA,GAAU,eAAA,EAAA;AAChB,IAAA,IAAM,mBAAA,GACH,OAAO,MAAA,KAAW,UAAA,IAAc,OAAO,MAAA,CAAO,KAAK,CAAA,KAAM,UAAA,GACtD,MAAA,CAAO,KAAK,CAAA,CAAE,4BAA4B,CAAA,GAC1C,IAAA;AAEN,IAAA,OAAA,CAAQ,MAAA,GAASG,OAAAA;AACjB,IAAA,OAAA,CAAQ,UAAA,GAAa,UAAA;AACrB,IAAA,OAAA,CAAQ,iBAAA,GAAoB,EAAA;AAE5B,IAAA,IAAM,YAAA,GAAe,UAAA;AACrB,IAAA,OAAA,CAAQ,UAAA,GAAa,YAAA;AAgBrB,IAAAA,OAAAA,CAAO,sBAAsB,iBAAA,EAAkB;AAE/C,IAAA,IAAI,CAACA,QAAO,mBAAA,IAAuB,OAAO,YAAY,WAAA,IAClD,OAAO,OAAA,CAAQ,KAAA,KAAU,UAAA,EAAY;AACvC,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN;AAAA,OAEF;AAAA,IACF;AAEA,IAAA,SAAS,iBAAA,GAAqB;AAE5B,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAC,CAAA;AAC5B,QAAA,MAAM,KAAA,GAAQ,EAAE,GAAA,EAAK,WAAY;AAAE,UAAA,OAAO,EAAA;AAAA,QAAG,CAAA,EAAE;AAC/C,QAAA,MAAA,CAAO,cAAA,CAAe,KAAA,EAAO,UAAA,CAAW,SAAS,CAAA;AACjD,QAAA,MAAA,CAAO,cAAA,CAAe,KAAK,KAAK,CAAA;AAChC,QAAA,OAAO,GAAA,CAAI,KAAI,KAAM,EAAA;AAAA,MACvB,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,cAAA,CAAeA,OAAAA,CAAO,SAAA,EAAW,QAAA,EAAU;AAAA,MAChD,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,WAAY;AACf,QAAA,IAAI,CAACA,OAAAA,CAAO,QAAA,CAAS,IAAI,GAAG,OAAO,MAAA;AACnC,QAAA,OAAO,IAAA,CAAK,MAAA;AAAA,MACd;AAAA,KACD,CAAA;AAED,IAAA,MAAA,CAAO,cAAA,CAAeA,OAAAA,CAAO,SAAA,EAAW,QAAA,EAAU;AAAA,MAChD,UAAA,EAAY,IAAA;AAAA,MACZ,KAAK,WAAY;AACf,QAAA,IAAI,CAACA,OAAAA,CAAO,QAAA,CAAS,IAAI,GAAG,OAAO,MAAA;AACnC,QAAA,OAAO,IAAA,CAAK,UAAA;AAAA,MACd;AAAA,KACD,CAAA;AAED,IAAA,SAAS,aAAc,MAAA,EAAQ;AAC7B,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,MAAM,IAAI,UAAA,CAAW,aAAA,GAAgB,MAAA,GAAS,gCAAgC,CAAA;AAAA,MAChF;AAEA,MAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAM,CAAA;AACjC,MAAA,MAAA,CAAO,cAAA,CAAe,GAAA,EAAKA,OAAAA,CAAO,SAAS,CAAA;AAC3C,MAAA,OAAO,GAAA;AAAA,IACT;AAYA,IAAA,SAASA,OAAAA,CAAQ,GAAA,EAAK,gBAAA,EAAkB,MAAA,EAAQ;AAE9C,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA,IAAI,OAAO,qBAAqB,QAAA,EAAU;AACxC,UAAA,MAAM,IAAI,SAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,OAAO,YAAY,GAAG,CAAA;AAAA,MACxB;AACA,MAAA,OAAO,IAAA,CAAK,GAAA,EAAK,gBAAA,EAAkB,MAAM,CAAA;AAAA,IAC3C;AAEA,IAAAA,QAAO,QAAA,GAAW,IAAA;AAElB,IAAA,SAAS,IAAA,CAAM,KAAA,EAAO,gBAAA,EAAkB,MAAA,EAAQ;AAC9C,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,UAAA,CAAW,OAAO,gBAAgB,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,EAAG;AAC7B,QAAA,OAAO,cAAc,KAAK,CAAA;AAAA,MAC5B;AAEA,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,oHAC0C,OAAO;AAAA,SACnD;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,OAAO,WAAW,CAAA,IAC5B,SAAS,UAAA,CAAW,KAAA,CAAM,MAAA,EAAQ,WAAW,CAAA,EAAI;AACpD,QAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,gBAAA,EAAkB,MAAM,CAAA;AAAA,MACxD;AAEA,MAAA,IAAI,OAAO,iBAAA,KAAsB,WAAA,KAC5B,UAAA,CAAW,KAAA,EAAO,iBAAiB,CAAA,IACnC,KAAA,IAAS,UAAA,CAAW,KAAA,CAAM,MAAA,EAAQ,iBAAiB,CAAA,CAAA,EAAK;AAC3D,QAAA,OAAO,eAAA,CAAgB,KAAA,EAAO,gBAAA,EAAkB,MAAM,CAAA;AAAA,MACxD;AAEA,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,SAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,EAAQ;AAC/C,MAAA,IAAI,OAAA,IAAW,IAAA,IAAQ,OAAA,KAAY,KAAA,EAAO;AACxC,QAAA,OAAOA,OAAAA,CAAO,IAAA,CAAK,OAAA,EAAS,gBAAA,EAAkB,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,MAAM,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,MAAA,IAAI,GAAG,OAAO,CAAA;AAEd,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,WAAA,IAAe,IAAA,IACvD,OAAO,KAAA,CAAM,MAAA,CAAO,WAAW,CAAA,KAAM,UAAA,EAAY;AACnD,QAAA,OAAOA,OAAAA,CAAO,KAAK,KAAA,CAAM,MAAA,CAAO,WAAW,CAAA,CAAE,QAAQ,CAAA,EAAG,gBAAA,EAAkB,MAAM,CAAA;AAAA,MAClF;AAEA,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,oHAC0C,OAAO;AAAA,OACnD;AAAA,IACF;AAUA,IAAAA,OAAAA,CAAO,IAAA,GAAO,SAAU,KAAA,EAAO,kBAAkB,MAAA,EAAQ;AACvD,MAAA,OAAO,IAAA,CAAK,KAAA,EAAO,gBAAA,EAAkB,MAAM,CAAA;AAAA,IAC7C,CAAA;AAIA,IAAA,MAAA,CAAO,cAAA,CAAeA,OAAAA,CAAO,SAAA,EAAW,UAAA,CAAW,SAAS,CAAA;AAC5D,IAAA,MAAA,CAAO,cAAA,CAAeA,SAAQ,UAAU,CAAA;AAExC,IAAA,SAAS,WAAY,IAAA,EAAM;AACzB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,IAAI,UAAU,wCAAwC,CAAA;AAAA,MAC9D,CAAA,MAAA,IAAW,OAAO,CAAA,EAAG;AACnB,QAAA,MAAM,IAAI,UAAA,CAAW,aAAA,GAAgB,IAAA,GAAO,gCAAgC,CAAA;AAAA,MAC9E;AAAA,IACF;AAEA,IAAA,SAAS,KAAA,CAAO,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU;AACpC,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,OAAO,aAAa,IAAI,CAAA;AAAA,MAC1B;AACA,MAAA,IAAI,SAAS,MAAA,EAAW;AAItB,QAAA,OAAO,OAAO,QAAA,KAAa,QAAA,GACvB,YAAA,CAAa,IAAI,CAAA,CAAE,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA,GACtC,YAAA,CAAa,IAAI,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,aAAa,IAAI,CAAA;AAAA,IAC1B;AAMA,IAAAA,OAAAA,CAAO,KAAA,GAAQ,SAAU,IAAA,EAAM,MAAM,QAAA,EAAU;AAC7C,MAAA,OAAO,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,IACnC,CAAA;AAEA,IAAA,SAAS,YAAa,IAAA,EAAM;AAC1B,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,OAAO,aAAa,IAAA,GAAO,CAAA,GAAI,IAAI,OAAA,CAAQ,IAAI,IAAI,CAAC,CAAA;AAAA,IACtD;AAKA,IAAAA,OAAAA,CAAO,WAAA,GAAc,SAAU,IAAA,EAAM;AACnC,MAAA,OAAO,YAAY,IAAI,CAAA;AAAA,IACzB,CAAA;AAIA,IAAAA,OAAAA,CAAO,eAAA,GAAkB,SAAU,IAAA,EAAM;AACvC,MAAA,OAAO,YAAY,IAAI,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,SAAS,UAAA,CAAY,QAAQ,QAAA,EAAU;AACrC,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,EAAA,EAAI;AACnD,QAAA,QAAA,GAAW,MAAA;AAAA,MACb;AAEA,MAAA,IAAI,CAACA,OAAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,SAAA,CAAU,oBAAA,GAAuB,QAAQ,CAAA;AAAA,MACrD;AAEA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,MAAA,EAAQ,QAAQ,CAAA,GAAI,CAAA;AAC9C,MAAA,IAAI,GAAA,GAAM,aAAa,MAAM,CAAA;AAE7B,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,QAAQ,CAAA;AAEzC,MAAA,IAAI,WAAW,MAAA,EAAQ;AAIrB,QAAA,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA;AAAA,MAC3B;AAEA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,cAAe,KAAA,EAAO;AAC7B,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,GAAS,CAAA,GAAI,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,GAAI,CAAA;AAC9D,MAAA,MAAM,GAAA,GAAM,aAAa,MAAM,CAAA;AAC/B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClC,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAAA,MACtB;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,cAAe,SAAA,EAAW;AACjC,MAAA,IAAI,UAAA,CAAW,SAAA,EAAW,UAAU,CAAA,EAAG;AACrC,QAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,SAAS,CAAA;AACrC,QAAA,OAAO,gBAAgB,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AAAA,MACtE;AACA,MAAA,OAAO,cAAc,SAAS,CAAA;AAAA,IAChC;AAEA,IAAA,SAAS,eAAA,CAAiB,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ;AACnD,MAAA,IAAI,UAAA,GAAa,CAAA,IAAK,KAAA,CAAM,UAAA,GAAa,UAAA,EAAY;AACnD,QAAA,MAAM,IAAI,WAAW,sCAAsC,CAAA;AAAA,MAC7D;AAEA,MAAA,IAAI,KAAA,CAAM,UAAA,GAAa,UAAA,IAAc,MAAA,IAAU,CAAA,CAAA,EAAI;AACjD,QAAA,MAAM,IAAI,WAAW,sCAAsC,CAAA;AAAA,MAC7D;AAEA,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,UAAA,KAAe,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW;AACpD,QAAA,GAAA,GAAM,IAAI,WAAW,KAAK,CAAA;AAAA,MAC5B,CAAA,MAAA,IAAW,WAAW,MAAA,EAAW;AAC/B,QAAA,GAAA,GAAM,IAAI,UAAA,CAAW,KAAA,EAAO,UAAU,CAAA;AAAA,MACxC,CAAA,MAAO;AACL,QAAA,GAAA,GAAM,IAAI,UAAA,CAAW,KAAA,EAAO,UAAA,EAAY,MAAM,CAAA;AAAA,MAChD;AAGA,MAAA,MAAA,CAAO,cAAA,CAAe,GAAA,EAAKA,OAAAA,CAAO,SAAS,CAAA;AAE3C,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,WAAY,GAAA,EAAK;AACxB,MAAA,IAAIA,OAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,QAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,GAAI,CAAA;AAClC,QAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAE5B,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,UAAA,OAAO,GAAA;AAAA,QACT;AAEA,QAAA,GAAA,CAAI,IAAA,CAAK,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AACvB,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,IAAI,GAAA,CAAI,WAAW,MAAA,EAAW;AAC5B,QAAA,IAAI,OAAO,GAAA,CAAI,MAAA,KAAW,YAAY,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7D,UAAA,OAAO,aAAa,CAAC,CAAA;AAAA,QACvB;AACA,QAAA,OAAO,cAAc,GAAG,CAAA;AAAA,MAC1B;AAEA,MAAA,IAAI,IAAI,IAAA,KAAS,QAAA,IAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACpD,QAAA,OAAO,aAAA,CAAc,IAAI,IAAI,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,SAAS,QAAS,MAAA,EAAQ;AAGxB,MAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,QAAA,MAAM,IAAI,UAAA,CAAW,yDAAA,GACa,aAAa,QAAA,CAAS,EAAE,IAAI,QAAQ,CAAA;AAAA,MACxE;AACA,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB;AAEA,IAAA,SAAS,WAAY,MAAA,EAAQ;AAC3B,MAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACrB,QAAA,MAAA,GAAS,CAAA;AAAA,MACX;AACA,MAAA,OAAOA,OAAAA,CAAO,KAAA,CAAM,CAAC,MAAM,CAAA;AAAA,IAC7B;AAEA,IAAAA,OAAAA,CAAO,QAAA,GAAW,SAAS,QAAA,CAAU,CAAA,EAAG;AACtC,MAAA,OAAO,KAAK,IAAA,IAAQ,CAAA,CAAE,SAAA,KAAc,IAAA,IAClC,MAAMA,OAAAA,CAAO,SAAA;AAAA,IACjB,CAAA;AAEA,IAAAA,OAAAA,CAAO,OAAA,GAAU,SAAS,OAAA,CAAS,GAAG,CAAA,EAAG;AACvC,MAAA,IAAI,UAAA,CAAW,CAAA,EAAG,UAAU,CAAA,EAAG,CAAA,GAAIA,OAAAA,CAAO,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAU,CAAA;AACxE,MAAA,IAAI,UAAA,CAAW,CAAA,EAAG,UAAU,CAAA,EAAG,CAAA,GAAIA,OAAAA,CAAO,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,UAAU,CAAA;AACxE,MAAA,IAAI,CAACA,QAAO,QAAA,CAAS,CAAC,KAAK,CAACA,OAAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9C,QAAA,MAAM,IAAI,SAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,KAAM,GAAG,OAAO,CAAA;AAEpB,MAAA,IAAI,IAAI,CAAA,CAAE,MAAA;AACV,MAAA,IAAI,IAAI,CAAA,CAAE,MAAA;AAEV,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAClD,QAAA,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,EAAG;AACjB,UAAA,CAAA,GAAI,EAAE,CAAC,CAAA;AACP,UAAA,CAAA,GAAI,EAAE,CAAC,CAAA;AACP,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,EAAA;AAClB,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAA,GAAa,SAAS,UAAA,CAAY,QAAA,EAAU;AACjD,MAAA,QAAQ,MAAA,CAAO,QAAQ,CAAA,CAAE,WAAA,EAAY;AAAG,QACtC,KAAK,KAAA;AAAA,QACL,KAAK,MAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,KAAK,QAAA;AAAA,QACL,KAAK,QAAA;AAAA,QACL,KAAK,QAAA;AAAA,QACL,KAAK,MAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,KAAK,SAAA;AAAA,QACL,KAAK,UAAA;AACH,UAAA,OAAO,IAAA;AAAA,QACT;AACE,UAAA,OAAO,KAAA;AAAA;AACX,IACF,CAAA;AAEA,IAAAA,OAAAA,CAAO,MAAA,GAAS,SAAS,MAAA,CAAQ,MAAM,MAAA,EAAQ;AAC7C,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxB,QAAA,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAAA,MACnE;AAEA,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAOA,OAAAA,CAAO,MAAM,CAAC,CAAA;AAAA,MACvB;AAEA,MAAA,IAAI,CAAA;AACJ,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAA,GAAS,CAAA;AACT,QAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAE,CAAA,EAAG;AAChC,UAAA,MAAA,IAAU,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA;AAAA,QACpB;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAASA,OAAAA,CAAO,WAAA,CAAY,MAAM,CAAA;AACxC,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,EAAE,CAAA,EAAG;AAChC,QAAA,IAAI,GAAA,GAAM,KAAK,CAAC,CAAA;AAChB,QAAA,IAAI,UAAA,CAAW,GAAA,EAAK,UAAU,CAAA,EAAG;AAC/B,UAAA,IAAI,GAAA,GAAM,GAAA,CAAI,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ;AACpC,YAAA,IAAI,CAACA,QAAO,QAAA,CAAS,GAAG,GAAG,GAAA,GAAMA,OAAAA,CAAO,KAAK,GAAG,CAAA;AAChD,YAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,UACtB,CAAA,MAAO;AACL,YAAA,UAAA,CAAW,UAAU,GAAA,CAAI,IAAA;AAAA,cACvB,MAAA;AAAA,cACA,GAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,CAACA,OAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAChC,UAAA,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAAA,QACnE,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,QACtB;AACA,QAAA,GAAA,IAAO,GAAA,CAAI,MAAA;AAAA,MACb;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,SAAS,UAAA,CAAY,QAAQ,QAAA,EAAU;AACrC,MAAA,IAAIA,OAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,OAAO,MAAA,CAAO,MAAA;AAAA,MAChB;AACA,MAAA,IAAI,YAAY,MAAA,CAAO,MAAM,KAAK,UAAA,CAAW,MAAA,EAAQ,WAAW,CAAA,EAAG;AACjE,QAAA,OAAO,MAAA,CAAO,UAAA;AAAA,MAChB;AACA,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,6FACmB,OAAO;AAAA,SAC5B;AAAA,MACF;AAEA,MAAA,MAAM,MAAM,MAAA,CAAO,MAAA;AACnB,MAAA,MAAM,YAAa,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,SAAA,CAAU,CAAC,CAAA,KAAM,IAAA;AAC5D,MAAA,IAAI,CAAC,SAAA,IAAa,GAAA,KAAQ,CAAA,EAAG,OAAO,CAAA;AAGpC,MAAA,IAAI,WAAA,GAAc,KAAA;AAClB,MAAA,WAAS;AACP,QAAA,QAAQ,QAAA;AAAU,UAChB,KAAK,OAAA;AAAA,UACL,KAAK,QAAA;AAAA,UACL,KAAK,QAAA;AACH,YAAA,OAAO,GAAA;AAAA,UACT,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AACH,YAAA,OAAO,WAAA,CAAY,MAAM,CAAA,CAAE,MAAA;AAAA,UAC7B,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AAAA,UACL,KAAK,UAAA;AACH,YAAA,OAAO,GAAA,GAAM,CAAA;AAAA,UACf,KAAK,KAAA;AACH,YAAA,OAAO,GAAA,KAAQ,CAAA;AAAA,UACjB,KAAK,QAAA;AACH,YAAA,OAAOC,cAAAA,CAAc,MAAM,CAAA,CAAE,MAAA;AAAA,UAC/B;AACE,YAAA,IAAI,WAAA,EAAa;AACf,cAAA,OAAO,SAAA,GAAY,EAAA,GAAK,WAAA,CAAY,MAAM,CAAA,CAAE,MAAA;AAAA,YAC9C;AACA,YAAA,QAAA,GAAA,CAAY,EAAA,GAAK,UAAU,WAAA,EAAY;AACvC,YAAA,WAAA,GAAc,IAAA;AAAA;AAClB,MACF;AAAA,IACF;AACA,IAAAD,QAAO,UAAA,GAAa,UAAA;AAEpB,IAAA,SAAS,YAAA,CAAc,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK;AAC3C,MAAA,IAAI,WAAA,GAAc,KAAA;AASlB,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,GAAQ,CAAA,EAAG;AACpC,QAAA,KAAA,GAAQ,CAAA;AAAA,MACV;AAGA,MAAA,IAAI,KAAA,GAAQ,KAAK,MAAA,EAAQ;AACvB,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ;AAC1C,QAAA,GAAA,GAAM,IAAA,CAAK,MAAA;AAAA,MACb;AAEA,MAAA,IAAI,OAAO,CAAA,EAAG;AACZ,QAAA,OAAO,EAAA;AAAA,MACT;AAGA,MAAA,GAAA,MAAS,CAAA;AACT,MAAA,KAAA,MAAW,CAAA;AAEX,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,IAAI,CAAC,UAAU,QAAA,GAAW,MAAA;AAE1B,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,QAAQ,QAAA;AAAU,UAChB,KAAK,KAAA;AACH,YAAA,OAAO,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAElC,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AACH,YAAA,OAAO,SAAA,CAAU,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAEnC,KAAK,OAAA;AACH,YAAA,OAAO,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAEpC,KAAK,QAAA;AAAA,UACL,KAAK,QAAA;AACH,YAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAErC,KAAK,QAAA;AACH,YAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAErC,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AAAA,UACL,KAAK,UAAA;AACH,YAAA,OAAO,YAAA,CAAa,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA;AAAA,UAEtC;AACE,YAAA,IAAI,WAAA,EAAa,MAAM,IAAI,SAAA,CAAU,uBAAuB,QAAQ,CAAA;AACpE,YAAA,QAAA,GAAA,CAAY,QAAA,GAAW,IAAI,WAAA,EAAY;AACvC,YAAA,WAAA,GAAc,IAAA;AAAA;AAClB,MACF;AAAA,IACF;AAQA,IAAAA,OAAAA,CAAO,UAAU,SAAA,GAAY,IAAA;AAE7B,IAAA,SAAS,IAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AACtB,MAAA,MAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AACb,MAAA,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AACV,MAAA,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA;AAAA,IACT;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,MAAA,GAAS,SAAS,MAAA,GAAU;AAC3C,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,MAAA,IAAI,GAAA,GAAM,MAAM,CAAA,EAAG;AACjB,QAAA,MAAM,IAAI,WAAW,2CAA2C,CAAA;AAAA,MAClE;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,MACrB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,MAAA,GAAS,SAAS,MAAA,GAAU;AAC3C,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,MAAA,IAAI,GAAA,GAAM,MAAM,CAAA,EAAG;AACjB,QAAA,MAAM,IAAI,WAAW,2CAA2C,CAAA;AAAA,MAClE;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AACnB,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,MACzB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,MAAA,GAAS,SAAS,MAAA,GAAU;AAC3C,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,MAAA,IAAI,GAAA,GAAM,MAAM,CAAA,EAAG;AACjB,QAAA,MAAM,IAAI,WAAW,2CAA2C,CAAA;AAAA,MAClE;AACA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,KAAK,CAAA,EAAG;AAC/B,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AACnB,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AACvB,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AACvB,QAAA,IAAA,CAAK,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA;AAAA,MACzB;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,QAAA,GAAW,SAAS,QAAA,GAAY;AAC/C,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,IAAI,MAAA,KAAW,GAAG,OAAO,EAAA;AACzB,MAAA,IAAI,UAAU,MAAA,KAAW,CAAA,SAAU,SAAA,CAAU,IAAA,EAAM,GAAG,MAAM,CAAA;AAC5D,MAAA,OAAO,YAAA,CAAa,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,IAC3C,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,cAAA,GAAiBA,OAAAA,CAAO,SAAA,CAAU,QAAA;AAEnD,IAAAA,OAAAA,CAAO,SAAA,CAAU,MAAA,GAAS,SAAS,OAAQ,CAAA,EAAG;AAC5C,MAAA,IAAI,CAACA,QAAO,QAAA,CAAS,CAAC,GAAG,MAAM,IAAI,UAAU,2BAA2B,CAAA;AACxE,MAAA,IAAI,IAAA,KAAS,GAAG,OAAO,IAAA;AACvB,MAAA,OAAOA,OAAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAA,KAAM,CAAA;AAAA,IACrC,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,OAAA,GAAU,SAAS,OAAA,GAAW;AAC7C,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,MAAM,MAAM,OAAA,CAAQ,iBAAA;AACpB,MAAA,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,GAAG,EAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,CAAE,IAAA,EAAK;AAClE,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,GAAA,EAAK,GAAA,IAAO,OAAA;AAC9B,MAAA,OAAO,aAAa,GAAA,GAAM,GAAA;AAAA,IAC5B,CAAA;AACA,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAAA,OAAAA,CAAO,SAAA,CAAU,mBAAmB,CAAA,GAAIA,QAAO,SAAA,CAAU,OAAA;AAAA,IAC3D;AAEA,IAAAA,OAAAA,CAAO,UAAU,OAAA,GAAU,SAAS,QAAS,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,SAAA,EAAW,OAAA,EAAS;AACnF,MAAA,IAAI,UAAA,CAAW,MAAA,EAAQ,UAAU,CAAA,EAAG;AAClC,QAAA,MAAA,GAASA,QAAO,IAAA,CAAK,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,CAACA,OAAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,mFACoB,OAAO;AAAA,SAC7B;AAAA,MACF;AAEA,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,KAAA,GAAQ,CAAA;AAAA,MACV;AACA,MAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,QAAA,GAAA,GAAM,MAAA,GAAS,OAAO,MAAA,GAAS,CAAA;AAAA,MACjC;AACA,MAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,QAAA,SAAA,GAAY,CAAA;AAAA,MACd;AACA,MAAA,IAAI,YAAY,MAAA,EAAW;AACzB,QAAA,OAAA,GAAU,IAAA,CAAK,MAAA;AAAA,MACjB;AAEA,MAAA,IAAI,KAAA,GAAQ,KAAK,GAAA,GAAM,MAAA,CAAO,UAAU,SAAA,GAAY,CAAA,IAAK,OAAA,GAAU,IAAA,CAAK,MAAA,EAAQ;AAC9E,QAAA,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAI,SAAA,IAAa,OAAA,IAAW,KAAA,IAAS,GAAA,EAAK;AACxC,QAAA,OAAO,CAAA;AAAA,MACT;AACA,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,OAAO,EAAA;AAAA,MACT;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,OAAO,CAAA;AAAA,MACT;AAEA,MAAA,KAAA,MAAW,CAAA;AACX,MAAA,GAAA,MAAS,CAAA;AACT,MAAA,SAAA,MAAe,CAAA;AACf,MAAA,OAAA,MAAa,CAAA;AAEb,MAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,CAAA;AAE5B,MAAA,IAAI,IAAI,OAAA,GAAU,SAAA;AAClB,MAAA,IAAI,IAAI,GAAA,GAAM,KAAA;AACd,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAEzB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,OAAO,CAAA;AAC9C,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAE1C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAC5B,QAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,UAAA,CAAW,CAAC,CAAA,EAAG;AACjC,UAAA,CAAA,GAAI,SAAS,CAAC,CAAA;AACd,UAAA,CAAA,GAAI,WAAW,CAAC,CAAA;AAChB,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,EAAA;AAClB,MAAA,IAAI,CAAA,GAAI,GAAG,OAAO,CAAA;AAClB,MAAA,OAAO,CAAA;AAAA,IACT,CAAA;AAWA,IAAA,SAAS,oBAAA,CAAsB,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY,UAAU,GAAA,EAAK;AAErE,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AAGhC,MAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,QAAA,QAAA,GAAW,UAAA;AACX,QAAA,UAAA,GAAa,CAAA;AAAA,MACf,CAAA,MAAA,IAAW,aAAa,UAAA,EAAY;AAClC,QAAA,UAAA,GAAa,UAAA;AAAA,MACf,CAAA,MAAA,IAAW,aAAa,WAAA,EAAa;AACnC,QAAA,UAAA,GAAa,WAAA;AAAA,MACf;AACA,MAAA,UAAA,GAAa,CAAC,UAAA;AACd,MAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAE3B,QAAA,UAAA,GAAa,GAAA,GAAM,CAAA,GAAK,MAAA,CAAO,MAAA,GAAS,CAAA;AAAA,MAC1C;AAGA,MAAA,IAAI,UAAA,GAAa,CAAA,EAAG,UAAA,GAAa,MAAA,CAAO,MAAA,GAAS,UAAA;AACjD,MAAA,IAAI,UAAA,IAAc,OAAO,MAAA,EAAQ;AAC/B,QAAA,IAAI,KAAK,OAAO,EAAA;AAAA,aACX,UAAA,GAAa,OAAO,MAAA,GAAS,CAAA;AAAA,MACpC,CAAA,MAAA,IAAW,aAAa,CAAA,EAAG;AACzB,QAAA,IAAI,KAAK,UAAA,GAAa,CAAA;AAAA,aACjB,OAAO,EAAA;AAAA,MACd;AAGA,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA,GAAA,GAAMA,OAAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,MACjC;AAGA,MAAA,IAAIA,OAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAExB,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,UAAA,OAAO,EAAA;AAAA,QACT;AACA,QAAA,OAAO,YAAA,CAAa,MAAA,EAAQ,GAAA,EAAK,UAAA,EAAY,UAAU,GAAG,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,QAAA,GAAA,GAAM,GAAA,GAAM,GAAA;AACZ,QAAA,IAAI,OAAO,UAAA,CAAW,SAAA,CAAU,OAAA,KAAY,UAAA,EAAY;AACtD,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,OAAO,WAAW,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,KAAK,UAAU,CAAA;AAAA,UAClE,CAAA,MAAO;AACL,YAAA,OAAO,WAAW,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQ,KAAK,UAAU,CAAA;AAAA,UACtE;AAAA,QACF;AACA,QAAA,OAAO,aAAa,MAAA,EAAQ,CAAC,GAAG,CAAA,EAAG,UAAA,EAAY,UAAU,GAAG,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,IAAI,UAAU,sCAAsC,CAAA;AAAA,IAC5D;AAEA,IAAA,SAAS,YAAA,CAAc,GAAA,EAAK,GAAA,EAAK,UAAA,EAAY,UAAU,GAAA,EAAK;AAC1D,MAAA,IAAI,SAAA,GAAY,CAAA;AAChB,MAAA,IAAI,YAAY,GAAA,CAAI,MAAA;AACpB,MAAA,IAAI,YAAY,GAAA,CAAI,MAAA;AAEpB,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,QAAA,GAAW,MAAA,CAAO,QAAQ,CAAA,CAAE,WAAA,EAAY;AACxC,QAAA,IAAI,aAAa,MAAA,IAAU,QAAA,KAAa,WACpC,QAAA,KAAa,SAAA,IAAa,aAAa,UAAA,EAAY;AACrD,UAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,IAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACpC,YAAA,OAAO,EAAA;AAAA,UACT;AACA,UAAA,SAAA,GAAY,CAAA;AACZ,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,SAAA,IAAa,CAAA;AACb,UAAA,UAAA,IAAc,CAAA;AAAA,QAChB;AAAA,MACF;AAEA,MAAA,SAAS,IAAA,CAAM,KAAKF,EAAAA,EAAG;AACrB,QAAA,IAAI,cAAc,CAAA,EAAG;AACnB,UAAA,OAAO,IAAIA,EAAC,CAAA;AAAA,QACd,CAAA,MAAO;AACL,UAAA,OAAO,GAAA,CAAI,YAAA,CAAaA,EAAAA,GAAI,SAAS,CAAA;AAAA,QACvC;AAAA,MACF;AAEA,MAAA,IAAI,CAAA;AACJ,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,IAAI,UAAA,GAAa,EAAA;AACjB,QAAA,KAAK,CAAA,GAAI,UAAA,EAAY,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AACvC,UAAA,IAAI,IAAA,CAAK,GAAA,EAAK,CAAC,CAAA,KAAM,IAAA,CAAK,GAAA,EAAK,UAAA,KAAe,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,UAAU,CAAA,EAAG;AACtE,YAAA,IAAI,UAAA,KAAe,IAAI,UAAA,GAAa,CAAA;AACpC,YAAA,IAAI,CAAA,GAAI,UAAA,GAAa,CAAA,KAAM,SAAA,SAAkB,UAAA,GAAa,SAAA;AAAA,UAC5D,CAAA,MAAO;AACL,YAAA,IAAI,UAAA,KAAe,EAAA,EAAI,CAAA,IAAK,CAAA,GAAI,UAAA;AAChC,YAAA,UAAA,GAAa,EAAA;AAAA,UACf;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,UAAA,GAAa,SAAA,GAAY,SAAA,EAAW,UAAA,GAAa,SAAA,GAAY,SAAA;AACjE,QAAA,KAAK,CAAA,GAAI,UAAA,EAAY,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAChC,UAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,YAAA,IAAI,IAAA,CAAK,KAAK,CAAA,GAAI,CAAC,MAAM,IAAA,CAAK,GAAA,EAAK,CAAC,CAAA,EAAG;AACrC,cAAA,KAAA,GAAQ,KAAA;AACR,cAAA;AAAA,YACF;AAAA,UACF;AACA,UAAA,IAAI,OAAO,OAAO,CAAA;AAAA,QACpB;AAAA,MACF;AAEA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAAE,QAAO,SAAA,CAAU,QAAA,GAAW,SAAS,QAAA,CAAU,GAAA,EAAK,YAAY,QAAA,EAAU;AACxE,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,UAAA,EAAY,QAAQ,CAAA,KAAM,EAAA;AAAA,IACrD,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,OAAA,GAAU,SAAS,OAAA,CAAS,GAAA,EAAK,YAAY,QAAA,EAAU;AACtE,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,GAAA,EAAK,UAAA,EAAY,UAAU,IAAI,CAAA;AAAA,IACnE,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,GAAA,EAAK,YAAY,QAAA,EAAU;AAC9E,MAAA,OAAO,oBAAA,CAAqB,IAAA,EAAM,GAAA,EAAK,UAAA,EAAY,UAAU,KAAK,CAAA;AAAA,IACpE,CAAA;AAEA,IAAA,SAAS,QAAA,CAAU,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AAC9C,MAAA,MAAA,GAAS,MAAA,CAAO,MAAM,CAAA,IAAK,CAAA;AAC3B,MAAA,MAAM,SAAA,GAAY,IAAI,MAAA,GAAS,MAAA;AAC/B,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,GAAS,SAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,OAAO,MAAM,CAAA;AACtB,QAAA,IAAI,SAAS,SAAA,EAAW;AACtB,UAAA,MAAA,GAAS,SAAA;AAAA,QACX;AAAA,MACF;AAEA,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAEtB,MAAA,IAAI,MAAA,GAAS,SAAS,CAAA,EAAG;AACvB,QAAA,MAAA,GAAS,MAAA,GAAS,CAAA;AAAA,MACpB;AACA,MAAA,IAAI,CAAA;AACJ,MAAA,KAAK,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC3B,QAAA,MAAM,MAAA,GAAS,SAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACnD,QAAA,IAAI,WAAA,CAAY,MAAM,CAAA,EAAG,OAAO,CAAA;AAChC,QAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA;AAAA,MACpB;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,SAAS,SAAA,CAAW,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AAC/C,MAAA,OAAO,UAAA,CAAW,YAAY,MAAA,EAAQ,GAAA,CAAI,SAAS,MAAM,CAAA,EAAG,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,IACjF;AAEA,IAAA,SAAS,UAAA,CAAY,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AAChD,MAAA,OAAO,WAAW,YAAA,CAAa,MAAM,CAAA,EAAG,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AACjD,MAAA,OAAO,WAAWC,cAAAA,CAAc,MAAM,CAAA,EAAG,GAAA,EAAK,QAAQ,MAAM,CAAA;AAAA,IAC9D;AAEA,IAAA,SAAS,SAAA,CAAW,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ;AAC/C,MAAA,OAAO,UAAA,CAAW,eAAe,MAAA,EAAQ,GAAA,CAAI,SAAS,MAAM,CAAA,EAAG,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,IACpF;AAEA,IAAAD,OAAAA,CAAO,UAAU,KAAA,GAAQ,SAAS,MAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,QAAA,EAAU;AAEzE,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,QAAA,GAAW,MAAA;AACX,QAAA,MAAA,GAAS,IAAA,CAAK,MAAA;AACd,QAAA,MAAA,GAAS,CAAA;AAAA,MAEX,CAAA,MAAA,IAAW,MAAA,KAAW,MAAA,IAAa,OAAO,WAAW,QAAA,EAAU;AAC7D,QAAA,QAAA,GAAW,MAAA;AACX,QAAA,MAAA,GAAS,IAAA,CAAK,MAAA;AACd,QAAA,MAAA,GAAS,CAAA;AAAA,MAEX,CAAA,MAAA,IAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,QAAA,IAAI,QAAA,CAAS,MAAM,CAAA,EAAG;AACpB,UAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,UAAA,IAAI,QAAA,KAAa,QAAW,QAAA,GAAW,MAAA;AAAA,QACzC,CAAA,MAAO;AACL,UAAA,QAAA,GAAW,MAAA;AACX,UAAA,MAAA,GAAS,MAAA;AAAA,QACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,KAAK,MAAA,GAAS,MAAA;AAChC,MAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,GAAS,SAAA,EAAW,MAAA,GAAS,SAAA;AAEzD,MAAA,IAAK,MAAA,CAAO,SAAS,CAAA,KAAM,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA,CAAA,IAAO,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ;AAC7E,QAAA,MAAM,IAAI,WAAW,wCAAwC,CAAA;AAAA,MAC/D;AAEA,MAAA,IAAI,CAAC,UAAU,QAAA,GAAW,MAAA;AAE1B,MAAA,IAAI,WAAA,GAAc,KAAA;AAClB,MAAA,WAAS;AACP,QAAA,QAAQ,QAAA;AAAU,UAChB,KAAK,KAAA;AACH,YAAA,OAAO,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,UAE9C,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AACH,YAAA,OAAO,SAAA,CAAU,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,UAE/C,KAAK,OAAA;AAAA,UACL,KAAK,QAAA;AAAA,UACL,KAAK,QAAA;AACH,YAAA,OAAO,UAAA,CAAW,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,UAEhD,KAAK,QAAA;AAEH,YAAA,OAAO,WAAA,CAAY,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,UAEjD,KAAK,MAAA;AAAA,UACL,KAAK,OAAA;AAAA,UACL,KAAK,SAAA;AAAA,UACL,KAAK,UAAA;AACH,YAAA,OAAO,SAAA,CAAU,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,UAE/C;AACE,YAAA,IAAI,WAAA,EAAa,MAAM,IAAI,SAAA,CAAU,uBAAuB,QAAQ,CAAA;AACpE,YAAA,QAAA,GAAA,CAAY,EAAA,GAAK,UAAU,WAAA,EAAY;AACvC,YAAA,WAAA,GAAc,IAAA;AAAA;AAClB,MACF;AAAA,IACF,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,MAAA,GAAS,SAAS,MAAA,GAAU;AAC3C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,MAAM,SAAA,CAAU,KAAA,CAAM,KAAK,IAAA,CAAK,IAAA,IAAQ,MAAM,CAAC;AAAA,OACvD;AAAA,IACF,CAAA;AAEA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AACrC,MAAA,IAAI,KAAA,KAAU,CAAA,IAAK,GAAA,KAAQ,GAAA,CAAI,MAAA,EAAQ;AACrC,QAAA,OAAO,MAAA,CAAO,cAAc,GAAG,CAAA;AAAA,MACjC,CAAA,MAAO;AACL,QAAA,OAAO,OAAO,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA,MACnD;AAAA,IACF;AAEA,IAAA,SAAS,SAAA,CAAW,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AACnC,MAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAC9B,MAAA,MAAM,MAAM,EAAC;AAEb,MAAA,IAAI,CAAA,GAAI,KAAA;AACR,MAAA,OAAO,IAAI,GAAA,EAAK;AACd,QAAA,MAAM,SAAA,GAAY,IAAI,CAAC,CAAA;AACvB,QAAA,IAAI,SAAA,GAAY,IAAA;AAChB,QAAA,IAAI,gBAAA,GAAoB,YAAY,GAAA,GAChC,CAAA,GACC,YAAY,GAAA,GACT,CAAA,GACC,SAAA,GAAY,GAAA,GACT,CAAA,GACA,CAAA;AAEZ,QAAA,IAAI,CAAA,GAAI,oBAAoB,GAAA,EAAK;AAC/B,UAAA,IAAI,UAAA,EAAY,WAAW,UAAA,EAAY,aAAA;AAEvC,UAAA,QAAQ,gBAAA;AAAkB,YACxB,KAAK,CAAA;AACH,cAAA,IAAI,YAAY,GAAA,EAAM;AACpB,gBAAA,SAAA,GAAY,SAAA;AAAA,cACd;AACA,cAAA;AAAA,YACF,KAAK,CAAA;AACH,cAAA,UAAA,GAAa,GAAA,CAAI,IAAI,CAAC,CAAA;AACtB,cAAA,IAAA,CAAK,UAAA,GAAa,SAAU,GAAA,EAAM;AAChC,gBAAA,aAAA,GAAA,CAAiB,SAAA,GAAY,EAAA,KAAS,CAAA,GAAO,UAAA,GAAa,EAAA;AAC1D,gBAAA,IAAI,gBAAgB,GAAA,EAAM;AACxB,kBAAA,SAAA,GAAY,aAAA;AAAA,gBACd;AAAA,cACF;AACA,cAAA;AAAA,YACF,KAAK,CAAA;AACH,cAAA,UAAA,GAAa,GAAA,CAAI,IAAI,CAAC,CAAA;AACtB,cAAA,SAAA,GAAY,GAAA,CAAI,IAAI,CAAC,CAAA;AACrB,cAAA,IAAA,CAAK,UAAA,GAAa,GAAA,MAAU,GAAA,IAAA,CAAS,SAAA,GAAY,SAAU,GAAA,EAAM;AAC/D,gBAAA,aAAA,GAAA,CAAiB,YAAY,EAAA,KAAQ,EAAA,GAAA,CAAO,UAAA,GAAa,EAAA,KAAS,IAAO,SAAA,GAAY,EAAA;AACrF,gBAAA,IAAI,aAAA,GAAgB,IAAA,KAAU,aAAA,GAAgB,KAAA,IAAU,gBAAgB,KAAA,CAAA,EAAS;AAC/E,kBAAA,SAAA,GAAY,aAAA;AAAA,gBACd;AAAA,cACF;AACA,cAAA;AAAA,YACF,KAAK,CAAA;AACH,cAAA,UAAA,GAAa,GAAA,CAAI,IAAI,CAAC,CAAA;AACtB,cAAA,SAAA,GAAY,GAAA,CAAI,IAAI,CAAC,CAAA;AACrB,cAAA,UAAA,GAAa,GAAA,CAAI,IAAI,CAAC,CAAA;AACtB,cAAA,IAAA,CAAK,UAAA,GAAa,SAAU,GAAA,IAAA,CAAS,SAAA,GAAY,SAAU,GAAA,IAAA,CAAS,UAAA,GAAa,SAAU,GAAA,EAAM;AAC/F,gBAAA,aAAA,GAAA,CAAiB,SAAA,GAAY,OAAQ,EAAA,GAAA,CAAQ,UAAA,GAAa,OAAS,EAAA,GAAA,CAAO,SAAA,GAAY,EAAA,KAAS,CAAA,GAAO,UAAA,GAAa,EAAA;AACnH,gBAAA,IAAI,aAAA,GAAgB,KAAA,IAAU,aAAA,GAAgB,OAAA,EAAU;AACtD,kBAAA,SAAA,GAAY,aAAA;AAAA,gBACd;AAAA,cACF;AAAA;AACJ,QACF;AAEA,QAAA,IAAI,cAAc,IAAA,EAAM;AAGtB,UAAA,SAAA,GAAY,KAAA;AACZ,UAAA,gBAAA,GAAmB,CAAA;AAAA,QACrB,CAAA,MAAA,IAAW,YAAY,KAAA,EAAQ;AAE7B,UAAA,SAAA,IAAa,KAAA;AACb,UAAA,GAAA,CAAI,IAAA,CAAK,SAAA,KAAc,EAAA,GAAK,IAAA,GAAQ,KAAM,CAAA;AAC1C,UAAA,SAAA,GAAY,QAAS,SAAA,GAAY,IAAA;AAAA,QACnC;AAEA,QAAA,GAAA,CAAI,KAAK,SAAS,CAAA;AAClB,QAAA,CAAA,IAAK,gBAAA;AAAA,MACP;AAEA,MAAA,OAAO,sBAAsB,GAAG,CAAA;AAAA,IAClC;AAKA,IAAA,IAAM,oBAAA,GAAuB,IAAA;AAE7B,IAAA,SAAS,sBAAuB,UAAA,EAAY;AAC1C,MAAA,MAAM,MAAM,UAAA,CAAW,MAAA;AACvB,MAAA,IAAI,OAAO,oBAAA,EAAsB;AAC/B,QAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,MAAA,EAAQ,UAAU,CAAA;AAAA,MACrD;AAGA,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,IAAI,GAAA,EAAK;AACd,QAAA,GAAA,IAAO,OAAO,YAAA,CAAa,KAAA;AAAA,UACzB,MAAA;AAAA,UACA,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAA,IAAK,oBAAoB;AAAA,SAC/C;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,UAAA,CAAY,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AACpC,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAE9B,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAChC,QAAA,GAAA,IAAO,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,IAAI,GAAI,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AACrC,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AAE9B,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAChC,QAAA,GAAA,IAAO,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACnC;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,QAAA,CAAU,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AAClC,MAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAEhB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,CAAA;AACjC,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,GAAM,CAAA,IAAK,GAAA,GAAM,KAAK,GAAA,GAAM,GAAA;AAExC,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAChC,QAAA,GAAA,IAAO,mBAAA,CAAoB,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MACnC;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,YAAA,CAAc,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK;AACtC,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAClC,MAAA,IAAI,GAAA,GAAM,EAAA;AAEV,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,EAAG,KAAK,CAAA,EAAG;AAC5C,QAAA,GAAA,IAAO,MAAA,CAAO,aAAa,KAAA,CAAM,CAAC,IAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAI,GAAI,CAAA;AAAA,MAC5D;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAAA,QAAO,SAAA,CAAU,KAAA,GAAQ,SAAS,KAAA,CAAO,OAAO,GAAA,EAAK;AACnD,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,MAAA,KAAA,GAAQ,CAAC,CAAC,KAAA;AACV,MAAA,GAAA,GAAM,GAAA,KAAQ,MAAA,GAAY,GAAA,GAAM,CAAC,CAAC,GAAA;AAElC,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,KAAA,IAAS,GAAA;AACT,QAAA,IAAI,KAAA,GAAQ,GAAG,KAAA,GAAQ,CAAA;AAAA,MACzB,CAAA,MAAA,IAAW,QAAQ,GAAA,EAAK;AACtB,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV;AAEA,MAAA,IAAI,MAAM,CAAA,EAAG;AACX,QAAA,GAAA,IAAO,GAAA;AACP,QAAA,IAAI,GAAA,GAAM,GAAG,GAAA,GAAM,CAAA;AAAA,MACrB,CAAA,MAAA,IAAW,MAAM,GAAA,EAAK;AACpB,QAAA,GAAA,GAAM,GAAA;AAAA,MACR;AAEA,MAAA,IAAI,GAAA,GAAM,OAAO,GAAA,GAAM,KAAA;AAEvB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAEvC,MAAA,MAAA,CAAO,cAAA,CAAe,MAAA,EAAQA,OAAAA,CAAO,SAAS,CAAA;AAE9C,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAKA,IAAA,SAAS,WAAA,CAAa,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ;AACzC,MAAA,IAAK,MAAA,GAAS,MAAO,CAAA,IAAK,MAAA,GAAS,GAAG,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAC/E,MAAA,IAAI,SAAS,GAAA,GAAM,MAAA,EAAQ,MAAM,IAAI,WAAW,uCAAuC,CAAA;AAAA,IACzF;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,UAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,aAAa,SAAS,UAAA,CAAY,MAAA,EAAQE,WAAAA,EAAY,QAAA,EAAU;AAC/E,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQA,WAAAA,EAAY,KAAK,MAAM,CAAA;AAE1D,MAAA,IAAI,GAAA,GAAM,KAAK,MAAM,CAAA;AACrB,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,EAAE,CAAA,GAAIA,WAAAA,KAAe,GAAA,IAAO,GAAA,CAAA,EAAQ;AACzC,QAAA,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,GAAA;AAAA,MAC5B;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAEA,IAAAF,OAAAA,CAAO,SAAA,CAAU,UAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,aAAa,SAAS,UAAA,CAAY,MAAA,EAAQE,WAAAA,EAAY,QAAA,EAAU;AAC/E,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,WAAA,CAAY,MAAA,EAAQA,WAAAA,EAAY,IAAA,CAAK,MAAM,CAAA;AAAA,MAC7C;AAEA,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,EAAEA,WAAU,CAAA;AACpC,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,OAAOA,WAAAA,GAAa,CAAA,KAAM,GAAA,IAAO,GAAA,CAAA,EAAQ;AACvC,QAAA,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,EAAEA,WAAU,CAAA,GAAI,GAAA;AAAA,MACvC;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAEA,IAAAF,OAAAA,CAAO,UAAU,SAAA,GACjBA,OAAAA,CAAO,UAAU,SAAA,GAAY,SAAS,SAAA,CAAW,MAAA,EAAQ,QAAA,EAAU;AACjE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,KAAK,MAAM,CAAA;AAAA,IACpB,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAU,YAAA,GACjBA,OAAAA,CAAO,UAAU,YAAA,GAAe,SAAS,YAAA,CAAc,MAAA,EAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,KAAK,MAAM,CAAA,GAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AAAA,IAC7C,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAU,YAAA,GACjBA,OAAAA,CAAO,UAAU,YAAA,GAAe,SAAS,YAAA,CAAc,MAAA,EAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAQ,KAAK,MAAM,CAAA,IAAK,CAAA,GAAK,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAC9C,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAU,YAAA,GACjBA,OAAAA,CAAO,UAAU,YAAA,GAAe,SAAS,YAAA,CAAc,MAAA,EAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AAEjD,MAAA,OAAA,CAAS,KAAK,MAAM,CAAA,GACf,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA,GACpB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA,IACpB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,QAAA;AAAA,IAC1B,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAU,YAAA,GACjBA,OAAAA,CAAO,UAAU,YAAA,GAAe,SAAS,YAAA,CAAc,MAAA,EAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AAEjD,MAAA,OAAQ,KAAK,MAAM,CAAA,GAAI,QAAA,IACnB,IAAA,CAAK,SAAS,CAAC,CAAA,IAAK,EAAA,GACrB,IAAA,CAAK,SAAS,CAAC,CAAA,IAAK,CAAA,GACrB,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,IACnB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,eAAA,GAAkB,kBAAA,CAAmB,SAAS,gBAAiB,MAAA,EAAQ;AACtF,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,cAAA,CAAe,QAAQ,QAAQ,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC7C,QAAA,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,MACrC;AAEA,MAAA,MAAM,KAAK,KAAA,GACT,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,CAAA,GACtB,IAAA,CAAK,EAAE,MAAM,IAAI,CAAA,IAAK,EAAA,GACtB,KAAK,EAAE,MAAM,IAAI,CAAA,IAAK,EAAA;AAExB,MAAA,MAAM,KAAK,IAAA,CAAK,EAAE,MAAM,CAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GACtB,KAAK,EAAE,MAAM,IAAI,CAAA,IAAK,EAAA,GACtB,OAAO,CAAA,IAAK,EAAA;AAEd,MAAA,OAAO,OAAO,EAAE,CAAA,IAAK,OAAO,EAAE,CAAA,IAAK,OAAO,EAAE,CAAA,CAAA;AAAA,IAC9C,CAAC,CAAA;AAED,IAAAA,QAAO,SAAA,CAAU,eAAA,GAAkB,kBAAA,CAAmB,SAAS,gBAAiB,MAAA,EAAQ;AACtF,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,cAAA,CAAe,QAAQ,QAAQ,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC7C,QAAA,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,MACrC;AAEA,MAAA,MAAM,KAAK,KAAA,GAAQ,CAAA,IAAK,KACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,EAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,CAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA;AAEf,MAAA,MAAM,KAAK,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,KAC/B,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,EAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,CAAA,GACtB,IAAA;AAEF,MAAA,OAAA,CAAQ,OAAO,EAAE,CAAA,IAAK,OAAO,EAAE,CAAA,IAAK,OAAO,EAAE,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAAA,QAAO,SAAA,CAAU,SAAA,GAAY,SAAS,SAAA,CAAW,MAAA,EAAQE,aAAY,QAAA,EAAU;AAC7E,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQA,WAAAA,EAAY,KAAK,MAAM,CAAA;AAE1D,MAAA,IAAI,GAAA,GAAM,KAAK,MAAM,CAAA;AACrB,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,OAAO,EAAE,CAAA,GAAIA,WAAAA,KAAe,GAAA,IAAO,GAAA,CAAA,EAAQ;AACzC,QAAA,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,GAAA;AAAA,MAC5B;AACA,MAAA,GAAA,IAAO,GAAA;AAEP,MAAA,IAAI,OAAO,GAAA,EAAK,GAAA,IAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAIA,WAAU,CAAA;AAEjD,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAEA,IAAAF,QAAO,SAAA,CAAU,SAAA,GAAY,SAAS,SAAA,CAAW,MAAA,EAAQE,aAAY,QAAA,EAAU;AAC7E,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQA,WAAAA,EAAY,KAAK,MAAM,CAAA;AAE1D,MAAA,IAAI,CAAA,GAAIA,WAAAA;AACR,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,EAAE,CAAC,CAAA;AAC3B,MAAA,OAAO,CAAA,GAAI,CAAA,KAAM,GAAA,IAAO,GAAA,CAAA,EAAQ;AAC9B,QAAA,GAAA,IAAO,IAAA,CAAK,MAAA,GAAS,EAAE,CAAC,CAAA,GAAI,GAAA;AAAA,MAC9B;AACA,MAAA,GAAA,IAAO,GAAA;AAEP,MAAA,IAAI,OAAO,GAAA,EAAK,GAAA,IAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAIA,WAAU,CAAA;AAEjD,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAEA,IAAAF,QAAO,SAAA,CAAU,QAAA,GAAW,SAAS,QAAA,CAAU,QAAQ,QAAA,EAAU;AAC/D,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,IAAI,EAAE,IAAA,CAAK,MAAM,IAAI,GAAA,CAAA,EAAO,OAAQ,KAAK,MAAM,CAAA;AAC/C,MAAA,OAAA,CAAS,GAAA,GAAO,IAAA,CAAK,MAAM,CAAA,GAAI,CAAA,IAAK,EAAA;AAAA,IACtC,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,MAAM,MAAM,IAAA,CAAK,MAAM,IAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA;AAChD,MAAA,OAAQ,GAAA,GAAM,KAAA,GAAU,GAAA,GAAM,UAAA,GAAa,GAAA;AAAA,IAC7C,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,IAAA,CAAK,MAAM,CAAA,IAAK,CAAA;AAChD,MAAA,OAAQ,GAAA,GAAM,KAAA,GAAU,GAAA,GAAM,UAAA,GAAa,GAAA;AAAA,IAC7C,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AAEjD,MAAA,OAAQ,KAAK,MAAM,CAAA,GAChB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA,GACpB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA,GACpB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAAA,IACzB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AAEjD,MAAA,OAAQ,KAAK,MAAM,CAAA,IAAK,EAAA,GACrB,IAAA,CAAK,SAAS,CAAC,CAAA,IAAK,EAAA,GACpB,IAAA,CAAK,SAAS,CAAC,CAAA,IAAK,CAAA,GACpB,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IACpB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,cAAA,GAAiB,kBAAA,CAAmB,SAAS,eAAgB,MAAA,EAAQ;AACpF,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,cAAA,CAAe,QAAQ,QAAQ,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC7C,QAAA,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,MACrC;AAEA,MAAA,MAAM,MAAM,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GACzB,KAAK,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,IAAK,IACxB,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,IAAK,MACvB,IAAA,IAAQ,EAAA,CAAA;AAEX,MAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,EAAE,KAC9B,MAAA,CAAO,KAAA,GACP,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,CAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,EAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,EAAE,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAAA,QAAO,SAAA,CAAU,cAAA,GAAiB,kBAAA,CAAmB,SAAS,eAAgB,MAAA,EAAQ;AACpF,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,cAAA,CAAe,QAAQ,QAAQ,CAAA;AAC/B,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAM,CAAA;AACzB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC7C,QAAA,WAAA,CAAY,MAAA,EAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,MACrC;AAEA,MAAA,MAAM,OAAO,KAAA,IAAS,EAAA;AAAA,MACpB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,KAAK,EAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA;AAEf,MAAA,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,EAAE,KAC9B,MAAA,CAAO,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,KAC7B,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,EAAA,GACtB,IAAA,CAAK,EAAE,MAAM,CAAA,GAAI,CAAA,IAAK,CAAA,GACtB,IAAI,CAAA;AAAA,IACR,CAAC,CAAA;AAED,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,QAAQ,QAAA,EAAU;AACrE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,IAChD,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,QAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,IAC/C,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,QAAQ,QAAA,EAAU;AACvE,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU,WAAA,CAAY,MAAA,EAAQ,CAAA,EAAG,KAAK,MAAM,CAAA;AACjD,MAAA,OAAO,QAAQ,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,SAAS,SAAU,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,KAAK,GAAA,EAAK;AACpD,MAAA,IAAI,CAACA,QAAO,QAAA,CAAS,GAAG,GAAG,MAAM,IAAI,UAAU,6CAA6C,CAAA;AAC5F,MAAA,IAAI,QAAQ,GAAA,IAAO,KAAA,GAAQ,KAAK,MAAM,IAAI,WAAW,mCAAmC,CAAA;AACxF,MAAA,IAAI,SAAS,GAAA,GAAM,GAAA,CAAI,QAAQ,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAAA,IAC1E;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,WAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,KAAA,EAAO,MAAA,EAAQE,WAAAA,EAAY,QAAA,EAAU;AACxF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAIA,WAAU,CAAA,GAAI,CAAA;AAC/C,QAAA,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQA,WAAAA,EAAY,UAAU,CAAC,CAAA;AAAA,MACvD;AAEA,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,IAAA,CAAK,MAAM,IAAI,KAAA,GAAQ,GAAA;AACvB,MAAA,OAAO,EAAE,CAAA,GAAIA,WAAAA,KAAe,GAAA,IAAO,GAAA,CAAA,EAAQ;AACzC,QAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA,GAAO,GAAA;AAAA,MACrC;AAEA,MAAA,OAAO,MAAA,GAASA,WAAAA;AAAA,IAClB,CAAA;AAEA,IAAAF,OAAAA,CAAO,SAAA,CAAU,WAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,WAAA,GAAc,SAAS,WAAA,CAAa,KAAA,EAAO,MAAA,EAAQE,WAAAA,EAAY,QAAA,EAAU;AACxF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAAA,cAAaA,WAAAA,KAAe,CAAA;AAC5B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAIA,WAAU,CAAA,GAAI,CAAA;AAC/C,QAAA,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQA,WAAAA,EAAY,UAAU,CAAC,CAAA;AAAA,MACvD;AAEA,MAAA,IAAI,IAAIA,WAAAA,GAAa,CAAA;AACrB,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,GAAQ,GAAA;AAC3B,MAAA,OAAO,EAAE,CAAA,IAAK,CAAA,KAAM,GAAA,IAAO,GAAA,CAAA,EAAQ;AACjC,QAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA,GAAO,GAAA;AAAA,MACrC;AAEA,MAAA,OAAO,MAAA,GAASA,WAAAA;AAAA,IAClB,CAAA;AAEA,IAAAF,OAAAA,CAAO,SAAA,CAAU,UAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,aAAa,SAAS,UAAA,CAAY,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU;AAC1E,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,KAAM,CAAC,CAAA;AACvD,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,aAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,gBAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU;AAChF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,OAAQ,CAAC,CAAA;AACzD,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,aAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,gBAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU;AAChF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,OAAQ,CAAC,CAAA;AACzD,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,KAAU,CAAA;AAC1B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA;AAC5B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,aAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,gBAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU;AAChF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,YAAY,CAAC,CAAA;AAC7D,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,OAAAA,CAAO,SAAA,CAAU,aAAA,GACjBA,OAAAA,CAAO,SAAA,CAAU,gBAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU;AAChF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,YAAY,CAAC,CAAA;AAC7D,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,KAAU,EAAA;AAC1B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA;AAC5B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,SAAS,cAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,KAAK,GAAA,EAAK;AACrD,MAAA,UAAA,CAAW,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAE1C,MAAA,IAAI,EAAA,GAAK,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,UAAU,CAAC,CAAA;AAC1C,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,IAAI,EAAA,GAAK,OAAO,KAAA,IAAS,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AACxD,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,QAAQ,CAAA,GAAI,EAAA;AAChB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,SAAS,cAAA,CAAgB,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,KAAK,GAAA,EAAK;AACrD,MAAA,UAAA,CAAW,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAE1C,MAAA,IAAI,EAAA,GAAK,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,UAAU,CAAC,CAAA;AAC1C,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,IAAI,EAAA,GAAK,OAAO,KAAA,IAAS,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AACxD,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,MAAA,EAAA,GAAK,EAAA,IAAM,CAAA;AACX,MAAA,GAAA,CAAI,MAAM,CAAA,GAAI,EAAA;AACd,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB;AAEA,IAAAA,OAAAA,CAAO,UAAU,gBAAA,GAAmB,kBAAA,CAAmB,SAAS,gBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA,EAAG;AACnG,MAAA,OAAO,cAAA,CAAe,MAAM,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAC,CAAA,EAAG,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAAA,IACpF,CAAC,CAAA;AAED,IAAAA,OAAAA,CAAO,UAAU,gBAAA,GAAmB,kBAAA,CAAmB,SAAS,gBAAA,CAAkB,KAAA,EAAO,SAAS,CAAA,EAAG;AACnG,MAAA,OAAO,cAAA,CAAe,MAAM,KAAA,EAAO,MAAA,EAAQ,OAAO,CAAC,CAAA,EAAG,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAAA,IACpF,CAAC,CAAA;AAED,IAAAA,OAAAA,CAAO,UAAU,UAAA,GAAa,SAAS,WAAY,KAAA,EAAO,MAAA,EAAQE,aAAY,QAAA,EAAU;AACtF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,CAAA,GAAIA,cAAc,CAAC,CAAA;AAE9C,QAAA,QAAA,CAAS,MAAM,KAAA,EAAO,MAAA,EAAQA,aAAY,KAAA,GAAQ,CAAA,EAAG,CAAC,KAAK,CAAA;AAAA,MAC7D;AAEA,MAAA,IAAI,CAAA,GAAI,CAAA;AACR,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAA,CAAK,MAAM,IAAI,KAAA,GAAQ,GAAA;AACvB,MAAA,OAAO,EAAE,CAAA,GAAIA,WAAAA,KAAe,GAAA,IAAO,GAAA,CAAA,EAAQ;AACzC,QAAA,IAAI,KAAA,GAAQ,KAAK,GAAA,KAAQ,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,KAAM,CAAA,EAAG;AACxD,UAAA,GAAA,GAAM,CAAA;AAAA,QACR;AACA,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA,GAAA,CAAM,KAAA,GAAQ,GAAA,IAAQ,KAAK,GAAA,GAAM,GAAA;AAAA,MAClD;AAEA,MAAA,OAAO,MAAA,GAASA,WAAAA;AAAA,IAClB,CAAA;AAEA,IAAAF,OAAAA,CAAO,UAAU,UAAA,GAAa,SAAS,WAAY,KAAA,EAAO,MAAA,EAAQE,aAAY,QAAA,EAAU;AACtF,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,CAAA,GAAIA,cAAc,CAAC,CAAA;AAE9C,QAAA,QAAA,CAAS,MAAM,KAAA,EAAO,MAAA,EAAQA,aAAY,KAAA,GAAQ,CAAA,EAAG,CAAC,KAAK,CAAA;AAAA,MAC7D;AAEA,MAAA,IAAI,IAAIA,WAAAA,GAAa,CAAA;AACrB,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,GAAQ,GAAA;AAC3B,MAAA,OAAO,EAAE,CAAA,IAAK,CAAA,KAAM,GAAA,IAAO,GAAA,CAAA,EAAQ;AACjC,QAAA,IAAI,KAAA,GAAQ,KAAK,GAAA,KAAQ,CAAA,IAAK,KAAK,MAAA,GAAS,CAAA,GAAI,CAAC,CAAA,KAAM,CAAA,EAAG;AACxD,UAAA,GAAA,GAAM,CAAA;AAAA,QACR;AACA,QAAA,IAAA,CAAK,SAAS,CAAC,CAAA,GAAA,CAAM,KAAA,GAAQ,GAAA,IAAQ,KAAK,GAAA,GAAM,GAAA;AAAA,MAClD;AAEA,MAAA,OAAO,MAAA,GAASA,WAAAA;AAAA,IAClB,CAAA;AAEA,IAAAF,QAAO,SAAA,CAAU,SAAA,GAAY,SAAS,SAAA,CAAW,KAAA,EAAO,QAAQ,QAAA,EAAU;AACxE,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,KAAM,IAAK,CAAA;AAC3D,MAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,GAAA,GAAO,KAAA,GAAQ,CAAA;AACtC,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,OAAQ,MAAO,CAAA;AAC/D,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,OAAQ,MAAO,CAAA;AAC/D,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,KAAU,CAAA;AAC1B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA;AAC5B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,YAAY,WAAW,CAAA;AACvE,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,GAAQ,GAAA;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,UAAU,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,CAAA,EAAG,YAAY,WAAW,CAAA;AACvE,MAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,GAAa,KAAA,GAAQ,CAAA;AAC5C,MAAA,IAAA,CAAK,MAAM,IAAK,KAAA,KAAU,EAAA;AAC1B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,EAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,KAAU,CAAA;AAC9B,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,GAAK,KAAA,GAAQ,GAAA;AAC5B,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB,CAAA;AAEA,IAAAA,OAAAA,CAAO,UAAU,eAAA,GAAkB,kBAAA,CAAmB,SAAS,eAAA,CAAiB,KAAA,EAAO,SAAS,CAAA,EAAG;AACjG,MAAA,OAAO,cAAA,CAAe,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAC,OAAO,oBAAoB,CAAA,EAAG,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAAA,IACxG,CAAC,CAAA;AAED,IAAAA,OAAAA,CAAO,UAAU,eAAA,GAAkB,kBAAA,CAAmB,SAAS,eAAA,CAAiB,KAAA,EAAO,SAAS,CAAA,EAAG;AACjG,MAAA,OAAO,cAAA,CAAe,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAC,OAAO,oBAAoB,CAAA,EAAG,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAAA,IACxG,CAAC,CAAA;AAED,IAAA,SAAS,aAAc,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,KAAK,GAAA,EAAK;AACxD,MAAA,IAAI,SAAS,GAAA,GAAM,GAAA,CAAI,QAAQ,MAAM,IAAI,WAAW,oBAAoB,CAAA;AACxE,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAAA,IAC3D;AAEA,IAAA,SAAS,UAAA,CAAY,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,cAAc,QAAA,EAAU;AAC/D,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,YAAA,CAAa,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,CAAkD,CAAA;AAAA,MACrF;AACA,MAAA,OAAA,CAAQ,MAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,IAAI,CAAC,CAAA;AACrD,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,OAAO,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAAA,IACvD,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,YAAA,GAAe,SAAS,YAAA,CAAc,KAAA,EAAO,QAAQ,QAAA,EAAU;AAC9E,MAAA,OAAO,UAAA,CAAW,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,IACxD,CAAA;AAEA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,cAAc,QAAA,EAAU;AAChE,MAAA,KAAA,GAAQ,CAAC,KAAA;AACT,MAAA,MAAA,GAAS,MAAA,KAAW,CAAA;AACpB,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,YAAA,CAAa,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,CAAoD,CAAA;AAAA,MACvF;AACA,MAAA,OAAA,CAAQ,MAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,YAAA,EAAc,IAAI,CAAC,CAAA;AACrD,MAAA,OAAO,MAAA,GAAS,CAAA;AAAA,IAClB;AAEA,IAAAA,QAAO,SAAA,CAAU,aAAA,GAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,QAAQ,QAAA,EAAU;AAChF,MAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAAA,IACxD,CAAA;AAEA,IAAAA,QAAO,SAAA,CAAU,aAAA,GAAgB,SAAS,aAAA,CAAe,KAAA,EAAO,QAAQ,QAAA,EAAU;AAChF,MAAA,OAAO,WAAA,CAAY,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,IACzD,CAAA;AAGA,IAAAA,OAAAA,CAAO,UAAU,IAAA,GAAO,SAAS,KAAM,MAAA,EAAQ,WAAA,EAAa,OAAO,GAAA,EAAK;AACtE,MAAA,IAAI,CAACA,QAAO,QAAA,CAAS,MAAM,GAAG,MAAM,IAAI,UAAU,6BAA6B,CAAA;AAC/E,MAAA,IAAI,CAAC,OAAO,KAAA,GAAQ,CAAA;AACpB,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,KAAQ,CAAA,QAAS,IAAA,CAAK,MAAA;AAClC,MAAA,IAAI,WAAA,IAAe,MAAA,CAAO,MAAA,EAAQ,WAAA,GAAc,MAAA,CAAO,MAAA;AACvD,MAAA,IAAI,CAAC,aAAa,WAAA,GAAc,CAAA;AAChC,MAAA,IAAI,GAAA,GAAM,CAAA,IAAK,GAAA,GAAM,KAAA,EAAO,GAAA,GAAM,KAAA;AAGlC,MAAA,IAAI,GAAA,KAAQ,OAAO,OAAO,CAAA;AAC1B,MAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,CAAA;AAGrD,MAAA,IAAI,cAAc,CAAA,EAAG;AACnB,QAAA,MAAM,IAAI,WAAW,2BAA2B,CAAA;AAAA,MAClD;AACA,MAAA,IAAI,KAAA,GAAQ,KAAK,KAAA,IAAS,IAAA,CAAK,QAAQ,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAChF,MAAA,IAAI,GAAA,GAAM,CAAA,EAAG,MAAM,IAAI,WAAW,yBAAyB,CAAA;AAG3D,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,GAAA,GAAM,IAAA,CAAK,MAAA;AAClC,MAAA,IAAI,MAAA,CAAO,MAAA,GAAS,WAAA,GAAc,GAAA,GAAM,KAAA,EAAO;AAC7C,QAAA,GAAA,GAAM,MAAA,CAAO,SAAS,WAAA,GAAc,KAAA;AAAA,MACtC;AAEA,MAAA,MAAM,MAAM,GAAA,GAAM,KAAA;AAElB,MAAA,IAAI,SAAS,MAAA,IAAU,OAAO,UAAA,CAAW,SAAA,CAAU,eAAe,UAAA,EAAY;AAE5E,QAAA,IAAA,CAAK,UAAA,CAAW,WAAA,EAAa,KAAA,EAAO,GAAG,CAAA;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,UAAU,GAAA,CAAI,IAAA;AAAA,UACvB,MAAA;AAAA,UACA,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,GAAG,CAAA;AAAA,UACxB;AAAA,SACF;AAAA,MACF;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAMA,IAAAA,OAAAA,CAAO,UAAU,IAAA,GAAO,SAAS,KAAM,GAAA,EAAK,KAAA,EAAO,KAAK,QAAA,EAAU;AAEhE,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,UAAA,QAAA,GAAW,KAAA;AACX,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,GAAA,GAAM,IAAA,CAAK,MAAA;AAAA,QACb,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,UAAA,QAAA,GAAW,GAAA;AACX,UAAA,GAAA,GAAM,IAAA,CAAK,MAAA;AAAA,QACb;AACA,QAAA,IAAI,QAAA,KAAa,MAAA,IAAa,OAAO,QAAA,KAAa,QAAA,EAAU;AAC1D,UAAA,MAAM,IAAI,UAAU,2BAA2B,CAAA;AAAA,QACjD;AACA,QAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,CAACA,OAAAA,CAAO,UAAA,CAAW,QAAQ,CAAA,EAAG;AAChE,UAAA,MAAM,IAAI,SAAA,CAAU,oBAAA,GAAuB,QAAQ,CAAA;AAAA,QACrD;AACA,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,UAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC7B,UAAA,IAAK,QAAA,KAAa,MAAA,IAAU,IAAA,GAAO,GAAA,IAC/B,aAAa,QAAA,EAAU;AAEzB,YAAA,GAAA,GAAM,IAAA;AAAA,UACR;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,QAAA,GAAA,GAAM,GAAA,GAAM,GAAA;AAAA,MACd,CAAA,MAAA,IAAW,OAAO,GAAA,KAAQ,SAAA,EAAW;AACnC,QAAA,GAAA,GAAM,OAAO,GAAG,CAAA;AAAA,MAClB;AAGA,MAAA,IAAI,QAAQ,CAAA,IAAK,IAAA,CAAK,SAAS,KAAA,IAAS,IAAA,CAAK,SAAS,GAAA,EAAK;AACzD,QAAA,MAAM,IAAI,WAAW,oBAAoB,CAAA;AAAA,MAC3C;AAEA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,KAAA,GAAQ,KAAA,KAAU,CAAA;AAClB,MAAA,GAAA,GAAM,GAAA,KAAQ,MAAA,GAAY,IAAA,CAAK,MAAA,GAAS,GAAA,KAAQ,CAAA;AAEhD,MAAA,IAAI,CAAC,KAAK,GAAA,GAAM,CAAA;AAEhB,MAAA,IAAI,CAAA;AACJ,MAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,QAAA,KAAK,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAC5B,UAAA,IAAA,CAAK,CAAC,CAAA,GAAI,GAAA;AAAA,QACZ;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQA,QAAO,QAAA,CAAS,GAAG,IAC7B,GAAA,GACAA,OAAAA,CAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AAC7B,QAAA,MAAM,MAAM,KAAA,CAAM,MAAA;AAClB,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,MAAM,IAAI,SAAA,CAAU,aAAA,GAAgB,GAAA,GAClC,mCAAmC,CAAA;AAAA,QACvC;AACA,QAAA,KAAK,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,GAAM,KAAA,EAAO,EAAE,CAAA,EAAG;AAChC,UAAA,IAAA,CAAK,CAAA,GAAI,KAAK,CAAA,GAAI,KAAA,CAAM,IAAI,GAAG,CAAA;AAAA,QACjC;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAMA,IAAA,IAAM,SAAS,EAAC;AAChB,IAAA,SAAS,CAAA,CAAG,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM;AACjC,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAM,SAAA,SAAkB,IAAA,CAAK;AAAA,QACzC,WAAA,GAAe;AACb,UAAA,KAAA,EAAM;AAEN,UAAA,MAAA,CAAO,cAAA,CAAe,MAAM,SAAA,EAAW;AAAA,YACrC,KAAA,EAAO,UAAA,CAAW,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,YACvC,QAAA,EAAU,IAAA;AAAA,YACV,YAAA,EAAc;AAAA,WACf,CAAA;AAGD,UAAA,IAAA,CAAK,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,IAAI,KAAK,GAAG,CAAA,CAAA,CAAA;AAGhC,UAAA,IAAA,CAAK,KAAA;AAEL,UAAA,OAAO,IAAA,CAAK,IAAA;AAAA,QACd;AAAA,QAEA,IAAI,IAAA,GAAQ;AACV,UAAA,OAAO,GAAA;AAAA,QACT;AAAA,QAEA,IAAI,KAAM,KAAA,EAAO;AACf,UAAA,MAAA,CAAO,cAAA,CAAe,MAAM,MAAA,EAAQ;AAAA,YAClC,YAAA,EAAc,IAAA;AAAA,YACd,UAAA,EAAY,IAAA;AAAA,YACZ,KAAA;AAAA,YACA,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,QAEA,QAAA,GAAY;AACV,UAAA,OAAO,GAAG,IAAA,CAAK,IAAI,KAAK,GAAG,CAAA,GAAA,EAAM,KAAK,OAAO,CAAA,CAAA;AAAA,QAC/C;AAAA,OACF;AAAA,IACF;AAEA,IAAA,CAAA;AAAA,MAAE,0BAAA;AAAA,MACA,SAAU,IAAA,EAAM;AACd,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,OAAO,GAAG,IAAI,CAAA,4BAAA,CAAA;AAAA,QAChB;AAEA,QAAA,OAAO,gDAAA;AAAA,MACT,CAAA;AAAA,MAAG;AAAA,KAAU;AACf,IAAA,CAAA;AAAA,MAAE,sBAAA;AAAA,MACA,SAAU,MAAM,MAAA,EAAQ;AACtB,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,iDAAA,EAAoD,OAAO,MAAM,CAAA,CAAA;AAAA,MACtF,CAAA;AAAA,MAAG;AAAA,KAAS;AACd,IAAA,CAAA;AAAA,MAAE,kBAAA;AAAA,MACA,SAAU,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO;AAC3B,QAAA,IAAI,GAAA,GAAM,iBAAiB,GAAG,CAAA,kBAAA,CAAA;AAC9B,QAAA,IAAI,QAAA,GAAW,KAAA;AACf,QAAA,IAAI,MAAA,CAAO,UAAU,KAAK,CAAA,IAAK,KAAK,GAAA,CAAI,KAAK,CAAA,GAAI,CAAA,IAAK,EAAA,EAAI;AACxD,UAAA,QAAA,GAAW,qBAAA,CAAsB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAChD,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,UAAA,QAAA,GAAW,OAAO,KAAK,CAAA;AACvB,UAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,IAAK,OAAO,EAAE,CAAA,IAAK,KAAA,GAAQ,EAAE,MAAA,CAAO,CAAC,CAAA,IAAK,MAAA,CAAO,EAAE,CAAA,CAAA,EAAI;AACzE,YAAA,QAAA,GAAW,sBAAsB,QAAQ,CAAA;AAAA,UAC3C;AACA,UAAA,QAAA,IAAY,GAAA;AAAA,QACd;AACA,QAAA,GAAA,IAAO,CAAA,YAAA,EAAe,KAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAA;AACjD,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAAA,MAAG;AAAA,KAAU;AAEf,IAAA,SAAS,sBAAuB,GAAA,EAAK;AACnC,MAAA,IAAI,GAAA,GAAM,EAAA;AACV,MAAA,IAAI,IAAI,GAAA,CAAI,MAAA;AACZ,MAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,MAAM,CAAA,GAAI,CAAA;AACnC,MAAA,OAAO,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG;AAC7B,QAAA,GAAA,GAAM,CAAA,CAAA,EAAI,IAAI,KAAA,CAAM,CAAA,GAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA,CAAA;AAAA,MACrC;AACA,MAAA,OAAO,GAAG,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA,CAAA;AAAA,IACjC;AAKA,IAAA,SAAS,WAAA,CAAa,GAAA,EAAK,MAAA,EAAQE,WAAAA,EAAY;AAC7C,MAAA,cAAA,CAAe,QAAQ,QAAQ,CAAA;AAC/B,MAAA,IAAI,GAAA,CAAI,MAAM,CAAA,KAAM,MAAA,IAAa,IAAI,MAAA,GAASA,WAAU,MAAM,MAAA,EAAW;AACvE,QAAA,WAAA,CAAY,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAUA,WAAAA,GAAa,CAAA,CAAE,CAAA;AAAA,MACnD;AAAA,IACF;AAEA,IAAA,SAAS,WAAY,KAAA,EAAO,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,QAAQA,WAAAA,EAAY;AAC7D,MAAA,IAAI,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,GAAA,EAAK;AAC9B,QAAA,MAAM,CAAA,GAAI,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,EAAA;AAC1C,QAAA,IAAI,KAAA;AACJ,QAAoB;AAClB,UAAA,IAAI,GAAA,KAAQ,CAAA,IAAK,GAAA,KAAQ,MAAA,CAAO,CAAC,CAAA,EAAG;AAClC,YAAA,KAAA,GAAQ,CAAA,IAAA,EAAO,CAAC,CAAA,QAAA,EAAW,CAAC,QAAQA,WAAAA,GAAa,CAAA,IAAK,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,UAC7D,CAAA,MAAO;AACL,YAAA,KAAA,GAAQ,CAAA,MAAA,EAAS,CAAC,CAAA,IAAA,EAAA,CAAQA,WAAAA,GAAa,KAAK,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,iBACzCA,WAAAA,GAAa,CAAA,IAAK,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA,CAAA;AAAA,UACzC;AAAA,QACF;AAGA,QAAA,MAAM,IAAI,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,MACzD;AACA,MAAA,WAAA,CAAY,GAAA,EAAK,QAAQA,WAAU,CAAA;AAAA,IACrC;AAEA,IAAA,SAAS,cAAA,CAAgB,OAAO,IAAA,EAAM;AACpC,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,IAAI,MAAA,CAAO,oBAAA,CAAqB,IAAA,EAAM,UAAU,KAAK,CAAA;AAAA,MAC7D;AAAA,IACF;AAEA,IAAA,SAAS,WAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,IAAA,EAAM;AACzC,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,KAAM,KAAA,EAAO;AAC/B,QAAA,cAAA,CAAe,OAAO,IAAI,CAAA;AAC1B,QAAA,MAAM,IAAI,MAAA,CAAO,gBAAA,CAAyB,QAAA,EAAU,cAAc,KAAK,CAAA;AAAA,MACzE;AAEA,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,MAAM,IAAI,OAAO,wBAAA,EAAyB;AAAA,MAC5C;AAEA,MAAA,MAAM,IAAI,MAAA,CAAO,gBAAA;AAAA,QAAyB,QAAA;AAAA,QACR,CAAA,GAAA,EAAiB,CAAC,WAAW,MAAM,CAAA,CAAA;AAAA,QACnC;AAAA,OAAK;AAAA,IACzC;AAKA,IAAA,IAAM,iBAAA,GAAoB,mBAAA;AAE1B,IAAA,SAAS,YAAa,GAAA,EAAK;AAEzB,MAAA,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AAEtB,MAAA,GAAA,GAAM,GAAA,CAAI,IAAA,EAAK,CAAE,OAAA,CAAQ,mBAAmB,EAAE,CAAA;AAE9C,MAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,OAAO,EAAA;AAE3B,MAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AAC3B,QAAA,GAAA,GAAM,GAAA,GAAM,GAAA;AAAA,MACd;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,WAAA,CAAa,QAAQ,KAAA,EAAO;AACnC,MAAA,KAAA,GAAQ,KAAA,IAAS,QAAA;AACjB,MAAA,IAAI,SAAA;AACJ,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,IAAI,aAAA,GAAgB,IAAA;AACpB,MAAA,MAAM,QAAQ,EAAC;AAEf,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC/B,QAAA,SAAA,GAAY,MAAA,CAAO,WAAW,CAAC,CAAA;AAG/B,QAAA,IAAI,SAAA,GAAY,KAAA,IAAU,SAAA,GAAY,KAAA,EAAQ;AAE5C,UAAA,IAAI,CAAC,aAAA,EAAe;AAElB,YAAA,IAAI,YAAY,KAAA,EAAQ;AAEtB,cAAA,IAAA,CAAK,SAAS,CAAA,IAAK,EAAA,QAAU,IAAA,CAAK,GAAA,EAAM,KAAM,GAAI,CAAA;AAClD,cAAA;AAAA,YACF,CAAA,MAAA,IAAW,CAAA,GAAI,CAAA,KAAM,MAAA,EAAQ;AAE3B,cAAA,IAAA,CAAK,SAAS,CAAA,IAAK,EAAA,QAAU,IAAA,CAAK,GAAA,EAAM,KAAM,GAAI,CAAA;AAClD,cAAA;AAAA,YACF;AAGA,YAAA,aAAA,GAAgB,SAAA;AAEhB,YAAA;AAAA,UACF;AAGA,UAAA,IAAI,YAAY,KAAA,EAAQ;AACtB,YAAA,IAAA,CAAK,SAAS,CAAA,IAAK,EAAA,QAAU,IAAA,CAAK,GAAA,EAAM,KAAM,GAAI,CAAA;AAClD,YAAA,aAAA,GAAgB,SAAA;AAChB,YAAA;AAAA,UACF;AAGA,UAAA,SAAA,GAAA,CAAa,aAAA,GAAgB,KAAA,IAAU,EAAA,GAAK,SAAA,GAAY,KAAA,IAAU,KAAA;AAAA,QACpE,WAAW,aAAA,EAAe;AAExB,UAAA,IAAA,CAAK,SAAS,CAAA,IAAK,EAAA,QAAU,IAAA,CAAK,GAAA,EAAM,KAAM,GAAI,CAAA;AAAA,QACpD;AAEA,QAAA,aAAA,GAAgB,IAAA;AAGhB,QAAA,IAAI,YAAY,GAAA,EAAM;AACpB,UAAA,IAAA,CAAK,KAAA,IAAS,KAAK,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,QACtB,CAAA,MAAA,IAAW,YAAY,IAAA,EAAO;AAC5B,UAAA,IAAA,CAAK,KAAA,IAAS,KAAK,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,IAAA;AAAA,YACJ,aAAa,CAAA,GAAM,GAAA;AAAA,YACnB,YAAY,EAAA,GAAO;AAAA,WACrB;AAAA,QACF,CAAA,MAAA,IAAW,YAAY,KAAA,EAAS;AAC9B,UAAA,IAAA,CAAK,KAAA,IAAS,KAAK,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,IAAA;AAAA,YACJ,aAAa,EAAA,GAAM,GAAA;AAAA,YACnB,SAAA,IAAa,IAAM,EAAA,GAAO,GAAA;AAAA,YAC1B,YAAY,EAAA,GAAO;AAAA,WACrB;AAAA,QACF,CAAA,MAAA,IAAW,YAAY,OAAA,EAAU;AAC/B,UAAA,IAAA,CAAK,KAAA,IAAS,KAAK,CAAA,EAAG;AACtB,UAAA,KAAA,CAAM,IAAA;AAAA,YACJ,aAAa,EAAA,GAAO,GAAA;AAAA,YACpB,SAAA,IAAa,KAAM,EAAA,GAAO,GAAA;AAAA,YAC1B,SAAA,IAAa,IAAM,EAAA,GAAO,GAAA;AAAA,YAC1B,YAAY,EAAA,GAAO;AAAA,WACrB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,QACtC;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,SAAS,aAAc,GAAA,EAAK;AAC1B,MAAA,MAAM,YAAY,EAAC;AACnB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAEnC,QAAA,SAAA,CAAU,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,CAAC,IAAI,GAAI,CAAA;AAAA,MACzC;AACA,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,SAAS,cAAA,CAAgB,KAAK,KAAA,EAAO;AACnC,MAAA,IAAI,GAAG,EAAA,EAAI,EAAA;AACX,MAAA,MAAM,YAAY,EAAC;AACnB,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AACnC,QAAA,IAAA,CAAK,KAAA,IAAS,KAAK,CAAA,EAAG;AAEtB,QAAA,CAAA,GAAI,GAAA,CAAI,WAAW,CAAC,CAAA;AACpB,QAAA,EAAA,GAAK,CAAA,IAAK,CAAA;AACV,QAAA,EAAA,GAAK,CAAA,GAAI,GAAA;AACT,QAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AACjB,QAAA,SAAA,CAAU,KAAK,EAAE,CAAA;AAAA,MACnB;AAEA,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,SAASD,eAAe,GAAA,EAAK;AAC3B,MAAA,OAAO,MAAA,CAAO,WAAA,CAAY,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,IAC5C;AAEA,IAAA,SAAS,UAAA,CAAY,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ;AAC7C,MAAA,IAAI,CAAA;AACJ,MAAA,KAAK,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAAG;AAC3B,QAAA,IAAK,IAAI,MAAA,IAAU,GAAA,CAAI,MAAA,IAAY,CAAA,IAAK,IAAI,MAAA,EAAS;AACrD,QAAA,GAAA,CAAI,CAAA,GAAI,MAAM,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA;AAAA,MACzB;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAKA,IAAA,SAAS,UAAA,CAAY,KAAK,IAAA,EAAM;AAC9B,MAAA,OAAO,GAAA,YAAe,IAAA,IACnB,GAAA,IAAO,IAAA,IAAQ,IAAI,WAAA,IAAe,IAAA,IAAQ,GAAA,CAAI,WAAA,CAAY,IAAA,IAAQ,IAAA,IACjE,GAAA,CAAI,WAAA,CAAY,SAAS,IAAA,CAAK,IAAA;AAAA,IACpC;AACA,IAAA,SAAS,YAAa,GAAA,EAAK;AAEzB,MAAA,OAAO,GAAA,KAAQ,GAAA;AAAA,IACjB;AAIA,IAAA,IAAM,uBAAuB,WAAY;AACvC,MAAA,MAAM,QAAA,GAAW,kBAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,EAAE,CAAA,EAAG;AAC3B,QAAA,MAAM,MAAM,CAAA,GAAI,EAAA;AAChB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,EAAE,CAAA,EAAG;AAC3B,UAAA,KAAA,CAAM,MAAM,CAAC,CAAA,GAAI,SAAS,CAAC,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,QAC3C;AAAA,MACF;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,GAAG;AAGH,IAAA,SAAS,mBAAoB,EAAA,EAAI;AAC/B,MAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,sBAAA,GAAyB,EAAA;AAAA,IAClE;AAEA,IAAA,SAAS,sBAAA,GAA0B;AACjC,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACljEO,SAAS,WAAW,GAAA,EAAyB;AAClD,EAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,IAAI,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAChD,EAAA,IAAI,EAAE,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAA,CAAE,SAAS,CAAC,CAAA;AACvC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,WAAW,CAAA,EAAuB;AAChD,EAAA,OAAO,MAAM,IAAA,CAAK,CAAC,CAAA,CAChB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ;AAGO,SAAS,cAAc,CAAA,EAAuB;AACnD,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK,CAAA,GAAK,CAAA,IAAK,EAAA,GAAM,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AAC9D,EAAA,OAAO,CAAA;AACT;AAGO,SAAS,gBAAgB,KAAA,EAA2B;AACzD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,EAAA,EAAI,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAC5B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,QAAQ,CAAA,EAAmB;AACzC,EAAA,OAAO,OAAO,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AAC/C;AAGO,SAAS,eAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACrD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,GAAA,CAAI,GAAA,CAAI,GAAG,GAAG,CAAA;AACd,IAAA,GAAA,IAAO,CAAA,CAAE,MAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;;;ACpDA,IAAM,YAAA,GAAe,CAAA;AAQd,SAAS,kBAAkB,SAAA,EAA2B;AAC3D,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAE,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA;AACzC,EAAA,MAAM,QAAA,GAAW,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,OAAA;AAEjD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAChC,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAEhC,EAAA,IAAI,WAAA,CAAY,SAAS,YAAA,EAAc;AACrC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,4CAAA,EAA+C,YAAY,CAAA,GAAA,EAAM,OAAO,CAAA;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,MAAA,CAAO,YAAA,EAAc,GAAG,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,WAAA,GAAc,aAAa,CAAA;AAClD,EAAA,OAAO,UAAA,GAAa,CAAC,OAAA,GAAU,OAAA;AACjC;AAMO,SAAS,6BACd,aAAA,EACQ;AACR,EAAA,IAAI,CAAC,aAAA,IAAiB,aAAA,CAAc,IAAA,EAAK,KAAM,IAAI,OAAO,EAAA;AAC1D,EAAA,IAAI;AACF,IAAA,OAAO,kBAAkB,aAAa,CAAA;AAAA,EACxC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AAGO,SAAS,mBAAmB,OAAA,EAAyB;AAC1D,EAAA,MAAM,aAAa,OAAA,GAAU,EAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,UAAA,GAAa,CAAC,OAAA,GAAU,OAAA;AAEzC,EAAA,MAAM,gBAAgB,QAAA,CAAS,QAAA,GAAW,QAAA,CAAS,YAAA,GAAe,GAAG,GAAG,CAAA;AACxE,EAAA,MAAM,cAAc,aAAA,CAAc,KAAA,CAAM,CAAA,EAAG,CAAC,YAAY,CAAA,IAAK,GAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,CAAM,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEpD,EAAA,IAAI,mBAAmB,EAAA,EAAI;AACzB,IAAA,OAAO,UAAA,GAAa,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,WAAA;AAAA,EAC1C;AACA,EAAA,OAAO,UAAA,GACH,IAAI,WAAW,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,GACjC,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA;AACtC;AAGO,IAAM,SAAA,GAAY;ACpDzB,IAAM,KAAA,GAAQE,mBAAA;AACd,IAAM,MAAA,GAAS,gBAAA;AACf,IAAM,gBAAA,GAAmB,GAAA;AAgBlB,SAAS,4BAA4B,IAAA,EAAoC;AAC9E,EAAA,OAAO;AAAA,IACL,CAAA,sCAAA,CAAA;AAAA,IACA,CAAA,mBAAA,CAAA;AAAA,IACA,CAAA,QAAA,EAAW,KAAK,MAAM,CAAA,CAAA;AAAA,IACtB,CAAA,SAAA,EAAY,KAAK,iBAAiB,CAAA,CAAA;AAAA,IAClC,CAAA,QAAA,EAAW,KAAK,eAAe,CAAA,CAAA;AAAA,IAC/B,YAAY,gBAAgB,CAAA,CAAA;AAAA,IAC5B,CAAA,SAAA,EAAY,KAAK,OAAO,CAAA,CAAA;AAAA,IACxB,CAAA,CAAA;AAAA,IACA,CAAA,gFAAA,CAAA;AAAA,IACA,CAAA,kDAAA,CAAA;AAAA,IACA,CAAA,4DAAA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAEO,IAAM,oBAAA,GACX;AAWK,SAAS,wBAAwB,YAAA,EAGtC;AACA,EAAA,MAAM,QAAA,GACJ,OAAO,YAAA,KAAiB,QAAA,GACpB,YAAA,CAAa,UAAA,CAAW,IAAI,CAAA,GAC1B,YAAA,CAAa,KAAA,CAAM,CAAC,CAAA,GACpB,YAAA,GACF,YAAA;AACN,EAAA,MAAM,MAAM,OAAO,QAAA,KAAa,QAAA,GAAW,UAAA,CAAW,QAAQ,CAAA,GAAI,QAAA;AAClE,EAAA,MAAM,MAAMC,SAAA,CAAKC,WAAA,EAAQ,GAAA,EAAK,MAAA,EAAW,QAAQ,EAAE,CAAA;AACnD,EAAA,OAAO,EAAE,UAAA,EAAY,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,WAAA,EAAa,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA,EAAE;AACxE;AAMO,SAAS,wBAAA,CACd,YACA,WAAA,EAC2D;AAC3D,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,UAAA,EAAY,IAAI,CAAA;AAC7C,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,WAAA,EAAa,IAAI,CAAA;AAC9C,EAAA,MAAM,cAAc,IAAI,UAAA,CAAW,CAAA,CAAE,MAAA,GAAS,EAAE,MAAM,CAAA;AACtD,EAAA,WAAA,CAAY,GAAA,CAAI,GAAG,CAAC,CAAA;AACpB,EAAA,WAAA,CAAY,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA;AAC3B,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,WAAA,EAAY;AAC7B;AAGO,SAAS,wBAAwB,WAAA,EAA8B;AACpE,EAAA,OAAQ,IAAA,GAAO,WAAW,WAAW,CAAA;AACvC;AAMO,SAAS,wBAAwB,OAAA,EAGtC;AACA,EAAA,MAAM,GAAA,GACJ,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,GAClD,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GACf,OAAA;AACN,EAAA,MAAM,KAAA,GAAQ,WAAW,GAAa,CAAA;AACtC,EAAA,IAAI,KAAA,CAAM,SAAS,EAAA,EAAI;AACrB,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,EAAE,UAAA,EAAY,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,WAAA,EAAa,KAAA,CAAM,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA,EAAE;AAC5E;AAMA,SAAS,8BAAA,CACP,YACA,UAAA,EACY;AACZ,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,eAAA,CAAgB,OAAA,CAAQ,UAAU,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAU,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA;AACvD,EAAA,IAAI,MAAA,KAAW,EAAA,EAAI,MAAM,IAAI,MAAM,gBAAgB,CAAA;AACnD,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,CAAE,WAAW,IAAI,CAAA;AAC3C;AAEA,SAAS,iBAAiB,YAAA,EAGxB;AACA,EAAA,MAAM,EAAA,GAAKC,gBAAW,YAAY,CAAA;AAClC,EAAA,OAAO,EAAE,EAAA,EAAI,OAAA,EAAS,EAAA,CAAG,CAAC,CAAA,EAAE;AAC9B;AAEA,SAAS,sBAAA,CACP,aACA,EAAA,EACmE;AACnE,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,EAAE,CAAA,GAAI,CAAA;AAClC,EAAA,IAAI,KAAA,KAAU,EAAA,EAAI,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,eAAA,CAAgB,IAAA,CAAK,SAAS,KAAK,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,eAAA,CAAgB,OAAA,CAAQ,WAAW,CAAA;AACzD,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AACjC,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,UAAA,CAAW,KAAK,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAOA,eAAA,CAAW,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,EAAA,MAAM,OAAO,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAA;AAC7C,EAAA,OAAO,EAAE,cAAA,EAAgB,IAAA,EAAM,yBAAA,EAA2B,YAAA,EAAa;AACzE;AAMO,SAAS,gCACd,uBAAA,EAQA;AACA,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAY,GAAI,uBAAA;AAAA,IAClC;AAAA,GACF;AACA,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,KAAA,CAAM,gBAAA,EAAiB;AACnD,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,YAAA,CAAa,aAAA,EAAe,IAAI,CAAA;AAE9D,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,aAAA,EAAe,UAAU,CAAA;AACvE,EAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAQ,GAAI,iBAAiB,MAAM,CAAA;AAC/C,EAAA,MAAM,EAAE,cAAA,EAAgB,yBAAA,EAA0B,GAAI,sBAAA;AAAA,IACpD,WAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,qBAAA,GAAwB,2BAAA;AAAA,IAC5B;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,qBAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,IAAI,UAAA,CAAW,CAAC,OAAO,CAAC;AAAA,GACpC;AACF;AAMO,SAAS,6BAAA,CACd,yBACA,mBAAA,EAMA;AACA,EAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAY,GAAI,uBAAA;AAAA,IAClC;AAAA,GACF;AACA,EAAA,MAAM,CAAA,GAAK,oBAA+B,UAAA,CAAW,IAAI,IACpD,mBAAA,CAA+B,KAAA,CAAM,CAAC,CAAA,GACvC,mBAAA;AACJ,EAAA,MAAM,aAAA,GAAgB,WAAW,CAAW,CAAA;AAC5C,EAAA,IAAI,aAAA,CAAc,WAAW,EAAA,EAAI;AAC/B,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,YAAA,CAAa,aAAA,EAAe,IAAI,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,aAAA,EAAe,UAAU,CAAA;AACvE,EAAA,MAAM,EAAE,EAAA,EAAI,OAAA,EAAQ,GAAI,iBAAiB,MAAM,CAAA;AAC/C,EAAA,MAAM,EAAE,cAAA,EAAe,GAAI,sBAAA,CAAuB,aAAa,EAAE,CAAA;AACjE,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA,EAAU,IAAI,UAAA,CAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IAClC;AAAA,GACF;AACF;AAWO,SAAS,yBAAA,CACd,YACA,eAAA,EACqC;AACrC,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,UAAA,EAAY,eAAe,CAAA;AACzE,EAAA,OAAO,iBAAiB,MAAM,CAAA;AAChC;AAMO,SAAS,kBAAkB,IAAA,EAItB;AACV,EAAA,OACE,0BAA0B,IAAA,CAAK,UAAA,EAAY,KAAK,eAAe,CAAA,CAAE,YACjE,IAAA,CAAK,OAAA;AAET;AAQO,SAAS,6BAA6B,IAAA,EAI9B;AACb,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA;AACtB,EAAA,MAAM,EAAE,EAAA,EAAG,GAAI,0BAA0B,IAAA,CAAK,UAAA,EAAY,KAAK,eAAe,CAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,EAAE,CAAA,GAAI,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,IAAA,CAAK,WAAW,CAAA,GAAI,CAAA;AAChD,EAAA,MAAM,OAAA,GAAA,CAAW,QAAQ,KAAA,IAAS,CAAA;AAClC,EAAA,IAAI,OAAA,KAAY,EAAA,EAAI,MAAM,IAAI,MAAM,mCAAmC,CAAA;AACvE,EAAA,OAAO,gBAAgB,OAAO,CAAA;AAChC;AAMA,IAAM,cAAA,GAAiB,qBAAA;AAGhB,SAAS,4BACd,cAAA,EACY;AACZ,EAAA,MAAM,GAAA,GACJ,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,CAAe,UAAA,CAAW,IAAI,CAAA,GAChE,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,GACtB,cAAA;AACN,EAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,MAAM,cAAc,CAAA;AAC1D,EAAA,MAAM,MAAMF,SAAA,CAAKC,WAAA,EAAQ,IAAA,EAAM,MAAA,EAAW,8BAA8B,EAAE,CAAA;AAC1E,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA;AACtB,EAAA,IAAI,MAAA,GAAS,aAAA,CAAc,GAAG,CAAA,GAAI,CAAA;AAClC,EAAA,IAAI,MAAA,KAAW,IAAI,MAAA,GAAS,EAAA;AAC5B,EAAA,OAAO,gBAAgB,MAAM,CAAA;AAC/B;AAOO,SAAS,4BACd,yBAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,EAAY,CAAE,OAAO,2BAA2B,CAAA;AACnE,EAAA,MAAM,QAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,0BAA0B,MAAM,CAAA;AAC7E,EAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA;AACnB,EAAA,KAAA,CAAM,GAAA,CAAI,yBAAA,EAA2B,MAAA,CAAO,MAAM,CAAA;AAClD,EAAA,MAAM,IAAA,GAAOA,YAAO,KAAK,CAAA;AACzB,EAAA,OAAOE,kBAAA,CAAQ,mBAAmB,MAAA,CAAO,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAC,CAAA;AAClE;AAGO,SAAS,4BACd,yBAAA,EACQ;AACR,EAAA,OAAO,2BAAA,CAA4B,yBAAyB,CAAA,CAAE,SAAA,EAAU;AAC1E;AAMO,SAAS,wBAAwB,cAAA,EAAoC;AAC1E,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,KAAK,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAOD,eAAA,CAAW,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7C,EAAA,OAAO,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,KAAA,CAAM,EAAE,CAAC,CAAA;AACzC;AAGO,SAAS,8CACd,cAAA,EACQ;AACR,EAAA,OAAO,2BAAA,CAA4B,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,KAAK,CAAC,CAAA;AAC9E;AAGO,SAAS,8CACd,cAAA,EACS;AACT,EAAA,OAAO,2BAAA,CAA4B,KAAA,CAAM,YAAA,CAAa,cAAA,EAAgB,KAAK,CAAC,CAAA;AAC9E;;;AC9TO,SAAS,kBAAkB,IAAA,EAIlB;AACd,EAAA,MAAM,UAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,YAAA,IAAgB,KAAK,aAAA,EAAe;AAC7C,IAAA,IACE,CAAC,iBAAA,CAAkB;AAAA,MACjB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,iBAAiB,YAAA,CAAa,eAAA;AAAA,MAC9B,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA,EACD;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,iBAAiB,4BAAA,CAA6B;AAAA,MAClD,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,iBAAiB,YAAA,CAAa;AAAA,KAC/B,CAAA;AACD,IAAA,IACE,uBAAA,CAAwB,cAAc,CAAA,CAAE,WAAA,OACxC,YAAA,CAAa,cAAA,CAAe,aAAY,EACxC;AACA,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,YAAA;AAAA,MACA,cAAA;AAAA,MACA,qBAAA,EAAuB,8CAA8C,cAAc;AAAA,KACpF,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;ACvDO,IAAM,eAAA,GAAkB;AACxB,IAAM,OAAA,GACX;AA2BF,IAAI,SAAA,GAA+B,IAAA;AAGnC,eAAsB,WAAA,GAAmC;AACvD,EAAA,IAAI,CAAC,SAAA,EAAW;AAEd,IAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,EAAE,YAAY,UAAA,CAAA,EAAa;AAClE,MAAA,MAAM,YAAY,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,MAAA,OAAA,CAAA,cAAA,EAAA,CAAA,CAAA;AACxB,MAAC,UAAA,CAAuC,SAAS,SAAA,CAAU,MAAA;AAAA,IAC7D;AACA,IAAA,SAAA,GAAa,MAAME,yBAAA,EAAc;AAAA,EACnC;AACA,EAAA,OAAO,SAAA;AACT;AAGO,SAAS,UAAA,CAAW,UAAsB,MAAA,EAA0B;AACzE,EAAA,OAAO,QAAA,CAAS,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,MAAM,CAAC,CAAA;AAC7C;AAGO,SAAS,kBAAA,GAA6B;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAC5B,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO,CAAA,GAAA,CAAK,CAAA,IAAK,EAAA,IAAM,OAAO,CAAC,CAAA;AAC/C,EAAA,OAAA,CAAQ,CAAA,GAAI,SAAS,QAAA,EAAS;AAChC;AAUA,eAAsB,cAAc,IAAA,EAMR;AAC1B,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,EAAY;AACnC,EAAA,MAAM,CAAA,GAAI,CAAC,EAAA,KAAiB,UAAA,CAAW,UAAU,EAAE,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,CAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAC,CAAA;AAC5D,EAAA,MAAM,gBAAgB,CAAA,CAAE,CAAC,KAAK,SAAA,EAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AACrD,EAAA,MAAM,aAAa,CAAA,CAAE,CAAC,KAAK,KAAA,EAAO,KAAA,EAAO,aAAa,CAAC,CAAA;AACvD,EAAA,MAAM,aAAA,GAAgB,CAAA,CAAE,CAAC,IAAA,CAAK,SAAS,CAAC,CAAA;AACxC,EAAA,OAAO,EAAE,KAAA,EAAO,aAAA,EAAe,UAAA,EAAY,aAAA,EAAc;AAC3D;AAGO,SAAS,cAAA,GAAwD;AACtE,EAAA,OAAO,EAAE,SAAA,EAAW,kBAAA,EAAmB,EAAG,MAAA,EAAQ,oBAAmB,EAAE;AACzE;AAGO,SAAS,aAAa,KAAA,EAA2B;AACtD,EAAA,OAAO,MACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,EAAE,KAAK,CAAA,CACtB,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,OAAO,CAAA,CAAE,KAAK,GAAG,EAAE,CAAA;AACjD;ACpGO,IAAM,UAAA,GAAa;AACnB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,wBAAA,GAA2B;AAExC,IAAM,cAAA,GAA4C;AAAA,EAChD,IAAA,EAAM,CAAA;AAAA,EACN,EAAA,EAAI,CAAA;AAAA,EACJ,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,GAAA,EAAK,CAAA;AAAA,EACL,MAAA,EAAQ,CAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAEO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAEO,IAAM,oBAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,EAC9C,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF;AAEA,SAAS,iBAAiB,IAAA,EAAuB;AAC/C,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,oBAAoB,OAAO,KAAA;AACtD,EAAA,OAAO,0BAAA,CAA2B,KAAK,IAAI,CAAA;AAC7C;AAGO,SAAS,sBAAsB,SAAA,EAA+B;AACnE,EAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,iBAAiB,mCAAmC,CAAA;AAE5E,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,OAAA,IAAW,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,EAAG;AACxC,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAA,EAAK;AACzB,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,iBAAiB,yBAAyB,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAChC,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,MAAM,IAAI,gBAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,QAAQ,EAAE,IAAA,EAAK;AACzC,IAAA,MAAM,OAAO,GAAA,CAAI,KAAA,CAAM,QAAA,GAAW,CAAC,EAAE,IAAA,EAAK;AAC1C,IAAA,IAAI,IAAA,CAAK,SAAS,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,MAAA,CAAO,cAAA,EAAgB,IAAI,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,CAAC,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,EAAA,EAAI,MAAA,CAAO,OAAO,MAAM,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,CAAA;AACrD,IAAA,IAAI,OAAO,MAAA,GAAS,UAAA,EAAY,MAAM,IAAI,iBAAiB,iBAAiB,CAAA;AAAA,EAC9E;AAEA,EAAA,MAAM,SAAA,GAAY,2BAA2B,MAAM,CAAA;AACnD,EAAA,IAAI,SAAA,CAAU,SAAS,GAAA,EAAK;AAC1B,IAAA,MAAM,IAAI,iBAAiB,4BAA4B,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,2BAA2B,MAAA,EAA4B;AACrE,EAAA,OAAO,MAAA,CACJ,OAAO,CAAC,CAAA,KAAM,EAAE,IAAA,CAAK,IAAA,EAAM,CAAA,CAC3B,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA,CACvC,IAAA,CAAK,GAAG,CAAA;AACb;AAEO,SAAS,yBAAyB,MAAA,EAAgC;AACvE,EAAA,MAAM,KAAA,GAAkB,CAAC,MAAA,CAAO,MAAM,CAAA;AACtC,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,YAAY,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,EAAE,IAAI,CAAA;AACjD,IAAA,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA,CAAE,IAAI,GAAG,SAAA,CAAU,MAAA,EAAQ,GAAG,SAAS,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAI,WAAW,KAAK,CAAA;AAC7B;AAEO,SAAS,wBAAwB,OAAA,EAA6B;AACnE,EAAA,OAAO,UAAA,CAAW,IAAA,CAAKC,iBAAA,CAAO,sBAAA,CAAuB,OAAO,CAAC,CAAA;AAC/D;AAGA,eAAsB,wBAAA,CACpB,cAAA,EACA,IAAA,EACA,gBAAA,EACA,UAAkB,CAAA,EACG;AACrB,EAAA,MAAM,MAAA,GAAS,sBAAsB,gBAAgB,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,yBAAyB,MAAM,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AACrC,EAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAW,CAAC,CAAA;AACrC,EAAA,IAAI,SAAS,YAAA,CAAa,MAAM,EAAE,SAAA,CAAU,CAAA,EAAG,SAAS,KAAK,CAAA;AAE7D,EAAA,MAAM,WAAW,IAAI,UAAA;AAAA,IACnB,eAAe,MAAA,GACb,SAAA,CAAU,MAAA,GACV,YAAA,CAAa,SACb,SAAA,CAAU;AAAA,GACd;AACA,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,QAAA,CAAS,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAChC,EAAA,GAAA,IAAO,cAAA,CAAe,MAAA;AACtB,EAAA,QAAA,CAAS,GAAA,CAAI,WAAW,GAAG,CAAA;AAC3B,EAAA,GAAA,IAAO,SAAA,CAAU,MAAA;AACjB,EAAA,QAAA,CAAS,GAAA,CAAI,cAAc,GAAG,CAAA;AAC9B,EAAA,GAAA,IAAO,YAAA,CAAa,MAAA;AACpB,EAAA,QAAA,CAAS,GAAA,CAAI,WAAW,GAAG,CAAA;AAE3B,EAAA,MAAM,aAAa,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,QAAQ,CAAA;AACjE,EAAA,OAAO,IAAI,WAAW,UAAU,CAAA;AAClC;AAEA,eAAsB,eAAA,CACpB,SAAA,EACA,IAAA,EACA,gBAAA,EACA,UAAkB,CAAA,EACG;AACrB,EAAA,OAAO,wBAAA;AAAA,IACL,wBAAwB,SAAS,CAAA;AAAA,IACjC,IAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,UAAU,KAAA,EAAwB;AACzC,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,EAAA,IAAI,CAAA,KAAM,MAAA,IAAU,CAAA,KAAM,GAAA,EAAK,OAAO,IAAA;AACtC,EAAA,IAAI,MAAM,OAAA,IAAW,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,IAAI,OAAO,KAAA;AACnD,EAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA;AACzD;AAEA,SAAS,SAAA,CAAU,OAAe,GAAA,EAAqB;AACrD,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,QAAS,IAAI,oBAAA,CAAqB,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE,CAAA;AAChF,EAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,EAAA,IAAI,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,GAAA,EAAK;AACrB,IAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAE,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,eAAe,KAAA,EAA2B;AACjD,EAAA,MAAM,MAAM,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC3C,EAAA,IAAI,IAAI,MAAA,KAAW,EAAA,EAAI,MAAM,IAAI,qBAAqB,oBAAoB,CAAA;AAC1E,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,qBAAA,CACd,aACA,SAAA,EACY;AACZ,EAAA,MAAM,QAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA,IAAK,EAAA;AACzC,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,MAAA;AACH,QAAA,KAAA,CAAM,IAAA,CAAK,IAAI,UAAA,CAAW,CAAC,SAAA,CAAU,KAAK,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAC,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,KAAA,CAAM,IAAA,CAAK,IAAI,UAAA,CAAW,CAAC,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,QAAA;AAAA,MACF,KAAK,KAAA,EAAO;AACV,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAC,CAAA;AAC5B,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,MAAM,CAAC,CAAA,EAAG,KAAK,CAAA;AAC7E,QAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,QAAA;AAAA,MACF;AAAA,MACA,KAAK,KAAA,EAAO;AACV,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAC,CAAA;AAC5B,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,WAAW,CAAC,CAAA,EAAG,KAAK,CAAA;AAClF,QAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,QAAA;AAAA,MACF;AAAA,MACA,KAAK,KAAA,EAAO;AACV,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAC,CAAA;AAC5B,QAAA,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,CAAE,YAAA;AAAA,UACvB,CAAA;AAAA,UACA,SAAA,CAAU,OAAO,qBAAqB,CAAA;AAAA,UACtC;AAAA,SACF;AACA,QAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC5C,QAAA,IAAI,KAAA,CAAM,SAAS,oBAAA,EAAsB;AACvC,UAAA,MAAM,IAAI,qBAAqB,uBAAuB,CAAA;AAAA,QACxD;AACA,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,CAAC,CAAA;AAC5B,QAAA,IAAI,QAAA,CAAS,IAAI,MAAM,CAAA,CAAE,UAAU,CAAA,EAAG,KAAA,CAAM,QAAQ,KAAK,CAAA;AACzD,QAAA,KAAA,CAAM,IAAA,CAAK,KAAK,KAAK,CAAA;AACrB,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA;AACH,QAAA,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,KAAK,CAAC,CAAA;AAChC,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,kBAAA,EAAqB,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA;AACpE,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACpD,EAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,IAAA,MAAM,IAAI,qBAAqB,4BAA4B,CAAA;AAAA,EAC7D;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAK,CAAA;AAChC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,GAAA,CAAI,GAAA,CAAI,GAAG,MAAM,CAAA;AACjB,IAAA,MAAA,IAAU,CAAA,CAAE,MAAA;AAAA,EACd;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,qBAAA,CACd,MACA,SAAA,EACwB;AACxB,EAAA,MAAM,GAAA,GAAM,IAAI,WAAA,EAAY;AAC5B,EAAA,MAAM,SAAiC,EAAC;AACxC,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,MAAA;AACH,QAAA,IAAI,UAAU,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,qBAAqB,gBAAgB,CAAA;AAC1E,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA,GAAI,KAAK,MAAM,CAAA,KAAM,IAAI,MAAA,GAAS,OAAA;AACnD,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF,KAAK,IAAA;AACH,QAAA,IAAI,UAAU,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,qBAAqB,cAAc,CAAA;AACxE,QAAA,MAAA,CAAO,MAAM,IAAI,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AACxC,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF,KAAK,KAAA,EAAO;AACV,QAAA,IAAI,SAAS,CAAA,GAAI,IAAA,CAAK,QAAQ,MAAM,IAAI,qBAAqB,eAAe,CAAA;AAC5E,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AAAA,UACnB,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAA,GAAa,MAAA,EAAQ,CAAC,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,KAAK;AAAA,SAC3E;AACA,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF;AAAA,MACA,KAAK,KAAA,EAAO;AACV,QAAA,IAAI,SAAS,CAAA,GAAI,IAAA,CAAK,QAAQ,MAAM,IAAI,qBAAqB,eAAe,CAAA;AAC5E,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AAAA,UACnB,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAA,GAAa,MAAA,EAAQ,CAAC,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,KAAK;AAAA,SAC3E;AACA,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF;AAAA,MACA,KAAK,KAAA,EAAO;AACV,QAAA,IAAI,SAAS,CAAA,GAAI,IAAA,CAAK,QAAQ,MAAM,IAAI,qBAAqB,eAAe,CAAA;AAC5E,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AAAA,UACnB,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAA,GAAa,MAAA,EAAQ,CAAC,CAAA,CAAE,YAAA,CAAa,CAAA,EAAG,KAAK;AAAA,SAC9E;AACA,QAAA,MAAA,IAAU,CAAA;AACV,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,IAAI,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ;AAC5B,UAAA,MAAM,IAAI,qBAAqB,yBAAyB,CAAA;AAAA,QAC1D;AACA,QAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,UAAA,GAAa,MAAA,EAAQ,CAAC,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,KAAK,CAAA;AACrF,QAAA,MAAA,IAAU,CAAA;AACV,QAAA,IAAI,SAAS,GAAA,GAAM,IAAA,CAAK,QAAQ,MAAM,IAAI,qBAAqB,kBAAkB,CAAA;AACjF,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,GAAG,CAAC,CAAA;AAChE,QAAA,MAAA,IAAU,GAAA;AACV,QAAA;AAAA,MACF;AAAA,MACA,KAAK,QAAA,EAAU;AACb,QAAA,IAAI,SAAS,EAAA,GAAK,IAAA,CAAK,QAAQ,MAAM,IAAI,qBAAqB,kBAAkB,CAAA;AAChF,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,EAAE,CAAA;AAC5C,QAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GACf,IAAA,GAAO,MAAM,IAAA,CAAK,KAAK,EAAE,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC9E,QAAA,MAAA,IAAU,EAAA;AACV,QAAA;AAAA,MACF;AAAA,MACA;AACE,QAAA,MAAM,IAAI,oBAAA,CAAqB,CAAA,kBAAA,EAAqB,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA;AACpE,EACF;AACA,EAAA,IAAI,MAAA,KAAW,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,qBAAqB,oCAAoC,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA;AACT;;;AChTA,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,QAAA,GAAW,EAAA;AAEjB,SAAS,cAAc,KAAA,EAAgC;AACrD,EAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,KAAA,CAAM,UAAU,CAAA;AAC5C,EAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,EAAA,OAAO,IAAA,CAAK,MAAA;AACd;AAEA,SAAS,cAAc,KAAA,EAA2B;AAChD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,CAAA,IAAK,CAAA,EAAG,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,KAAK,CAAC,CAAA;AACrF,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB;AAEA,SAAS,cAAc,MAAA,EAA4B;AACjD,EAAA,MAAM,MAAA,GAAS,KAAK,MAAM,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AACxC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAA,IAAK,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AACvE,EAAA,OAAO,GAAA;AACT;AAEA,eAAe,qBAAA,CACb,UACA,IAAA,EACoB;AACpB,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IACtC,KAAA;AAAA,IACA,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,IACtC,QAAA;AAAA,IACA,KAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AACA,EAAA,OAAO,OAAO,MAAA,CAAO,SAAA;AAAA,IACnB;AAAA,MACE,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,cAAc,IAAI,CAAA;AAAA,MACxB,UAAA,EAAY,iBAAA;AAAA,MACZ,IAAA,EAAM;AAAA,KACR;AAAA,IACA,WAAA;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,GAAA,EAAI;AAAA,IAC/B,KAAA;AAAA,IACA,CAAC,WAAW,SAAS;AAAA,GACvB;AACF;AAEA,eAAe,YAAA,CAAa,WAAmB,GAAA,EAAiC;AAC9E,EAAA,MAAM,KAAK,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,SAAS,CAAA;AAClD,EAAA,MAAM,aAAa,IAAI,UAAA;AAAA,IACrB,MAAM,OAAO,MAAA,CAAO,OAAA;AAAA,MAClB,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,aAAA,CAAc,EAAE,CAAA,EAAE;AAAA,MACzC,GAAA;AAAA,MACA;AAAA;AACF,GACF;AACA,EAAA,OAAO,GAAG,aAAA,CAAc,EAAE,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,UAAU,CAAC,CAAA,CAAA;AAC1D;AAEA,eAAe,YAAA,CAAa,QAAgB,GAAA,EAAiC;AAC3E,EAAA,MAAM,CAAC,KAAA,EAAO,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACvC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAO,MAAM,IAAI,MAAM,gCAAgC,CAAA;AACtE,EAAA,MAAM,EAAA,GAAK,cAAc,KAAK,CAAA;AAC9B,EAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA;AAAA,IACpC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,aAAA,CAAc,EAAE,CAAA,EAAE;AAAA,IACzC,GAAA;AAAA,IACA,cAAc,UAAU;AAAA,GAC1B;AACA,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,OAAO,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AAC3D;AAwBA,eAAsB,mBAAA,CACpB,SACA,QAAA,EACgC;AAChC,EAAA,MAAM,OAAO,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA;AAC9D,EAAA,MAAM,GAAA,GAAM,MAAM,qBAAA,CAAsB,QAAA,EAAU,IAAI,CAAA;AAEtD,EAAA,MAAM,YAAY,EAAC;AACnB,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,SAAA,CAAU,IAAA,CAAK;AAAA,MACb,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,yBAAA,EAA2B,MAAM,mBAAA,GAC7B,MAAM,aAAa,KAAA,CAAM,mBAAA,EAAqB,GAAG,CAAA,GACjD,MAAA;AAAA,MACJ,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,EAAE,SAAS,CAAA,EAAG,IAAA,EAAM,cAAc,IAAI,CAAA,EAAG,SAAS,SAAA,EAAU;AACrE;AAGA,eAAsB,mBAAA,CACpB,SACA,QAAA,EAC2B;AAC3B,EAAA,IAAI,OAAA,CAAQ,YAAY,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,MAAM,qBAAA,CAAsB,QAAA,EAAU,IAAI,CAAA;AAEtD,EAAA,MAAM,YAAY,EAAC;AACnB,EAAA,KAAA,MAAW,KAAA,IAAS,QAAQ,OAAA,EAAS;AACnC,IAAA,SAAA,CAAU,IAAA,CAAK;AAAA,MACb,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,mBAAA,EAAqB,MAAM,yBAAA,GACvB,MAAM,aAAa,KAAA,CAAM,yBAAA,EAA2B,GAAG,CAAA,GACvD,MAAA;AAAA,MACJ,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,SAAA;AACT;AAGA,eAAsB,qBAAA,CACpB,SACA,QAAA,EACiB;AACjB,EAAA,OAAO,KAAK,SAAA,CAAU,MAAM,mBAAA,CAAoB,OAAA,EAAS,QAAQ,CAAC,CAAA;AACpE;AAGA,eAAsB,qBAAA,CACpB,YACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AACrC,EAAA,OAAO,mBAAA,CAAoB,SAAS,QAAQ,CAAA;AAC9C;;;ACnIO,SAAS,mBAAmB,WAAA,EAA8B;AAC/D,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,GAAA,EAAK,OAAO,KAAA;AACvC,EAAA,IAAI,CAAC,WAAA,CAAY,UAAA,CAAW,IAAI,GAAG,OAAO,KAAA;AAC1C,EAAA,OAAO,oBAAA,CAAqB,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AACvD;AAEO,SAAS,eAAe,OAAA,EAAqC;AAClE,EAAA,OAAO,CAAC,SAAA,EAAW,SAAA,EAAW,aAAa,OAAO,CAAA,CAAE,SAAS,OAAO,CAAA;AACtE;AAGO,SAAS,wBAAwB,SAAA,EAA4B;AAClE,EAAA,IAAI,SAAA,CAAU,MAAA,KAAW,EAAA,EAAI,OAAO,KAAA;AACpC,EAAA,IAAI,CAAC,SAAA,CAAU,UAAA,CAAW,GAAG,GAAG,OAAO,KAAA;AACvC,EAAA,OAAO,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACxC;AAEO,SAAS,iBAAiB,SAAA,EAA4B;AAC3D,EAAA,IAAI,UAAU,MAAA,GAAS,CAAA,IAAK,SAAA,CAAU,MAAA,GAAS,IAAI,OAAO,KAAA;AAC1D,EAAA,OAAO,gBAAA,CAAiB,KAAK,SAAS,CAAA;AACxC;AAEO,SAAS,cAAc,MAAA,EAAyB;AACrD,EAAA,IAAI,CAAC,QAAQ,OAAO,KAAA;AACpB,EAAA,MAAM,GAAA,GAAM,WAAW,MAAM,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,IAAO,GAAG,OAAO,KAAA;AACnC,EAAA,OAAO,qBAAA,CAAsB,KAAK,MAAM,CAAA;AAC1C;AAEO,SAAS,eAAe,SAAA,EAA4B;AACzD,EAAA,IAAI;AACF,IAAA,OAAO,CAAC,KAAA,CAAM,IAAI,KAAK,SAAS,CAAA,CAAE,SAAS,CAAA;AAAA,EAC7C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,WAAW,GAAA,EAAsB;AAC/C,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,GAAA,CAAI,GAAG,CAAA,CAAE,QAAA,KAAa,QAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,kBAAkB,IAAA,EAA2B;AAC3D,EAAA,IAAI,CAAC,kBAAA,CAAmB,IAAA,CAAK,WAAW,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,GAAA,GAAM,aAAa,IAAA,CAAK,OAAO,IAAI,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AAEnC,EAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,cAAc,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAAA;AAC/E,IAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,IAAA,IAAI,CAAC,iBAAiB,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,oBAAoB,CAAA;AAC9E,IAAA,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,uBAAA,CAAwB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,EAAG;AAChD,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EACzC;AACA,EAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM,MAAA,CAAO,IAAI,MAAA,EAAQ,IAAA,CAAK,OAAO,IAAI,CAAA;AACzD,EAAA,IAAI,IAAA,CAAK,OAAO,GAAA,EAAK,MAAA,CAAO,IAAI,KAAA,EAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AACtD,EAAA,IAAI,IAAA,CAAK,OAAO,QAAA,EAAU;AACxB,IAAA,IAAI,CAAC,WAAW,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,sBAAsB,CAAA;AAC7E,IAAA,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO,MAAA,CAAO,IAAI,OAAA,EAAS,IAAA,CAAK,OAAO,KAAK,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,OAAO,OAAA,EAAS;AACvB,IAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,EAAG;AACxC,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,EAAA,OAAO,WAAA,GAAc,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,GAAA;AACjD;AAGO,SAAS,iBAAA,CACd,YACA,iBAAA,EACqD;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,UAAU,CAAA;AAC9B,IAAA,IAAI,GAAA,CAAI,aAAa,SAAA,EAAW;AAC9B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAE,MAAM,gBAAA,EAAkB,OAAA,EAAS,uCAAsC,EAAE;AAAA,IAC7F;AAMA,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAA,CAAI,QAAA;AAAA,MACJ,GAAG,GAAA,CAAI,QAAA,CAAS,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO;AAAA,KAC3C,CAAE,OAAO,OAAO,CAAA;AAChB,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX,OACF;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,CAAC,CAAA,CAAE,MAAM,UAAU,CAAA;AAClD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,EAAE,KAAA,EAAO,EAAE,MAAM,gBAAA,EAAkB,OAAA,EAAS,8CAA6C,EAAE;AAAA,IACpG;AACA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,YAAA,CAAa,CAAC,GAAG,EAAE,CAAA;AAC5C,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,qBAAA;AAAA,UACN,OAAA,EAAS,yBAAyB,OAAO,CAAA,iCAAA;AAAA;AAC3C,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,UAAU,CAAC,CAAA;AAC3B,IAAA,IAAI,CAAC,cAAA,CAAe,OAAO,CAAA,EAAG;AAC5B,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,gBAAA;AAAA,UACN,OAAA,EAAS,oBAAoB,OAAO,CAAA,oDAAA;AAAA;AACtC,OACF;AAAA,IACF;AACA,IAAA,IAAI,iBAAA,IAAqB,YAAY,iBAAA,EAAmB;AACtD,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,kBAAA;AAAA,UACN,OAAA,EAAS,CAAA,8BAAA,EAAiC,OAAO,CAAA,4BAAA,EAA+B,iBAAiB,CAAA,CAAA;AAAA,UACjG,OAAA,EAAS,EAAE,WAAA,EAAa,OAAA,EAAS,iBAAA;AAAkB;AACrD,OACF;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,UAAU,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACpC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,sBAAA;AAAA,UACN,OAAA,EAAS,gCAAgC,WAAW,CAAA,8BAAA;AAAA;AACtD,OACF;AAAA,IACF;AAEA,IAAA,MAAM,SAA4B,EAAC;AACnC,IAAA,MAAM,eAAe,GAAA,CAAI,YAAA;AAEzB,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC9B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA;AACxC,MAAA,IAAI,CAAC,aAAA,CAAc,MAAM,CAAA,EAAG;AAC1B,QAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAS,CAAA,0BAAA,EAA6B,MAAM,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,MAAA,IAAS,EAAE;AAAA,MACjJ;AACA,MAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AACA,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA,EAAG;AAC7B,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AACtC,MAAA,IAAI,CAAC,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC5B,QAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAS,CAAA,oBAAA,EAAuB,KAAK,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,KAAA,IAAQ,EAAE;AAAA,MACxI;AACA,MAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AAAA,IACjB;AACA,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC9B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA;AACxC,MAAA,IAAI,CAAC,uBAAA,CAAwB,MAAM,CAAA,EAAG;AACpC,QAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAS,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,MAAA,IAAS,EAAE;AAAA,MAC/I;AACA,MAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AACA,IAAA,IAAI,YAAA,CAAa,IAAI,MAAM,CAAA,SAAU,IAAA,GAAO,YAAA,CAAa,IAAI,MAAM,CAAA;AACnE,IAAA,IAAI,YAAA,CAAa,IAAI,KAAK,CAAA,SAAU,GAAA,GAAM,YAAA,CAAa,IAAI,KAAK,CAAA;AAChE,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA,EAAG;AAChC,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA;AAC5C,MAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,QAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAS,CAAA,sBAAA,EAAyB,QAAQ,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,UAAA,EAAY,KAAA,EAAO,QAAA,IAAW,EAAE;AAAA,MACnJ;AACA,MAAA,MAAA,CAAO,QAAA,GAAW,QAAA;AAAA,IACpB;AACA,IAAA,IAAI,YAAA,CAAa,IAAI,OAAO,CAAA,SAAU,KAAA,GAAQ,YAAA,CAAa,IAAI,OAAO,CAAA;AACtE,IAAA,IAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AAC/B,MAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAC1C,MAAA,IAAI,CAAC,cAAA,CAAe,OAAO,CAAA,EAAG;AAC5B,QAAA,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,mBAAA,EAAqB,SAAS,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,OAAA,IAAU,EAAE;AAAA,MACxJ;AACA,MAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAAA,IACnB;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,IAAI,IAAA,CAAK,OAAO,OAAO,CAAA,mBAAI,IAAI,IAAA,EAAK,EAAG;AAC3D,MAAA,OAAO,EAAE,KAAA,EAAO,EAAE,MAAM,mBAAA,EAAqB,OAAA,EAAS,6BAA6B,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAA,EAAS,EAAE,SAAA,EAAW,SAAA,EAAW,OAAO,MAAA,CAAO,OAAA,IAAU,EAAE;AAAA,IAClK;AAEA,IAAA,OAAO,EAAE,IAAA,EAAM,EAAE,SAAS,OAAA,EAAS,WAAA,EAAa,QAAO,EAAE;AAAA,EAC3D,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,iCAAiC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QAChG,OAAA,EAAS;AAAA;AACX,KACF;AAAA,EACF;AACF;AAGO,SAAS,iBAAA,CACd,WAAA,EACA,OAAA,EACA,MAAA,GAA4B,EAAC,EACrB;AACR,EAAA,OAAO,kBAAkB,EAAE,OAAA,EAAS,GAAG,OAAA,EAAS,WAAA,EAAa,QAAQ,CAAA;AACvE;AAGO,SAAS,oBAAoB,UAAA,EAA6B;AAC/D,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,IAAU,kBAAkB,UAAU,CAAA;AAAA,EAC/C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,iBAAA,CACd,UAAA,EACA,OAAA,EACA,MAAA,GAA4B,EAAC,EACd;AACf,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,UAAU,CAAA;AAC9B,IAAA,MAAM,YAAY,GAAA,CAAI,QAAA,CAAS,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACxD,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AAClD,IAAA,IAAI,CAAC,kBAAA,CAAmB,WAAW,CAAA,EAAG,OAAO,IAAA;AAC7C,IAAA,OAAO,iBAAA,CAAkB,WAAA,EAAa,OAAA,EAAS,MAAM,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACrRA,IAAM,mBAAA,GAEF,OAAO,MAAA,CAAO;AAAA,EAChB,wDAAA,EAA0D;AAAA,IACxD,IAAA,EAAM,QAAA;AAAA,IACN,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,wDAAA,EAA0D;AAAA,IACxD,IAAA,EAAM,SAAA;AAAA,IACN,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,wDAAA,EAA0D;AAAA,IACxD,IAAA,EAAM,UAAA;AAAA,IACN,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,wDAAA,EAA0D;AAAA,IACxD,IAAA,EAAM,QAAA;AAAA,IACN,mBAAA,EAAqB;AAAA;AAEzB,CAAC,CAAA;AASM,SAAS,YAAY,WAAA,EAAkD;AAC5E,EAAA,IAAI,CAAC,WAAA,EAAa,OAAO,EAAE,kBAAkB,KAAA,EAAM;AACnD,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,WAAA,CAAY,IAAA,EAAM,CAAA;AACpD,EAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAE,kBAAkB,KAAA,EAAM;AAC7C,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,IAAA;AAAA,IAClB,eAAe,KAAA,CAAM,IAAA;AAAA,IACrB,qBAAqB,KAAA,CAAM;AAAA,GAC7B;AACF;AAQO,SAAS,YAAA,CACd,UACA,IAAA,EACsB;AACtB,EAAA,MAAM,KAAA,GAAA,CAAS,IAAA,IAAQ,EAAA,EAAI,IAAA,EAAK;AAChC,EAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,8CAAA,EAA+C;AAAA,IAC5E;AACA,IAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,EACpB;AACA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,sCAAA,EAAuC;AAAA,EACpE;AACA,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,QAAQ,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,UAAA;AAC9C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4CAAA,EAA6C;AAAA,MAC1E;AACA,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAAA,IACA,KAAK,IAAA,EAAM;AACT,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACxB,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,yCAAA,EAA0C;AAAA,MACvE;AACA,MAAA,IAAI;AACF,QAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,QAAA,IAAI,CAAA,GAAI,EAAA,IAAM,CAAA,GAAI,mBAAA,EAAqB;AACrC,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,iDAAA,EAAkD;AAAA,QAC/E;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,yCAAA,EAA0C;AAAA,MACvE;AACA,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAAA,IACA,KAAK,MAAA;AAAA,IACL,KAAK,QAAA,EAAU;AACb,MAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,QAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,qDAAA,EAAsD;AAAA,MACnF;AACA,MAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,IACpB;AAAA;AAEJ;AAGO,SAAS,eAAA,CACd,MACA,IAAA,EACe;AACf,EAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,EAAkB,OAAO,IAAA;AACnC,EAAA,IAAI,QAAQ,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,GAAG,OAAO,IAAA;AAC3C,EAAA,OAAO,CAAA,uBAAA,EAA0B,IAAA,CAAK,aAAA,IAAiB,0BAA0B,CAAA,kDAAA,CAAA;AACnF;;;ACtGO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA,EAE5B,IAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,IAAA,EAAc,OAAA,EAA+B;AACxE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,OAAO,GAAA,CAAA,MAAA,CAAW,IAAA;AACvB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAW;AAChC,MAAC,IAAA,CAA6B,QAAQ,OAAA,CAAQ,KAAA;AAAA,IAChD;AAAA,EACF;AACF;AAGO,IAAM,WAAA,GAAN,cAA0B,WAAA,CAAY;AAAA,EAC3C,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,EAClC;AACF;AAGO,IAAM,WAAA,GAAN,cAA0B,WAAA,CAAY;AAAA,EAC3C,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,UAAU,OAAO,CAAA;AAAA,EAClC;AACF;AAGO,IAAM,QAAA,GAAN,cAAuB,WAAA,CAAY;AAAA,EAC/B,UAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,OAAO,OAAO,CAAA;AAC7B,IAAA,IAAA,CAAK,aAAa,OAAA,EAAS,UAAA;AAAA,EAC7B;AACF;AAGO,IAAM,eAAA,GAAN,cAA8B,WAAA,CAAY;AAAA,EACtC,WAAA;AAAA,EACT,WAAA,CACE,SACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,cAAc,OAAO,CAAA;AACpC,IAAA,IAAA,CAAK,cAAc,OAAA,EAAS,WAAA;AAAA,EAC9B;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,WAAA,CAAY;AAAA,EACpC,QAAA;AAAA,EACA,YAAA;AAAA;AAAA,EAEA,SAAA;AAAA,EACT,YAAY,IAAA,EAMT;AACD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,GACf,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,GAAA,EAAM,IAAA,CAAK,YAAY,CAAA,CAAA,CAAA,GACxC,CAAA,CAAA,EAAI,IAAA,CAAK,YAAY,CAAA,CAAA;AACzB,IAAA,KAAA;AAAA,MACE,KAAK,OAAA,IAAW,CAAA,EAAG,IAAA,CAAK,QAAQ,cAAc,KAAK,CAAA,CAAA;AAAA,MACnD,UAAA;AAAA,MACA,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA;AAAM,KACtB;AACA,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,QAAA;AACrB,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,EACxB;AACF;AAGO,IAAM,oBAAA,GAAN,cAAmC,WAAA,CAAY;AAAA,EACpD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAAA,EAC5C;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,WAAA,CAAY;AAAA,EAC7C,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,YAAY,OAAO,CAAA;AAAA,EACpC;AACF;AAOO,IAAM,aAAA,GAAN,cAA4B,WAAA,CAAY;AAAA,EAC7C,WAAA,CAAY,YAAoB,IAAA,EAAe;AAC7C,IAAA,KAAA;AAAA,MACE,GAAG,UAAU,CAAA,4BAAA,CAAA,IAAkC,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,EAAA,CAAA;AAAA,MACnE;AAAA,KACF;AAAA,EACF;AACF;AAOO,IAAM,oBAAA,GAA+D;AAAA,EAC1E,qBAAA,EAAuB;AAAA,IACrB,CAAA,EAAG,aAAA;AAAA,IACH,CAAA,EAAG;AAAA;AAEP;AAGO,SAAS,iBAAA,CACd,iBACA,IAAA,EACoB;AACpB,EAAA,OAAO,oBAAA,CAAqB,eAAe,CAAA,GAAI,IAAI,CAAA;AACrD;;;AChHO,IAAM,eAAA,GAAwD;AAAA,EACnE,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,mCAAA;AAAA,IACZ,OAAA,EAAS,CAAC,qCAAqC,CAAA;AAAA,IAC/C,WAAA,EAAa,CAAC,qCAAqC;AAAA,GACrD;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,wCAAA;AAAA,IACZ,OAAA,EAAS,CAAC,mCAAmC,CAAA;AAAA,IAC7C,WAAA,EAAa,CAAC,uCAAuC;AAAA,GACvD;AAAA,EACA,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,gDAAA;AAAA;AAAA,IAEZ,SAAS,EAAC;AAAA,IACV,aAAa;AAAC,GAChB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,UAAA,EAAY,oCAAA;AAAA,IACZ,OAAA,EAAS,CAAC,mCAAmC,CAAA;AAAA,IAC7C,WAAA,EAAa,CAAC,uBAAuB;AAAA;AAEzC;;;ACEO,IAAM,kBAAA,GAAwC;AAAA,EACnD,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,0DAAA;AAAA,IACjB,gBAAA,EAAkB,0DAAA;AAAA,IAClB,eAAA,EAAiB,0DAAA;AAAA,IACjB,kBAAA,EAAoB,0DAAA;AAAA,IACpB,cAAA,EAAgB,0DAAA;AAAA,IAChB,mBAAA,EAAqB,0DAAA;AAAA,IACrB,YAAA,EAAc,0DAAA;AAAA,IACd,WAAA,EAAa,0DAAA;AAAA,IACb,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,CAAA;AAAA,IACP,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,YAAA,EAAc,QAAA;AAAA,IACd,sBAAA,EAAwB,GAAA;AAAA,IACxB,kBAAA,EAAoB,KAAA;AAAA,IACpB,WAAA,EAAa,CAAC,sCAAsC;AAAA,GACtD;AAAA,EACA,gBAAA,EAAkB;AACpB;AAGO,IAAM,WAAA,GAAiE;AAAA,EAC5E,OAAA,EAAS;AACX;;;ACbA,SAAS,cAAA,CACP,MACA,SAAA,EACmB;AACnB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAI,IAAA,IAAQ,EAAC,EAAI,GAAI,SAAA,IAAa,EAAC,EAAG;AAIvD,EAAA,MAAM,IAAA,GAAoC;AAAA,IACxC,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,gBAAA;AAAA,IACA,qBAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,OAAA,GAAU,KAAK,MAAA,CAAO,CAAC,MAAM,CAAC,MAAA,CAAO,CAAC,CAAC,CAAA;AAC7C,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,kDAAA;AAAA,KAErD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAOO,SAAS,cAAc,MAAA,EAAsC;AAClE,EAAA,MAAM,MAAA,GAAoC,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AACxE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,WAAA,CAAY,CAAA,iBAAA,EAAoB,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACpE;AACA,EAAA,MAAM,UAAA,GAA4C,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAE5E,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,EAAS,MAAA,GAAS,MAAA,CAAO,UAAU,MAAA,CAAO,OAAA;AACjE,EAAA,MAAM,cAAc,MAAA,CAAO,WAAA,EAAa,MAAA,GACpC,MAAA,CAAO,cACP,MAAA,CAAO,WAAA;AAEX,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,kCAAA,EAAqC,OAAO,OAAO,CAAA,qBAAA;AAAA,KACrD;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,8BAAA,EAAiC,OAAO,OAAO,CAAA,yBAAA;AAAA,KACjD;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,UAAA,EAAY,SAAA,EAAW,OAAO,SAAS,CAAA;AAExE,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,CAAO,SAAA,EAAW;AACpC,IAAA,MAAM,IAAI,WAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,OAAO,OAAO,CAAA,wBAAA;AAAA,KAC3C;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAmB,YAAY,IAAA,IAAQ,EAAE,OAAO,CAAA,EAAG,SAAA,EAAW,UAAU,WAAA,EAAY;AAC1F,EAAA,MAAM,OAAA,GAAyB,YAAY,OAAA,IAAW;AAAA,IACpD,YAAA,EAAc,EAAA;AAAA,IACd,sBAAA,EAAwB,CAAA;AAAA,IACxB,kBAAA,EAAoB,CAAA;AAAA,IACpB,aAAa;AAAC,GAChB;AAEA,EAAA,MAAM,qBAAqB,MAAA,CAAO,kBAAA,EAAoB,MAAA,GAClD,MAAA,CAAO,qBACP,OAAA,CAAQ,WAAA;AAEZ,EAAA,OAAO;AAAA,IACL,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,OAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,wBAAwB,MAAA,CAAO,sBAAA;AAAA,IAC/B,WAAA,EAAa,MAAA,CAAO,WAAA,IAAe,UAAA,EAAY,gBAAA,IAAoB;AAAA,GACrE;AACF;ACvHO,SAAS,cAAc,eAAA,EAAiD;AAC7E,EAAA,MAAM,UACJ,OAAO,eAAA,KAAoB,WACvBF,kBAAAA,CAAQ,UAAA,CAAW,eAAe,CAAA,GAClC,eAAA;AAEN,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,MAAM,OAAA,CAAQ,SAAA,EAAU;AAAA,IACnC,MAAM,eAAA,CAAgBG,IAAAA,EAAK,GAAA,EAAK;AAC9B,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAKC,6BAAA,CAAmB,OAAA,CAAQD,IAAAA,EAAK,IAAI,iBAAiB,CAAA;AAChE,QAAA,EAAA,CAAG,KAAK,OAAO,CAAA;AACf,QAAA,OAAO,GAAG,KAAA,EAAM;AAAA,MAClB,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,WAAA,CAAY,oCAAA,EAAsC,EAAE,OAAO,CAAA;AAAA,MACvE;AAAA,IACF;AAAA,GACF;AACF;AAMO,SAAS,eAAe,IAAA,EAId;AACf,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,MACT,OAAO,IAAA,CAAK,cAAc,UAAA,GAAa,IAAA,CAAK,SAAA,EAAU,GAAI,IAAA,CAAK,SAAA;AAAA,IACjE,MAAM,gBAAgBA,IAAAA,EAAK;AACzB,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgBA,IAAG,CAAA;AAAA,MACvC,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,WAAA,CAAY,wBAAA,EAA0B,EAAE,OAAO,CAAA;AAAA,MAC3D;AAAA,IACF,CAAA;AAAA,IACA,aAAa,IAAA,CAAK;AAAA,GACpB;AACF;;;AC1DO,IAAM,YAAA,GAAuB;AAAA,EAClC,KAAA,GAAQ;AAAA,EAAC,CAAA;AAAA,EACT,IAAA,GAAO;AAAA,EAAC,CAAA;AAAA,EACR,IAAA,GAAO;AAAA,EAAC,CAAA;AAAA,EACR,KAAA,GAAQ;AAAA,EAAC;AACX;AAGO,IAAM,aAAA,GAAwB;AAAA,EACnC,OAAO,CAAA,GAAI,CAAA,KAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EACnC,MAAM,CAAA,GAAI,CAAA,KAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACjC,MAAM,CAAA,GAAI,CAAA,KAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACjC,OAAO,CAAA,GAAI,CAAA,KAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC;AACrC;;;ACAO,IAAM,gBAA2B;AClBjC,SAAS,eAAe,IAAA,EAAyB;AACtD,EAAA,OAAO,IAAIE,kBAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,EAAQ;AACnC;AAGO,SAAS,aAAa,KAAA,EAA8B;AACzD,EAAA,OAAOF,eAAI,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9C;AAGO,SAAS,WAAW,CAAA,EAAsB;AAC/C,EAAA,OAAOG,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,OAAO,CAAA;AACzC;AAGO,SAAS,WAAW,CAAA,EAA+B;AACxD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,OAAO,CAAA;AACzC;AAGO,SAAS,YAAY,CAAA,EAAsB;AAChD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC1C;AAGO,SAAS,YAAY,CAAA,EAAsB;AAChD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC1C;AAGO,SAAS,cAAc,CAAA,EAAsB;AAClD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,UAAU,CAAA;AAC5C;AAGO,SAAS,cAAc,CAAA,EAAsB;AAClD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,UAAU,CAAA;AAC5C;AAGO,SAAS,YAAY,CAAA,EAAuB;AACjD,EAAA,OAAOA,wBAAA,CAAc,CAAA,EAAG,EAAE,IAAA,EAAM,QAAQ,CAAA;AAC1C;AAGO,SAAS,qBAAqB,IAAA,EAA4C;AAC/E,EAAA,OAAO,IAAA,GAAO,eAAe,IAAI,CAAA,GAAIA,yBAAc,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA;AAC9E;AAGO,SAAS,UAAU,CAAA,EAAuB;AAC/C,EAAA,OAAOC,yBAAc,CAAC,CAAA;AACxB;ACrDO,SAAS,gBAAgB,CAAA,EAAwB;AACtD,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA;AACxB,EAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,IAAA,IAAI;AACF,MAAA,OAAO,CAAA,cAAA,EAAiB,CAAA,CAAE,YAAA,EAAc,CAAA,CAAA;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,eAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,GAAO,IAAI,CAAA,CAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,CAAA,EAAuB;AAC9C,EAAA,IAAI;AACF,IAAA,IAAI,CAAA,CAAE,QAAO,CAAE,IAAA,KAAS,YAAY,OAAO,eAAA,CAAgB,CAAA,CAAE,KAAA,EAAO,CAAA;AACpE,IAAA,OAAOA,yBAAc,CAAC,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,CAAA,CAAE,QAAO,CAAE,IAAA;AAAA,IACpB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACF;AAMO,SAAS,kBAAkB,MAAA,EAA2B;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,GAAA;AACX,MAAA,MAAM,KAAK,EAAA,CAAG,KAAA,EAAM,CAAE,IAAA,GAAO,EAAA,EAAG;AAChC,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,MAAA,EAAO,CAAE,IAAI,eAAe,CAAA;AAC9C,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,EAAA,CAAG,IAAA,EAAM,CAAA;AACtC,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAC7D;AAMO,SAAS,yBAAyB,MAAA,EAAkC;AACzE,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,GAAA;AACX,MAAA,MAAM,KAAK,EAAA,CAAG,KAAA,EAAM,CAAE,IAAA,GAAO,EAAA,EAAG;AAChC,MAAA,KAAA,MAAW,CAAA,IAAK,EAAA,CAAG,MAAA,EAAO,EAAG;AAC3B,QAAA,IAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAA,KAAS,UAAA,EAAY;AAClC,UAAA,MAAM,GAAA,GAAM,EAAE,KAAA,EAAM;AACpB,UAAA,IAAI,IAAI,MAAA,EAAO,CAAE,SAAS,aAAA,EAAe,OAAO,IAAI,YAAA,EAAa;AAAA,QACnE;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,GAAG,IAAA,EAAK;AACrB,MAAA,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,IAAA,KAAS,UAAA,EAAY;AACrC,QAAA,MAAM,GAAA,GAAM,KAAK,KAAA,EAAM;AACvB,QAAA,IAAI,IAAI,MAAA,EAAO,CAAE,SAAS,aAAA,EAAe,OAAO,IAAI,YAAA,EAAa;AAAA,MACnE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;ACnDA,IAAM,eAAA,GAAkB,IAAA;AACxB,IAAM,yBAAA,GAA4B,CAAA;AAClC,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,mBAAA,GAAsB,GAAA;AAGrB,IAAM,+BAAA,GAAkC;AAE/C,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,SAAS,qBAAqB,GAAA,EAAuB;AACnD,EAAA,MAAM,MAAA,GACJ,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,QAAQ,UAAA,IAAc,GAAA,GACpD,GAAA,CAA2C,QAAA,EAAU,MAAA,GACtD,MAAA;AACN,EAAA,IAAI,MAAA,IAAU,CAAC,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,IAAA;AACtE,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,OAAO,gEAAA,CAAiE,KAAK,OAAO,CAAA;AACtF;AAEA,eAAe,WAAA,CAAe,SAAqB,KAAA,EAA2B;AAC5E,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAe,CAAC,GAAG,MAAA,KAAW;AAChD,IAAA,KAAA,GAAQ,UAAA;AAAA,MACN,MAAM,OAAO,IAAI,QAAA,CAAS,GAAG,KAAK,CAAA,iBAAA,EAAoB,eAAe,CAAA,EAAA,CAAI,CAAC,CAAA;AAAA,MAC1E;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,EAC9C,CAAA,SAAE;AACA,IAAA,IAAI,KAAA,eAAoB,KAAK,CAAA;AAAA,EAC/B;AACF;AAwCO,IAAM,YAAN,MAAgB;AAAA,EACZ,MAAA;AAAA,EACQ,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YAAY,IAAA,EAAwB;AAClC,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,MAAA,IAAU,YAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,SAAA,IAAa,aAAA;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAA;AAAA,MACjC,CAAC,GAAA,KAAQ,IAAIC,cAAA,CAAI,MAAA,CAAO,GAAA,EAAK,EAAE,SAAA,EAAW,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAAA,KACvE;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,SAAS,yCAAyC,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,MAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,EACvB;AAAA;AAAA,EAGA,OAAA,GAA0B;AACxB,IAAA,OAAO,IAAIC,kBAAA,CAAQ,MAAA,CAAO,KAAK,MAAA,CAAO,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,MAAM,cAAc,SAAA,EAAqC;AACvD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,WAAA,CAAY,SAAS,CAAA;AAC1C,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAmB,IAAA,EAIL;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,WAAA,CAAY,MAAM,CAAA;AACtD,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,aAAA,CAAc,KAAK,WAAW,CAAA;AAC5D,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,CAAK,aAAa,CAAA;AAEpD,IAAA,IAAI,CAAC,UAAA,IAAc,IAAA,CAAK,aAAA,GAAgB,+BAAA,EAAiC;AACvE,MAAA,MAAM,IAAI,QAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAA,GAAK,aACPC,oBAAA,CAAU,OAAA,CAAQ,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,KAAA,EAAOC,gBAAA,CAAM,MAAA,IAAU,MAAA,EAAQ,CAAA,GAClFD,oBAAA,CAAU,aAAA,CAAc,EAAE,aAAa,IAAA,CAAK,WAAA,EAAa,eAAA,EAAiB,MAAA,EAAQ,CAAA;AAEtF,IAAA,MAAM,EAAA,GAAK,IAAIN,6BAAAA,CAAmB,aAAA,EAAe;AAAA,MAC/C,GAAA,EAAKQ,mBAAA;AAAA,MACL,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,KAChC,EACE,YAAA,CAAa,EAAE,EACf,UAAA,CAAW,GAAG,EACd,KAAA,EAAM;AAET,IAAA,MAAM,YAAY,MAAM,IAAA,CAAK,OAAO,eAAA,CAAgB,EAAA,CAAG,OAAM,EAAG;AAAA,MAC9D,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,KAChC,CAAA;AACD,IAAA,MAAM,SAASR,6BAAAA,CAAmB,OAAA,CAAQ,SAAA,EAAW,IAAA,CAAK,OAAO,UAAU,CAAA;AAC3E,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,iBAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA;AAAA,EAGA,MAAc,IAAA,CAAQ,EAAA,EAAwC,KAAA,EAA2B;AACvF,IAAA,IAAI,SAAA;AACJ,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,yBAAA,EAA2B,WAAW,CAAA,EAAG;AACvE,QAAA,IAAI;AACF,UAAA,OAAO,MAAM,WAAA,CAAY,EAAA,CAAG,MAAM,GAAG,KAAK,CAAA;AAAA,QAC5C,SAAS,GAAA,EAAK;AACZ,UAAA,SAAA,GAAY,GAAA;AACZ,UAAA,IAAI,CAAC,oBAAA,CAAqB,GAAG,CAAA,EAAG,MAAM,GAAA;AACtC,UAAA,IAAI,UAAU,CAAA,GAAI,yBAAA,QAAiC,KAAA,CAAM,GAAA,IAAO,UAAU,CAAA,CAAE,CAAA;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,qBAAqB,KAAA,GACvB,IAAI,SAAS,CAAA,EAAG,KAAK,YAAY,SAAA,CAAU,OAAO,IAAI,EAAE,KAAA,EAAO,WAAW,CAAA,GAC1E,IAAI,QAAA,CAAS,CAAA,EAAG,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,EACpC;AAAA,EAEA,MAAc,KAAK,MAAA,EAAyD;AAC1E,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,GAAQ,kBAAA,EAAoB;AAC9C,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,eAAe,MAAM,CAAA;AACnD,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,WAAA,EAAa,OAAO,GAAA;AACvC,MAAA,MAAM,MAAM,mBAAmB,CAAA;AAAA,IACjC;AACA,IAAA,MAAM,IAAI,QAAA,CAAS,CAAA,kCAAA,EAAqC,MAAM,CAAA,CAAE,CAAA;AAAA,EAClE;AAAA;AAAA,EAGA,MAAM,UACJ,OAAA,EACoC;AACpC,IAAA,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA,KAAM,EAAE,SAAA,CAAU,OAAO,GAAG,WAAW,CAAA;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAM,eAAA,GAAmC;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAG,iBAAiB,CAAA;AACzE,IAAA,OAAO,GAAA,CAAI,QAAA;AAAA,EACb;AAAA;AAAA,EAGA,MAAM,aAAa,IAAA,EAAmD;AACpE,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA;AAAA,MACzB,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MAC/B;AAAA,KACF;AACA,IAAA,MAAM,EAAA,GAAK,IAAIA,6BAAAA,CAAmB,OAAA,EAAS;AAAA,MACzC,GAAA,EAAKQ,mBAAA;AAAA,MACL,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,KAChC,CAAA,CACE,YAAA,CAAa,IAAIC,mBAAA,CAAS,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,CAAK,KAAK,MAAA,EAAQ,GAAG,KAAK,IAAI,CAAC,EAC1E,UAAA,CAAW,EAAE,EACb,KAAA,EAAM;AAET,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,IAAA;AAAA,MACrB,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAA,CAAoB,EAAE,CAAA;AAAA,MAC/B,CAAA,SAAA,EAAY,KAAK,MAAM,CAAA;AAAA,KACzB;AACA,IAAA,IAAIL,cAAA,CAAI,GAAA,CAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG;AAClC,MAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI;AAAA,QAChE,aAAa,GAAA,CAAI;AAAA,OAClB,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAI,MAAA,EAAQ,MAAA;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,WAAwB,IAAA,EAA+B;AAC3D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAC3C,IAAA,OAAQ,MAAA,GAASD,wBAAAA,CAAc,MAAM,CAAA,GAAI,MAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,MAAM,OAAO,IAAA,EAAsC;AACjD,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA;AAAA,QACzB,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,QAC/B;AAAA,OACF;AACA,MAAA,MAAM,GAAA,GAAM,IAAIH,6BAAAA,CAAmB,OAAA,EAAS;AAAA,QAC1C,GAAA,EAAKQ,mBAAA;AAAA,QACL,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,OAChC,CAAA,CACE,YAAA,CAAa,IAAIC,mBAAA,CAAS,IAAA,CAAK,UAAU,CAAA,CAAE,IAAA,CAAK,KAAK,MAAA,EAAQ,GAAG,KAAK,IAAI,CAAC,EAC1E,UAAA,CAAW,GAAG,EACd,KAAA,EAAM;AAET,MAAA,IAAI,QAAA,GAAW,GAAA;AACf,MAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,QAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,oBAAoB,GAAG,CAAA;AACrD,QAAA,IAAIL,cAAA,CAAI,GAAA,CAAI,iBAAA,CAAkB,GAAG,CAAA,EAAG;AAClC,UAAA,MAAM,IAAI,eAAA,CAAgB,CAAA,sBAAA,EAAyB,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI;AAAA,YAChE,aAAa,GAAA,CAAI;AAAA,WAClB,CAAA;AAAA,QACH;AACA,QAAA,QAAA,GAAWA,cAAA,CAAI,mBAAA,CAAoB,GAAA,EAAK,GAAG,EAAE,KAAA,EAAM;AAAA,MACrD,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,kBAAA,CAAmB,GAAG,CAAA;AAAA,MACrD;AAEA,MAAA,MAAM,YAAY,MAAM,IAAA,CAAK,OAAO,eAAA,CAAgB,QAAA,CAAS,OAAM,EAAG;AAAA,QACpE,iBAAA,EAAmB,KAAK,MAAA,CAAO;AAAA,OAChC,CAAA;AACD,MAAA,MAAM,SAASJ,6BAAAA,CAAmB,OAAA,CAAQ,SAAA,EAAW,IAAA,CAAK,OAAO,UAAU,CAAA;AAC3E,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,eAAA;AAAA,QAC7B;AAAA,OACF;AACA,MAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,QAAA,MAAM,IAAI,SAAS,CAAA,0BAAA,EAA6B,IAAA,CAAK,UAAU,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,IAAI,CAAA;AACxC,MAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,QAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAAA,MACzC;AAEA,MAAA,IAAA,CAAK,UAAU,cAAA,GAAiB;AAAA,QAC9B,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,OAC1B,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,IAAA;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,UAAU,cAAA,GAAiB;AAAA,QAC9B,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAA,EAAS,KAAA;AAAA,QACT,UAAA,EAAY,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAAA,QACzB,OAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,OACvD,CAAA;AACD,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,eAAA,CACN,MACA,MAAA,EACO;AACP,IAAA,MAAM,MAAA,GACH,MAAA,CAA0D,mBAAA,IAAuB,EAAC;AACrF,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS,iBAAA,CAAkB,MAAM,CAAA,GAAI,EAAA;AAChE,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,wBAAA,CAAyB,MAAM,CAAA,GAAI,IAAA;AAChE,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,OAAO,IAAI,aAAA,CAAc;AAAA,QACvB,QAAA,EAAU,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,UAAA;AAAA,QACvC,YAAA,EAAc,IAAA;AAAA,QACd,WAAW,IAAA,CAAK,eAAA,GACZ,kBAAkB,IAAA,CAAK,eAAA,EAAiB,IAAI,CAAA,GAC5C;AAAA,OACL,CAAA;AAAA,IACH;AACA,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,GAAA,EAAM,MAAA,CAAO,MAAM,IAAI,WAAW,CAAA;AACpD,IAAA,OAAO,IAAI,QAAA;AAAA,MACT,eAAe,MAAA,CAAO,MAAM,MAAM,WAAA,GAAc,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,GAAK,EAAA;AAAA,KACvE;AAAA,EACF;AACF;;;AClVO,IAAM,mBAAA,GAAsB;AAE5B,IAAM,kBAAN,MAAsB;AAAA,EAC3B,WAAA,CACmBI,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,aAAa,IAAA,EAIC;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB,kBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,MAAM,CAAA;AAAA,QACrB,UAAA,CAAW,IAAA,CAAK,QAAA,IAAY,mBAAmB,CAAA;AAAA,QAC/C,YAAA,CAAa,KAAK,kBAAkB;AAAA,OACtC;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,WAAA,CACmBA,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,SAAS,IAAA,EAMK;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB,mBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,MAAM,CAAA;AAAA,QACrB,UAAA,CAAW,IAAA,CAAK,QAAA,IAAY,mBAAmB,CAAA;AAAA,QAC/C,YAAA,CAAa,KAAK,cAAc,CAAA;AAAA,QAChC,YAAA,CAAa,KAAK,eAAe,CAAA;AAAA,QACjC,YAAA,CAAa,KAAK,QAAQ;AAAA,OAC5B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF;ACrDO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,WAAA,CACmBA,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,eAAe,IAAA,EASD;AAClB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC9C,IAAA,MAAM,YAAA,GAAeN,iBAAAA,CAAO,sBAAA,CAAuB,SAAS,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB,iBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,SAAS,CAAA;AAAA,QACxBI,wBAAAA,CAAc,OAAO,IAAA,CAAK,YAAY,GAAG,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,QAC1D,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,QAC1B,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA,QACvB,aAAA,CAAc,KAAK,gBAAgB,CAAA;AAAA,QACnC,WAAA,CAAY,KAAK,SAAS,CAAA;AAAA,QAC1B,UAAA,CAAW,IAAA,CAAK,OAAA,IAAW,CAAC,CAAA;AAAA,QAC5B,oBAAA,CAAqB,IAAA,CAAK,QAAA,IAAY,IAAI,CAAA;AAAA,QAC1C,UAAA,CAAW,KAAK,kBAAkB;AAAA,OACpC;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,IAAA,EAGF;AAClB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,kBAAA;AAAA,MACR,eAAA,EAAiB,iBAAA;AAAA,MACjB,IAAA,EAAM,CAAC,cAAA,CAAe,SAAS,GAAG,YAAA,CAAa,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,MAC7D,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,IAAA,EAIE;AAClB,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,QAAQ,CAAA;AACjC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,cAAA;AAAA,MACR,eAAA,EAAiB,iBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,SAAS,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,QAC1B,cAAA,CAAe,KAAK,QAAQ;AAAA,OAC9B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,IAAA,EAID;AAClB,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,QAAQ,CAAA;AACjC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB,iBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,SAAS,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,QAC1B,cAAA,CAAe,KAAK,QAAQ;AAAA,OAC9B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEQ,eAAe,QAAA,EAAwB;AAC7C,IAAA,IAAI,CAACJ,iBAAAA,CAAO,uBAAA,CAAwB,QAAQ,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAAA,EACF;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CACmBM,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,OAAO,IAAA,EAOO;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB,uBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,MAAM,CAAA;AAAA,QACrB,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,QAC1B,YAAA,CAAa,KAAK,kBAAkB,CAAA;AAAA,QACpC,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,QACtB,UAAA,CAAW,KAAK,gBAAgB,CAAA;AAAA,QAChC,YAAA,CAAa,KAAK,MAAM;AAAA,OAC1B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,kBAAkB,IAAA,EAGJ;AAClB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,OAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,oBAAA;AAAA,MACR,eAAA,EAAiB,uBAAA;AAAA,MACjB,IAAA,EAAM,CAAC,cAAA,CAAe,OAAO,GAAG,YAAA,CAAa,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MACtD,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF;AC7IO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,WAAA,CACmBA,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,cACJ,IAAA,EACiB;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB,kBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxBF,wBAAAA;AAAA,UACE;AAAA,YACE,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAAA,YACxC,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA;AAAA,YAC9C,kBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,iBAAiB,CAAA;AAAA,YACtD,cAAA,EAAgB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa;AAAA,WAChD;AAAA,UACA,EAAE,MAAM,KAAA;AAAM;AAChB,OACF;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF;AAmBO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,WAAA,CACmBE,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,iBACJ,IAAA,EAIiB;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,mBAAA;AAAA,MACR,eAAA,EAAiB,qBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,MAAM,CAAA;AAAA,QACrB,cAAA,CAAe,KAAK,iBAAiB,CAAA;AAAA,QACrC,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,QAC5B,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,QAC/B,UAAA,CAAW,KAAK,iBAAiB,CAAA;AAAA,QACjC,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,QAC/B,UAAA,CAAW,IAAA,CAAK,gBAAA,IAAoB,CAAC;AAAA,OACvC;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAc,MAAA,EAA4C;AAC9D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAmC;AAAA,MAC7D,MAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAM;AAAC,KACR,CAAA;AACD,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA;AAClC,IAAA,OAAO,MAAM,KAAA,CAAM,CAAC,MAAM,CAAA,KAAM,CAAC,IAAI,IAAA,GAAO,KAAA;AAAA,EAC9C;AACF;AC5GA,IAAM,mBAAA,GAAsB,IAAA;AAG5B,SAAS,gCAAgC,GAAA,EAA6B;AACpE,EAAA,MAAM,GAAA,GACJ,GAAA,YAAe,KAAA,GACX,GAAA,CAAI,UACJ,OAAO,GAAA,KAAQ,QAAA,GACb,GAAA,GACA,OAAQ,GAAA,EAA+B,OAAA,KAAY,QAAA,GAChD,IAA4B,OAAA,GAC7B,EAAA;AACV,EAAA,MAAM,CAAA,GAAI,mCAAA,CAAoC,IAAA,CAAK,GAAG,CAAA;AACtD,EAAA,OAAO,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,IAAA;AAC5B;AAgBO,IAAM,cAAN,MAAkB;AAAA,EACvB,WAAA,CACmBA,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,QAAQ,IAAA,EAKM;AAClB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC9C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,SAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,SAAA;AAAA,MACR,eAAA,EAAiB,cAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,SAAS,CAAA;AAAA,QACxB,WAAA,CAAY,KAAK,KAAK,CAAA;AAAA,QACtB,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,QAC5B,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,aAAa,CAAC;AAAA,OACvC;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SACJ,IAAA,EACiB;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC3C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,MAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB,cAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,WAAA,CAAY,KAAK,cAAc,CAAA;AAAA,QAC/B,YAAA,CAAa,KAAK,SAAS,CAAA;AAAA,QAC3B,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,QACzB,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,QAC/B,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,QAC/B,cAAA,CAAe,KAAK,SAAS,CAAA;AAAA,QAC7B,WAAA,CAAY,KAAK,GAAG,CAAA;AAAA,QACpB,cAAA,CAAe,KAAK,OAAO;AAAA,OAC7B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAW,IAAA,EAKG;AAClB,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC1C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,KAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,IAAA,CAAK,IAAA,KAAS,OAAA,GAAU,mBAAA,GAAsB,iBAAA;AAAA,MACtD,eAAA,EAAiB,cAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,KAAK,CAAA;AAAA,QACpB,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,QACtB,YAAA,CAAa,KAAK,WAAW;AAAA,OAC/B;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAgB,MAAA,EAAiC;AACrD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAA4B;AAAA,MACvD,MAAA;AAAA,MACA,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,mBAAA;AAAA,MACR,MAAM;AAAC,KACR,CAAA;AACD,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,cAAc,IAAA,EAGW;AAC7B,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAmC;AAAA,MAC7D,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAM,CAAC,WAAA,CAAY,IAAA,CAAK,IAAA,KAAS,OAAO,CAAC;AAAA,KAC1C,CAAA;AACD,IAAA,OAAO,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,IAAA,EAE0C;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,eAAA,EAAgB;AAC9C,IAAA,IAAI,WAAA,GACF,IAAA,EAAM,WAAA,IAAe,IAAA,CAAK,WAAA,GAAc,CAAA,GACpC,IAAA,CAAK,WAAA,GACL,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,GAAS,mBAAmB,CAAA;AAE9C,IAAA,MAAM,eAAeL,cAAAA,CAAI,KAAA,CAAM,UAAU,SAAS,CAAA,CAAE,MAAM,QAAQ,CAAA;AAClE,IAAA,MAAM,gBAAgBA,cAAAA,CAAI,KAAA,CAAM,UAAU,UAAU,CAAA,CAAE,MAAM,QAAQ,CAAA;AACpE,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AACxC,IAAA,MAAM,iBAA2B,EAAC;AAElC,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,SAAS,CAAA,IAAK;AAAA,MAC/B,CAAC,cAAc,IAAI,CAAA;AAAA,MACnB,CAAC,eAAe,KAAK;AAAA,KACvB,EAAY;AACV,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,UAAA;AACJ,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,EAAE,IAAA,EAAM,UAAA,EAAqB,WAAA,EAAa,CAAC,IAAA,CAAK,UAAU,CAAA,EAAG,MAAA,EAAQ,CAAC,CAAC,KAAA,EAAO,GAAG,CAAC,CAAA;AAAE,OACtF;AAGA,MAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,GAAA,EAAK,IAAA,EAAA,EAAQ;AACrC,QAAA,IAAI,GAAA;AACJ,QAAA,IAAI;AACF,UAAA,GAAA,GAAM,MAAM,KAAK,GAAA,CAAI,SAAA;AAAA,YACnB,MAAA,GAAS,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,GAAA,EAAI,GAAI,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,GAAA;AAAI,WAChF;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,MAAA,GAAS,gCAAgC,GAAG,CAAA;AAClD,UAAA,IAAI,CAAC,MAAA,IAAU,MAAA,IAAU,IAAA,IAAQ,cAAc,MAAA,EAAQ;AACrD,YAAA,WAAA,GAAc,MAAA;AACd,YAAA,GAAA,GAAM,MAAM,KAAK,GAAA,CAAI,SAAA,CAAU,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,UACrE,CAAA,MAAO;AACL,YAAA,MAAM,GAAA;AAAA,UACR;AAAA,QACF;AACA,QAAA,KAAA,MAAW,EAAA,IAAM,GAAA,CAAI,MAAA,IAAU,EAAC,EAAG;AACjC,UAAA,MAAM,IAAA,GAAOI,wBAAAA,CAAc,EAAA,CAAG,KAAK,CAAA;AACnC,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,MAAM,UAAA,GAAa,MAAA;AAAA,cACjB,IAAA,GAAO,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAe,CAAA,CAAE,SAAS,KAAK;AAAA,aAC1D;AACA,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AAC5B,YAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,UAAU,CAAA;AAC7B,YAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AAAA,UAC3B,CAAA,MAAO;AACL,YAAA,MAAM,aAAA,GAAgB,MAAA;AAAA,cACpB,IAAA,GAAO,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAe,CAAA,CAAE,SAAS,KAAK;AAAA,aAC1D;AACA,YAAA,OAAA,CAAQ,IAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,GAAG,aAAa,CAAA;AAAA,UAC5C;AAAA,QACF;AACA,QAAA,MAAA,GAAS,GAAA,CAAI,MAAA;AACb,QAAA,IAAI,CAAC,MAAA,IAAU,MAAA,KAAW,UAAA,EAAY;AACtC,QAAA,UAAA,GAAa,MAAA;AAAA,MACf;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,KAAS,CAAA,GAAI,EAAA,GAAK,KAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,IAAA,EAAM,CAAA;AAChE,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,GAAA,EAAK,CAAA,EAAA,EAAK,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,IAAK,EAAE,CAAA;AACpE,IAAA,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,CAAC,CAAA;AACnC,IAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AAAA,EACvC;AACF;;;ACrNO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,WAAA,CACmBC,MACR,UAAA,EACT;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAAA,IAAAA;AACR,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EACR;AAAA,EAFgB,GAAA;AAAA,EACR,UAAA;AAAA;AAAA,EAIX,MAAM,UAAU,IAAA,EAMI;AAClB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,OAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB,kBAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,eAAe,OAAO,CAAA;AAAA,QACtB,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,QACvB,YAAA,CAAa,KAAK,WAAW,CAAA;AAAA,QAC7B,UAAA,CAAW,KAAK,cAAc,CAAA;AAAA,QAC9B,WAAA,CAAY,KAAK,GAAG;AAAA,OACtB;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAU,IAAA,EAAoE;AAClF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAAoE;AACjF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,IAAI,CAAA;AAAA,EACzC;AAAA,EAEA,MAAc,SAAA,CACZ,MAAA,EACA,IAAA,EACiB;AACjB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,EAAU;AAC5C,IAAA,OAAO,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACrB,MAAA,EAAQ,OAAA;AAAA,MACR,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,MAAA;AAAA,MACA,eAAA,EAAiB,kBAAA;AAAA,MACjB,IAAA,EAAM,CAAC,cAAA,CAAe,OAAO,GAAG,YAAA,CAAa,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,MACxD,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH;AACF;;;ACnCO,IAAM,kBAAN,MAA2C;AAAA,EACxC,KAAA,uBAAY,GAAA,EAAsB;AAAA,EAC1C,MAAM,IAAA,GAA4B;AAChC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,EAChC;AAAA,EACA,MAAM,IAAI,IAAA,EAA+B;AACvC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,UAAA,EAAY,IAAI,CAAA;AAAA,EACtC;AAAA,EACA,MAAM,UAAU,UAAA,EAAmC;AACjD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AACtC,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAA,EAAY,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,EAC/D;AACF;AAGO,IAAM,mBAAN,MAA6C;AAAA,EAC1C,OAAA,uBAAc,GAAA,EAA4B;AAAA,EAClD,MAAM,UAAA,GAAwC;AAC5C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAClC;AAAA,EACA,MAAM,UAAU,KAAA,EAAsC;AACpD,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,cAAA,EAAgB,KAAK,CAAA;AAAA,EAC9C;AACF;AAGO,IAAM,kBAAN,MAA2C;AAAA,EACxC,MAAA,GAAwB,IAAA;AAAA,EAChC,MAAM,SAAA,GAAoC;AACxC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA,EACA,MAAM,UAAU,MAAA,EAA+B;AAC7C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;;;AC3CO,IAAM,sBAAA,GAGT;AAAA,EACF,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,qCAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,wCAAA;AAAA,IACN,IAAA,EAAM;AAAA;AAEV;AAMO,SAAS,oBAAoB,IAAA,EAGf;AACnB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,MAAM,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM;AACtB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,EAAE,CAAA,GAAI,IAAI,CAAA,IAAK,sBAAA,CAAuB,EAAE,CAAA,GAAI,IAAI,CAAA;AAC1E,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,MAC9D;AACA,MAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AAAA,IAC5C;AAAA,GACF;AACF;AAMO,SAAS,qBAAqB,IAAA,EAGhB;AACnB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,MAAM,OAAA,CAAQ,EAAA,EAAI,IAAA,EAAM;AACtB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,EAAE,CAAA,GAAI,IAAI,CAAA,IAAK,sBAAA,CAAuB,EAAE,CAAA,GAAI,IAAI,CAAA;AAC1E,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,MAC9D;AACA,MAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA;AAAA,IAC5C;AAAA,GACF;AACF;;;ACrDO,SAAS,sBAAsB,KAAA,EAA0C;AAC9E,EAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,EAAE,CAAA;AAC3B,EAAA,CAAA,CAAE,GAAA,CAAI,gBAAgB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAC/C,EAAA,CAAA,CAAE,GAAA,CAAI,gBAAgB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAGhD,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAChB,KAAA,CAAM,GAAG,CAAC,CAAA,CACV,QAAQ,CAAC,IAAA,KAAS,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvD,EAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,GAAG,CAAA;AAC5B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG,IAAI,EAAE,CAAA;AAElE,EAAA,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,EAAE,CAAA;AAC3B,EAAA,CAAA,CAAE,GAAA,CAAI,gBAAgB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA;AAC/C,EAAA,CAAA,CAAE,GAAA,CAAI,gBAAgB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,EAAE,CAAA;AAEhD,EAAA,OAAO,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE;AACnB;;;ACrBA,IAAM,UAAA,GAAa,EAAA;AA+BnB,eAAsB,yBACpB,KAAA,EAC8B;AAC9B,EAAA,MAAM,QAAA,GAAY,MAAM,WAAA,EAAY;AAGpC,EAAA,MAAM,IAAI,QAAA,CAAS,CAAA;AAEnB,EAAA,MAAM,SAAA,GAAY,EAAE,QAAA,CAAS,CAAA,CAAE,EAAE,aAAA,CAAc,KAAA,CAAM,cAAc,CAAC,CAAC,CAAA;AACrE,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAC3C,EAAA,MAAM,eAAe,KAAA,CAAM,iBAAA;AAE3B,EAAA,MAAM,SAAA,GAAY,EAAE,QAAA,CAAS,QAAA,CAAS,CAAC,SAAA,EAAW,EAAE,CAAC,CAAC,CAAA;AACtD,EAAA,MAAM,aAAA,GAAgB,EAAE,QAAA,CAAS,QAAA,CAAS,CAAC,QAAA,EAAU,EAAE,CAAC,CAAC,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,EAAE,QAAA,CAAS,QAAA,CAAS,CAAC,SAAA,EAAW,EAAE,CAAC,CAAC,CAAA;AAElD,EAAA,MAAM,OAAO,CAAA,CAAE,QAAA;AAAA,IACb,SAAS,CAAC,SAAA,EAAW,UAAU,SAAA,EAAW,aAAA,EAAe,KAAK,CAAC;AAAA,GACjE;AAGA,EAAA,MAAM,UAAA,GAAuB,CAAC,EAAE,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAAK;AACnC,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,CAAC,UAAA,CAAW,CAAC,CAAA,EAAG,UAAA,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EACtE;AACA,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,oBAA8B,EAAC;AACrC,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAAK;AACnC,IAAA,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,CAAE,UAAU,CAAA;AACxC,IAAA,iBAAA,CAAkB,KAAK,CAAC,CAAA;AACxB,IAAA,OAAA,GAAU,CAAA,CAAE,SAAS,QAAA,CAAS,CAAC,SAAS,UAAA,CAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,UAAA,GAAa,OAAA;AACnB,EAAA,MAAM,aAAA,GAAgB,EAAE,QAAA,CAAS,QAAA,CAAS,CAAC,SAAA,EAAW,YAAY,CAAC,CAAC,CAAA;AAEpE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,UAAU,QAAA,EAAS;AAAA,IAC/B,SAAA,EAAW,SAAS,QAAA,EAAS;AAAA,IAC7B,WAAA,EAAa,UAAU,QAAA,EAAS;AAAA,IAChC,eAAA,EAAiB,cAAc,QAAA,EAAS;AAAA,IACxC,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,IACtB,WAAA,EAAa,UAAA;AAAA,IACb,mBAAA,EAAqB,iBAAA;AAAA,IACrB,WAAA,EAAa,WAAW,QAAA,EAAS;AAAA,IACjC,cAAA,EAAgB,SAAS,QAAA,EAAS;AAAA,IAClC,kBAAA,EAAoB,aAAa,QAAA,EAAS;AAAA,IAC1C,cAAA,EAAgB,cAAc,QAAA;AAAS,GACzC;AACF;AAYA,eAAe,WAAA,GAAoC;AACjD,EAAA,IAAI;AACF,IAAA,OAAQ,MAAM,OAAO,SAAS,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,4EAAA;AAAA,MACA,EAAE,KAAA;AAAM,KACV;AAAA,EACF;AACF;AAUA,eAAsB,kBAAkB,IAAA,EAIX;AAC3B,EAAA,MAAM,OAAA,GAAU,MAAM,wBAAA,CAAyB,IAAA,CAAK,KAAK,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAY,MAAM,WAAA,EAAY;AACnD,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACrC,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,eAAA,EAAiB,MAAM,CAAA;AAAA,IAC9C,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,eAAA,EAAiB,MAAM;AAAA,GAC/C,CAAA;AAED,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,MAAM,QAAQ,OAAA,CAAQ,SAAA;AAAA,IACrD,OAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,GAAI,sBAAsB,KAAK,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,YAAY,eAAA,CAAgB,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAAA,IACpD,eAAe,eAAA,CAAgB,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAAA,IACvD,iBAAA,EAAmB,KAAK,KAAA,CAAM,iBAAA;AAAA,IAC9B,eAAe,eAAA,CAAgB,MAAA,CAAO,aAAA,CAAc,CAAC,CAAC,CAAC,CAAA;AAAA,IACvD;AAAA,GACF;AACF;AC7HA,SAAS,OAAA,CAAQ,GAAW,GAAA,EAAyB;AACnD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,GAAA,GAAM,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACjC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,CAAA,GAAI,KAAK,CAAA;AACzB,IAAA,CAAA,KAAM,EAAA;AAAA,EACR;AACA,EAAA,OAAO,GAAA;AACT;AAGO,IAAM,iBAAN,MAAqB;AAAA,EAE1B,WAAA,CACmB,QAAA,EACA,MAAA,EACA,KAAA,GAAQ,eAAA,EACzB;AAHiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAEjB,IAAA,IAAA,CAAK,IAAA,GAAO,CAAC,EAAE,CAAA;AACf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,CAAC,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EARmB,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EAJF,IAAA;AAAA,EAWT,QAAA,CAAS,OAAe,KAAA,EAAuB;AACrD,IAAA,IAAI,SAAS,IAAA,CAAK,MAAA,CAAO,QAAQ,OAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AACvD,IAAA,IAAI,KAAA,KAAU,CAAA,EAAG,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AACzC,IAAA,MAAM,IAAA,GAAO,KAAM,KAAA,GAAQ,CAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC3C,IAAA,MAAM,QAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,GAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA;AACnD,IAAA,OAAO,WAAW,IAAA,CAAK,QAAA,EAAU,CAAC,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,EAChD;AAAA,EACA,IAAA,GAAe;AACb,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA;AAAA,EACpC;AAAA,EACQ,IAAA,CAAK,OAAe,KAAA,EAAuB;AACjD,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,IAAS,CAAA,IAAK,QAAQ,KAAK,CAAA;AAAA,EAClD;AAAA,EACA,MAAM,KAAA,EAA0D;AAC9D,IAAA,MAAM,WAAqB,EAAC;AAC5B,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,IAAI,GAAA,GAAM,KAAA;AACV,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,IAAA,CAAK,OAAO,KAAA,EAAA,EAAS;AAC/C,MAAA,QAAA,CAAS,KAAK,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,CAAA,EAAG,KAAK,CAAC,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AACpB,MAAA,GAAA,KAAQ,CAAA;AAAA,IACV;AACA,IAAA,OAAO,EAAE,UAAU,OAAA,EAAQ;AAAA,EAC7B;AACF;AAMO,SAAS,uBAAuB,IAAA,EAM5B;AACT,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,IAAIH,kBAAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAO,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,IAAIA,kBAAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAO,CAAA;AACzE,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,MAAA;AAAA,IACA,OAAA,CAAQ,IAAA,CAAK,SAAA,EAAW,EAAE,CAAA;AAAA,IAC1B,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,EAAE,CAAA;AAAA,IACpB,MAAA;AAAA,IACA,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,GAAG,CAAC;AAAA,GAC/B;AACA,EAAA,MAAM,QAAA,GAAW,IAAI,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAC,CAAA;AACvE,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,QAAA,CAAS,GAAA,CAAI,GAAG,CAAC,CAAA;AACjB,IAAA,CAAA,IAAK,CAAA,CAAE,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,MAAW,CAAA,IAAKN,gBAAW,QAAQ,CAAA,OAAQ,CAAA,IAAK,EAAA,IAAM,OAAO,CAAC,CAAA;AAC9D,EAAA,OAAO,CAAA,GAAI,OAAA;AACb;AAuBA,eAAee,YAAAA,GAAoC;AACjD,EAAA,IAAI;AACF,IAAA,OAAQ,MAAM,OAAO,SAAS,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,4EAAA;AAAA,MACA,EAAE,KAAA;AAAM,KACV;AAAA,EACF;AACF;AAQA,eAAsB,kBAAkB,IAAA,EAUT;AAC7B,EAAA,MAAM,EAAE,MAAK,GAAI,IAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC/B,EAAA,MAAM,cAAA,GAAiB,KAAA;AACvB,EAAA,MAAM,SAAA,GAAY,EAAA;AAElB,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,EAAY;AACnC,EAAA,MAAM,CAAA,GAAI,CAAC,EAAA,KAAiB,UAAA,CAAW,UAAU,EAAE,CAAA;AAEnD,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,KAAK,SAAS,CAAA;AAC/D,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,SAAS,CAAA,kCAAA,CAAoC,CAAA;AAAA,EAC7E;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA;AAC/C,EAAA,IAAI,OAAA,IAAW,IAAA,IAAQ,OAAA,CAAQ,OAAO,CAAA,CAAE,aAAY,KAAM,IAAA,CAAK,UAAA,CAAW,WAAA,EAAY,EAAG;AACvF,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,IAAA,CAAK,SAAS,CAAA,qCAAA,CAAuC,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,CAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAC,CAAA;AAC5D,EAAA,MAAM,YAAY,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,CAAC,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACnF,EAAA,MAAM,SAAA,GAAY,IAAI,cAAA,CAAe,QAAA,EAAU,KAAK,WAAW,CAAA;AAC/D,EAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,QAAA,EAAU,SAAS,CAAA;AACtD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA;AAE1C,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,YAAA,GAAe,CAAA,CAAE,CAAC,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAC,CAAA;AACxE,EAAA,MAAM,gBAAgB,CAAA,CAAE,CAAC,SAAA,EAAW,KAAA,EAAO,YAAY,CAAC,CAAA;AACxD,EAAA,MAAM,gBAAgB,CAAA,CAAE,CAAC,OAAO,IAAA,CAAK,SAAS,CAAC,CAAC,CAAA;AAChD,EAAA,MAAM,UAAU,sBAAA,CAAuB;AAAA,IACrC,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAA,EAAW,cAAA;AAAA,IACX,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AAED,EAAA,MAAM,KAAA,GAAiC;AAAA,IACrC,cAAA,EAAgB,eAAe,QAAA,EAAS;AAAA,IACxC,SAAA,EAAW,SAAA,CAAU,IAAA,EAAK,CAAE,QAAA,EAAS;AAAA,IACrC,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAK,CAAE,QAAA,EAAS;AAAA,IACjC,aAAA,EAAe,cAAc,QAAA,EAAS;AAAA,IACtC,aAAA,EAAe,cAAc,QAAA,EAAS;AAAA,IACtC,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,IAC1B,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,IACtB,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,IACtB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,cAAc,MAAA,CAAO,SAAA;AAAA,IACrB,WAAW,MAAA,CAAO,MAAA;AAAA,IAClB,aAAA,EAAe,UAAU,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA;AAAA,IACzD,UAAA,EAAY,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA;AAAA,IACrD,WAAA,EAAa,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA;AAAA,IACrD,QAAA,EAAU,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU;AAAA,GACnD;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAY,MAAMA,YAAAA,EAAY;AACnD,EAAA,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACrC,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AAAA,IACxC,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,SAAA,EAAW,MAAM;AAAA,GACzC,CAAA;AACD,EAAA,MAAM,EAAE,OAAM,GAAI,MAAM,QAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA;AACnE,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,CAAA,EAAE,GAAI,sBAAsB,KAAK,CAAA;AAE/C,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,cAAA;AAAA,IACA,SAAA,EAAW,eAAA,CAAgB,SAAA,CAAU,IAAA,EAAM,CAAA;AAAA,IAC3C,OAAA,EAAS,eAAA,CAAgB,OAAA,CAAQ,IAAA,EAAM,CAAA;AAAA,IACvC,aAAA,EAAe,gBAAgB,aAAa,CAAA;AAAA,IAC5C,aAAA,EAAe,gBAAgB,aAAa;AAAA,GAC9C;AACF;;;ACnOO,SAASC,YAAW,GAAA,EAAyB;AAClD,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACnC,EAAA,IAAI,CAAC,eAAe,IAAA,CAAK,KAAK,KAAK,KAAA,CAAM,MAAA,GAAS,MAAM,CAAA,EAAG;AACzD,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AACA,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAA;AAC3C,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAASC,YAAW,KAAA,EAA2B;AACpD,EAAA,OAAO,KAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CACzB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACb;AAEO,SAAStB,eAAc,KAAA,EAA2B;AACvD,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAK,KAAK,CAAA;AACtB,IAAA,OAAO,UAAA,CAAW,KAAK,GAAA,EAAK,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,SAAU,UAAA,CAAsF,MAAA;AACtG,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAC3D,EAAA,OAAO,WAAW,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAC,CAAA;AACrD;AAEO,SAASuB,eAAc,KAAA,EAA2B;AACvD,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,GAAA,IAAO,MAAA,CAAO,aAAa,CAAC,CAAA;AACnD,IAAA,OAAO,KAAK,GAAG,CAAA;AAAA,EACjB;AACA,EAAA,MAAM,SAAU,UAAA,CAAoG,MAAA;AACpH,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAC3D,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC7C;AAEO,SAASC,gBAAe,MAAA,EAAkC;AAC/D,EAAA,MAAM,GAAA,GAAM,OAAO,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AACnD,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,MAAM,CAAA;AACrB,IAAA,MAAA,IAAU,KAAA,CAAM,MAAA;AAAA,EAClB;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,YAAA,CAAa,KAAA,EAAmB,GAAA,EAAa,KAAA,EAA2B;AACtF,EAAA,IAAI,KAAA,CAAM,WAAW,GAAA,EAAK;AACxB,IAAA,MAAM,IAAI,MAAM,CAAA,EAAG,KAAK,YAAY,GAAG,CAAA,YAAA,EAAe,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,YAAY,KAAA,EAA2B;AACrD,EAAA,MAAM,GAAA,GAAM,EAAE,EAAA,IAAM,IAAA,CAAA;AACpB,EAAA,MAAM,GAAA,GAAA,CAAO,MAAM,IAAA,IAAQ,EAAA;AAC3B,EAAA,IAAI,QAAQ,GAAA,IAAO,KAAA,GAAQ,KAAK,MAAM,IAAI,MAAM,oBAAoB,CAAA;AACpE,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,KAAA,GAAQ,CAAA,EAAG,QAAA,GAAA,CAAY,EAAA,IAAM,IAAA,IAAQ,KAAA;AACzC,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,KAAA,IAAS,CAAA,GAAI,EAAA,EAAI,CAAA,IAAK,CAAA,EAAG,KAAK,CAAA,EAAG;AAC/B,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,QAAA,GAAW,KAAK,CAAA;AAChC,IAAA,QAAA,KAAa,EAAA;AAAA,EACf;AACA,EAAA,OAAO,GAAA;AACT;;;ACnEO,IAAM,oBAAA,GAAuB;AAC7B,IAAM,mBAAA,GAAsB;AAgCnC,SAAS,KAAK,KAAA,EAA2B;AACvC,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA;AACvC;AAEA,SAAS,WAAW,OAAA,EAA6B;AAC/C,EAAA,OAAO,IAAI,WAAW,IAAIb,kBAAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,EAAO,CAAA;AAC9D;AAEA,SAAS,UAAU,MAAA,EAA4B;AAC7C,EAAA,OAAO,IAAI,WAAWF,cAAAA,CAAI,KAAA,CAAM,UAAU,MAAM,CAAA,CAAE,OAAO,CAAA;AAC3D;AAEO,SAAS,4BAA4B,OAAA,EAA0C;AACpF,EAAA,OAAOe,YAAAA;AAAA,IACL,KAAK,oBAAoB,CAAA;AAAA,IACzB,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA,IACzB,UAAU,UAAU,CAAA;AAAA,IACpB,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,CAAA;AAAA,IACzC,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,GAAA,EAAK,QAAQ,CAAA;AAAA,IAC1C,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,CAAA;AAAA,IACzC,WAAA,CAAY,QAAQ,cAAc,CAAA;AAAA,IAClC,YAAA,CAAa,OAAA,CAAQ,SAAA,EAAW,EAAA,EAAI,WAAW,CAAA;AAAA,IAC/C,YAAA,CAAa,OAAA,CAAQ,OAAA,EAAS,EAAA,EAAI,SAAS,CAAA;AAAA,IAC3C,YAAA,CAAa,OAAA,CAAQ,aAAA,EAAe,EAAA,EAAI,eAAe,CAAA;AAAA,IACvD,YAAA,CAAa,OAAA,CAAQ,aAAA,EAAe,EAAA,EAAI,eAAe,CAAA;AAAA,IACvD,UAAA,CAAW,QAAQ,SAAS,CAAA;AAAA,IAC5B,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,IAC3B,UAAA,CAAW,QAAQ,WAAW;AAAA,GAChC;AACF;AAEO,SAAS,wBAAwB,OAAA,EAA0C;AAChF,EAAA,OAAOnB,eAAAA,CAAW,2BAAA,CAA4B,OAAO,CAAC,CAAA;AACxD;AAEO,SAAS,2BAA2B,OAAA,EAAsC;AAC/E,EAAA,OAAOiB,WAAAA,CAAW,uBAAA,CAAwB,OAAO,CAAC,CAAA;AACpD;AAEO,SAAS,6BACd,OAAA,EACiC;AACjC,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAA,EAAQA,WAAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAAA,IACjC,MAAA,EAAQA,WAAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAAA,IACjC,MAAA,EAAQA,WAAAA,CAAW,OAAA,CAAQ,MAAM,CAAA;AAAA,IACjC,cAAA,EAAgB,OAAA,CAAQ,cAAA,CAAe,QAAA,EAAS;AAAA,IAChD,SAAA,EAAWA,WAAAA,CAAW,OAAA,CAAQ,SAAS,CAAA;AAAA,IACvC,OAAA,EAASA,WAAAA,CAAW,OAAA,CAAQ,OAAO,CAAA;AAAA,IACnC,aAAA,EAAeA,WAAAA,CAAW,OAAA,CAAQ,aAAa,CAAA;AAAA,IAC/C,aAAA,EAAeA,WAAAA,CAAW,OAAA,CAAQ,aAAa,CAAA;AAAA,IAC/C,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAS;AAAA,IAClC,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAEO,SAAS,yBACd,OAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,QAAQ,YAAA,CAAaD,WAAAA,CAAW,QAAQ,MAAM,CAAA,EAAG,IAAI,QAAQ,CAAA;AAAA,IAC7D,QAAQ,YAAA,CAAaA,WAAAA,CAAW,QAAQ,MAAM,CAAA,EAAG,KAAK,QAAQ,CAAA;AAAA,IAC9D,QAAQ,YAAA,CAAaA,WAAAA,CAAW,QAAQ,MAAM,CAAA,EAAG,IAAI,QAAQ,CAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA;AAAA,IAC7C,WAAW,YAAA,CAAaA,WAAAA,CAAW,QAAQ,SAAS,CAAA,EAAG,IAAI,WAAW,CAAA;AAAA,IACtE,SAAS,YAAA,CAAaA,WAAAA,CAAW,QAAQ,OAAO,CAAA,EAAG,IAAI,SAAS,CAAA;AAAA,IAChE,eAAe,YAAA,CAAaA,WAAAA,CAAW,QAAQ,aAAa,CAAA,EAAG,IAAI,eAAe,CAAA;AAAA,IAClF,eAAe,YAAA,CAAaA,WAAAA,CAAW,QAAQ,aAAa,CAAA,EAAG,IAAI,eAAe,CAAA;AAAA,IAClF,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AAAA,IAC/B,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAEO,SAAS,0BAA0B,OAAA,EAA0C;AAClF,EAAA,OAAO,IAAA;AAAA,IACL,IAAA,CAAK,SAAA,CAAU,EAAE,CAAA,EAAG,eAAA,EAAiB,CAAA,EAAG,CAAA,EAAG,OAAA,EAAS,4BAAA,CAA6B,OAAO,CAAA,EAAG;AAAA,GAC7F;AACF;AAEO,SAAS,0BAA0B,KAAA,EAAwC;AAChF,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,CAAC,CAAA;AAK1D,EAAA,IAAI,OAAA,CAAQ,MAAM,eAAA,IAAmB,OAAA,CAAQ,MAAM,CAAA,IAAK,CAAC,QAAQ,OAAA,EAAS;AACxE,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,wBAAA,CAAyB,QAAQ,OAAO,CAAA;AACjD;;;AChIA,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,gBAAA,GAAmB,EAAA;AACzB,IAAM,WAAA,GAAc,EAAA;AAEpB,SAAS,YAAY,GAAA,EAAyB;AAC5C,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAG,CAAA;AAC9B,EAAA,UAAA,CAAW,MAAA,CAAO,gBAAgB,GAAG,CAAA;AACrC,EAAA,OAAO,GAAA;AACT;AAaA,eAAe,OAAA,GAAyB;AACtC,EAAA,IAAI;AACF,IAAA,OAAA,CAAS,MAAM,OAAO,WAAW,CAAA,EAAoC,OAAA;AAAA,EACvE,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wFAAA;AAAA,MACA,EAAE,KAAA;AAAM,KACV;AAAA,EACF;AACF;AAOA,eAAsB,sBAAsB,IAAA,EAA2C;AACrF,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,EAAQ;AAC3B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,SAAA,GAAY,YAAA,CAAa,IAAA,EAAM,gBAAA,EAAkB,aAAa,CAAA;AACpE,IAAA,MAAMI,KAAAA,GAAO,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,cAAc,SAAS,CAAA;AACrD,IAAA,OAAO,EAAE,SAAA,EAAWA,KAAAA,CAAK,SAAA,EAAW,SAAA,EAAWA,MAAK,SAAA,EAAU;AAAA,EAChE;AACA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,OAAA,EAAQ;AAC9B,EAAA,OAAO,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW,KAAK,SAAA,EAAU;AAChE;AAEA,eAAsB,OAAA,CACpB,WACA,kBAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,EAAQ;AAC3B,EAAA,MAAM,EAAA,GAAK,YAAA,CAAa,kBAAA,EAAoB,gBAAA,EAAkB,6BAA6B,CAAA;AAC3F,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,OAAA,EAAQ;AAC7B,EAAA,MAAM,KAAA,GAAQ,YAAY,WAAW,CAAA;AACrC,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,WAAW,KAAA,EAAO,EAAA,EAAI,IAAI,SAAS,CAAA;AAC/D,EAAA,OAAOF,eAAcC,YAAAA,CAAY,GAAA,CAAI,SAAA,EAAW,KAAA,EAAO,UAAU,CAAC,CAAA;AACpE;AAEA,eAAsB,OAAA,CAAQ,KAAa,kBAAA,EAAqD;AAC9F,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,EAAQ;AAC3B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,kBAAA,EAAoB,gBAAA,EAAkB,6BAA6B,CAAA;AAC/F,EAAA,MAAM,GAAA,GAAMxB,eAAc,GAAG,CAAA;AAC7B,EAAA,IAAI,IAAI,MAAA,GAAS,gBAAA,GAAmB,WAAA,GAAc,IAAA,CAAK,IAAI,cAAA,EAAgB;AACzE,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AACA,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,gBAAgB,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,gBAAA,EAAkB,mBAAmB,WAAW,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,gBAAA,GAAmB,WAAW,CAAA;AAC3D,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,KAAK,UAAA,EAAY,KAAA,EAAO,KAAK,MAAM,CAAA;AAC3D,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,oCAAoC,CAAA;AACjE,EAAA,OAAO,MAAA;AACT;AC/DA,IAAM,UAAA,GAAa,IAAI,WAAA,EAAY,CAAE,OAAO,uBAAuB,CAAA;AAkC5D,SAAS,WAAW,IAAA,EAMb;AACZ,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,QAAA;AAAA,IACH,CAAA,EAAG,CAAA;AAAA,IACH,OAAOsB,WAAAA,CAAW,YAAA,CAAa,KAAK,KAAA,EAAO,EAAA,EAAI,OAAO,CAAC,CAAA;AAAA,IACvD,KAAA,EAAO,KAAK,KAAA,IAAS,mBAAA;AAAA,IACrB,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,QAAA,EAAS;AAAA,IACvB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,aAAaA,WAAAA,CAAW,YAAA,CAAa,KAAK,WAAA,EAAa,EAAA,EAAI,aAAa,CAAC;AAAA,GAC3E;AACF;AAEO,SAAS,gBAAA,CAAiB,OAAmB,QAAA,EAAkC;AACpF,EAAA,OAAOjB,eAAAA;AAAA,IACLmB,YAAAA;AAAA,MACE,UAAA;AAAA,MACA,YAAA,CAAa,KAAA,EAAO,EAAA,EAAI,OAAO,CAAA;AAAA,MAC/B,YAAA,CAAa,QAAA,EAAU,EAAA,EAAI,UAAU;AAAA;AACvC,GACF;AACF;AAEO,SAAS,QAAQ,IAAA,EAMT;AACb,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,CAAK,QAAA,EAAU,IAAI,UAAU,CAAA;AAC3D,EAAA,MAAM,SAAS,gBAAA,CAAiBH,WAAAA,CAAW,KAAK,MAAA,CAAO,KAAK,GAAG,QAAQ,CAAA;AACvE,EAAA,OAAO;AAAA,IACL,CAAA,EAAG,KAAA;AAAA,IACH,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,IACnB,KAAA,EAAO,KAAK,MAAA,CAAO,KAAA;AAAA,IACnB,QAAA,EAAU,IAAA,CAAK,QAAA,CAAS,SAAA,EAAU;AAAA,IAClC,QAAA,EAAUC,YAAW,QAAQ,CAAA;AAAA,IAC7B,GAAA,EAAKC,eAAc,IAAA,CAAK,QAAA,CAAS,KAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAAA,IAC1D,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,QAAA;AAAS,GACtC;AACF;AAEO,SAAS,UAAU,GAAA,EAA0B;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,iBAAiBF,WAAAA,CAAW,GAAA,CAAI,KAAK,CAAA,EAAGA,WAAAA,CAAW,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC/E,IAAA,OAAOf,kBAAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA,CAAE,MAAA;AAAA,MACzC,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MAClB,MAAA,CAAO,IAAA,CAAKN,cAAAA,CAAc,GAAA,CAAI,GAAG,CAAC;AAAA,KACpC;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,eAAe,KAAA,EAA2B;AACxD,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,IACE,CAAA,EAAG,MAAM,QAAA,IACT,CAAA,CAAE,MAAM,CAAA,IACR,OAAO,EAAE,KAAA,KAAU,QAAA,IACnB,OAAO,CAAA,CAAE,WAAA,KAAgB,YACzB,OAAO,CAAA,CAAE,QAAQ,QAAA,IACjB,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,EACtB;AACA,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AACA,EAAA,YAAA,CAAaqB,WAAAA,CAAW,CAAA,CAAE,KAAK,CAAA,EAAG,IAAI,OAAO,CAAA;AAC7C,EAAA,YAAA,CAAaA,WAAAA,CAAW,CAAA,CAAE,WAAW,CAAA,EAAG,IAAI,aAAa,CAAA;AACzD,EAAA,OAAO,EAAE,GAAG,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,SAAS,mBAAA,EAAoB;AACvD;AAEO,SAAS,YAAY,KAAA,EAA4B;AACtD,EAAA,MAAM,CAAA,GAAI,KAAA;AACV,EAAA,IACE,CAAA,EAAG,MAAM,KAAA,IACT,CAAA,CAAE,MAAM,CAAA,IACR,OAAO,EAAE,KAAA,KAAU,QAAA,IACnB,OAAO,CAAA,CAAE,QAAA,KAAa,YACtB,OAAO,CAAA,CAAE,aAAa,QAAA,IACtB,OAAO,CAAA,CAAE,GAAA,KAAQ,QAAA,EACjB;AACA,IAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,EACxC;AACA,EAAA,YAAA,CAAaA,WAAAA,CAAW,CAAA,CAAE,KAAK,CAAA,EAAG,IAAI,OAAO,CAAA;AAC7C,EAAA,YAAA,CAAaA,WAAAA,CAAW,CAAA,CAAE,QAAQ,CAAA,EAAG,IAAI,UAAU,CAAA;AACnD,EAAA,OAAO,EAAE,GAAG,CAAA,EAAG,KAAA,EAAO,CAAA,CAAE,SAAS,mBAAA,EAAoB;AACvD;;;ACnGA,IAAM,mBAAA,GAAwD;AAAA,EAC5D,CAAA,EAAG,MAAA;AAAA,EACH,CAAA,EAAG,UAAA;AAAA,EACH,CAAA,EAAG,WAAA;AAAA,EACH,CAAA,EAAG,SAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAUO,SAAS,WAAA,GAA0B;AACxC,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAC7B,EAAA,UAAA,CAAW,MAAA,CAAO,gBAAgB,GAAG,CAAA;AACrC,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,4BAA4B,IAAA,EAKpB;AACtB,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAA,EAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,IACnB,MAAA,EAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,IACnB,MAAA,EAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,IACnB,cAAA,EAAgB,KAAK,KAAA,CAAM,cAAA;AAAA,IAC3B,SAAA,EAAW,KAAK,KAAA,CAAM,SAAA;AAAA,IACtB,OAAA,EAAS,KAAK,KAAA,CAAM,OAAA;AAAA,IACpB,aAAA,EAAe,KAAK,KAAA,CAAM,aAAA;AAAA,IAC1B,aAAA,EAAe,KAAK,KAAA,CAAM,aAAA;AAAA,IAC1B,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,OAAA,EAAS,EAAA;AAAA,IACT,aAAa,IAAA,CAAK;AAAA,GACpB;AACF;AAEO,SAAS,qBAAqB,IAAA,EAKjB;AAClB,EAAA,MAAM,QAAQ,YAAA,CAAa,IAAA,CAAK,SAAS,WAAA,EAAY,EAAG,IAAI,OAAO,CAAA;AACnE,EAAA,MAAM,WAAA,GAAc,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA;AACxD,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,QAAA,EAAUC,YAAW,KAAK,CAAA;AAAA,IAC1B,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAA;AAAA,IACA,cAAA,EAAgBA,YAAW,WAAW,CAAA;AAAA,IACtC,MAAA,EAAQ,UAAA,CAAW,EAAE,KAAA,EAAO,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,QAAA,EAAU,IAAA,CAAK,cAAA,EAAgB,WAAA,EAAa,CAAA;AAAA,IACvF,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,KAAK,IAAA,CAAK;AAAA,GACZ;AACF;AAGO,SAAS,qBAAqB,IAAA,EAAyC;AAC5E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,KAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAI,cAAA,EAAgB,EAAE,CAAA;AACpE,EAAA,IAAI,KAAA,IAAS,EAAA,EAAI,OAAO,IAAA,CAAK,CAAC,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,IAAI,WAAA,CAAY,CAAC,CAAA;AAC9B,EAAA,UAAA,CAAW,MAAA,CAAO,gBAAgB,IAAI,CAAA;AACtC,EAAA,IAAI,MAAA,GAAA,CAAA,CAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,IAAK,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA,IAAK,KAAA;AAC5D,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,MAAA,GAAS,GAAA,CAAI,cAAA,EAAgB,OAAO,GAAA;AACxC,IAAA,MAAA,IAAU,GAAA,CAAI,cAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC7B;AAEO,IAAM,iBAAN,MAAqB;AAAA,EACT,WAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EAEjB,YAAY,IAAA,EAA+E;AACzF,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACjC,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IACrE;AACA,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AACxB,IAAA,IAAA,CAAK,aAAa,IAAA,CAAK,UAAA;AACvB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AAAA,EACtB;AAAA,EAEQ,IAAI,IAAA,EAAc,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAAW;AAC5D,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAA,CAAE,QAAA,EAAS;AAAA,EACxE;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,OAAA,GAAU,GAAA,EAAsB;AACnD,IAAA,OAAQ,MAAM,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAgB,GAAK,OAAA;AAAA,EAClD;AAAA,EAEA,MAAM,aAAA,CAAc,MAAA,EAAmB,UAAU,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAAkB;AACnF,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,KAAK,GAAA,CAAI,SAAA,EAAW,OAAO,CAAA,EAAG;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,MAAM;AAAA,KAC5B,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,EACjF;AAAA,EAEA,MAAM,SAAA,CAAU,QAAA,EAAkB,UAAU,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,EAA2B;AACvF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,QAAA,EAAW,kBAAA,CAAmB,QAAQ,CAAC,CAAA,KAAA,CAAA,EAAS,OAAO,CAAC,CAAA;AACzF,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAC7B,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,IAAA,IAAQ,IAC1B,GAAA,CAAI,CAAC,GAAA,KAAQ,WAAA,CAAY,GAAG,CAAC,CAAA,CAC7B,MAAA,CAAO,CAAC,QAAQ,SAAA,CAAU,GAAG,CAAC,CAAA,CAC9B,OAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,CAAM,aAAY,KAAM,QAAA,CAAS,WAAA,EAAa,EAClE,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,mBAAmB,CAAA;AACpD,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAA,CAAK,sBAAA,CAAuB,QAAA,EAAU,GAAG,CAAC,CAAC,CAAA;AACjG,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,GAAA,KAA4B,QAAQ,IAAI,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,eAAe,IAAA,EAI6C;AAChE,IAAA,MAAM,MAAM,MAAM,OAAA;AAAA,MAChB,yBAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAAA,MAC5CD,WAAAA,CAAW,IAAA,CAAK,GAAA,CAAI,QAAQ;AAAA,KAC9B;AACA,IAAA,MAAM,MAAM,MAAM,KAAA;AAAA,MAChB,IAAA,CAAK,GAAA,CAAI,CAAA,QAAA,EAAW,kBAAA,CAAmB,KAAK,KAAA,CAAM,QAAQ,CAAC,CAAA,QAAA,CAAA,EAAY,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,MAC1G;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,CAAA,EAAG,WAAW,CAAA,EAAG,CAAA,EAAG,KAAA,EAAO,IAAA,CAAK,MAAM,QAAA,EAAU,EAAA,EAAI,KAAK,GAAA,CAAI,QAAA,EAAU,KAAK;AAAA;AACrG,KACF;AACA,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AAChF,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAG7B,IAAA,OAAO,KAAK,MAAA,IAAU,IAAA;AAAA,EACxB;AAAA,EAEA,MAAM,SAAA,CAAU,QAAA,EAAkB,MAAA,EAA2C;AAC3E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,YAAA,CAAgC,QAAQ,SAAA,EAAW;AAAA,MACxE,YAAA,CAAaA,WAAAA,CAAW,QAAQ,CAAC;AAAA,KAClC,CAAA;AACD,IAAA,IAAI,CAAC,KAAK,OAAO,SAAA;AACjB,IAAA,OAAO,mBAAA,CAAoB,MAAA,CAAO,GAAA,CAAI,MAAM,CAAC,CAAA,IAAK,SAAA;AAAA,EACpD;AAAA,EAEA,MAAc,sBAAA,CACZ,QAAA,EACA,GAAA,EAC6B;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,GAAA,EAAK,OAAO,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QACvC,IAAA,CAAK,YAAA,CAAgC,GAAA,CAAI,QAAA,EAAU,SAAA,EAAW;AAAA,UAC5D,YAAA,CAAaA,WAAAA,CAAW,QAAQ,CAAC;AAAA,SAClC,CAAA;AAAA,QACD,IAAA,CAAK,YAAA,CAAoC,GAAA,CAAI,QAAA,EAAU,aAAA,EAAe;AAAA,UACpE,cAAA,CAAe,IAAI,QAAQ;AAAA,SAC5B;AAAA,OACF,CAAA;AACD,MAAA,IAAI,CAAC,GAAA,IAAO,CAAC,OAAA,EAAS,OAAO,IAAA;AAC7B,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA;AAChD,MAAA,IAAI,OAAO,GAAA,CAAI,MAAM,MAAM,CAAA,IAAK,cAAA,GAAiB,KAAK,OAAO,IAAA;AAC7D,MAAA,MAAM,eAAeC,WAAAA,CAAW,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,aAAa,CAAC,CAAA;AACtE,MAAA,IAAI,aAAa,WAAA,EAAY,KAAM,IAAI,QAAA,CAAS,WAAA,IAAe,OAAO,IAAA;AACtE,MAAA,OAAO;AAAA,QACL,GAAG,GAAA;AAAA,QACH,QAAA,EAAU,OAAA,CAAQ,QAAA,EAAU,IAAA,MAAU,GAAA,CAAI,QAAA;AAAA,QAC1C,SAAA,EAAW,eAAe,QAAA,EAAS;AAAA,QACnC;AAAA,OACF;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,YAAA,CACZ,MAAA,EACA,MAAA,EACA,IAAA,EACmB;AACnB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAc;AAAA,QACtC,MAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACF;;;ACjPO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAA2B;AAAA,EAA3B,GAAA;AAAA;AAAA,EAG7B,MAAM,SAAS,IAAA,EAOuC;AACpD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,SAAA,EAAU;AACzC,IAAA,MAAM,WAAW,MAAM,eAAA;AAAA,MACrB,SAAA;AAAA,MACA,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,gBAAA;AAAA,MACL,KAAK,OAAA,IAAW;AAAA,KAClB;AACA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAe,cAAA,CAAe;AAAA,MACpE,QAAA;AAAA,MACA,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,kBAAkB,IAAA,CAAK,gBAAA;AAAA,MACvB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAA,EAAU,KAAK,QAAA,IAAY,IAAA;AAAA,MAC3B,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,EAC5B;AAAA;AAAA,EAGA,MAAM,OAAO,IAAA,EAOO;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,IAAA,CAAK,gBAAgB,CAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,qBAAA,CAAsB,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AAC3D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,MAAA,CAAO;AAAA,MACjD,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB,IAAA;AAAA,MACA,kBAAkB,IAAA,CAAK,gBAAA;AAAA,MACvB,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,IAAI,WAAW,EAAE,CAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,IAAA,EAA4C;AACvD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,iBAAA,CAAkB,iBAAA,CAAkB;AAAA,MAC5D,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,IAAA,EAAiD;AAC/D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,eAAA,CAAgB;AAAA,MACvD,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,IAAA,EAAmE;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,WAAA,CAAY;AAAA,MACnD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,IAAA,EAAmE;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,CAAe,cAAA,CAAe;AAAA,MACtD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AACF;;;AChEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAA2B;AAAA,EAA3B,GAAA;AAAA;AAAA,EAG7B,eAAe,YAAA,EAAuC;AACpD,IAAA,MAAM,EAAE,UAAA,EAAY,WAAA,EAAY,GAAI,wBAAwB,YAAY,CAAA;AACxE,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,wBAAA,CAAyB,YAAY,WAAW,CAAA;AACxE,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA,EAAS,wBAAwB,WAAW;AAAA,KAC9C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAAoD;AACjE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,YAAA,CAAa;AAAA,MACrD,oBAAoB,IAAA,CAAK,WAAA;AAAA,MACzB,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,gBAAgB,gBAAA,EAA0B;AACxC,IAAA,OAAO,gCAAgC,gBAAgB,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,IAAA,EAQR;AACD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,MAAM,OAAA,GAAU,+BAAA,CAAgC,IAAA,CAAK,EAAE,CAAA;AACvD,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA;AAEtD,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,GAAA,CAAI,kBAAA,CAAmB;AAAA,MACtD,aAAa,OAAA,CAAQ,qBAAA;AAAA,MACrB,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,iBAAiB,QAAA,CAAS;AAAA,MACxE,cAAA,EAAgB,UAAA,CAAW,OAAA,CAAQ,cAAc,CAAA;AAAA,MACjD,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,MAC/B,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,aAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAM,IAAA,EAIQ;AAClB,IAAA,MAAM,OAAA,GAAU,6CAAA,CAA8C,IAAA,CAAK,cAAc,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,IAAI,kBAAA,CAAmB;AAAA,MACjC,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB,MAAA,EAAQ,cAAc,OAAO;AAAA,KAC9B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,IAAA,EAGW;AACd,IAAA,OAAO,iBAAA,CAAkB;AAAA,MACvB,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB,UAAA,EAAY,KAAK,QAAA,CAAS,UAAA;AAAA,MAC1B,WAAA,EAAa,KAAK,QAAA,CAAS;AAAA,KAC5B,CAAA;AAAA,EACH;AACF;;;AC/GO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CACmB,KACA,OAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAChB;AAAA,EAFgB,GAAA;AAAA,EACA,OAAA;AAAA;AAAA,EAInB,OAAO,IAAA,EAAgE;AACrE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,cAAc,IAAA,EAA+C;AACjE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,kBAAA,CAAmB,gBAAA,CAAiB;AAAA,MAC5D,GAAG,IAAA;AAAA,MACH,iBAAA,EAAmB,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,eAAA;AAAA,MAC7C;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAc,IAAA,EAAwD;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAW,MAAM,KAAK,GAAA,CAAI,aAAA,GAAgB,SAAA,EAAU;AACzE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,kBAAA,CAAmB,cAAc,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,KAAA,EAAuD;AACjE,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW;AACvB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,6BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,kBAAkB,EAAE,KAAA,EAAO,WAAW,IAAA,CAAK,GAAA,CAAI,WAAW,CAAA;AAAA,EACnE;AAAA;AAAA,EAGA,MAAM,eAAe,KAAA,EAA8C;AACjE,IAAA,OAAO,KAAK,aAAA,CAAc,MAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EACnD;AACF;;;ACxCO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,GAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAA2B;AAAA,EAA3B,GAAA;AAAA,EAE7B,MAAc,OAAO,QAAA,EAAoC;AACvD,IAAA,OAAO,YAAa,MAAM,IAAA,CAAK,GAAA,CAAI,aAAA,GAAgB,SAAA,EAAU;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QAAQ,IAAA,EAIkC;AAC9C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,EAAU;AACtC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,KAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,IAAA,CAAK,SAAS,CAAA;AAE9C,IAAA,MAAM,gBAAgB,MAAM,IAAA,CAAK,IAAI,SAAA,CAAU,WAAA,CAAY,gBAAgB,MAAM,CAAA;AACjF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,cAAA,EAAe;AAC/C,IAAA,MAAM,EAAE,UAAA,EAAW,GAAI,MAAM,aAAA,CAAc;AAAA,MACzC,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,MACnC,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM;AAAA,KAC9B,CAAA;AAED,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAY,OAAA,CAAQ;AAAA,MAC1D,KAAA;AAAA,MACA,UAAA,EAAY,gBAAgB,UAAU,CAAA;AAAA,MACtC,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAiB;AAAA,MACrB,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,OAAA;AAAA,MACzB,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,WAAA;AAAA,MAClC,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,MACtB,KAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,UAAA,EAAY,QAAQ,UAAU,CAAA;AAAA,MAC9B,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW,KAAK,SAAA,IAAa;AAAA,KAC/B;AACA,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAC7B,IAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,EACxB;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAOK;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,aAAA,EAAc;AACtC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAY,QAAA,CAAS;AAAA,MAC3D,GAAG,IAAA,CAAK,KAAA;AAAA,MACR,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,GAAA,EAAK,KAAK,GAAA,IAAO,EAAA;AAAA,MACjB,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,SAAA;AAAA,MAC9B;AAAA,KACD,CAAA;AACD,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAM,IAAA,CAAK,IAAI,KAAA,CAAM,SAAA,CAAU,KAAK,cAAc,CAAA;AAC3E,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,gBAAgB,IAAA,EAA6C;AACjE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,eAAA,CAAgB,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,EACvF;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAEmD;AAChE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM,CAAA;AAC7C,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACrC,IAAA,CAAK,IAAI,SAAA,CAAU,WAAA,CAAY,cAAc,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,MACtE,IAAA,CAAK,IAAI,SAAA,CAAU,WAAA,CAAY,cAAc,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO;AAAA,KACrE,CAAA;AACD,IAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAc,IAAA,EAQW;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW;AACvB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,kCAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,EAAE,WAAA,EAAa,cAAA,EAAe,GAAI,IAAA;AACtC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,cAAA,EAAgB;AACnC,MAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAY,gBAAA,CAAiB;AAAA,QAClE,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO;AAAA,OAC9B,CAAA;AACD,MAAA,WAAA,GAAc,KAAA,CAAM,WAAA;AACpB,MAAA,cAAA,GAAiB,KAAA,CAAM,cAAA;AAAA,IACzB;AACA,IAAA,OAAO,iBAAA,CAAkB;AAAA,MACvB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,SAAA;AAAA,MAC9B,GAAA,EAAK,KAAK,GAAA,IAAO,EAAA;AAAA,MACjB,OAAO,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,GAAA,CAAI,OAAO,IAAA,CAAK,KAAA;AAAA,MAC1C,WAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA,CAAI;AAAA,KACrB,CAAA;AAAA,EACH;AACF;;;ACvIO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAA0B;AAA1B,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAA2B;AAAA,EAA3B,GAAA;AAAA,EAErB,OAAA,GAA0B;AAChC,IAAA,OAAO,IAAI,cAAA,CAAe;AAAA,MACxB,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,kBAAA;AAAA,MAC7B,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,eAAA;AAAA,MACtC,OAAA,EAAS,KAAK,GAAA,CAAI;AAAA,KACnB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,IAAA,EAKI;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,SAAA,CAAU;AAAA,MAClD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAkB,KAAA,EAAyC;AAC/D,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,KAAK,KAAA,CAAM;AAAA,KACZ,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAU,IAAA,EAA8C;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,SAAA,CAAU;AAAA,MAClD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAS,IAAA,EAA8C;AAC3D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,eAAA,CAAgB,QAAA,CAAS;AAAA,MACjD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,aAAA;AAAc,KAChC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,qBAAqB,IAAA,EAGG;AACtB,IAAA,OAAO,2BAAA,CAA4B;AAAA,MACjC,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,WAAA;AAAA,MAClC,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,eAAA;AAAA,MACtC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,IAAA,EAKM;AAClB,IAAA,OAAO,qBAAqB,IAAI,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,MAAM,eAAe,OAAA,EAAmC;AACtD,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,cAAA,CAAe,OAAO,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,UAAU,KAAA,EAAuC;AACrD,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,aAAA,CAAc,MAAM,MAAM,CAAA;AAAA,EAClD;AAAA;AAAA,EAGA,MAAM,UAAU,QAAA,EAA0C;AACxD,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,SAAA,CAAU,QAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,QAAQ,IAAA,EAAyC;AAC/C,IAAA,OAAO,qBAAqB,IAAI,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,MAAM,eAAe,IAAA,EAG6C;AAChE,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,cAAA,CAAe,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,QAAA,EAAkB,MAAA,EAA4C;AAC5E,IAAA,MAAM,MAAM,MAAA,IAAW,MAAM,KAAK,GAAA,CAAI,aAAA,GAAgB,SAAA,EAAU;AAChE,IAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAE,SAAA,CAAU,UAAU,GAAG,CAAA;AAAA,EAC/C;AACF;;;AC7EO,IAAM,eAAN,MAAkD;AAAA,EAC9C,MAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAEA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EAEQ,SAAA;AAAA,EAEjB,YAAY,IAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,cAAc,IAAI,CAAA;AAChC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,OAAA,GAClB,MAAA,GACA,IAAI,SAAA,CAAU;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AACL,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,OAAA,IAAY,IAAA,CAAK,SAAA;AACjC,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AACtB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,OAAA,EAAS,KAAA,IAAS,IAAI,eAAA,EAAgB;AACxD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,OAAA,EAAS,KAAA,IAAS,IAAI,gBAAA,EAAiB;AACzD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,OAAA,EAAS,IAAA,IAAQ,IAAI,eAAA,EAAgB;AAE3D,IAAA,MAAM,CAAA,GAAI,KAAK,MAAA,CAAO,SAAA;AACtB,IAAA,IAAA,CAAK,SAAA,GAAY;AAAA,MACf,iBAAiB,IAAI,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,EAAE,eAAe,CAAA;AAAA,MAChE,kBAAkB,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,EAAE,gBAAgB,CAAA;AAAA,MACnE,gBAAgB,IAAI,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,EAAE,cAAc,CAAA;AAAA,MAC7D,mBAAmB,IAAI,iBAAA,CAAkB,IAAA,CAAK,GAAA,EAAK,EAAE,mBAAmB,CAAA;AAAA,MACxE,iBAAiB,IAAI,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,EAAE,eAAe,CAAA;AAAA,MAChE,oBAAoB,IAAI,kBAAA,CAAmB,IAAA,CAAK,GAAA,EAAK,EAAE,kBAAkB,CAAA;AAAA,MACzE,aAAa,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,EAAK,EAAE,WAAW,CAAA;AAAA,MACpD,iBAAiB,IAAI,eAAA,CAAgB,IAAA,CAAK,GAAA,EAAK,EAAE,eAAe;AAAA,KAClE;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,CAAe,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,IAAI,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,WAAA,CAAY,IAAI,CAAA;AAChC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,CAAe,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,iBAAA,CAAkB,IAAA,EAAM,KAAK,OAAO,CAAA;AAAA,EAC5D;AAAA;AAAA,EAGA,IAAI,OAAA,GAAiC;AACnC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA,EAGA,aAAA,GAA8B;AAC5B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA,EAGA,mBAAmB,IAAA,EAIC;AAClB,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,QAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,kBAAA,CAAmB,IAAI,CAAA;AAAA,EAC/C;AACF;;;AC1HO,IAAM,OAAA,GAAU","file":"index.cjs","sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/**\n * Byte and hex helpers shared across the crypto layer.\n *\n * These are intentionally dependency-free and isomorphic (Node + browser).\n */\n\n/** Parse a hex string (with or without `0x`) into bytes. */\nexport function hexToBytes(hex: string): Uint8Array {\n const h = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (h.length % 2) throw new Error(\"Invalid hex length\");\n const out = new Uint8Array(h.length / 2);\n for (let i = 0; i < out.length; i++) {\n out[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\n/** Encode bytes as a lowercase hex string (no `0x` prefix). */\nexport function bytesToHex(b: Uint8Array): string {\n return Array.from(b)\n .map((x) => x.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\n/** Interpret bytes as a big-endian unsigned integer. */\nexport function bytesToBigInt(b: Uint8Array): bigint {\n let x = 0n;\n for (let i = 0; i < b.length; i++) x = (x << 8n) | BigInt(b[i]);\n return x;\n}\n\n/** Encode a bigint as a fixed 32-byte big-endian array. */\nexport function bigIntToBytes32(value: bigint): Uint8Array {\n const out = new Uint8Array(32);\n let x = value;\n for (let i = 31; i >= 0; i--) {\n out[i] = Number(x & 0xffn);\n x >>= 8n;\n }\n return out;\n}\n\n/** bigint -> 0x-prefixed 32-byte big-endian hex. */\nexport function toHex32(v: bigint): string {\n return \"0x\" + v.toString(16).padStart(64, \"0\");\n}\n\n/** Concatenate byte arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const total = arrays.reduce((n, a) => n + a.length, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const a of arrays) {\n out.set(a, off);\n off += a.length;\n }\n return out;\n}\n","/**\n * String-based decimal parsing for XLM amounts to avoid floating-point precision\n * issues. XLM uses 7 decimal places (1 XLM = 10^7 stroops).\n */\n\nconst MAX_DECIMALS = 7;\n\n/**\n * Parse an XLM string into stroops. Enforces at most 7 decimal places and\n * rejects malformed input.\n *\n * @throws if the input is empty, non-numeric, or has more than 7 decimals.\n */\nexport function parseXlmToStroops(xlmString: string): bigint {\n const trimmed = xlmString.trim();\n if (!trimmed) {\n throw new Error(\"XLM amount cannot be empty\");\n }\n if (!/^-?\\d+\\.?\\d*$/.test(trimmed)) {\n throw new Error(`Invalid XLM amount: ${trimmed}`);\n }\n\n const isNegative = trimmed.startsWith(\"-\");\n const absolute = isNegative ? trimmed.slice(1) : trimmed;\n\n const parts = absolute.split(\".\");\n const integerPart = parts[0] || \"0\";\n const decimalPart = parts[1] || \"\";\n\n if (decimalPart.length > MAX_DECIMALS) {\n throw new Error(\n `XLM amount has too many decimal places (max ${MAX_DECIMALS}): ${trimmed}`,\n );\n }\n\n const paddedDecimal = decimalPart.padEnd(MAX_DECIMALS, \"0\");\n const stroops = BigInt(integerPart + paddedDecimal);\n return isNegative ? -stroops : stroops;\n}\n\n/**\n * Parse a Horizon balance string into stroops. Returns 0 for empty or malformed\n * input (defensive against unexpected API responses).\n */\nexport function parseHorizonBalanceToStroops(\n balanceString: string | undefined,\n): bigint {\n if (!balanceString || balanceString.trim() === \"\") return 0n;\n try {\n return parseXlmToStroops(balanceString);\n } catch {\n return 0n;\n }\n}\n\n/** Format stroops as an XLM string with trailing zeros removed. */\nexport function formatStroopsToXlm(stroops: bigint): string {\n const isNegative = stroops < 0n;\n const absolute = isNegative ? -stroops : stroops;\n\n const stroopsString = absolute.toString().padStart(MAX_DECIMALS + 1, \"0\");\n const integerPart = stroopsString.slice(0, -MAX_DECIMALS) || \"0\";\n const decimalPart = stroopsString.slice(-MAX_DECIMALS);\n const trimmedDecimal = decimalPart.replace(/0+$/, \"\");\n\n if (trimmedDecimal === \"\") {\n return isNegative ? `-${integerPart}` : integerPart;\n }\n return isNegative\n ? `-${integerPart}.${trimmedDecimal}`\n : `${integerPart}.${trimmedDecimal}`;\n}\n\n/** Alias for {@link formatStroopsToXlm}. */\nexport const formatXlm = formatStroopsToXlm;\n","/**\n * Dual-Key Stealth Address Protocol (DKSAP) — client-side crypto.\n *\n * Senders derive a one-time stealth address from a recipient's meta-address\n * (viewing + spending public keys). Recipients use their viewing key to detect\n * incoming transfers (view-tag prefilter) and their spending key to reconstruct\n * the one-time private key and sweep.\n *\n * Uses @noble/curves secp256k1 and is byte-compatible with the Rust WASM scanner.\n *\n * Stellar adaptation: scanning matches on the 20-byte Keccak \"stealth id\"; funds\n * are held on a deterministic Ed25519 Stellar account derived from the stealth\n * secp256k1 point.\n */\n\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { hkdf } from \"@noble/hashes/hkdf\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { Keypair } from \"@stellar/stellar-sdk\";\nimport { bigIntToBytes32, bytesToBigInt, bytesToHex, hexToBytes } from \"./bytes\";\n\nconst CURVE = secp256k1;\nconst DOMAIN = \"opaque-cash-v1\";\nconst PROTOCOL_VERSION = \"1\";\n\n/** 0x-prefixed hex string. */\nexport type Hex = `0x${string}`;\n\nexport type DomainSeparationOpts = {\n origin: string;\n networkPassphrase: string;\n walletPublicKey: string;\n purpose: string;\n};\n\n/**\n * Build the human-readable, domain-separated message a wallet signs to derive\n * its Opaque stealth keys. Signing it is not a transaction and moves no funds.\n */\nexport function buildDomainSeparatedMessage(opts: DomainSeparationOpts): string {\n return [\n `--- Opaque Protocol Key Derivation ---`,\n `App: Opaque Stellar`,\n `Origin: ${opts.origin}`,\n `Network: ${opts.networkPassphrase}`,\n `Wallet: ${opts.walletPublicKey}`,\n `Version: ${PROTOCOL_VERSION}`,\n `Purpose: ${opts.purpose}`,\n ``,\n `Warning: Signing this message authorizes key derivation for the Opaque protocol.`,\n `This is not a transaction and does not move funds.`,\n `Do not sign this message on untrusted sites or applications.`,\n ].join(\"\\n\");\n}\n\nexport const LEGACY_SETUP_MESSAGE =\n \"Sign this message to derive your Opaque Cash stealth keys on Stellar. This is not a transaction and does not move funds.\";\n\n// -----------------------------------------------------------------------------\n// Key derivation from wallet signature (entropy)\n// -----------------------------------------------------------------------------\n\n/**\n * Derive viewing key (v) and spending key (s) from a wallet signature used as\n * entropy. Expands the signature into 64 bytes via HKDF-SHA256, then splits into\n * two 32-byte private keys. Domain string is \"opaque-cash-v1\".\n */\nexport function deriveKeysFromSignature(signatureHex: Hex | string): {\n viewingKey: Uint8Array;\n spendingKey: Uint8Array;\n} {\n const sigBytes =\n typeof signatureHex === \"string\"\n ? signatureHex.startsWith(\"0x\")\n ? signatureHex.slice(2)\n : signatureHex\n : signatureHex;\n const sig = typeof sigBytes === \"string\" ? hexToBytes(sigBytes) : sigBytes;\n const okm = hkdf(sha256, sig, undefined, DOMAIN, 64);\n return { viewingKey: okm.slice(0, 32), spendingKey: okm.slice(32, 64) };\n}\n\n/**\n * Build the stealth meta-address from viewing and spending private keys.\n * Meta-address = compressed(V) || compressed(S) (66 bytes).\n */\nexport function keysToStealthMetaAddress(\n viewingKey: Uint8Array,\n spendingKey: Uint8Array,\n): { V: Uint8Array; S: Uint8Array; metaAddress: Uint8Array } {\n const V = CURVE.getPublicKey(viewingKey, true);\n const S = CURVE.getPublicKey(spendingKey, true);\n const metaAddress = new Uint8Array(V.length + S.length);\n metaAddress.set(V, 0);\n metaAddress.set(S, V.length);\n return { V, S, metaAddress };\n}\n\n/** Encode the 66-byte stealth meta-address as 0x-prefixed hex. */\nexport function stealthMetaAddressToHex(metaAddress: Uint8Array): Hex {\n return (\"0x\" + bytesToHex(metaAddress)) as Hex;\n}\n\n/**\n * Parse a recipient stealth meta-address into viewing and spending public keys.\n * Format: first 33 bytes = compressed viewing key V, next 33 = compressed S.\n */\nexport function parseStealthMetaAddress(metaHex: Hex | string): {\n viewPubKey: Uint8Array;\n spendPubKey: Uint8Array;\n} {\n const raw =\n typeof metaHex === \"string\" && metaHex.startsWith(\"0x\")\n ? metaHex.slice(2)\n : metaHex;\n const bytes = hexToBytes(raw as string);\n if (bytes.length < 66) {\n throw new Error(\"Invalid stealth meta-address: expected 66 bytes\");\n }\n return { viewPubKey: bytes.slice(0, 33), spendPubKey: bytes.slice(33, 66) };\n}\n\n// -----------------------------------------------------------------------------\n// Shared secret + stealth point (DKSAP core)\n// -----------------------------------------------------------------------------\n\nfunction sharedSecretFromScalarAndPoint(\n privScalar: Uint8Array,\n pointBytes: Uint8Array,\n): Uint8Array {\n const P = CURVE.ProjectivePoint.fromHex(pointBytes);\n const scalar = bytesToBigInt(privScalar) % CURVE.CURVE.n;\n if (scalar === 0n) throw new Error(\"Invalid scalar\");\n return P.multiply(scalar).toRawBytes(true);\n}\n\nfunction hashSharedSecret(sharedSecret: Uint8Array): {\n sH: Uint8Array;\n viewTag: number;\n} {\n const sH = keccak_256(sharedSecret);\n return { sH, viewTag: sH[0] };\n}\n\nfunction stealthPointAndAddress(\n spendPubKey: Uint8Array,\n sH: Uint8Array,\n): { stealthAddress: string; stealthPubKeyUncompressed: Uint8Array } {\n const n = CURVE.CURVE.n;\n const sHMod = bytesToBigInt(sH) % n;\n if (sHMod === 0n) throw new Error(\"Invalid scalar from hash\");\n const S_h = CURVE.ProjectivePoint.BASE.multiply(sHMod);\n const P_spend = CURVE.ProjectivePoint.fromHex(spendPubKey);\n const P_stealth = P_spend.add(S_h);\n const uncompressed = P_stealth.toRawBytes(false);\n const hash = keccak_256(uncompressed.slice(1));\n const addr = \"0x\" + bytesToHex(hash.slice(12));\n return { stealthAddress: addr, stealthPubKeyUncompressed: uncompressed };\n}\n\n/**\n * Sender-side: compute a one-time stealth address and view tag for a recipient\n * meta-address. Generates a fresh ephemeral key per call.\n */\nexport function computeStealthAddressAndViewTag(\n recipientMetaAddressHex: Hex | string,\n): {\n ephemeralPriv: Uint8Array;\n ephemeralPubKey: Uint8Array;\n stealthAddress: string;\n stealthStellarAddress: string;\n viewTag: number;\n metadata: Uint8Array;\n} {\n const { viewPubKey, spendPubKey } = parseStealthMetaAddress(\n recipientMetaAddressHex as Hex,\n );\n const ephemeralPriv = CURVE.utils.randomPrivateKey();\n const ephemeralPubKey = CURVE.getPublicKey(ephemeralPriv, true);\n\n const shared = sharedSecretFromScalarAndPoint(ephemeralPriv, viewPubKey);\n const { sH, viewTag } = hashSharedSecret(shared);\n const { stealthAddress, stealthPubKeyUncompressed } = stealthPointAndAddress(\n spendPubKey,\n sH,\n );\n const stealthStellarAddress = deriveStealthStellarAddress(\n stealthPubKeyUncompressed,\n );\n\n return {\n ephemeralPriv,\n ephemeralPubKey,\n stealthAddress,\n stealthStellarAddress,\n viewTag,\n metadata: new Uint8Array([viewTag]),\n };\n}\n\n/**\n * Rebuild announce() parameters for a manual ghost receive using a stored\n * ephemeral private key (deterministic re-derivation of a prior send).\n */\nexport function buildGhostAnnouncementPayload(\n recipientMetaAddressHex: Hex | string,\n ephemeralPrivKeyHex: Hex | string,\n): {\n stealthAddress: string;\n ephemeralPubKey: Uint8Array;\n metadata: Uint8Array;\n viewTag: number;\n} {\n const { viewPubKey, spendPubKey } = parseStealthMetaAddress(\n recipientMetaAddressHex as Hex,\n );\n const h = (ephemeralPrivKeyHex as string).startsWith(\"0x\")\n ? (ephemeralPrivKeyHex as string).slice(2)\n : ephemeralPrivKeyHex;\n const ephemeralPriv = hexToBytes(h as string);\n if (ephemeralPriv.length !== 32) {\n throw new Error(\"Ephemeral private key must be 32 bytes.\");\n }\n const ephemeralPubKey = CURVE.getPublicKey(ephemeralPriv, true);\n const shared = sharedSecretFromScalarAndPoint(ephemeralPriv, viewPubKey);\n const { sH, viewTag } = hashSharedSecret(shared);\n const { stealthAddress } = stealthPointAndAddress(spendPubKey, sH);\n return {\n stealthAddress,\n ephemeralPubKey,\n metadata: new Uint8Array([viewTag]),\n viewTag,\n };\n}\n\n// -----------------------------------------------------------------------------\n// Recipient-side detection + reconstruction (pure-TS reference for the scanner)\n// -----------------------------------------------------------------------------\n\n/**\n * Recipient-side: recompute the DKSAP shared-secret hash and view tag from the\n * sender's ephemeral public key and the recipient's viewing key. Mirrors the\n * sender computation via ECDH symmetry (viewPriv·EphPub == ephPriv·ViewPub).\n */\nexport function recipientSharedSecretHash(\n viewingKey: Uint8Array,\n ephemeralPubKey: Uint8Array,\n): { sH: Uint8Array; viewTag: number } {\n const shared = sharedSecretFromScalarAndPoint(viewingKey, ephemeralPubKey);\n return hashSharedSecret(shared);\n}\n\n/**\n * Cheap recipient-side prefilter: does this announcement's view tag match?\n * Lets a recipient skip the expensive point math for non-matching transfers.\n */\nexport function checkViewTagMatch(opts: {\n viewingKey: Uint8Array;\n ephemeralPubKey: Uint8Array;\n viewTag: number;\n}): boolean {\n return (\n recipientSharedSecretHash(opts.viewingKey, opts.ephemeralPubKey).viewTag ===\n opts.viewTag\n );\n}\n\n/**\n * Recipient-side: reconstruct the one-time stealth private key for a transfer.\n * stealthPriv = (spendingKey + sH) mod n, where sH = keccak(viewPriv·EphPub).\n * The returned key controls the same secp256k1 point the sender derived, hence\n * the same deterministic Stellar account.\n */\nexport function reconstructStealthPrivateKey(opts: {\n viewingKey: Uint8Array;\n spendingKey: Uint8Array;\n ephemeralPubKey: Uint8Array;\n}): Uint8Array {\n const n = CURVE.CURVE.n;\n const { sH } = recipientSharedSecretHash(opts.viewingKey, opts.ephemeralPubKey);\n const sHMod = bytesToBigInt(sH) % n;\n const spend = bytesToBigInt(opts.spendingKey) % n;\n const stealth = (spend + sHMod) % n;\n if (stealth === 0n) throw new Error(\"Reconstructed stealth key is zero\");\n return bigIntToBytes32(stealth);\n}\n\n// -----------------------------------------------------------------------------\n// Deterministic ephemeral key for the \"Announcer\" stealth signer\n// -----------------------------------------------------------------------------\n\nconst ANNOUNCER_SALT = \"opaque-announcer-v1\";\n\n/** Deterministic ephemeral scalar for the \"Announcer\" stealth signer. */\nexport function deriveAnnouncerEphemeralKey(\n metaAddressHex: Hex | string,\n): Uint8Array {\n const raw =\n typeof metaAddressHex === \"string\" && metaAddressHex.startsWith(\"0x\")\n ? metaAddressHex.slice(2)\n : metaAddressHex;\n const seed = new TextEncoder().encode(raw + ANNOUNCER_SALT);\n const okm = hkdf(sha256, seed, undefined, \"opaque-announcer-ephemeral\", 32);\n const n = CURVE.CURVE.n;\n let scalar = bytesToBigInt(okm) % n;\n if (scalar === 0n) scalar = 1n;\n return bigIntToBytes32(scalar);\n}\n\n// -----------------------------------------------------------------------------\n// Deterministic Stellar account from a stealth point\n// -----------------------------------------------------------------------------\n\n/** Derive the deterministic Ed25519 Stellar keypair from a stealth secp256k1 point. */\nexport function deriveStealthStellarKeypair(\n stealthPubKeyUncompressed: Uint8Array,\n): Keypair {\n const domain = new TextEncoder().encode(\"opaque-stellar-stealth-v1\");\n const input = new Uint8Array(domain.length + stealthPubKeyUncompressed.length);\n input.set(domain, 0);\n input.set(stealthPubKeyUncompressed, domain.length);\n const seed = sha256(input);\n return Keypair.fromRawEd25519Seed(Buffer.from(seed.slice(0, 32)));\n}\n\n/** Derive the deterministic Stellar G-address from a stealth secp256k1 point. */\nexport function deriveStealthStellarAddress(\n stealthPubKeyUncompressed: Uint8Array,\n): string {\n return deriveStealthStellarKeypair(stealthPubKeyUncompressed).publicKey();\n}\n\n/**\n * Recompute the 20-byte EVM-style stealth id (`0x` + 40 hex) from a stealth\n * private key. Used to confirm a view-tag match against an announcement.\n */\nexport function stealthIdFromPrivateKey(stealthPrivKey: Uint8Array): string {\n const uncompressed = CURVE.getPublicKey(stealthPrivKey, false);\n const hash = keccak_256(uncompressed.slice(1));\n return \"0x\" + bytesToHex(hash.slice(12));\n}\n\n/** Derive the deterministic Stellar G-address from a stealth private key. */\nexport function deriveStealthStellarAddressFromStealthPrivKey(\n stealthPrivKey: Uint8Array,\n): string {\n return deriveStealthStellarAddress(CURVE.getPublicKey(stealthPrivKey, false));\n}\n\n/** Derive the deterministic Stellar keypair from a stealth private key. */\nexport function deriveStealthStellarKeypairFromStealthPrivKey(\n stealthPrivKey: Uint8Array,\n): Keypair {\n return deriveStealthStellarKeypair(CURVE.getPublicKey(stealthPrivKey, false));\n}\n","/**\n * Pure-TS DKSAP announcement scanner. Given a set of announcements and the\n * recipient's viewing/spending keys, returns the transfers addressed to the\n * recipient with their reconstructed one-time keys. No WASM, no network: the\n * caller supplies the announcements (e.g. read from the stealth-announcer\n * contract events).\n */\nimport {\n checkViewTagMatch,\n deriveStealthStellarAddressFromStealthPrivKey,\n reconstructStealthPrivateKey,\n stealthIdFromPrivateKey,\n} from \"./dksap\";\n\nexport interface StealthAnnouncement {\n /** 20-byte EVM-style stealth id (`0x` + 40 hex). */\n stealthAddress: string;\n /** Sender's compressed ephemeral public key (33 bytes). */\n ephemeralPubKey: Uint8Array;\n /** View tag byte from the announcement metadata. */\n viewTag: number;\n}\n\nexport interface ScanMatch {\n announcement: StealthAnnouncement;\n /** Reconstructed one-time stealth private key (32 bytes). */\n stealthPrivKey: Uint8Array;\n /** Deterministic Stellar account holding the funds. */\n stealthStellarAddress: string;\n}\n\n/**\n * Scan announcements for transfers to the recipient. Each candidate is\n * view-tag prefiltered, then confirmed by reconstructing the one-time key and\n * checking its stealth id equals the announced one (so a coincidental tag match\n * is rejected).\n */\nexport function scanAnnouncements(opts: {\n announcements: StealthAnnouncement[];\n viewingKey: Uint8Array;\n spendingKey: Uint8Array;\n}): ScanMatch[] {\n const matches: ScanMatch[] = [];\n for (const announcement of opts.announcements) {\n if (\n !checkViewTagMatch({\n viewingKey: opts.viewingKey,\n ephemeralPubKey: announcement.ephemeralPubKey,\n viewTag: announcement.viewTag,\n })\n ) {\n continue;\n }\n const stealthPrivKey = reconstructStealthPrivateKey({\n viewingKey: opts.viewingKey,\n spendingKey: opts.spendingKey,\n ephemeralPubKey: announcement.ephemeralPubKey,\n });\n if (\n stealthIdFromPrivateKey(stealthPrivKey).toLowerCase() !==\n announcement.stealthAddress.toLowerCase()\n ) {\n continue;\n }\n matches.push({\n announcement,\n stealthPrivKey,\n stealthStellarAddress: deriveStealthStellarAddressFromStealthPrivKey(stealthPrivKey),\n });\n }\n return matches;\n}\n","/**\n * Privacy-pool note model and cryptographic derivation.\n *\n * A note is the client-side spending material for one pooled commitment. Losing\n * it loses the funds, so notes must be persisted and backed up. A note holds only\n * the depositor's own secrets and reveals nothing on-chain (the commitment is a\n * hash).\n *\n * Derivations (byte-match circuits/v3 + the privacy-pool contract):\n * label = Poseidon(scope, leafIndex)\n * precommitment = Poseidon(nullifier, secret)\n * commitment = Poseidon(value, label, precommitment)\n * nullifierHash = Poseidon(nullifier)\n */\nimport { buildPoseidon } from \"circomlibjs\";\n\nexport const POOL_TREE_DEPTH = 20;\nexport const BN254_R =\n 21888242871839275222246405745257275088548364400416034343698204186575808495617n;\n\nexport type PoolNote = {\n /** Network cluster this note belongs to. */\n cluster: string;\n /** Privacy-pool contract this note belongs to. Legacy notes may omit this. */\n poolId?: string;\n /** Deposited value, in stroops, as a decimal string. */\n value: string;\n /** Domain separator the deposit was made under. */\n scope: number;\n /** Leaf index assigned by the contract at deposit time. */\n leafIndex: number;\n /** Field-element secrets (decimal strings). */\n nullifier: string;\n secret: string;\n /** Derived commitment (0x-prefixed 32-byte hex), the state-tree leaf. */\n commitment: string;\n /** Whether this note has been spent (withdrawn). */\n spent: boolean;\n createdAt: number;\n};\n\ntype PoseidonFn = { F: { toObject: (x: unknown) => bigint } } & ((\n i: bigint[],\n) => unknown);\n\nlet _poseidon: PoseidonFn | null = null;\n\n/** Lazily build (and cache) the circomlibjs Poseidon instance. */\nexport async function getPoseidon(): Promise<PoseidonFn> {\n if (!_poseidon) {\n // circomlibjs touches Buffer; ensure it exists before loading (browsers).\n if (typeof globalThis !== \"undefined\" && !(\"Buffer\" in globalThis)) {\n const bufferPkg = await import(\"buffer/index.js\");\n (globalThis as Record<string, unknown>).Buffer = bufferPkg.Buffer;\n }\n _poseidon = (await buildPoseidon()) as PoseidonFn;\n }\n return _poseidon;\n}\n\n/** Hash a list of field elements with Poseidon, returning the field result. */\nexport function hashFields(poseidon: PoseidonFn, inputs: bigint[]): bigint {\n return poseidon.F.toObject(poseidon(inputs));\n}\n\n/** Cryptographically-random field element < r (decimal string). */\nexport function randomFieldElement(): string {\n const bytes = new Uint8Array(31);\n crypto.getRandomValues(bytes);\n let v = 0n;\n for (const b of bytes) v = (v << 8n) + BigInt(b);\n return (v % BN254_R).toString();\n}\n\nexport type DerivedDeposit = {\n label: bigint;\n precommitment: bigint;\n commitment: bigint;\n nullifierHash: bigint;\n};\n\n/** Derive the commitment material for one deposit from its secrets. */\nexport async function deriveDeposit(opts: {\n value: bigint;\n scope: number;\n leafIndex: number;\n nullifier: bigint;\n secret: bigint;\n}): Promise<DerivedDeposit> {\n const poseidon = await getPoseidon();\n const h = (xs: bigint[]) => hashFields(poseidon, xs);\n const label = h([BigInt(opts.scope), BigInt(opts.leafIndex)]);\n const precommitment = h([opts.nullifier, opts.secret]);\n const commitment = h([opts.value, label, precommitment]);\n const nullifierHash = h([opts.nullifier]);\n return { label, precommitment, commitment, nullifierHash };\n}\n\n/** Build a fresh note's secrets (commitment is filled once the leaf index is known). */\nexport function newNoteSecrets(): { nullifier: string; secret: string } {\n return { nullifier: randomFieldElement(), secret: randomFieldElement() };\n}\n\n/** Unspent total across notes, in stroops. */\nexport function unspentTotal(notes: PoolNote[]): bigint {\n return notes\n .filter((n) => !n.spent)\n .reduce((sum, n) => sum + BigInt(n.value), 0n);\n}\n","/**\n * Canonical schema / attestation encoding. Mirrors the `opaque-schema-core`\n * crate and the Soroban schema/attestation contracts byte-for-byte.\n */\n\nimport { StrKey } from \"@stellar/stellar-sdk\";\nimport type { FieldDef, FieldType } from \"./schema-types\";\n\nexport const MAX_FIELDS = 16;\nexport const MAX_FIELD_NAME_LEN = 32;\nexport const MAX_STRING_VALUE_LEN = 128;\nexport const MAX_ATTESTATION_DATA_LEN = 512;\n\nconst FIELD_TYPE_IDS: Record<FieldType, number> = {\n bool: 0,\n u8: 1,\n u16: 2,\n u32: 3,\n u64: 4,\n string: 5,\n pubkey: 6,\n};\n\nexport class SchemaParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SchemaParseError\";\n }\n}\n\nexport class AttestationDataError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AttestationDataError\";\n }\n}\n\nfunction isValidFieldName(name: string): boolean {\n if (!name || name.length > MAX_FIELD_NAME_LEN) return false;\n return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name);\n}\n\n/** Parse and validate `\"type name\"` comma-separated field definitions. */\nexport function parseFieldDefinitions(fieldDefs: string): FieldDef[] {\n const trimmed = fieldDefs.trim();\n if (!trimmed) throw new SchemaParseError(\"Field definitions cannot be empty\");\n\n const fields: FieldDef[] = [];\n for (const segment of trimmed.split(\",\")) {\n const seg = segment.trim();\n if (!seg) throw new SchemaParseError(\"Malformed field segment\");\n const spaceIdx = seg.indexOf(\" \");\n if (spaceIdx === -1) {\n throw new SchemaParseError(\n 'Expected \"type name\" format (legacy \"name:type\" is not supported)',\n );\n }\n const type = seg.slice(0, spaceIdx).trim() as FieldType;\n const name = seg.slice(spaceIdx + 1).trim();\n if (name.includes(\" \") || !Object.hasOwn(FIELD_TYPE_IDS, type)) {\n throw new SchemaParseError(`Invalid field type: ${type}`);\n }\n if (!isValidFieldName(name)) {\n throw new SchemaParseError(`Invalid field name: ${name}`);\n }\n if (fields.some((f) => f.name === name)) {\n throw new SchemaParseError(`Duplicate field name: ${name}`);\n }\n fields.push({ id: String(fields.length), name, type });\n if (fields.length > MAX_FIELDS) throw new SchemaParseError(\"Too many fields\");\n }\n\n const canonical = fieldDefsToCanonicalString(fields);\n if (canonical.length > 256) {\n throw new SchemaParseError(\"Field definitions too long\");\n }\n return fields;\n}\n\nexport function fieldDefsToCanonicalString(fields: FieldDef[]): string {\n return fields\n .filter((f) => f.name.trim())\n .map((f) => `${f.type} ${f.name.trim()}`)\n .join(\",\");\n}\n\nexport function encodeCanonicalFieldDefs(fields: FieldDef[]): Uint8Array {\n const parts: number[] = [fields.length];\n for (const f of fields) {\n const nameBytes = new TextEncoder().encode(f.name);\n parts.push(FIELD_TYPE_IDS[f.type], nameBytes.length, ...nameBytes);\n }\n return new Uint8Array(parts);\n}\n\nexport function addressToAuthorityBytes(address: string): Uint8Array {\n return Uint8Array.from(StrKey.decodeEd25519PublicKey(address));\n}\n\n/** Compute a schema id (SHA-256 of authority || name || version || canonical defs). */\nexport async function computeSchemaIdFromBytes(\n authorityBytes: Uint8Array,\n name: string,\n fieldDefinitions: string,\n version: number = 1,\n): Promise<Uint8Array> {\n const fields = parseFieldDefinitions(fieldDefinitions);\n const canonical = encodeCanonicalFieldDefs(fields);\n const encoder = new TextEncoder();\n const nameBytes = encoder.encode(name);\n const versionBytes = new Uint8Array(4);\n new DataView(versionBytes.buffer).setUint32(0, version, false);\n\n const combined = new Uint8Array(\n authorityBytes.length +\n nameBytes.length +\n versionBytes.length +\n canonical.length,\n );\n let off = 0;\n combined.set(authorityBytes, off);\n off += authorityBytes.length;\n combined.set(nameBytes, off);\n off += nameBytes.length;\n combined.set(versionBytes, off);\n off += versionBytes.length;\n combined.set(canonical, off);\n\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", combined);\n return new Uint8Array(hashBuffer);\n}\n\nexport async function computeSchemaId(\n authority: string,\n name: string,\n fieldDefinitions: string,\n version: number = 1,\n): Promise<Uint8Array> {\n return computeSchemaIdFromBytes(\n addressToAuthorityBytes(authority),\n name,\n fieldDefinitions,\n version,\n );\n}\n\nfunction parseBool(value: string): boolean {\n const v = value.trim();\n if (v === \"true\" || v === \"1\") return true;\n if (v === \"false\" || v === \"0\" || v === \"\") return false;\n throw new AttestationDataError(`Invalid bool: ${value}`);\n}\n\nfunction parseUint(value: string, max: bigint): bigint {\n const v = value.trim();\n if (!v) return 0n;\n if (!/^\\d+$/.test(v)) throw new AttestationDataError(`Invalid integer: ${value}`);\n const n = BigInt(v);\n if (n < 0n || n > max) {\n throw new AttestationDataError(`Integer out of range: ${value}`);\n }\n return n;\n}\n\nfunction parsePubkeyHex(value: string): Uint8Array {\n const hex = value.trim().replace(/^0x/i, \"\");\n if (hex.length !== 64) throw new AttestationDataError(\"Invalid pubkey hex\");\n const out = new Uint8Array(32);\n for (let i = 0; i < 32; i++) {\n out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\n/** Encode attestation payload bytes in schema field order. */\nexport function encodeAttestationData(\n fieldValues: Record<string, string>,\n fieldDefs: FieldDef[],\n): Uint8Array {\n const parts: Uint8Array[] = [];\n for (const field of fieldDefs) {\n const value = fieldValues[field.name] ?? \"\";\n switch (field.type) {\n case \"bool\":\n parts.push(new Uint8Array([parseBool(value) ? 1 : 0]));\n break;\n case \"u8\":\n parts.push(new Uint8Array([Number(parseUint(value, 255n))]));\n break;\n case \"u16\": {\n const buf = new Uint8Array(2);\n new DataView(buf.buffer).setUint16(0, Number(parseUint(value, 65535n)), false);\n parts.push(buf);\n break;\n }\n case \"u32\": {\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, Number(parseUint(value, 4294967295n)), false);\n parts.push(buf);\n break;\n }\n case \"u64\": {\n const buf = new Uint8Array(8);\n new DataView(buf.buffer).setBigUint64(\n 0,\n parseUint(value, 18446744073709551615n),\n false,\n );\n parts.push(buf);\n break;\n }\n case \"string\": {\n const bytes = new TextEncoder().encode(value);\n if (bytes.length > MAX_STRING_VALUE_LEN) {\n throw new AttestationDataError(\"String value too long\");\n }\n const len = new Uint8Array(2);\n new DataView(len.buffer).setUint16(0, bytes.length, false);\n parts.push(len, bytes);\n break;\n }\n case \"pubkey\":\n parts.push(parsePubkeyHex(value));\n break;\n default:\n throw new AttestationDataError(`Unsupported type: ${field.type}`);\n }\n }\n\n const total = parts.reduce((a, p) => a + p.length, 0);\n if (total > MAX_ATTESTATION_DATA_LEN) {\n throw new AttestationDataError(\"Attestation data too large\");\n }\n const out = new Uint8Array(total);\n let offset = 0;\n for (const p of parts) {\n out.set(p, offset);\n offset += p.length;\n }\n return out;\n}\n\n/** Decode canonical attestation bytes into a field-value map. */\nexport function decodeAttestationData(\n data: Uint8Array,\n fieldDefs: FieldDef[],\n): Record<string, string> {\n const dec = new TextDecoder();\n const result: Record<string, string> = {};\n let offset = 0;\n\n for (const field of fieldDefs) {\n switch (field.type) {\n case \"bool\":\n if (offset >= data.length) throw new AttestationDataError(\"Truncated bool\");\n result[field.name] = data[offset] === 1 ? \"true\" : \"false\";\n offset += 1;\n break;\n case \"u8\":\n if (offset >= data.length) throw new AttestationDataError(\"Truncated u8\");\n result[field.name] = String(data[offset]);\n offset += 1;\n break;\n case \"u16\": {\n if (offset + 2 > data.length) throw new AttestationDataError(\"Truncated u16\");\n result[field.name] = String(\n new DataView(data.buffer, data.byteOffset + offset, 2).getUint16(0, false),\n );\n offset += 2;\n break;\n }\n case \"u32\": {\n if (offset + 4 > data.length) throw new AttestationDataError(\"Truncated u32\");\n result[field.name] = String(\n new DataView(data.buffer, data.byteOffset + offset, 4).getUint32(0, false),\n );\n offset += 4;\n break;\n }\n case \"u64\": {\n if (offset + 8 > data.length) throw new AttestationDataError(\"Truncated u64\");\n result[field.name] = String(\n new DataView(data.buffer, data.byteOffset + offset, 8).getBigUint64(0, false),\n );\n offset += 8;\n break;\n }\n case \"string\": {\n if (offset + 2 > data.length) {\n throw new AttestationDataError(\"Truncated string length\");\n }\n const len = new DataView(data.buffer, data.byteOffset + offset, 2).getUint16(0, false);\n offset += 2;\n if (offset + len > data.length) throw new AttestationDataError(\"Truncated string\");\n result[field.name] = dec.decode(data.slice(offset, offset + len));\n offset += len;\n break;\n }\n case \"pubkey\": {\n if (offset + 32 > data.length) throw new AttestationDataError(\"Truncated pubkey\");\n const slice = data.slice(offset, offset + 32);\n result[field.name] =\n \"0x\" + Array.from(slice).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n offset += 32;\n break;\n }\n default:\n throw new AttestationDataError(`Unsupported type: ${field.type}`);\n }\n }\n if (offset !== data.length) {\n throw new AttestationDataError(\"Trailing bytes in attestation data\");\n }\n return result;\n}\n","/**\n * Encrypted backup of stealth ephemeral private keys (\"ghost entries\").\n * PBKDF2-SHA256 key derivation + AES-256-GCM, using the Web Crypto API\n * (available in browsers and Node 18+).\n *\n * Threat model: protects key material at rest against read-only exfiltration of\n * stored backups. It does NOT protect against capture of the password at entry\n * time, runtime memory inspection while decrypted, or a fully compromised host.\n */\n\nconst PBKDF2_ITERATIONS = 600_000;\nconst SALT_BYTES = 16;\nconst IV_BYTES = 12;\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n const copy = new Uint8Array(bytes.byteLength);\n copy.set(bytes);\n return copy.buffer;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 1) binary += String.fromCharCode(bytes[i] ?? 0);\n return btoa(binary);\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) out[i] = binary.charCodeAt(i);\n return out;\n}\n\nasync function deriveKeyFromPassword(\n password: string,\n salt: Uint8Array,\n): Promise<CryptoKey> {\n const encoder = new TextEncoder();\n const passwordKey = await crypto.subtle.importKey(\n \"raw\",\n toArrayBuffer(encoder.encode(password)),\n \"PBKDF2\",\n false,\n [\"deriveKey\"],\n );\n return crypto.subtle.deriveKey(\n {\n name: \"PBKDF2\",\n salt: toArrayBuffer(salt),\n iterations: PBKDF2_ITERATIONS,\n hash: \"SHA-256\",\n },\n passwordKey,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nasync function encryptField(plaintext: string, key: CryptoKey): Promise<string> {\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));\n const encoded = new TextEncoder().encode(plaintext);\n const ciphertext = new Uint8Array(\n await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: toArrayBuffer(iv) },\n key,\n encoded,\n ),\n );\n return `${bytesToBase64(iv)}:${bytesToBase64(ciphertext)}`;\n}\n\nasync function decryptField(packed: string, key: CryptoKey): Promise<string> {\n const [ivB64, ctB64] = packed.split(\":\");\n if (!ivB64 || !ctB64) throw new Error(\"Invalid encrypted field format\");\n const iv = base64ToBytes(ivB64);\n const ciphertext = base64ToBytes(ctB64);\n const decrypted = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: toArrayBuffer(iv) },\n key,\n toArrayBuffer(ciphertext),\n );\n return new TextDecoder().decode(new Uint8Array(decrypted));\n}\n\nexport type GhostEntryLike = {\n cluster: string;\n stealthAddress: string;\n ephemeralPrivKeyHex?: string;\n createdAt: number;\n};\n\nexport type EncryptedGhostPayload = {\n version: 1;\n salt: string;\n entries: Array<{\n cluster: string;\n stealthAddress: string;\n ephemeralPrivKeyEncrypted?: string;\n createdAt: number;\n }>;\n};\n\n/**\n * Encrypt ghost entries. Only `ephemeralPrivKeyHex` is encrypted; metadata\n * (cluster, stealth address, timestamp) stays readable.\n */\nexport async function encryptGhostEntries(\n entries: GhostEntryLike[],\n password: string,\n): Promise<EncryptedGhostPayload> {\n const salt = crypto.getRandomValues(new Uint8Array(SALT_BYTES));\n const key = await deriveKeyFromPassword(password, salt);\n\n const encrypted = [];\n for (const entry of entries) {\n encrypted.push({\n cluster: entry.cluster,\n stealthAddress: entry.stealthAddress,\n ephemeralPrivKeyEncrypted: entry.ephemeralPrivKeyHex\n ? await encryptField(entry.ephemeralPrivKeyHex, key)\n : undefined,\n createdAt: entry.createdAt,\n });\n }\n return { version: 1, salt: bytesToBase64(salt), entries: encrypted };\n}\n\n/** Decrypt ghost entries produced by {@link encryptGhostEntries}. */\nexport async function decryptGhostEntries(\n payload: EncryptedGhostPayload,\n password: string,\n): Promise<GhostEntryLike[]> {\n if (payload.version !== 1) {\n throw new Error(\"Unsupported encrypted payload version\");\n }\n const salt = base64ToBytes(payload.salt);\n const key = await deriveKeyFromPassword(password, salt);\n\n const decrypted = [];\n for (const entry of payload.entries) {\n decrypted.push({\n cluster: entry.cluster,\n stealthAddress: entry.stealthAddress,\n ephemeralPrivKeyHex: entry.ephemeralPrivKeyEncrypted\n ? await decryptField(entry.ephemeralPrivKeyEncrypted, key)\n : undefined,\n createdAt: entry.createdAt,\n });\n }\n return decrypted;\n}\n\n/** Export ghost entries as an encrypted JSON string. */\nexport async function exportEncryptedBackup(\n entries: GhostEntryLike[],\n password: string,\n): Promise<string> {\n return JSON.stringify(await encryptGhostEntries(entries, password));\n}\n\n/** Import ghost entries from an encrypted backup string. */\nexport async function importEncryptedBackup(\n backupJson: string,\n password: string,\n): Promise<GhostEntryLike[]> {\n const payload = JSON.parse(backupJson) as EncryptedGhostPayload;\n return decryptGhostEntries(payload, password);\n}\n","/**\n * Opaque payment-link format: `opaque://v{version}/{network}/{metaAddress}?{params}`\n * with versioning, network binding, and optional SEP-compatible parameters.\n */\n\nexport type Network = \"testnet\" | \"mainnet\" | \"futurenet\" | \"local\";\n\nexport interface PaymentLinkParams {\n amount?: string;\n asset?: string;\n issuer?: string;\n memo?: string;\n sep?: string;\n callback?: string;\n label?: string;\n expires?: string;\n}\n\nexport interface PaymentLink {\n version: number;\n network: Network;\n metaAddress: string;\n params: PaymentLinkParams;\n}\n\nexport interface PaymentLinkError {\n type:\n | \"INVALID_FORMAT\"\n | \"UNSUPPORTED_VERSION\"\n | \"NETWORK_MISMATCH\"\n | \"INVALID_META_ADDRESS\"\n | \"INVALID_PARAMETER\";\n message: string;\n details?: unknown;\n}\n\n/** Validate a DKSAP meta-address: `0x` + 132 hex chars (66 bytes). */\nexport function isValidMetaAddress(metaAddress: string): boolean {\n if (metaAddress.length !== 134) return false;\n if (!metaAddress.startsWith(\"0x\")) return false;\n return /^[0-9a-fA-F]{132}$/.test(metaAddress.slice(2));\n}\n\nexport function isValidNetwork(network: string): network is Network {\n return [\"testnet\", \"mainnet\", \"futurenet\", \"local\"].includes(network);\n}\n\n/** Validate a Stellar public key (G..., 56 chars, base32). */\nexport function isValidStellarPublicKey(publicKey: string): boolean {\n if (publicKey.length !== 56) return false;\n if (!publicKey.startsWith(\"G\")) return false;\n return /^[A-Z2-7]{55}$/.test(publicKey);\n}\n\nexport function isValidAssetCode(assetCode: string): boolean {\n if (assetCode.length < 1 || assetCode.length > 12) return false;\n return /^[a-zA-Z0-9]+$/.test(assetCode);\n}\n\nexport function isValidAmount(amount: string): boolean {\n if (!amount) return false;\n const num = parseFloat(amount);\n if (isNaN(num) || num <= 0) return false;\n return /^[0-9]+(\\.[0-9]+)?$/.test(amount);\n}\n\nexport function isValidIso8601(timestamp: string): boolean {\n try {\n return !isNaN(new Date(timestamp).getTime());\n } catch {\n return false;\n }\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n return new URL(url).protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\n/** Encode a payment link from components. Throws on invalid input. */\nexport function encodePaymentLink(link: PaymentLink): string {\n if (!isValidMetaAddress(link.metaAddress)) {\n throw new Error(\"Invalid meta-address format\");\n }\n if (!isValidNetwork(link.network)) {\n throw new Error(\"Invalid network identifier\");\n }\n\n const uri = `opaque://v${link.version}/${link.network}/${link.metaAddress}`;\n const params = new URLSearchParams();\n\n if (link.params.amount) {\n if (!isValidAmount(link.params.amount)) throw new Error(\"Invalid amount format\");\n params.set(\"amount\", link.params.amount);\n }\n if (link.params.asset) {\n if (!isValidAssetCode(link.params.asset)) throw new Error(\"Invalid asset code\");\n params.set(\"asset\", link.params.asset);\n }\n if (link.params.issuer) {\n if (!isValidStellarPublicKey(link.params.issuer)) {\n throw new Error(\"Invalid issuer address\");\n }\n params.set(\"issuer\", link.params.issuer);\n }\n if (link.params.memo) params.set(\"memo\", link.params.memo);\n if (link.params.sep) params.set(\"sep\", link.params.sep);\n if (link.params.callback) {\n if (!isValidUrl(link.params.callback)) throw new Error(\"Invalid callback URL\");\n params.set(\"callback\", link.params.callback);\n }\n if (link.params.label) params.set(\"label\", link.params.label);\n if (link.params.expires) {\n if (!isValidIso8601(link.params.expires)) {\n throw new Error(\"Invalid expiration timestamp\");\n }\n params.set(\"expires\", link.params.expires);\n }\n\n const queryString = params.toString();\n return queryString ? `${uri}?${queryString}` : uri;\n}\n\n/** Decode a payment-link string into components, or a structured error. */\nexport function decodePaymentLink(\n linkString: string,\n configuredNetwork?: Network,\n): { link: PaymentLink } | { error: PaymentLinkError } {\n try {\n const url = new URL(linkString);\n if (url.protocol !== \"opaque:\") {\n return { error: { type: \"INVALID_FORMAT\", message: \"Invalid protocol: must be opaque://\" } };\n }\n\n // `opaque:` is a non-special scheme, so a strict WHATWG URL parser (Node and\n // browsers) treats the first segment after `//` as the host. Reconstruct the\n // logical path as [version, network, metaAddress] from hostname + pathname so\n // decoding is environment-independent.\n const pathParts = [\n url.hostname,\n ...url.pathname.split(\"/\").filter(Boolean),\n ].filter(Boolean);\n if (pathParts.length < 3) {\n return {\n error: {\n type: \"INVALID_FORMAT\",\n message: \"Invalid path format: expected opaque://v{version}/{network}/{meta-address}\",\n },\n };\n }\n\n const versionMatch = pathParts[0].match(/^v(\\d+)$/);\n if (!versionMatch) {\n return { error: { type: \"INVALID_FORMAT\", message: \"Invalid version format: expected v{number}\" } };\n }\n const version = parseInt(versionMatch[1], 10);\n if (version !== 1) {\n return {\n error: {\n type: \"UNSUPPORTED_VERSION\",\n message: `Unsupported version: v${version}. Only v1 is currently supported.`,\n },\n };\n }\n\n const network = pathParts[1];\n if (!isValidNetwork(network)) {\n return {\n error: {\n type: \"INVALID_FORMAT\",\n message: `Invalid network: ${network}. Must be one of: testnet, mainnet, futurenet, local`,\n },\n };\n }\n if (configuredNetwork && network !== configuredNetwork) {\n return {\n error: {\n type: \"NETWORK_MISMATCH\",\n message: `Network mismatch: link is for ${network}, but app is configured for ${configuredNetwork}`,\n details: { linkNetwork: network, configuredNetwork },\n },\n };\n }\n\n const metaAddress = pathParts[2];\n if (!isValidMetaAddress(metaAddress)) {\n return {\n error: {\n type: \"INVALID_META_ADDRESS\",\n message: `Invalid meta-address format: ${metaAddress}. Expected 0x + 132 hex chars.`,\n },\n };\n }\n\n const params: PaymentLinkParams = {};\n const searchParams = url.searchParams;\n\n if (searchParams.has(\"amount\")) {\n const amount = searchParams.get(\"amount\")!;\n if (!isValidAmount(amount)) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Invalid amount parameter: ${amount}`, details: { parameter: \"amount\", value: amount } } };\n }\n params.amount = amount;\n }\n if (searchParams.has(\"asset\")) {\n const asset = searchParams.get(\"asset\")!;\n if (!isValidAssetCode(asset)) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Invalid asset code: ${asset}`, details: { parameter: \"asset\", value: asset } } };\n }\n params.asset = asset;\n }\n if (searchParams.has(\"issuer\")) {\n const issuer = searchParams.get(\"issuer\")!;\n if (!isValidStellarPublicKey(issuer)) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Invalid issuer address: ${issuer}`, details: { parameter: \"issuer\", value: issuer } } };\n }\n params.issuer = issuer;\n }\n if (searchParams.has(\"memo\")) params.memo = searchParams.get(\"memo\")!;\n if (searchParams.has(\"sep\")) params.sep = searchParams.get(\"sep\")!;\n if (searchParams.has(\"callback\")) {\n const callback = searchParams.get(\"callback\")!;\n if (!isValidUrl(callback)) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Invalid callback URL: ${callback}`, details: { parameter: \"callback\", value: callback } } };\n }\n params.callback = callback;\n }\n if (searchParams.has(\"label\")) params.label = searchParams.get(\"label\")!;\n if (searchParams.has(\"expires\")) {\n const expires = searchParams.get(\"expires\")!;\n if (!isValidIso8601(expires)) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Invalid expiration timestamp: ${expires}`, details: { parameter: \"expires\", value: expires } } };\n }\n params.expires = expires;\n }\n\n if (params.expires && new Date(params.expires) < new Date()) {\n return { error: { type: \"INVALID_PARAMETER\", message: `Payment link has expired: ${params.expires}`, details: { parameter: \"expires\", value: params.expires } } };\n }\n\n return { link: { version, network, metaAddress, params } };\n } catch (error) {\n return {\n error: {\n type: \"INVALID_FORMAT\",\n message: `Failed to parse payment link: ${error instanceof Error ? error.message : String(error)}`,\n details: error,\n },\n };\n }\n}\n\n/** Create a v1 payment link from a meta-address and network. */\nexport function createPaymentLink(\n metaAddress: string,\n network: Network,\n params: PaymentLinkParams = {},\n): string {\n return encodePaymentLink({ version: 1, network, metaAddress, params });\n}\n\n/** True when the string parses as a valid opaque payment link. */\nexport function isOpaquePaymentLink(linkString: string): boolean {\n try {\n return \"link\" in decodePaymentLink(linkString);\n } catch {\n return false;\n }\n}\n\n/** Convert a legacy `https://host/pay/{metaAddress}` link into opaque format. */\nexport function convertLegacyLink(\n legacyLink: string,\n network: Network,\n params: PaymentLinkParams = {},\n): string | null {\n try {\n const url = new URL(legacyLink);\n const pathParts = url.pathname.split(\"/\").filter(Boolean);\n const metaAddress = pathParts[pathParts.length - 1];\n if (!isValidMetaAddress(metaAddress)) return null;\n return createPaymentLink(metaAddress, network, params);\n } catch {\n return null;\n }\n}\n","/**\n * Destination memo risk + validation.\n *\n * Many Stellar custodians share one deposit address across users and rely on the\n * transaction memo to disambiguate. Sending to such an address without a memo can\n * lose funds. This module exposes a small allowlist of well-known custodial\n * addresses and validators that match the Stellar memo spec.\n */\n\nexport type MemoType = \"none\" | \"text\" | \"id\" | \"hash\" | \"return\";\n\nconst CUSTODIAL_ADDRESSES: Readonly<\n Record<string, { name: string; recommendedMemoType: MemoType }>\n> = Object.freeze({\n GA5XIGA5C7QTPTWXQHY6MCJRMTRZDOSHR6EFIBNDQTCQHG262N4GGKTM: {\n name: \"Kraken\",\n recommendedMemoType: \"id\",\n },\n GCGNWKCJ3KHRLPM3TMQN7IPVUMRPMYIPGKDPELDPRBMVUPLNZAJDK4VG: {\n name: \"Binance\",\n recommendedMemoType: \"text\",\n },\n GBJ65CCWNPGFNXIVRZMNQSGNXHJYM3O3HFK2CIHWXVKAFEWZNUQOH53I: {\n name: \"Coinbase\",\n recommendedMemoType: \"text\",\n },\n GDXBP3R6N62YR4MTEGEHDIJWQ6BIRYNG6UCV4XQEFKQGGYS7QUDXMJSX: {\n name: \"KuCoin\",\n recommendedMemoType: \"text\",\n },\n});\n\nexport interface MemoRisk {\n isKnownCustodian: boolean;\n custodianName?: string;\n recommendedMemoType?: MemoType;\n}\n\n/** Look up the memo risk for a destination. Safe for any input. */\nexport function memoRiskFor(destination: string | undefined | null): MemoRisk {\n if (!destination) return { isKnownCustodian: false };\n const entry = CUSTODIAL_ADDRESSES[destination.trim()];\n if (!entry) return { isKnownCustodian: false };\n return {\n isKnownCustodian: true,\n custodianName: entry.name,\n recommendedMemoType: entry.recommendedMemoType,\n };\n}\n\nexport interface MemoValidationResult {\n ok: boolean;\n error?: string;\n}\n\n/** Validate a memo value against the Stellar memo spec for the given type. */\nexport function validateMemo(\n memoType: MemoType,\n memo: string | undefined,\n): MemoValidationResult {\n const value = (memo ?? \"\").trim();\n if (memoType === \"none\") {\n if (value.length > 0) {\n return { ok: false, error: \"Memo must be empty when memo type is 'none'.\" };\n }\n return { ok: true };\n }\n if (value.length === 0) {\n return { ok: false, error: \"Memo is required for this memo type.\" };\n }\n switch (memoType) {\n case \"text\": {\n const bytes = new TextEncoder().encode(value).byteLength;\n if (bytes > 28) {\n return { ok: false, error: \"Text memo must be 28 UTF-8 bytes or fewer.\" };\n }\n return { ok: true };\n }\n case \"id\": {\n if (!/^\\d+$/.test(value)) {\n return { ok: false, error: \"ID memo must be a non-negative integer.\" };\n }\n try {\n const n = BigInt(value);\n if (n < 0n || n > 0xffffffffffffffffn) {\n return { ok: false, error: \"ID memo must fit in an unsigned 64-bit integer.\" };\n }\n } catch {\n return { ok: false, error: \"ID memo must be a non-negative integer.\" };\n }\n return { ok: true };\n }\n case \"hash\":\n case \"return\": {\n if (!/^[0-9a-fA-F]{64}$/.test(value)) {\n return { ok: false, error: \"Hash/return memo must be 64 hexadecimal characters.\" };\n }\n return { ok: true };\n }\n }\n}\n\n/** Warning copy for the inline banner, or null when no warning is needed. */\nexport function memoWarningCopy(\n risk: MemoRisk,\n memo: string | undefined,\n): string | null {\n if (!risk.isKnownCustodian) return null;\n if (memo && memo.trim().length > 0) return null;\n return `Destination looks like ${risk.custodianName ?? \"an exchange or custodian\"}. Sending without a memo may result in lost funds.`;\n}\n","/**\n * Typed error hierarchy for the SDK. Every thrown error carries a stable,\n * machine-readable `code` so callers can branch without string-matching\n * messages. Soroban contract failures map to {@link ContractError} with the\n * decoded contract error code (and a name when the contract's error enum is\n * known to the SDK).\n */\n\nexport class OpaqueError extends Error {\n /** Stable, machine-readable error code (e.g. \"CONFIG\", \"CONTRACT\"). */\n readonly code: string;\n\n constructor(message: string, code: string, options?: { cause?: unknown }) {\n super(message);\n this.name = new.target.name;\n this.code = code;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\n/** Configuration is missing or invalid (e.g. mainnet without RPC URLs). */\nexport class ConfigError extends OpaqueError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, \"CONFIG\", options);\n }\n}\n\n/** A signer adapter failed to produce a signature. */\nexport class SignerError extends OpaqueError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, \"SIGNER\", options);\n }\n}\n\n/** An RPC or Horizon request failed (network, timeout, or HTTP status). */\nexport class RpcError extends OpaqueError {\n readonly httpStatus?: number;\n constructor(\n message: string,\n options?: { httpStatus?: number; cause?: unknown },\n ) {\n super(message, \"RPC\", options);\n this.httpStatus = options?.httpStatus;\n }\n}\n\n/** A transaction failed during pre-flight simulation. */\nexport class SimulationError extends OpaqueError {\n readonly diagnostics?: string;\n constructor(\n message: string,\n options?: { diagnostics?: string; cause?: unknown },\n ) {\n super(message, \"SIMULATION\", options);\n this.diagnostics = options?.diagnostics;\n }\n}\n\n/** A Soroban contract invocation reverted with a contract error code. */\nexport class ContractError extends OpaqueError {\n readonly contract: string;\n readonly contractCode: number;\n /** Human-readable name when the contract's error enum is known. */\n readonly errorName?: string;\n constructor(opts: {\n contract: string;\n contractCode: number;\n errorName?: string;\n message?: string;\n cause?: unknown;\n }) {\n const label = opts.errorName\n ? `${opts.errorName} (#${opts.contractCode})`\n : `#${opts.contractCode}`;\n super(\n opts.message ?? `${opts.contract} reverted: ${label}`,\n \"CONTRACT\",\n { cause: opts.cause },\n );\n this.contract = opts.contract;\n this.contractCode = opts.contractCode;\n this.errorName = opts.errorName;\n }\n}\n\n/** The published reputation/pool root is unavailable or not yet indexed. */\nexport class RootUnavailableError extends OpaqueError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, \"ROOT_UNAVAILABLE\", options);\n }\n}\n\n/** A circuit artifact failed to resolve or failed its integrity check. */\nexport class ArtifactError extends OpaqueError {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, \"ARTIFACT\", options);\n }\n}\n\n/**\n * A capability that depends on a layer not yet wired in this build (e.g. the\n * proving layer, the WASM scanner, or the relayer gateway client). Thrown so the\n * surface is discoverable and the failure is explicit rather than silent.\n */\nexport class NotWiredError extends OpaqueError {\n constructor(capability: string, hint?: string) {\n super(\n `${capability} is not wired in this build.` + (hint ? ` ${hint}` : \"\"),\n \"NOT_WIRED\",\n );\n }\n}\n\n/**\n * Known contract error enums, keyed by contract package name. Populated as the\n * SDK binds each contract; an unknown code still surfaces as a numeric\n * {@link ContractError}. Source of truth is each contract's `#[contracterror]`.\n */\nexport const CONTRACT_ERROR_NAMES: Record<string, Record<number, string>> = {\n \"reputation-verifier\": {\n 2: \"RootExpired\",\n 4: \"NullifierReplay\",\n },\n};\n\n/** Look up a contract error name for a code, if the SDK knows the enum. */\nexport function contractErrorName(\n contractPackage: string,\n code: number,\n): string | undefined {\n return CONTRACT_ERROR_NAMES[contractPackage]?.[code];\n}\n","/**\n * Stellar network presets: passphrase and default RPC / Horizon endpoints per\n * network. Mainnet ships with no default endpoints — callers must supply\n * production providers explicitly.\n */\n\nexport type OpaqueNetwork = \"testnet\" | \"mainnet\" | \"futurenet\" | \"local\";\n\nexport const OPAQUE_NETWORKS: readonly OpaqueNetwork[] = [\n \"testnet\",\n \"futurenet\",\n \"mainnet\",\n \"local\",\n];\n\nexport interface NetworkPreset {\n passphrase: string;\n rpcUrls: string[];\n horizonUrls: string[];\n}\n\nexport const NETWORK_PRESETS: Record<OpaqueNetwork, NetworkPreset> = {\n testnet: {\n passphrase: \"Test SDF Network ; September 2015\",\n rpcUrls: [\"https://soroban-testnet.stellar.org\"],\n horizonUrls: [\"https://horizon-testnet.stellar.org\"],\n },\n futurenet: {\n passphrase: \"Test SDF Future Network ; October 2022\",\n rpcUrls: [\"https://rpc-futurenet.stellar.org\"],\n horizonUrls: [\"https://horizon-futurenet.stellar.org\"],\n },\n mainnet: {\n passphrase: \"Public Global Stellar Network ; September 2015\",\n // No defaults: mainnet requires explicit production providers.\n rpcUrls: [],\n horizonUrls: [],\n },\n local: {\n passphrase: \"Standalone Network ; February 2017\",\n rpcUrls: [\"http://localhost:8000/soroban/rpc\"],\n horizonUrls: [\"http://localhost:8000\"],\n },\n};\n","/**\n * Per-network on-chain address book.\n *\n * These constants mirror `deployments/v1/<network>.json` in the repo and are the\n * SDK's baked-in defaults. They are intended to be regenerated by a codegen step\n * in CI so a redeploy updates the SDK with a single command. Callers may override\n * any address through {@link OpaqueConfig}.\n */\nimport type { OpaqueNetwork } from \"./networks\";\n\nexport interface ContractAddresses {\n stealthRegistry: string;\n stealthAnnouncer: string;\n groth16Verifier: string;\n reputationVerifier: string;\n schemaRegistry: string;\n attestationEngineV2: string;\n poolVerifier: string;\n privacyPool: string;\n relayerRegistry: string;\n}\n\nexport interface PoolWiring {\n /** Domain separator bound into pool commitments. */\n scope: number;\n /** Native XLM Stellar Asset Contract id backing the pool. */\n nativeSac: string;\n}\n\nexport interface RelayerWiring {\n minimumStake: bigint;\n unstakeCooldownLedgers: number;\n maxDeadlineLedgers: number;\n gatewayUrls: string[];\n}\n\nexport interface NetworkDeployment {\n contracts: ContractAddresses;\n pool: PoolWiring;\n relayer: RelayerWiring;\n /** Ledger the contracts were deployed at; event scans start here. */\n deploymentLedger: number;\n}\n\n/** Generated from deployments/v1/testnet.json. */\nexport const TESTNET_DEPLOYMENT: NetworkDeployment = {\n contracts: {\n stealthRegistry: \"CAIXWMGYZR3YAQ3CPCXOU42WG62E3ARUSG4GDHHDMNRXUD44YSGE5VXW\",\n stealthAnnouncer: \"CB2Y3GJMPY5BUSZLXG3DSIMERCNCTUM63IIEQ2GUNYEJ3DBKPFIZQGCS\",\n groth16Verifier: \"CAWXRGFZITZ7TJIZNDLOPJNVEMPAZDWFI22XI76FC67YF2MDRUXLBS2T\",\n reputationVerifier: \"CAFVXL6A5N4FVQZ733GLUX27ETPLLINLE75ZABNLFYEKPIYZORFCBSVR\",\n schemaRegistry: \"CA5XA2T2DAOZH7QG5RG2372KGDHMCEVQJMBGT7AJMNHRI6C4ZIM37QCP\",\n attestationEngineV2: \"CB6KOWOQBFQDX5NNGUJGECHXUF3LHUE77FYD2C6JSWMHYWGCJOUTSDPX\",\n poolVerifier: \"CD2SQALXCZDRTWMFGUBRIP2GFH6TJ3GQ3S6YU4R4C2IIEYC43MLUMS7Q\",\n privacyPool: \"CAYXZTWB26VPIO6UTKFM22UY6XIMO72IRCFKAU2C6NSMQ4JSJ6VJ7BLE\",\n relayerRegistry: \"CCQJFUMMSYOOEJN65E6OH2XSJUESSHRHELFTCSOMIREASXPIJE4AIAMO\",\n },\n pool: {\n scope: 1,\n nativeSac: \"CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC\",\n },\n relayer: {\n minimumStake: 1_000_000n,\n unstakeCooldownLedgers: 720,\n maxDeadlineLedgers: 17_280,\n gatewayUrls: [\"https://g-stelar-relayer.opaque.cash\"],\n },\n deploymentLedger: 3_101_000,\n};\n\n/** Known deployments by network. Testnet is the only live deployment today. */\nexport const DEPLOYMENTS: Partial<Record<OpaqueNetwork, NetworkDeployment>> = {\n testnet: TESTNET_DEPLOYMENT,\n};\n","/**\n * Injected SDK configuration. The SDK reads no ambient globals (no\n * `import.meta.env`, no module-level singletons): every chain detail comes from\n * an {@link OpaqueConfig} resolved here into a complete, validated\n * {@link ResolvedConfig}.\n */\nimport { ConfigError } from \"../errors/index\";\nimport {\n NETWORK_PRESETS,\n type NetworkPreset,\n type OpaqueNetwork,\n} from \"./networks\";\nimport {\n DEPLOYMENTS,\n type ContractAddresses,\n type NetworkDeployment,\n type PoolWiring,\n type RelayerWiring,\n} from \"./addresses\";\n\nexport type { OpaqueNetwork, NetworkPreset } from \"./networks\";\nexport type {\n ContractAddresses,\n NetworkDeployment,\n PoolWiring,\n RelayerWiring,\n} from \"./addresses\";\nexport { NETWORK_PRESETS } from \"./networks\";\nexport { DEPLOYMENTS, TESTNET_DEPLOYMENT } from \"./addresses\";\n\nexport interface OpaqueConfig {\n /** Target Stellar network. */\n network: OpaqueNetwork;\n /** Override Soroban RPC endpoints (defaults to the network preset). */\n rpcUrls?: string[];\n /** Override Horizon endpoints (defaults to the network preset). */\n horizonUrls?: string[];\n /** Override individual contract addresses (defaults to the baked deployment). */\n contracts?: Partial<ContractAddresses>;\n /** Override relayer-market gateway endpoints. */\n relayerGatewayUrls?: string[];\n /** Base URL of a reputation-root publisher service, if used. */\n reputationPublisherUrl?: string;\n /** Override the ledger event scans start from (defaults to deployment ledger). */\n startLedger?: number;\n}\n\nexport interface ResolvedConfig {\n network: OpaqueNetwork;\n passphrase: string;\n rpcUrls: string[];\n horizonUrls: string[];\n contracts: ContractAddresses;\n pool: PoolWiring;\n relayer: RelayerWiring;\n relayerGatewayUrls: string[];\n reputationPublisherUrl?: string;\n startLedger: number;\n}\n\nfunction mergeContracts(\n base: ContractAddresses | undefined,\n overrides: Partial<ContractAddresses> | undefined,\n): ContractAddresses {\n const merged = { ...(base ?? {}), ...(overrides ?? {}) } as Record<\n keyof ContractAddresses,\n string | undefined\n >;\n const keys: (keyof ContractAddresses)[] = [\n \"stealthRegistry\",\n \"stealthAnnouncer\",\n \"groth16Verifier\",\n \"reputationVerifier\",\n \"schemaRegistry\",\n \"attestationEngineV2\",\n \"poolVerifier\",\n \"privacyPool\",\n \"relayerRegistry\",\n ];\n const missing = keys.filter((k) => !merged[k]);\n if (missing.length > 0) {\n throw new ConfigError(\n `Missing contract address(es): ${missing.join(\", \")}. ` +\n `Pass them via config.contracts for this network.`,\n );\n }\n return merged as ContractAddresses;\n}\n\n/**\n * Resolve user config into a complete, validated configuration: network preset +\n * baked deployment + explicit overrides. Throws {@link ConfigError} when a\n * required endpoint or contract address is missing (e.g. mainnet usage).\n */\nexport function resolveConfig(config: OpaqueConfig): ResolvedConfig {\n const preset: NetworkPreset | undefined = NETWORK_PRESETS[config.network];\n if (!preset) {\n throw new ConfigError(`Unknown network: ${String(config.network)}`);\n }\n const deployment: NetworkDeployment | undefined = DEPLOYMENTS[config.network];\n\n const rpcUrls = config.rpcUrls?.length ? config.rpcUrls : preset.rpcUrls;\n const horizonUrls = config.horizonUrls?.length\n ? config.horizonUrls\n : preset.horizonUrls;\n\n if (rpcUrls.length === 0) {\n throw new ConfigError(\n `No Soroban RPC URL configured for ${config.network}. Set config.rpcUrls.`,\n );\n }\n if (horizonUrls.length === 0) {\n throw new ConfigError(\n `No Horizon URL configured for ${config.network}. Set config.horizonUrls.`,\n );\n }\n\n const contracts = mergeContracts(deployment?.contracts, config.contracts);\n\n if (!deployment && !config.contracts) {\n throw new ConfigError(\n `No baked deployment for ${config.network}; pass config.contracts.`,\n );\n }\n\n const pool: PoolWiring = deployment?.pool ?? { scope: 1, nativeSac: contracts.privacyPool };\n const relayer: RelayerWiring = deployment?.relayer ?? {\n minimumStake: 0n,\n unstakeCooldownLedgers: 0,\n maxDeadlineLedgers: 0,\n gatewayUrls: [],\n };\n\n const relayerGatewayUrls = config.relayerGatewayUrls?.length\n ? config.relayerGatewayUrls\n : relayer.gatewayUrls;\n\n return {\n network: config.network,\n passphrase: preset.passphrase,\n rpcUrls,\n horizonUrls,\n contracts,\n pool,\n relayer,\n relayerGatewayUrls,\n reputationPublisherUrl: config.reputationPublisherUrl,\n startLedger: config.startLedger ?? deployment?.deploymentLedger ?? 0,\n };\n}\n","/**\n * Signer abstraction. The SDK never holds or asks for a private key directly: it\n * hands a transaction XDR to an {@link OpaqueSigner} and gets a signed XDR back.\n * This unifies browser wallets (Freighter), raw server keypairs, and any custom\n * signing backend behind one interface.\n */\nimport { Keypair, TransactionBuilder } from \"@stellar/stellar-sdk\";\nimport { SignerError } from \"../errors/index\";\n\nexport interface SignerContext {\n /** Network passphrase the transaction is bound to. */\n networkPassphrase: string;\n}\n\n/** Low-level callback form: sign a transaction XDR, return the signed XDR. */\nexport type SignTxFn = (xdr: string) => Promise<string>;\n\nexport interface OpaqueSigner {\n /** Stellar public key (G-address) this signer controls. */\n publicKey(): string | Promise<string>;\n /** Sign a base64 transaction XDR and return the signed base64 XDR. */\n signTransaction(xdr: string, ctx: SignerContext): Promise<string>;\n /** Optional: sign an arbitrary message (used for one-time key derivation). */\n signMessage?(message: string): Promise<string>;\n}\n\n/**\n * Build a signer from a raw Ed25519 keypair (server / non-browser use). Accepts a\n * Stellar secret seed (`S...`) or a `Keypair` instance.\n */\nexport function keypairSigner(secretOrKeypair: string | Keypair): OpaqueSigner {\n const keypair =\n typeof secretOrKeypair === \"string\"\n ? Keypair.fromSecret(secretOrKeypair)\n : secretOrKeypair;\n\n return {\n publicKey: () => keypair.publicKey(),\n async signTransaction(xdr, ctx) {\n try {\n const tx = TransactionBuilder.fromXDR(xdr, ctx.networkPassphrase);\n tx.sign(keypair);\n return tx.toXDR();\n } catch (cause) {\n throw new SignerError(\"Keypair failed to sign transaction\", { cause });\n }\n },\n };\n}\n\n/**\n * Build a signer from caller-supplied callbacks. Use this to adapt Freighter or\n * any external signing service.\n */\nexport function callbackSigner(opts: {\n publicKey: string | (() => string | Promise<string>);\n signTransaction: SignTxFn;\n signMessage?: (message: string) => Promise<string>;\n}): OpaqueSigner {\n return {\n publicKey: () =>\n typeof opts.publicKey === \"function\" ? opts.publicKey() : opts.publicKey,\n async signTransaction(xdr) {\n try {\n return await opts.signTransaction(xdr);\n } catch (cause) {\n throw new SignerError(\"Callback signer failed\", { cause });\n }\n },\n signMessage: opts.signMessage,\n };\n}\n","/**\n * Pluggable logger. The SDK logs nothing by default (no `console.log` noise in a\n * library); a host app can pass {@link consoleLogger} or its own implementation.\n */\n\nexport interface Logger {\n debug(...args: unknown[]): void;\n info(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n error(...args: unknown[]): void;\n}\n\n/** Default logger: discards everything. */\nexport const silentLogger: Logger = {\n debug() {},\n info() {},\n warn() {},\n error() {},\n};\n\n/** Logger that forwards to the global `console`. */\nexport const consoleLogger: Logger = {\n debug: (...a) => console.debug(...a),\n info: (...a) => console.info(...a),\n warn: (...a) => console.warn(...a),\n error: (...a) => console.error(...a),\n};\n","/**\n * Pluggable telemetry hooks. The SDK emits structured events at meaningful\n * points (contract calls, scans) so a host app can wire its own metrics without\n * the SDK depending on any monitoring library. All hooks are optional; the\n * default is a no-op.\n */\n\nexport interface ContractCallEvent {\n contractId: string;\n method: string;\n success: boolean;\n durationMs: number;\n error?: string;\n}\n\nexport interface ScannerSyncEvent {\n fromLedger: number;\n toLedger: number;\n}\n\nexport interface Telemetry {\n onContractCall?(event: ContractCallEvent): void;\n onScannerSync?(event: ScannerSyncEvent): void;\n}\n\n/** Default telemetry: records nothing. */\nexport const noopTelemetry: Telemetry = {};\n","/**\n * ScVal conversion helpers for building Soroban contract-call arguments.\n * Thin, typed wrappers over `@stellar/stellar-sdk` so callers never hand-roll\n * `nativeToScVal` type tags.\n */\nimport { Address, nativeToScVal, scValToNative, xdr } from \"@stellar/stellar-sdk\";\n\n/** Stellar address (G/C-strkey) -> ScVal address. */\nexport function addressToScVal(addr: string): xdr.ScVal {\n return new Address(addr).toScVal();\n}\n\n/** Raw bytes -> ScVal bytes. */\nexport function bytesToScVal(bytes: Uint8Array): xdr.ScVal {\n return xdr.ScVal.scvBytes(Buffer.from(bytes));\n}\n\n/** Number/bigint -> ScVal u32. */\nexport function u32ToScVal(n: number): xdr.ScVal {\n return nativeToScVal(n, { type: \"u32\" });\n}\n\n/** Number/bigint -> ScVal u64. */\nexport function u64ToScVal(n: bigint | number): xdr.ScVal {\n return nativeToScVal(n, { type: \"u64\" });\n}\n\n/** Bigint -> ScVal i128 (Soroban's signed amount type). */\nexport function i128ToScVal(n: bigint): xdr.ScVal {\n return nativeToScVal(n, { type: \"i128\" });\n}\n\n/** Bigint -> ScVal u128. */\nexport function u128ToScVal(n: bigint): xdr.ScVal {\n return nativeToScVal(n, { type: \"u128\" });\n}\n\n/** String -> ScVal symbol. */\nexport function symbolToScVal(s: string): xdr.ScVal {\n return nativeToScVal(s, { type: \"symbol\" });\n}\n\n/** String -> ScVal string. */\nexport function stringToScVal(s: string): xdr.ScVal {\n return nativeToScVal(s, { type: \"string\" });\n}\n\n/** Boolean -> ScVal bool. */\nexport function boolToScVal(b: boolean): xdr.ScVal {\n return nativeToScVal(b, { type: \"bool\" });\n}\n\n/** Optional address -> ScVal address, or a void ScVal when null/undefined. */\nexport function optionAddressToScVal(addr: string | null | undefined): xdr.ScVal {\n return addr ? addressToScVal(addr) : nativeToScVal(null, { type: \"address\" });\n}\n\n/** Decode an ScVal into its native JS representation. */\nexport function fromScVal(v: xdr.ScVal): unknown {\n return scValToNative(v);\n}\n","/**\n * Decode Soroban diagnostic events and ScErrors from a failed transaction into\n * short, human-readable strings, and extract a contract error code when present.\n */\nimport { scValToNative, xdr } from \"@stellar/stellar-sdk\";\n\n/** Render an ScError into a short token like `ContractError#4` or `sceBudget`. */\nexport function describeScError(e: xdr.ScError): string {\n const type = e.switch().name; // sceContract, sceStorage, sceBudget, ...\n if (type === \"sceContract\") {\n try {\n return `ContractError#${e.contractCode()}`;\n } catch {\n return \"ContractError\";\n }\n }\n try {\n return `${type}/${e.code().name}`;\n } catch {\n return type;\n }\n}\n\nfunction scValToReadable(v: xdr.ScVal): unknown {\n try {\n if (v.switch().name === \"scvError\") return describeScError(v.error());\n return scValToNative(v);\n } catch {\n try {\n return v.switch().name;\n } catch {\n return \"?\";\n }\n }\n}\n\n/**\n * Decode an array of diagnostic events (XDR) into a compact, de-duplicated\n * string. Bounded to keep error messages readable.\n */\nexport function decodeDiagnostics(events: unknown[]): string {\n const parts: string[] = [];\n for (const raw of events) {\n try {\n const de = raw as xdr.DiagnosticEvent;\n const v0 = de.event().body().v0();\n const topics = v0.topics().map(scValToReadable);\n const data = scValToReadable(v0.data());\n parts.push(JSON.stringify({ topics, data }));\n } catch {\n /* skip events that cannot be decoded */\n }\n }\n return Array.from(new Set(parts)).join(\" | \").slice(0, 1500);\n}\n\n/**\n * Best-effort extraction of a contract error code from diagnostic events.\n * Returns the first `ContractError#N` code found, or null.\n */\nexport function extractContractErrorCode(events: unknown[]): number | null {\n for (const raw of events) {\n try {\n const de = raw as xdr.DiagnosticEvent;\n const v0 = de.event().body().v0();\n for (const t of v0.topics()) {\n if (t.switch().name === \"scvError\") {\n const err = t.error();\n if (err.switch().name === \"sceContract\") return err.contractCode();\n }\n }\n const data = v0.data();\n if (data.switch().name === \"scvError\") {\n const err = data.error();\n if (err.switch().name === \"sceContract\") return err.contractCode();\n }\n } catch {\n /* keep scanning */\n }\n }\n return null;\n}\n","/**\n * Soroban RPC client. Holds resolved config, a signer, and observability hooks,\n * and exposes contract `invoke` (write) and `read` (read-only simulate) with\n * multi-endpoint read fallback, bounded polling, typed errors, and decoded\n * diagnostics. No ambient globals: everything comes from {@link ResolvedConfig}.\n */\nimport {\n Asset,\n BASE_FEE,\n Contract,\n Horizon,\n Operation,\n TransactionBuilder,\n rpc,\n scValToNative,\n xdr,\n} from \"@stellar/stellar-sdk\";\nimport type { ResolvedConfig } from \"../config/index\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport { formatStroopsToXlm } from \"../crypto/amount\";\nimport { silentLogger, type Logger } from \"../logger/index\";\nimport { noopTelemetry, type Telemetry } from \"../telemetry/index\";\nimport {\n ContractError,\n RpcError,\n SimulationError,\n} from \"../errors/index\";\nimport { contractErrorName } from \"../errors/index\";\nimport { decodeDiagnostics, extractContractErrorCode } from \"./diagnostics\";\n\nconst READ_TIMEOUT_MS = 12_000;\nconst READ_RETRIES_PER_PROVIDER = 2;\nconst TX_POLL_TIMEOUT_MS = 60_000;\nconst TX_POLL_INTERVAL_MS = 1_000;\n\n/** Minimum starting balance (stroops) to create a fresh Stellar account (1 XLM). */\nexport const NEW_ACCOUNT_MIN_RESERVE_STROOPS = 10_000_000n;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRetryableReadError(err: unknown): boolean {\n const status =\n typeof err === \"object\" && err !== null && \"response\" in err\n ? (err as { response?: { status?: number } }).response?.status\n : undefined;\n if (status && [408, 429, 500, 502, 503, 504].includes(status)) return true;\n const message = err instanceof Error ? err.message : String(err);\n return /timeout|timed out|rate.?limit|too many requests|network|fetch/i.test(message);\n}\n\nasync function withTimeout<T>(promise: Promise<T>, label: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new RpcError(`${label} timed out after ${READ_TIMEOUT_MS}ms`)),\n READ_TIMEOUT_MS,\n );\n });\n try {\n return await Promise.race([promise, timeout]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nexport interface RpcClientOptions {\n config: ResolvedConfig;\n logger?: Logger;\n telemetry?: Telemetry;\n}\n\nexport interface InvokeOptions {\n source: string;\n contractId: string;\n method: string;\n args: xdr.ScVal[];\n signer: OpaqueSigner;\n /** Skip pre-flight simulation (default false). */\n skipSimulation?: boolean;\n /** Contract package name for error naming (e.g. \"reputation-verifier\"). */\n contractPackage?: string;\n}\n\nexport interface ReadOptions {\n source: string;\n contractId: string;\n method: string;\n args: xdr.ScVal[];\n}\n\n/**\n * The subset of {@link RpcClient} the contract bindings depend on. Bindings are\n * written against this interface so they can be unit-tested with a stub invoker\n * (no network) and dogfooded with the real client in production.\n */\nexport interface ContractInvoker {\n invoke(opts: InvokeOptions): Promise<string>;\n readNative<T = unknown>(opts: ReadOptions): Promise<T>;\n simulateRead(opts: ReadOptions): Promise<xdr.ScVal | undefined>;\n getEvents(request: rpc.Server.GetEventsRequest): Promise<rpc.Api.GetEventsResponse>;\n getLatestLedger(): Promise<number>;\n}\n\nexport class RpcClient {\n readonly config: ResolvedConfig;\n private readonly logger: Logger;\n private readonly telemetry: Telemetry;\n private readonly servers: rpc.Server[];\n\n constructor(opts: RpcClientOptions) {\n this.config = opts.config;\n this.logger = opts.logger ?? silentLogger;\n this.telemetry = opts.telemetry ?? noopTelemetry;\n this.servers = opts.config.rpcUrls.map(\n (url) => new rpc.Server(url, { allowHttp: url.startsWith(\"http://\") }),\n );\n if (this.servers.length === 0) {\n throw new RpcError(\"RpcClient requires at least one RPC URL\");\n }\n }\n\n /** Primary Soroban RPC server. */\n get server(): rpc.Server {\n return this.servers[0];\n }\n\n /** Horizon server (first configured Horizon URL). */\n horizon(): Horizon.Server {\n return new Horizon.Server(this.config.horizonUrls[0]);\n }\n\n /** Whether an account exists on-ledger. */\n async accountExists(publicKey: string): Promise<boolean> {\n try {\n await this.horizon().loadAccount(publicKey);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Send a native XLM transfer. Uses `createAccount` when the destination does\n * not exist yet (stealth accounts), otherwise a `payment`. Signs via the\n * provided signer and submits through Horizon.\n */\n async sendNativeTransfer(opts: {\n destination: string;\n amountStroops: bigint;\n signer: OpaqueSigner;\n }): Promise<string> {\n const source = await opts.signer.publicKey();\n const horizon = this.horizon();\n const sourceAccount = await horizon.loadAccount(source);\n const destExists = await this.accountExists(opts.destination);\n const amount = formatStroopsToXlm(opts.amountStroops);\n\n if (!destExists && opts.amountStroops < NEW_ACCOUNT_MIN_RESERVE_STROOPS) {\n throw new RpcError(\n \"Destination account does not exist; create-account requires at least 1 XLM.\",\n );\n }\n\n const op = destExists\n ? Operation.payment({ destination: opts.destination, asset: Asset.native(), amount })\n : Operation.createAccount({ destination: opts.destination, startingBalance: amount });\n\n const tx = new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase: this.config.passphrase,\n })\n .addOperation(op)\n .setTimeout(180)\n .build();\n\n const signedXdr = await opts.signer.signTransaction(tx.toXDR(), {\n networkPassphrase: this.config.passphrase,\n });\n const signed = TransactionBuilder.fromXDR(signedXdr, this.config.passphrase);\n const result = await horizon.submitTransaction(\n signed as Parameters<Horizon.Server[\"submitTransaction\"]>[0],\n );\n return result.hash;\n }\n\n /** Run a read across providers with retry + timeout; throws RpcError on exhaustion. */\n private async read<T>(fn: (server: rpc.Server) => Promise<T>, label: string): Promise<T> {\n let lastError: unknown;\n for (const server of this.servers) {\n for (let attempt = 0; attempt < READ_RETRIES_PER_PROVIDER; attempt += 1) {\n try {\n return await withTimeout(fn(server), label);\n } catch (err) {\n lastError = err;\n if (!isRetryableReadError(err)) throw err;\n if (attempt + 1 < READ_RETRIES_PER_PROVIDER) await sleep(350 * (attempt + 1));\n }\n }\n }\n throw lastError instanceof Error\n ? new RpcError(`${label} failed: ${lastError.message}`, { cause: lastError })\n : new RpcError(`${label} failed`);\n }\n\n private async poll(txHash: string): Promise<rpc.Api.GetTransactionResponse> {\n const start = Date.now();\n while (Date.now() - start < TX_POLL_TIMEOUT_MS) {\n const res = await this.server.getTransaction(txHash);\n if (res.status !== \"NOT_FOUND\") return res;\n await sleep(TX_POLL_INTERVAL_MS);\n }\n throw new RpcError(`Transaction polling timed out for ${txHash}`);\n }\n\n /** Fetch contract events (paged) with read fallback. */\n async getEvents(\n request: rpc.Server.GetEventsRequest,\n ): Promise<rpc.Api.GetEventsResponse> {\n return this.read((s) => s.getEvents(request), \"getEvents\");\n }\n\n /** Latest ledger sequence. */\n async getLatestLedger(): Promise<number> {\n const res = await this.read((s) => s.getLatestLedger(), \"getLatestLedger\");\n return res.sequence;\n }\n\n /** Read-only contract call via simulation. Returns the decoded return ScVal. */\n async simulateRead(opts: ReadOptions): Promise<xdr.ScVal | undefined> {\n const account = await this.read(\n (s) => s.getAccount(opts.source),\n \"getAccount\",\n );\n const tx = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: this.config.passphrase,\n })\n .addOperation(new Contract(opts.contractId).call(opts.method, ...opts.args))\n .setTimeout(60)\n .build();\n\n const sim = await this.read(\n (s) => s.simulateTransaction(tx),\n `simulate ${opts.method}`,\n );\n if (rpc.Api.isSimulationError(sim)) {\n throw new SimulationError(`Simulation failed for ${opts.method}`, {\n diagnostics: sim.error,\n });\n }\n return sim.result?.retval;\n }\n\n /** Read-only contract call returning the native-decoded value. */\n async readNative<T = unknown>(opts: ReadOptions): Promise<T> {\n const retval = await this.simulateRead(opts);\n return (retval ? scValToNative(retval) : undefined) as T;\n }\n\n /** Invoke a contract method as a signed transaction. Returns the tx hash. */\n async invoke(opts: InvokeOptions): Promise<string> {\n const start = Date.now();\n try {\n const account = await this.read(\n (s) => s.getAccount(opts.source),\n \"getAccount\",\n );\n const raw = new TransactionBuilder(account, {\n fee: BASE_FEE,\n networkPassphrase: this.config.passphrase,\n })\n .addOperation(new Contract(opts.contractId).call(opts.method, ...opts.args))\n .setTimeout(180)\n .build();\n\n let prepared = raw;\n if (!opts.skipSimulation) {\n const sim = await this.server.simulateTransaction(raw);\n if (rpc.Api.isSimulationError(sim)) {\n throw new SimulationError(`Simulation failed for ${opts.method}`, {\n diagnostics: sim.error,\n });\n }\n prepared = rpc.assembleTransaction(raw, sim).build();\n } else {\n prepared = await this.server.prepareTransaction(raw);\n }\n\n const signedXdr = await opts.signer.signTransaction(prepared.toXDR(), {\n networkPassphrase: this.config.passphrase,\n });\n const signed = TransactionBuilder.fromXDR(signedXdr, this.config.passphrase);\n const send = await this.server.sendTransaction(\n signed as Parameters<rpc.Server[\"sendTransaction\"]>[0],\n );\n if (send.status === \"ERROR\") {\n throw new RpcError(`sendTransaction rejected: ${JSON.stringify(send.errorResult)}`);\n }\n\n const result = await this.poll(send.hash);\n if (result.status !== \"SUCCESS\") {\n throw this.toContractError(opts, result);\n }\n\n this.telemetry.onContractCall?.({\n contractId: opts.contractId,\n method: opts.method,\n success: true,\n durationMs: Date.now() - start,\n });\n return send.hash;\n } catch (err) {\n this.telemetry.onContractCall?.({\n contractId: opts.contractId,\n method: opts.method,\n success: false,\n durationMs: Date.now() - start,\n error: err instanceof Error ? err.message : String(err),\n });\n throw err;\n }\n }\n\n private toContractError(\n opts: InvokeOptions,\n result: rpc.Api.GetTransactionResponse,\n ): Error {\n const events =\n (result as unknown as { diagnosticEventsXdr?: unknown[] }).diagnosticEventsXdr ?? [];\n const diagnostics = events.length ? decodeDiagnostics(events) : \"\";\n const code = events.length ? extractContractErrorCode(events) : null;\n if (code !== null) {\n return new ContractError({\n contract: opts.contractPackage ?? opts.contractId,\n contractCode: code,\n errorName: opts.contractPackage\n ? contractErrorName(opts.contractPackage, code)\n : undefined,\n });\n }\n this.logger.error(`tx ${result.status}`, diagnostics);\n return new RpcError(\n `Transaction ${result.status}` + (diagnostics ? `: ${diagnostics}` : \"\"),\n );\n }\n}\n","/**\n * Bindings for the stealth-registry and stealth-announcer contracts: publish a\n * meta-address and announce a one-time stealth transfer.\n */\nimport type { ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport { addressToScVal, bytesToScVal, u64ToScVal } from \"../rpc/scval\";\n\n/** secp256k1 stealth scheme id, as registered on-chain. */\nexport const SCHEME_ID_SECP256K1 = 1n;\n\nexport class StealthRegistry {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Register a stealth meta-address for the signer's account. */\n async registerKeys(opts: {\n stealthMetaAddress: Uint8Array;\n schemeId?: bigint;\n signer: OpaqueSigner;\n }): Promise<string> {\n const source = await opts.signer.publicKey();\n return this.rpc.invoke({\n source,\n contractId: this.contractId,\n method: \"register_keys\",\n contractPackage: \"stealth-registry\",\n args: [\n addressToScVal(source),\n u64ToScVal(opts.schemeId ?? SCHEME_ID_SECP256K1),\n bytesToScVal(opts.stealthMetaAddress),\n ],\n signer: opts.signer,\n });\n }\n}\n\nexport class StealthAnnouncer {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Announce a one-time stealth transfer (stealth id + ephemeral key + view tag). */\n async announce(opts: {\n stealthAddress: Uint8Array;\n ephemeralPubKey: Uint8Array;\n metadata: Uint8Array;\n schemeId?: bigint;\n signer: OpaqueSigner;\n }): Promise<string> {\n const source = await opts.signer.publicKey();\n return this.rpc.invoke({\n source,\n contractId: this.contractId,\n method: \"announce\",\n contractPackage: \"stealth-announcer\",\n args: [\n addressToScVal(source),\n u64ToScVal(opts.schemeId ?? SCHEME_ID_SECP256K1),\n bytesToScVal(opts.stealthAddress),\n bytesToScVal(opts.ephemeralPubKey),\n bytesToScVal(opts.metadata),\n ],\n signer: opts.signer,\n });\n }\n}\n","/**\n * Bindings for the schema-registry and attestation-engine-v2 contracts:\n * register / deprecate schemas, manage delegates, attest, and revoke.\n */\nimport { StrKey, nativeToScVal } from \"@stellar/stellar-sdk\";\nimport type { ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport {\n addressToScVal,\n boolToScVal,\n bytesToScVal,\n optionAddressToScVal,\n stringToScVal,\n u32ToScVal,\n} from \"../rpc/scval\";\n\nexport class SchemaRegistry {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Register a schema. The signer is the schema authority. */\n async registerSchema(opts: {\n schemaId: Uint8Array;\n name: string;\n fieldDefinitions: string;\n revocable: boolean;\n version?: number;\n resolver?: string | null;\n schemaExpiryLedger: number;\n signer: OpaqueSigner;\n }): Promise<string> {\n const authority = await opts.signer.publicKey();\n const authorityKey = StrKey.decodeEd25519PublicKey(authority);\n return this.rpc.invoke({\n source: authority,\n contractId: this.contractId,\n method: \"register_schema\",\n contractPackage: \"schema-registry\",\n args: [\n addressToScVal(authority),\n nativeToScVal(Buffer.from(authorityKey), { type: \"bytes\" }),\n bytesToScVal(opts.schemaId),\n stringToScVal(opts.name),\n stringToScVal(opts.fieldDefinitions),\n boolToScVal(opts.revocable),\n u32ToScVal(opts.version ?? 1),\n optionAddressToScVal(opts.resolver ?? null),\n u32ToScVal(opts.schemaExpiryLedger),\n ],\n signer: opts.signer,\n });\n }\n\n async deprecateSchema(opts: {\n schemaId: Uint8Array;\n signer: OpaqueSigner;\n }): Promise<string> {\n const authority = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: authority,\n contractId: this.contractId,\n method: \"deprecate_schema\",\n contractPackage: \"schema-registry\",\n args: [addressToScVal(authority), bytesToScVal(opts.schemaId)],\n signer: opts.signer,\n });\n }\n\n async addDelegate(opts: {\n schemaId: Uint8Array;\n delegate: string;\n signer: OpaqueSigner;\n }): Promise<string> {\n this.assertDelegate(opts.delegate);\n const authority = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: authority,\n contractId: this.contractId,\n method: \"add_delegate\",\n contractPackage: \"schema-registry\",\n args: [\n addressToScVal(authority),\n bytesToScVal(opts.schemaId),\n addressToScVal(opts.delegate),\n ],\n signer: opts.signer,\n });\n }\n\n async removeDelegate(opts: {\n schemaId: Uint8Array;\n delegate: string;\n signer: OpaqueSigner;\n }): Promise<string> {\n this.assertDelegate(opts.delegate);\n const authority = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: authority,\n contractId: this.contractId,\n method: \"remove_delegate\",\n contractPackage: \"schema-registry\",\n args: [\n addressToScVal(authority),\n bytesToScVal(opts.schemaId),\n addressToScVal(opts.delegate),\n ],\n signer: opts.signer,\n });\n }\n\n private assertDelegate(delegate: string): void {\n if (!StrKey.isValidEd25519PublicKey(delegate)) {\n throw new Error(\"Delegate must be a valid Stellar account address (G...).\");\n }\n }\n}\n\nexport class AttestationEngine {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Attest to a stealth identity under a schema. The signer is the issuer. */\n async attest(opts: {\n schemaId: Uint8Array;\n stealthAddressHash: Uint8Array;\n data: Uint8Array;\n expirationLedger: number;\n refUid: Uint8Array;\n signer: OpaqueSigner;\n }): Promise<string> {\n const issuer = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: issuer,\n contractId: this.contractId,\n method: \"attest\",\n contractPackage: \"attestation-engine-v2\",\n args: [\n addressToScVal(issuer),\n bytesToScVal(opts.schemaId),\n bytesToScVal(opts.stealthAddressHash),\n bytesToScVal(opts.data),\n u32ToScVal(opts.expirationLedger),\n bytesToScVal(opts.refUid),\n ],\n signer: opts.signer,\n });\n }\n\n async revokeAttestation(opts: {\n uid: Uint8Array;\n signer: OpaqueSigner;\n }): Promise<string> {\n const revoker = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: revoker,\n contractId: this.contractId,\n method: \"revoke_attestation\",\n contractPackage: \"attestation-engine-v2\",\n args: [addressToScVal(revoker), bytesToScVal(opts.uid)],\n signer: opts.signer,\n });\n }\n}\n","/**\n * Binding for the groth16-verifier contract: verify a V2 reputation proof\n * on-chain (4 public signals as an ScMap). The caller (signer) is the tx source;\n * the proof inputs are the only call arguments.\n */\nimport { nativeToScVal } from \"@stellar/stellar-sdk\";\nimport type { ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport {\n addressToScVal,\n bytesToScVal,\n u32ToScVal,\n u64ToScVal,\n} from \"../rpc/scval\";\n\nexport interface VerifyProofV2Inputs {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n merkleRoot: Uint8Array;\n attestationId: Uint8Array;\n externalNullifier: Uint8Array;\n nullifierHash: Uint8Array;\n}\n\nexport class Groth16Verifier {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Submit a Groth16 V2 proof. The public signals are passed as an ScMap. */\n async verifyProofV2(\n opts: VerifyProofV2Inputs & { signer: OpaqueSigner },\n ): Promise<string> {\n const source = await opts.signer.publicKey();\n return this.rpc.invoke({\n source,\n contractId: this.contractId,\n method: \"verify_proof_v2\",\n contractPackage: \"groth16-verifier\",\n args: [\n bytesToScVal(opts.proofA),\n bytesToScVal(opts.proofB),\n bytesToScVal(opts.proofC),\n nativeToScVal(\n {\n merkle_root: Buffer.from(opts.merkleRoot),\n attestation_id: Buffer.from(opts.attestationId),\n external_nullifier: Buffer.from(opts.externalNullifier),\n nullifier_hash: Buffer.from(opts.nullifierHash),\n },\n { type: \"map\" },\n ),\n ],\n signer: opts.signer,\n });\n }\n}\n\nexport interface VerifyReputationInputs {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n merkleRoot: Uint8Array;\n attestationId: Uint8Array;\n externalNullifier: bigint;\n nullifierHash: Uint8Array;\n expirationLedger?: number;\n}\n\n/**\n * High-level reputation-verifier binding. `verify_reputation` enforces root\n * validity + nullifier-replay protection and calls the groth16-verifier; this is\n * the on-chain entry point for proving reputation (vs. the lower-level\n * {@link Groth16Verifier}).\n */\nexport class ReputationVerifier {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Submit a V2 reputation proof for on-chain verification. */\n async verifyReputation(\n opts: VerifyReputationInputs & {\n groth16VerifierId: string;\n signer: OpaqueSigner;\n },\n ): Promise<string> {\n const caller = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: caller,\n contractId: this.contractId,\n method: \"verify_reputation\",\n contractPackage: \"reputation-verifier\",\n args: [\n addressToScVal(caller),\n addressToScVal(opts.groth16VerifierId),\n bytesToScVal(opts.proofA),\n bytesToScVal(opts.proofB),\n bytesToScVal(opts.proofC),\n bytesToScVal(opts.merkleRoot),\n bytesToScVal(opts.attestationId),\n u64ToScVal(opts.externalNullifier),\n bytesToScVal(opts.nullifierHash),\n u32ToScVal(opts.expirationLedger ?? 0),\n ],\n signer: opts.signer,\n });\n }\n\n /** Read the latest published reputation Merkle root (bytes), or null if none. */\n async getLatestRoot(source: string): Promise<Uint8Array | null> {\n const root = await this.rpc.readNative<Uint8Array | undefined>({\n source,\n contractId: this.contractId,\n method: \"get_latest_root\",\n args: [],\n });\n if (!root) return null;\n const bytes = Uint8Array.from(root);\n return bytes.every((b) => b === 0) ? null : bytes;\n }\n}\n","/**\n * Binding for the privacy-pool contract: deposit, withdraw (with a v3 proof),\n * and admin root publishing. Deposits and withdrawals are permissionless; the\n * signer's account is the tx source.\n */\nimport { scValToNative, xdr } from \"@stellar/stellar-sdk\";\nimport type { ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport {\n addressToScVal,\n boolToScVal,\n bytesToScVal,\n i128ToScVal,\n u64ToScVal,\n} from \"../rpc/scval\";\n\nconst POOL_EVENT_LOOKBACK = 16_000;\n\n/** Parse the \"ledger range: X - Y\" hint from a getEvents range error. */\nfunction parseOldestLedgerFromRangeError(err: unknown): number | null {\n const msg =\n err instanceof Error\n ? err.message\n : typeof err === \"string\"\n ? err\n : typeof (err as { message?: unknown })?.message === \"string\"\n ? (err as { message: string }).message\n : \"\";\n const m = /ledger range:\\s*(\\d+)\\s*-\\s*(\\d+)/.exec(msg);\n return m ? Number(m[1]) : null;\n}\n\nexport interface PoolWithdrawInputs {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n withdrawnValue: bigint;\n stateRoot: Uint8Array;\n aspRoot: Uint8Array;\n nullifierHash: Uint8Array;\n newCommitment: Uint8Array;\n recipient: string;\n fee: bigint;\n relayer: string;\n}\n\nexport class PrivacyPool {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Deposit `value` stroops under a precomputed commitment at `expectedIndex`. */\n async deposit(opts: {\n value: bigint;\n commitment: Uint8Array;\n expectedIndex: number;\n signer: OpaqueSigner;\n }): Promise<string> {\n const depositor = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: depositor,\n contractId: this.contractId,\n method: \"deposit\",\n contractPackage: \"privacy-pool\",\n args: [\n addressToScVal(depositor),\n i128ToScVal(opts.value),\n bytesToScVal(opts.commitment),\n u64ToScVal(BigInt(opts.expectedIndex)),\n ],\n signer: opts.signer,\n });\n }\n\n /** Withdraw to `recipient` (minus `fee` to `relayer`) with a v3 proof. */\n async withdraw(\n opts: PoolWithdrawInputs & { signer: OpaqueSigner },\n ): Promise<string> {\n const caller = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: caller,\n contractId: this.contractId,\n method: \"withdraw\",\n contractPackage: \"privacy-pool\",\n args: [\n bytesToScVal(opts.proofA),\n bytesToScVal(opts.proofB),\n bytesToScVal(opts.proofC),\n i128ToScVal(opts.withdrawnValue),\n bytesToScVal(opts.stateRoot),\n bytesToScVal(opts.aspRoot),\n bytesToScVal(opts.nullifierHash),\n bytesToScVal(opts.newCommitment),\n addressToScVal(opts.recipient),\n i128ToScVal(opts.fee),\n addressToScVal(opts.relayer),\n ],\n signer: opts.signer,\n });\n }\n\n /** Publish a tree root (admin only). `kind` selects the state vs ASP root. */\n async updateRoot(opts: {\n kind: \"state\" | \"asp\";\n root: Uint8Array;\n datasetHash: Uint8Array;\n signer: OpaqueSigner;\n }): Promise<string> {\n const admin = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: admin,\n contractId: this.contractId,\n method: opts.kind === \"state\" ? \"update_state_root\" : \"update_asp_root\",\n contractPackage: \"privacy-pool\",\n args: [\n addressToScVal(admin),\n bytesToScVal(opts.root),\n bytesToScVal(opts.datasetHash),\n ],\n signer: opts.signer,\n });\n }\n\n /** Read the next deposit leaf index (the value `deposit` will assign). */\n async getDepositCount(source: string): Promise<number> {\n const count = await this.rpc.readNative<number | bigint>({\n source,\n contractId: this.contractId,\n method: \"get_deposit_count\",\n args: [],\n });\n return Number(count);\n }\n\n /** Read the latest published state (or ASP) root, or null if none. */\n async getLatestRoot(opts: {\n source: string;\n kind: \"state\" | \"asp\";\n }): Promise<Uint8Array | null> {\n const root = await this.rpc.readNative<Uint8Array | undefined>({\n source: opts.source,\n contractId: this.contractId,\n method: \"get_latest_root\",\n args: [boolToScVal(opts.kind === \"state\")],\n });\n return root ? Uint8Array.from(root) : null;\n }\n\n /**\n * Reconstruct the pool's commitment leaves from on-chain events. Returns the\n * commitment at each state-tree index (`stateLeaves`, deposits + withdrawal\n * remainders) and the state index of each deposit in event order\n * (`depositIndices`, == ASP-tree order). Feed these into the withdrawal prover.\n */\n async reconstructState(opts?: {\n startLedger?: number;\n }): Promise<{ stateLeaves: bigint[]; depositIndices: number[] }> {\n const latest = await this.rpc.getLatestLedger();\n let startLedger =\n opts?.startLedger && opts.startLedger > 0\n ? opts.startLedger\n : Math.max(1, latest - POOL_EVENT_LOOKBACK);\n\n const depositTopic = xdr.ScVal.scvSymbol(\"Deposit\").toXDR(\"base64\");\n const withdrawTopic = xdr.ScVal.scvSymbol(\"Withdraw\").toXDR(\"base64\");\n const byIndex = new Map<number, bigint>();\n const depositIndices: number[] = [];\n\n for (const [topic, isDeposit] of [\n [depositTopic, true],\n [withdrawTopic, false],\n ] as const) {\n let cursor: string | undefined;\n let prevCursor: string | undefined;\n const filters = [\n { type: \"contract\" as const, contractIds: [this.contractId], topics: [[topic, \"*\"]] },\n ];\n // getEvents pages ~10k ledgers at a time and returns empty pages before\n // the ones holding events; follow the cursor until it stops advancing.\n for (let page = 0; page < 200; page++) {\n let res;\n try {\n res = await this.rpc.getEvents(\n cursor ? { cursor, filters, limit: 100 } : { startLedger, filters, limit: 100 },\n );\n } catch (err) {\n const oldest = parseOldestLedgerFromRangeError(err);\n if (!cursor && oldest != null && startLedger < oldest) {\n startLedger = oldest;\n res = await this.rpc.getEvents({ startLedger, filters, limit: 100 });\n } else {\n throw err;\n }\n }\n for (const ev of res.events ?? []) {\n const data = scValToNative(ev.value) as unknown[];\n if (isDeposit) {\n const commitment = BigInt(\n \"0x\" + Buffer.from(data[0] as Uint8Array).toString(\"hex\"),\n );\n const index = Number(data[1]);\n byIndex.set(index, commitment);\n depositIndices.push(index);\n } else {\n const newCommitment = BigInt(\n \"0x\" + Buffer.from(data[1] as Uint8Array).toString(\"hex\"),\n );\n byIndex.set(Number(data[2]), newCommitment);\n }\n }\n cursor = res.cursor;\n if (!cursor || cursor === prevCursor) break;\n prevCursor = cursor;\n }\n }\n\n const max = byIndex.size === 0 ? -1 : Math.max(...byIndex.keys());\n const stateLeaves: bigint[] = [];\n for (let i = 0; i <= max; i++) stateLeaves.push(byIndex.get(i) ?? 0n);\n depositIndices.sort((a, b) => a - b);\n return { stateLeaves, depositIndices };\n }\n}\n","/**\n * Binding for the relayer-registry contract job lifecycle the wallet drives:\n * create a blind withdrawal job (escrow fee), cancel it, or slash an\n * accepted-but-unsubmitted job after the deadline. Relayer-side methods\n * (register, accept, submit) live in the relayer node.\n */\nimport type { ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport { addressToScVal, bytesToScVal, i128ToScVal, u32ToScVal } from \"../rpc/scval\";\n\nexport class RelayerRegistry {\n constructor(\n private readonly rpc: ContractInvoker,\n readonly contractId: string,\n ) {}\n\n /** Create a blind job with an escrowed fee and a payload hash + deadline. */\n async createJob(opts: {\n jobId: Uint8Array;\n payloadHash: Uint8Array;\n deadlineLedger: number;\n fee: bigint;\n signer: OpaqueSigner;\n }): Promise<string> {\n const creator = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: creator,\n contractId: this.contractId,\n method: \"create_job\",\n contractPackage: \"relayer-registry\",\n args: [\n addressToScVal(creator),\n bytesToScVal(opts.jobId),\n bytesToScVal(opts.payloadHash),\n u32ToScVal(opts.deadlineLedger),\n i128ToScVal(opts.fee),\n ],\n signer: opts.signer,\n });\n }\n\n /** Cancel a never-accepted job after its deadline; refunds the escrow fee. */\n async cancelJob(opts: { jobId: Uint8Array; signer: OpaqueSigner }): Promise<string> {\n return this.jobAction(\"cancel_job\", opts);\n }\n\n /** Slash an accepted-but-unsubmitted job after its deadline. */\n async slashJob(opts: { jobId: Uint8Array; signer: OpaqueSigner }): Promise<string> {\n return this.jobAction(\"slash_job\", opts);\n }\n\n private async jobAction(\n method: \"cancel_job\" | \"slash_job\",\n opts: { jobId: Uint8Array; signer: OpaqueSigner },\n ): Promise<string> {\n const creator = await opts.signer.publicKey();\n return this.rpc.invoke({\n source: creator,\n contractId: this.contractId,\n method,\n contractPackage: \"relayer-registry\",\n args: [addressToScVal(creator), bytesToScVal(opts.jobId)],\n signer: opts.signer,\n });\n }\n}\n","/**\n * Storage abstractions. The SDK never imports a state container (no zustand, no\n * IndexedDB): pool notes, ghost entries, and scan cursors persist through these\n * interfaces. In-memory defaults are provided; a host app plugs its own\n * (zustand/IndexedDB in the browser, fs/sqlite on a server).\n */\nimport type { PoolNote } from \"../crypto/notes\";\nimport type { GhostEntryLike } from \"../crypto/backup\";\n\n/** Persistence for privacy-pool notes (spending material). */\nexport interface NoteStore {\n list(): Promise<PoolNote[]>;\n add(note: PoolNote): Promise<void>;\n /** Mark the note with this commitment as spent. */\n markSpent(commitment: string): Promise<void>;\n}\n\n/** Persistence for stealth \"ghost\" entries (ephemeral keys + metadata). */\nexport interface VaultStore {\n listGhosts(): Promise<GhostEntryLike[]>;\n saveGhost(entry: GhostEntryLike): Promise<void>;\n}\n\n/** Persistence for the announcement-scan cursor (last processed ledger). */\nexport interface ScanStore {\n getCursor(): Promise<number | null>;\n setCursor(ledger: number): Promise<void>;\n}\n\n/** In-memory {@link NoteStore}. Notes are keyed by commitment. */\nexport class MemoryNoteStore implements NoteStore {\n private notes = new Map<string, PoolNote>();\n async list(): Promise<PoolNote[]> {\n return [...this.notes.values()];\n }\n async add(note: PoolNote): Promise<void> {\n this.notes.set(note.commitment, note);\n }\n async markSpent(commitment: string): Promise<void> {\n const note = this.notes.get(commitment);\n if (note) this.notes.set(commitment, { ...note, spent: true });\n }\n}\n\n/** In-memory {@link VaultStore}. Ghost entries are keyed by stealth address. */\nexport class MemoryVaultStore implements VaultStore {\n private entries = new Map<string, GhostEntryLike>();\n async listGhosts(): Promise<GhostEntryLike[]> {\n return [...this.entries.values()];\n }\n async saveGhost(entry: GhostEntryLike): Promise<void> {\n this.entries.set(entry.stealthAddress, entry);\n }\n}\n\n/** In-memory {@link ScanStore}. */\nexport class MemoryScanStore implements ScanStore {\n private cursor: number | null = null;\n async getCursor(): Promise<number | null> {\n return this.cursor;\n }\n async setCursor(ledger: number): Promise<void> {\n this.cursor = ledger;\n }\n}\n","/**\n * Circuit artifact resolution. Groth16 proving needs a circuit `.wasm` and a\n * proving-key `.zkey`. Large `.zkey` files are never bundled into the package:\n * an {@link ArtifactResolver} fetches them (and, in integrity-checking\n * implementations, verifies their hash) at proof time.\n *\n * The default {@link urlArtifactResolver} returns URLs suitable for snarkjs in a\n * browser or any fetch-capable runtime. A filesystem-caching resolver for Node\n * lives in the `./node` entry (it needs `fs`).\n */\nimport { ArtifactError } from \"../errors/index\";\n\nexport type ArtifactId = \"reputation-v2\" | \"pool-v3\";\nexport type ArtifactKind = \"wasm\" | \"zkey\";\n\nexport interface ArtifactResolver {\n /** Resolve an artifact to a URL string or its raw bytes. */\n resolve(id: ArtifactId, kind: ArtifactKind): Promise<string | Uint8Array>;\n}\n\n/** Default relative paths, matching the published circuit release layout. */\nexport const DEFAULT_ARTIFACT_PATHS: Record<\n ArtifactId,\n Record<ArtifactKind, string>\n> = {\n \"reputation-v2\": {\n wasm: \"circuits/v2/stealth_reputation.wasm\",\n zkey: \"circuits/v2/stealth_reputation_final.zkey\",\n },\n \"pool-v3\": {\n wasm: \"circuits/v3/privacy_pool_withdraw.wasm\",\n zkey: \"circuits/v3/privacy_pool_withdraw_final.zkey\",\n },\n};\n\n/**\n * Build a resolver that maps artifacts to URLs under a base URL. Pass `paths` to\n * override individual artifact locations.\n */\nexport function urlArtifactResolver(opts: {\n baseUrl: string;\n paths?: Partial<Record<ArtifactId, Partial<Record<ArtifactKind, string>>>>;\n}): ArtifactResolver {\n const base = opts.baseUrl.replace(/\\/+$/, \"\");\n return {\n async resolve(id, kind) {\n const path = opts.paths?.[id]?.[kind] ?? DEFAULT_ARTIFACT_PATHS[id]?.[kind];\n if (!path) {\n throw new ArtifactError(`No artifact path for ${id}/${kind}`);\n }\n return `${base}/${path.replace(/^\\/+/, \"\")}`;\n },\n };\n}\n\n/**\n * Build a resolver that maps artifacts to local filesystem paths under a base\n * directory. The returned path strings are consumed directly by snarkjs in Node.\n */\nexport function fileArtifactResolver(opts: {\n baseDir: string;\n paths?: Partial<Record<ArtifactId, Partial<Record<ArtifactKind, string>>>>;\n}): ArtifactResolver {\n const base = opts.baseDir.replace(/\\/+$/, \"\");\n return {\n async resolve(id, kind) {\n const path = opts.paths?.[id]?.[kind] ?? DEFAULT_ARTIFACT_PATHS[id]?.[kind];\n if (!path) {\n throw new ArtifactError(`No artifact path for ${id}/${kind}`);\n }\n return `${base}/${path.replace(/^\\/+/, \"\")}`;\n },\n };\n}\n","/**\n * Serialize a snarkjs Groth16 proof into the byte layout the Soroban verifiers\n * expect: A and C as 64-byte G1 points (x‖y, 32-byte BE each), B as a 128-byte\n * G2 point with each Fp2 coordinate pair swapped (c1‖c0). Shared by the\n * reputation and pool provers.\n */\nimport { bigIntToBytes32 } from \"../crypto/bytes\";\n\nexport interface Groth16ProofLike {\n pi_a: string[];\n pi_b: string[][];\n pi_c: string[];\n}\n\nexport interface SerializedProof {\n a: Uint8Array; // 64 bytes\n b: Uint8Array; // 128 bytes\n c: Uint8Array; // 64 bytes\n}\n\nexport function serializeGroth16Proof(proof: Groth16ProofLike): SerializedProof {\n const a = new Uint8Array(64);\n a.set(bigIntToBytes32(BigInt(proof.pi_a[0])), 0);\n a.set(bigIntToBytes32(BigInt(proof.pi_a[1])), 32);\n\n // G2: take the first two coordinate pairs, swapping (c1, c0) within each.\n const flat = proof.pi_b\n .slice(0, 2)\n .flatMap((pair) => [BigInt(pair[1]), BigInt(pair[0])]);\n const b = new Uint8Array(128);\n for (let i = 0; i < 4; i++) b.set(bigIntToBytes32(flat[i]), i * 32);\n\n const c = new Uint8Array(64);\n c.set(bigIntToBytes32(BigInt(proof.pi_c[0])), 0);\n c.set(bigIntToBytes32(BigInt(proof.pi_c[1])), 32);\n\n return { a, b, c };\n}\n","/**\n * Reputation prover: build the V2 witness (Poseidon) and generate a Groth16\n * proof via snarkjs, returning a bundle ready for on-chain verification.\n *\n * The witness here is the single-leaf (tree-of-zeros) construction the protocol\n * uses for a holder's own attestation; it produces the same root a real indexer\n * publishes for that leaf. Public-signal order is canonical:\n * [0] merkle_root [1] attestation_id [2] external_nullifier [3] nullifier_hash\n */\nimport { bigIntToBytes32, bytesToBigInt } from \"../crypto/bytes\";\nimport { getPoseidon } from \"../crypto/notes\";\nimport { ArtifactError } from \"../errors/index\";\nimport type { ArtifactResolver } from \"../artifacts/index\";\nimport type { VerifyReputationInputs } from \"../contracts/verifier\";\nimport { serializeGroth16Proof } from \"./serialize\";\n\nconst TREE_DEPTH = 20;\n\ntype PoseidonField = {\n e(x: bigint): unknown;\n toObject(x: unknown): bigint;\n};\n\nexport interface ReputationProveInput {\n /** Attestation id (== schema id) of the trait being proven. */\n attestationId: number;\n /** The holder's stealth private key bytes. */\n stealthPrivKey: Uint8Array;\n /** Application-chosen external nullifier (must fit in u64 for the contract). */\n externalNullifier: bigint;\n}\n\nexport interface ReputationWitnessV2 {\n stealth_pk: string;\n schema_id: string;\n issuer_pk_x: string;\n trait_data_hash: string;\n nonce: string;\n merkle_path: string[];\n merkle_path_indices: number[];\n merkle_root: string;\n attestation_id: string;\n external_nullifier: string;\n nullifier_hash: string;\n}\n\n/** Build the canonical V2 reputation witness for a holder's own attestation. */\nexport async function buildReputationWitnessV2(\n input: ReputationProveInput,\n): Promise<ReputationWitnessV2> {\n const poseidon = (await getPoseidon()) as unknown as ((i: bigint[]) => unknown) & {\n F: PoseidonField;\n };\n const F = poseidon.F;\n\n const stealthPk = F.toObject(F.e(bytesToBigInt(input.stealthPrivKey)));\n const schemaId = BigInt(input.attestationId);\n const extNullifier = input.externalNullifier;\n\n const issuerPkX = F.toObject(poseidon([stealthPk, 1n]));\n const traitDataHash = F.toObject(poseidon([schemaId, 2n]));\n const nonce = F.toObject(poseidon([stealthPk, 3n]));\n\n const leaf = F.toObject(\n poseidon([stealthPk, schemaId, issuerPkX, traitDataHash, nonce]),\n );\n\n // Empty-subtree roots: z[0] = 0, z[i] = Poseidon(z[i-1], z[i-1]).\n const zeroHashes: bigint[] = [0n];\n for (let i = 0; i < TREE_DEPTH; i++) {\n zeroHashes.push(F.toObject(poseidon([zeroHashes[i], zeroHashes[i]])));\n }\n const merklePath: string[] = [];\n const merklePathIndices: number[] = [];\n let current = leaf;\n for (let i = 0; i < TREE_DEPTH; i++) {\n merklePath.push(zeroHashes[i].toString());\n merklePathIndices.push(0);\n current = F.toObject(poseidon([current, zeroHashes[i]]));\n }\n const merkleRoot = current;\n const nullifierHash = F.toObject(poseidon([stealthPk, extNullifier]));\n\n return {\n stealth_pk: stealthPk.toString(),\n schema_id: schemaId.toString(),\n issuer_pk_x: issuerPkX.toString(),\n trait_data_hash: traitDataHash.toString(),\n nonce: nonce.toString(),\n merkle_path: merklePath,\n merkle_path_indices: merklePathIndices,\n merkle_root: merkleRoot.toString(),\n attestation_id: schemaId.toString(),\n external_nullifier: extNullifier.toString(),\n nullifier_hash: nullifierHash.toString(),\n };\n}\n\ninterface SnarkjsLike {\n groth16: {\n fullProve(\n input: Record<string, unknown>,\n wasm: string | Uint8Array,\n zkey: string | Uint8Array,\n ): Promise<{ proof: import(\"./serialize\").Groth16ProofLike; publicSignals: string[] }>;\n };\n}\n\nasync function loadSnarkjs(): Promise<SnarkjsLike> {\n try {\n return (await import(\"snarkjs\")) as unknown as SnarkjsLike;\n } catch (cause) {\n throw new ArtifactError(\n \"snarkjs is required for proof generation; install it as a peer dependency.\",\n { cause },\n );\n }\n}\n\nexport interface ReputationProof extends VerifyReputationInputs {\n publicSignals: string[];\n}\n\n/**\n * Generate a V2 reputation proof and return a bundle ready for\n * `reputation.verifyOnChain` / the reputation-verifier contract.\n */\nexport async function proveReputationV2(opts: {\n input: ReputationProveInput;\n artifacts: ArtifactResolver;\n snarkjs?: SnarkjsLike;\n}): Promise<ReputationProof> {\n const witness = await buildReputationWitnessV2(opts.input);\n const snarkjs = opts.snarkjs ?? (await loadSnarkjs());\n const [wasm, zkey] = await Promise.all([\n opts.artifacts.resolve(\"reputation-v2\", \"wasm\"),\n opts.artifacts.resolve(\"reputation-v2\", \"zkey\"),\n ]);\n\n const { proof, publicSignals } = await snarkjs.groth16.fullProve(\n witness as unknown as Record<string, unknown>,\n wasm,\n zkey,\n );\n const { a, b, c } = serializeGroth16Proof(proof);\n\n return {\n proofA: a,\n proofB: b,\n proofC: c,\n merkleRoot: bigIntToBytes32(BigInt(publicSignals[0])),\n attestationId: bigIntToBytes32(BigInt(publicSignals[1])),\n externalNullifier: opts.input.externalNullifier,\n nullifierHash: bigIntToBytes32(BigInt(publicSignals[3])),\n publicSignals,\n };\n}\n","/**\n * Privacy-pool withdrawal prover. Reconstructs the depth-20 Poseidon state/ASP\n * trees from the pool's leaves, assembles the v3 withdrawal witness, and produces\n * a Groth16 proof bundle for `privacy-pool.withdraw`.\n *\n * The Merkle tree and context binding byte-match the circuit and the contract.\n * Reading the on-chain leaves (Deposit/Withdraw events) is the caller's job: pass\n * the reconstructed `stateLeaves` + `depositIndices` (and the prover validates the\n * note against them). This keeps the prover pure and offline-testable.\n *\n * v1 supports FULL withdrawals (remainder = 0); the change leaf is a throwaway\n * zero-value commitment.\n */\nimport { Address } from \"@stellar/stellar-sdk\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bigIntToBytes32, toHex32 } from \"../crypto/bytes\";\nimport {\n BN254_R,\n POOL_TREE_DEPTH,\n getPoseidon,\n hashFields,\n newNoteSecrets,\n type PoolNote,\n} from \"../crypto/notes\";\nimport { ArtifactError } from \"../errors/index\";\nimport type { ArtifactResolver } from \"../artifacts/index\";\nimport { serializeGroth16Proof, type Groth16ProofLike } from \"./serialize\";\n\ntype Poseidon = Parameters<typeof hashFields>[0];\n\n/** Big-endian byte encoding of `v` in `len` bytes. */\nfunction beBytes(v: bigint, len: number): Uint8Array {\n const out = new Uint8Array(len);\n let n = v;\n for (let i = len - 1; i >= 0; i--) {\n out[i] = Number(n & 0xffn);\n n >>= 8n;\n }\n return out;\n}\n\n/** Depth-20 Poseidon Merkle tree, byte-matching the contract / circuit / ASP. */\nexport class PoolMerkleTree {\n private readonly zero: bigint[];\n constructor(\n private readonly poseidon: Poseidon,\n private readonly leaves: bigint[],\n private readonly depth = POOL_TREE_DEPTH,\n ) {\n this.zero = [0n];\n for (let i = 0; i < depth; i++) {\n this.zero.push(hashFields(poseidon, [this.zero[i], this.zero[i]]));\n }\n }\n private rootFrom(start: number, level: number): bigint {\n if (start >= this.leaves.length) return this.zero[level];\n if (level === 0) return this.leaves[start];\n const half = 1 << (level - 1);\n const left = this.rootFrom(start, level - 1);\n const right = this.rootFrom(start + half, level - 1);\n return hashFields(this.poseidon, [left, right]);\n }\n root(): bigint {\n return this.rootFrom(0, this.depth);\n }\n private node(index: number, level: number): bigint {\n return this.rootFrom(index * (1 << level), level);\n }\n proof(index: number): { siblings: bigint[]; indices: number[] } {\n const siblings: bigint[] = [];\n const indices: number[] = [];\n let cur = index;\n for (let level = 0; level < this.depth; level++) {\n siblings.push(this.node(cur ^ 1, level));\n indices.push(cur & 1);\n cur >>= 1;\n }\n return { siblings, indices };\n }\n}\n\n/**\n * Withdrawal context binding:\n * keccak256(recipient_xdr ‖ withdrawn(16) ‖ fee(16) ‖ relayer_xdr ‖ scope(8)) mod r.\n */\nexport function computeWithdrawContext(opts: {\n recipient: string;\n withdrawn: bigint;\n fee: bigint;\n relayer: string;\n scope: number;\n}): bigint {\n const recXdr = new Uint8Array(new Address(opts.recipient).toScVal().toXDR());\n const relXdr = new Uint8Array(new Address(opts.relayer).toScVal().toXDR());\n const parts = [\n recXdr,\n beBytes(opts.withdrawn, 16),\n beBytes(opts.fee, 16),\n relXdr,\n beBytes(BigInt(opts.scope), 8),\n ];\n const preimage = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));\n let o = 0;\n for (const p of parts) {\n preimage.set(p, o);\n o += p.length;\n }\n let v = 0n;\n for (const b of keccak_256(preimage)) v = (v << 8n) + BigInt(b);\n return v % BN254_R;\n}\n\nexport interface PoolWithdrawProof {\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n withdrawnValue: bigint;\n stateRoot: Uint8Array;\n aspRoot: Uint8Array;\n nullifierHash: Uint8Array;\n newCommitment: Uint8Array;\n}\n\ninterface SnarkjsLike {\n groth16: {\n fullProve(\n input: Record<string, unknown>,\n wasm: string | Uint8Array,\n zkey: string | Uint8Array,\n ): Promise<{ proof: Groth16ProofLike; publicSignals: string[] }>;\n };\n}\n\nasync function loadSnarkjs(): Promise<SnarkjsLike> {\n try {\n return (await import(\"snarkjs\")) as unknown as SnarkjsLike;\n } catch (cause) {\n throw new ArtifactError(\n \"snarkjs is required for proof generation; install it as a peer dependency.\",\n { cause },\n );\n }\n}\n\n/**\n * Generate a full-withdrawal proof for `note`, paying `recipient` (minus `fee` to\n * `relayer`). The caller supplies the reconstructed pool leaves: `stateLeaves`\n * (commitment per state-tree index) and `depositIndices` (state index of each\n * deposit, in ASP-tree order).\n */\nexport async function provePoolWithdraw(opts: {\n note: PoolNote;\n recipient: string;\n relayer: string;\n fee: bigint;\n scope: number;\n stateLeaves: bigint[];\n depositIndices: number[];\n artifacts: ArtifactResolver;\n snarkjs?: SnarkjsLike;\n}): Promise<PoolWithdrawProof> {\n const { note } = opts;\n const value = BigInt(note.value);\n const withdrawnValue = value; // full withdrawal\n const remainder = 0n;\n\n const poseidon = await getPoseidon();\n const h = (xs: bigint[]) => hashFields(poseidon, xs);\n\n const aspLeafIndex = opts.depositIndices.indexOf(note.leafIndex);\n if (aspLeafIndex < 0) {\n throw new Error(`Leaf #${note.leafIndex} is not among the pool's deposits.`);\n }\n const onChain = opts.stateLeaves[note.leafIndex];\n if (onChain != null && toHex32(onChain).toLowerCase() !== note.commitment.toLowerCase()) {\n throw new Error(`Leaf #${note.leafIndex} commitment does not match this note.`);\n }\n\n const label = h([BigInt(opts.scope), BigInt(note.leafIndex)]);\n const aspLeaves = opts.depositIndices.map((i) => h([BigInt(opts.scope), BigInt(i)]));\n const stateTree = new PoolMerkleTree(poseidon, opts.stateLeaves);\n const aspTree = new PoolMerkleTree(poseidon, aspLeaves);\n const statePath = stateTree.proof(note.leafIndex);\n const aspPath = aspTree.proof(aspLeafIndex);\n\n const change = newNoteSecrets();\n const newPrecommit = h([BigInt(change.nullifier), BigInt(change.secret)]);\n const newCommitment = h([remainder, label, newPrecommit]);\n const nullifierHash = h([BigInt(note.nullifier)]);\n const context = computeWithdrawContext({\n recipient: opts.recipient,\n withdrawn: withdrawnValue,\n fee: opts.fee,\n relayer: opts.relayer,\n scope: opts.scope,\n });\n\n const input: Record<string, unknown> = {\n withdrawnValue: withdrawnValue.toString(),\n stateRoot: stateTree.root().toString(),\n aspRoot: aspTree.root().toString(),\n nullifierHash: nullifierHash.toString(),\n newCommitment: newCommitment.toString(),\n context: context.toString(),\n value: value.toString(),\n label: label.toString(),\n nullifier: note.nullifier,\n secret: note.secret,\n newNullifier: change.nullifier,\n newSecret: change.secret,\n stateSiblings: statePath.siblings.map((x) => x.toString()),\n stateIndex: statePath.indices.map((x) => x.toString()),\n aspSiblings: aspPath.siblings.map((x) => x.toString()),\n aspIndex: aspPath.indices.map((x) => x.toString()),\n };\n\n const snarkjs = opts.snarkjs ?? (await loadSnarkjs());\n const [wasm, zkey] = await Promise.all([\n opts.artifacts.resolve(\"pool-v3\", \"wasm\"),\n opts.artifacts.resolve(\"pool-v3\", \"zkey\"),\n ]);\n const { proof } = await snarkjs.groth16.fullProve(input, wasm, zkey);\n const { a, b, c } = serializeGroth16Proof(proof);\n\n return {\n proofA: a,\n proofB: b,\n proofC: c,\n withdrawnValue,\n stateRoot: bigIntToBytes32(stateTree.root()),\n aspRoot: bigIntToBytes32(aspTree.root()),\n nullifierHash: bigIntToBytes32(nullifierHash),\n newCommitment: bigIntToBytes32(newCommitment),\n };\n}\n","/**\n * Internal byte helpers for the relayer protocol. Kept separate from\n * `crypto/bytes` because the wire format here uses 0x-prefixed hex and exact\n * i128/length encodings that must byte-match the relayer node and the\n * relayer-registry contract.\n */\n\nexport function hexToBytes(hex: string): Uint8Array {\n const clean = hex.replace(/^0x/, \"\");\n if (!/^[0-9a-f]*$/i.test(clean) || clean.length % 2 !== 0) {\n throw new Error(\"Invalid hex string.\");\n }\n const out = new Uint8Array(clean.length / 2);\n for (let i = 0; i < out.length; i += 1) {\n out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return out;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n return `0x${Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\")}`;\n}\n\nexport function base64ToBytes(value: string): Uint8Array {\n if (typeof atob === \"function\") {\n const bin = atob(value);\n return Uint8Array.from(bin, (c) => c.charCodeAt(0));\n }\n const buffer = (globalThis as unknown as { Buffer?: { from(v: string, enc: \"base64\"): Uint8Array } }).Buffer;\n if (!buffer) throw new Error(\"No base64 decoder available.\");\n return Uint8Array.from(buffer.from(value, \"base64\"));\n}\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n if (typeof btoa === \"function\") {\n let bin = \"\";\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin);\n }\n const buffer = (globalThis as unknown as { Buffer?: { from(v: Uint8Array): { toString(enc: \"base64\"): string } } }).Buffer;\n if (!buffer) throw new Error(\"No base64 encoder available.\");\n return buffer.from(bytes).toString(\"base64\");\n}\n\nexport function concatBytes(...chunks: Uint8Array[]): Uint8Array {\n const len = chunks.reduce((n, c) => n + c.length, 0);\n const out = new Uint8Array(len);\n let offset = 0;\n for (const chunk of chunks) {\n out.set(chunk, offset);\n offset += chunk.length;\n }\n return out;\n}\n\nexport function assertLength(bytes: Uint8Array, len: number, label: string): Uint8Array {\n if (bytes.length !== len) {\n throw new Error(`${label} must be ${len} bytes, got ${bytes.length}.`);\n }\n return bytes;\n}\n\nexport function i128ToBytes(value: bigint): Uint8Array {\n const min = -(1n << 127n);\n const max = (1n << 127n) - 1n;\n if (value < min || value > max) throw new Error(\"i128 out of range.\");\n let unsigned = value;\n if (value < 0) unsigned = (1n << 128n) + value;\n const out = new Uint8Array(16);\n for (let i = 15; i >= 0; i -= 1) {\n out[i] = Number(unsigned & 0xffn);\n unsigned >>= 8n;\n }\n return out;\n}\n","/**\n * Canonical pool-withdrawal payload + hash. The preimage and keccak256 hash\n * byte-match the relayer-registry contract and the relayer node, so a payload\n * hash computed here is the same one the contract recomputes on submission.\n */\nimport { Address, xdr } from \"@stellar/stellar-sdk\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { assertLength, bytesToHex, concatBytes, hexToBytes, i128ToBytes } from \"./bytes\";\n\nexport const RELAY_PAYLOAD_DOMAIN = \"opaque-stellar-relay-v1\";\nexport const RELAY_CHAIN_STELLAR = 3000;\n\nexport type PoolWithdrawPayload = {\n poolId: string;\n proofA: Uint8Array;\n proofB: Uint8Array;\n proofC: Uint8Array;\n withdrawnValue: bigint;\n stateRoot: Uint8Array;\n aspRoot: Uint8Array;\n nullifierHash: Uint8Array;\n newCommitment: Uint8Array;\n recipient: string;\n poolFee: bigint;\n poolRelayer: string;\n};\n\nexport type SerializablePoolWithdrawPayload = {\n poolId: string;\n proofA: string;\n proofB: string;\n proofC: string;\n withdrawnValue: string;\n stateRoot: string;\n aspRoot: string;\n nullifierHash: string;\n newCommitment: string;\n recipient: string;\n poolFee: string;\n poolRelayer: string;\n};\n\nfunction utf8(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nfunction addressXdr(address: string): Uint8Array {\n return new Uint8Array(new Address(address).toScVal().toXDR());\n}\n\nfunction symbolXdr(symbol: string): Uint8Array {\n return new Uint8Array(xdr.ScVal.scvSymbol(symbol).toXDR());\n}\n\nexport function poolWithdrawPayloadPreimage(payload: PoolWithdrawPayload): Uint8Array {\n return concatBytes(\n utf8(RELAY_PAYLOAD_DOMAIN),\n addressXdr(payload.poolId),\n symbolXdr(\"withdraw\"),\n assertLength(payload.proofA, 64, \"proofA\"),\n assertLength(payload.proofB, 128, \"proofB\"),\n assertLength(payload.proofC, 64, \"proofC\"),\n i128ToBytes(payload.withdrawnValue),\n assertLength(payload.stateRoot, 32, \"stateRoot\"),\n assertLength(payload.aspRoot, 32, \"aspRoot\"),\n assertLength(payload.nullifierHash, 32, \"nullifierHash\"),\n assertLength(payload.newCommitment, 32, \"newCommitment\"),\n addressXdr(payload.recipient),\n i128ToBytes(payload.poolFee),\n addressXdr(payload.poolRelayer),\n );\n}\n\nexport function hashPoolWithdrawPayload(payload: PoolWithdrawPayload): Uint8Array {\n return keccak_256(poolWithdrawPayloadPreimage(payload));\n}\n\nexport function hashPoolWithdrawPayloadHex(payload: PoolWithdrawPayload): string {\n return bytesToHex(hashPoolWithdrawPayload(payload));\n}\n\nexport function serializePoolWithdrawPayload(\n payload: PoolWithdrawPayload,\n): SerializablePoolWithdrawPayload {\n return {\n poolId: payload.poolId,\n proofA: bytesToHex(payload.proofA),\n proofB: bytesToHex(payload.proofB),\n proofC: bytesToHex(payload.proofC),\n withdrawnValue: payload.withdrawnValue.toString(),\n stateRoot: bytesToHex(payload.stateRoot),\n aspRoot: bytesToHex(payload.aspRoot),\n nullifierHash: bytesToHex(payload.nullifierHash),\n newCommitment: bytesToHex(payload.newCommitment),\n recipient: payload.recipient,\n poolFee: payload.poolFee.toString(),\n poolRelayer: payload.poolRelayer,\n };\n}\n\nexport function parsePoolWithdrawPayload(\n payload: SerializablePoolWithdrawPayload,\n): PoolWithdrawPayload {\n return {\n poolId: payload.poolId,\n proofA: assertLength(hexToBytes(payload.proofA), 64, \"proofA\"),\n proofB: assertLength(hexToBytes(payload.proofB), 128, \"proofB\"),\n proofC: assertLength(hexToBytes(payload.proofC), 64, \"proofC\"),\n withdrawnValue: BigInt(payload.withdrawnValue),\n stateRoot: assertLength(hexToBytes(payload.stateRoot), 32, \"stateRoot\"),\n aspRoot: assertLength(hexToBytes(payload.aspRoot), 32, \"aspRoot\"),\n nullifierHash: assertLength(hexToBytes(payload.nullifierHash), 32, \"nullifierHash\"),\n newCommitment: assertLength(hexToBytes(payload.newCommitment), 32, \"newCommitment\"),\n recipient: payload.recipient,\n poolFee: BigInt(payload.poolFee),\n poolRelayer: payload.poolRelayer,\n };\n}\n\nexport function encodePoolWithdrawPayload(payload: PoolWithdrawPayload): Uint8Array {\n return utf8(\n JSON.stringify({ t: \"pool-withdraw\", v: 1, payload: serializePoolWithdrawPayload(payload) }),\n );\n}\n\nexport function decodePoolWithdrawPayload(bytes: Uint8Array): PoolWithdrawPayload {\n const decoded = JSON.parse(new TextDecoder().decode(bytes)) as {\n t?: string;\n v?: number;\n payload?: SerializablePoolWithdrawPayload;\n };\n if (decoded.t !== \"pool-withdraw\" || decoded.v !== 1 || !decoded.payload) {\n throw new Error(\"Unsupported relayer payload.\");\n }\n return parsePoolWithdrawPayload(decoded.payload);\n}\n","/**\n * NaCl `crypto_box` sealing for relayer payloads. `tweetnacl` is an optional peer\n * dependency, loaded lazily so consumers that never touch the relayer market do\n * not need it installed.\n */\nimport { assertLength, base64ToBytes, bytesToBase64, concatBytes } from \"./bytes\";\n\nconst PUBLIC_KEY_BYTES = 32;\nconst SECRET_KEY_BYTES = 32;\nconst NONCE_BYTES = 24;\n\nfunction randomBytes(len: number): Uint8Array {\n const out = new Uint8Array(len);\n globalThis.crypto.getRandomValues(out);\n return out;\n}\n\ntype KeyPair = { publicKey: Uint8Array; secretKey: Uint8Array };\ninterface NaclBox {\n (msg: Uint8Array, nonce: Uint8Array, theirPk: Uint8Array, mySk: Uint8Array): Uint8Array;\n open(box: Uint8Array, nonce: Uint8Array, theirPk: Uint8Array, mySk: Uint8Array): Uint8Array | null;\n keyPair: { (): KeyPair; fromSecretKey(sk: Uint8Array): KeyPair };\n overheadLength: number;\n}\ninterface Nacl {\n box: NaclBox;\n}\n\nasync function getNacl(): Promise<Nacl> {\n try {\n return ((await import(\"tweetnacl\")) as unknown as { default: Nacl }).default;\n } catch (cause) {\n throw new Error(\n \"tweetnacl is required for relayer payload encryption; install it as a peer dependency.\",\n { cause },\n );\n }\n}\n\nexport type X25519Keypair = {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n};\n\nexport async function generateX25519Keypair(seed?: Uint8Array): Promise<X25519Keypair> {\n const nacl = await getNacl();\n if (seed) {\n const secretKey = assertLength(seed, SECRET_KEY_BYTES, \"x25519 seed\");\n const pair = nacl.box.keyPair.fromSecretKey(secretKey);\n return { publicKey: pair.publicKey, secretKey: pair.secretKey };\n }\n const pair = nacl.box.keyPair();\n return { publicKey: pair.publicKey, secretKey: pair.secretKey };\n}\n\nexport async function sealBox(\n plaintext: Uint8Array,\n recipientPublicKey: Uint8Array,\n): Promise<string> {\n const nacl = await getNacl();\n const to = assertLength(recipientPublicKey, PUBLIC_KEY_BYTES, \"recipient x25519 public key\");\n const eph = nacl.box.keyPair();\n const nonce = randomBytes(NONCE_BYTES);\n const ciphertext = nacl.box(plaintext, nonce, to, eph.secretKey);\n return bytesToBase64(concatBytes(eph.publicKey, nonce, ciphertext));\n}\n\nexport async function openBox(box: string, recipientSecretKey: Uint8Array): Promise<Uint8Array> {\n const nacl = await getNacl();\n const secret = assertLength(recipientSecretKey, SECRET_KEY_BYTES, \"recipient x25519 secret key\");\n const raw = base64ToBytes(box);\n if (raw.length < PUBLIC_KEY_BYTES + NONCE_BYTES + nacl.box.overheadLength) {\n throw new Error(\"Encrypted payload is too short.\");\n }\n const epk = raw.slice(0, PUBLIC_KEY_BYTES);\n const nonce = raw.slice(PUBLIC_KEY_BYTES, PUBLIC_KEY_BYTES + NONCE_BYTES);\n const ciphertext = raw.slice(PUBLIC_KEY_BYTES + NONCE_BYTES);\n const opened = nacl.box.open(ciphertext, nonce, epk, secret);\n if (!opened) throw new Error(\"Could not decrypt relayer payload.\");\n return opened;\n}\n","/**\n * `opaque/jobs/v1` wire messages: advert, bid, encrypted payload. Bids are\n * Ed25519-signed by the relayer operator over a domain-separated digest so the\n * SDK can verify them before trusting registry state.\n */\nimport { Keypair } from \"@stellar/stellar-sdk\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport {\n assertLength,\n base64ToBytes,\n bytesToBase64,\n bytesToHex,\n concatBytes,\n hexToBytes,\n} from \"./bytes\";\nimport { RELAY_CHAIN_STELLAR } from \"./payload\";\n\nconst BID_DOMAIN = new TextEncoder().encode(\"opaque-relayer-bid-v1\");\n\nexport type JobAdvert = {\n t: \"advert\";\n v: 1;\n jobId: string;\n chain: number;\n fee: string;\n deadline: number;\n payloadHash: string;\n};\n\nexport type RelayerBid = {\n t: \"bid\";\n v: 1;\n jobId: string;\n chain: number;\n operator: string;\n x25519Pk: string;\n sig: string;\n endpoint?: string;\n freeStake?: string;\n};\n\nexport type EncryptedPayload = {\n t: \"payload\";\n v: 1;\n jobId: string;\n to: string;\n box: string;\n};\n\nexport type RelayerMessage = JobAdvert | RelayerBid | EncryptedPayload;\n\nexport function makeAdvert(args: {\n jobId: Uint8Array;\n fee: bigint;\n deadline: number;\n payloadHash: Uint8Array;\n chain?: number;\n}): JobAdvert {\n return {\n t: \"advert\",\n v: 1,\n jobId: bytesToHex(assertLength(args.jobId, 32, \"jobId\")),\n chain: args.chain ?? RELAY_CHAIN_STELLAR,\n fee: args.fee.toString(),\n deadline: args.deadline,\n payloadHash: bytesToHex(assertLength(args.payloadHash, 32, \"payloadHash\")),\n };\n}\n\nexport function bidSigningDigest(jobId: Uint8Array, x25519Pk: Uint8Array): Uint8Array {\n return keccak_256(\n concatBytes(\n BID_DOMAIN,\n assertLength(jobId, 32, \"jobId\"),\n assertLength(x25519Pk, 32, \"x25519Pk\"),\n ),\n );\n}\n\nexport function makeBid(args: {\n advert: JobAdvert;\n operator: Keypair;\n x25519Pk: Uint8Array;\n endpoint?: string;\n freeStake?: bigint;\n}): RelayerBid {\n const x25519Pk = assertLength(args.x25519Pk, 32, \"x25519Pk\");\n const digest = bidSigningDigest(hexToBytes(args.advert.jobId), x25519Pk);\n return {\n t: \"bid\",\n v: 1,\n jobId: args.advert.jobId,\n chain: args.advert.chain,\n operator: args.operator.publicKey(),\n x25519Pk: bytesToHex(x25519Pk),\n sig: bytesToBase64(args.operator.sign(Buffer.from(digest))),\n endpoint: args.endpoint,\n freeStake: args.freeStake?.toString(),\n };\n}\n\nexport function verifyBid(bid: RelayerBid): boolean {\n try {\n const digest = bidSigningDigest(hexToBytes(bid.jobId), hexToBytes(bid.x25519Pk));\n return Keypair.fromPublicKey(bid.operator).verify(\n Buffer.from(digest),\n Buffer.from(base64ToBytes(bid.sig)),\n );\n } catch {\n return false;\n }\n}\n\nexport function validateAdvert(value: unknown): JobAdvert {\n const v = value as Partial<JobAdvert>;\n if (\n v?.t !== \"advert\" ||\n v.v !== 1 ||\n typeof v.jobId !== \"string\" ||\n typeof v.payloadHash !== \"string\" ||\n typeof v.fee !== \"string\" ||\n typeof v.deadline !== \"number\"\n ) {\n throw new Error(\"Invalid relayer advert.\");\n }\n assertLength(hexToBytes(v.jobId), 32, \"jobId\");\n assertLength(hexToBytes(v.payloadHash), 32, \"payloadHash\");\n return { ...v, chain: v.chain ?? RELAY_CHAIN_STELLAR } as JobAdvert;\n}\n\nexport function validateBid(value: unknown): RelayerBid {\n const v = value as Partial<RelayerBid>;\n if (\n v?.t !== \"bid\" ||\n v.v !== 1 ||\n typeof v.jobId !== \"string\" ||\n typeof v.operator !== \"string\" ||\n typeof v.x25519Pk !== \"string\" ||\n typeof v.sig !== \"string\"\n ) {\n throw new Error(\"Invalid relayer bid.\");\n }\n assertLength(hexToBytes(v.jobId), 32, \"jobId\");\n assertLength(hexToBytes(v.x25519Pk), 32, \"x25519Pk\");\n return { ...v, chain: v.chain ?? RELAY_CHAIN_STELLAR } as RelayerBid;\n}\n","/**\n * Relayer-market gateway client: build a blind withdrawal payload, advertise a\n * job, collect and verify bids (signature + on-chain registry state), pick a\n * relayer, and deliver the payload encrypted to its X25519 key. HTTP transport\n * is the `opaque/jobs/v1` gateway API.\n */\nimport type { ContractInvoker } from \"../rpc/client\";\nimport { addressToScVal, bytesToScVal } from \"../rpc/scval\";\nimport type { PoolWithdrawProof } from \"../prove/pool\";\nimport { sealBox } from \"./box\";\nimport {\n makeAdvert,\n validateBid,\n verifyBid,\n type JobAdvert,\n type RelayerBid,\n} from \"./messages\";\nimport { assertLength, bytesToHex, hexToBytes } from \"./bytes\";\nimport {\n encodePoolWithdrawPayload,\n hashPoolWithdrawPayload,\n RELAY_CHAIN_STELLAR,\n type PoolWithdrawPayload,\n} from \"./payload\";\n\nexport type VerifiedBid = RelayerBid & { freeStakeValue: bigint };\n\nexport type RelayerJobDraft = {\n jobId: Uint8Array;\n jobIdHex: string;\n payload: PoolWithdrawPayload;\n payloadHash: Uint8Array;\n payloadHashHex: string;\n advert: JobAdvert;\n deadlineLedger: number;\n fee: bigint;\n};\n\nexport type RelayerJobStatus =\n | \"open\"\n | \"accepted\"\n | \"submitted\"\n | \"slashed\"\n | \"canceled\"\n | \"unknown\";\n\nconst REGISTRY_JOB_STATUS: Record<number, RelayerJobStatus> = {\n 0: \"open\",\n 1: \"accepted\",\n 2: \"submitted\",\n 3: \"slashed\",\n 4: \"canceled\",\n};\n\ntype NativeRegistryJob = { status: number | bigint; fee: bigint | number | string };\ntype NativeRegistryRelayer = {\n endpoint?: string;\n free_stake: bigint | number | string;\n x25519_pubkey: Uint8Array | number[];\n};\n\n/** Cryptographically random 32-byte job id. */\nexport function randomJobId(): Uint8Array {\n const out = new Uint8Array(32);\n globalThis.crypto.getRandomValues(out);\n return out;\n}\n\n/**\n * Build the blind withdrawal payload. The pool fee is zero (the registry escrow\n * pays the relayer) and the proof binds the registry as the pool relayer, so the\n * payload hash is deterministic before a relayer is chosen.\n */\nexport function buildRelayedWithdrawPayload(args: {\n poolId: string;\n registryId: string;\n proof: PoolWithdrawProof;\n recipient: string;\n}): PoolWithdrawPayload {\n return {\n poolId: args.poolId,\n proofA: args.proof.proofA,\n proofB: args.proof.proofB,\n proofC: args.proof.proofC,\n withdrawnValue: args.proof.withdrawnValue,\n stateRoot: args.proof.stateRoot,\n aspRoot: args.proof.aspRoot,\n nullifierHash: args.proof.nullifierHash,\n newCommitment: args.proof.newCommitment,\n recipient: args.recipient,\n poolFee: 0n,\n poolRelayer: args.registryId,\n };\n}\n\nexport function buildRelayerJobDraft(args: {\n payload: PoolWithdrawPayload;\n fee: bigint;\n deadlineLedger: number;\n jobId?: Uint8Array;\n}): RelayerJobDraft {\n const jobId = assertLength(args.jobId ?? randomJobId(), 32, \"jobId\");\n const payloadHash = hashPoolWithdrawPayload(args.payload);\n return {\n jobId,\n jobIdHex: bytesToHex(jobId),\n payload: args.payload,\n payloadHash,\n payloadHashHex: bytesToHex(payloadHash),\n advert: makeAdvert({ jobId, fee: args.fee, deadline: args.deadlineLedger, payloadHash }),\n deadlineLedger: args.deadlineLedger,\n fee: args.fee,\n };\n}\n\n/** Stake-weighted random choice among verified bids. */\nexport function pickStakeWeightedBid(bids: VerifiedBid[]): VerifiedBid | null {\n if (bids.length === 0) return null;\n const total = bids.reduce((sum, bid) => sum + bid.freeStakeValue, 0n);\n if (total <= 0n) return bids[0];\n const rand = new Uint32Array(2);\n globalThis.crypto.getRandomValues(rand);\n let target = ((BigInt(rand[0]) << 32n) + BigInt(rand[1])) % total;\n for (const bid of bids) {\n if (target < bid.freeStakeValue) return bid;\n target -= bid.freeStakeValue;\n }\n return bids[bids.length - 1];\n}\n\nexport class RelayerGateway {\n private readonly gatewayUrls: string[];\n private readonly registryId: string;\n private readonly invoker: ContractInvoker;\n\n constructor(opts: { gatewayUrls: string[]; registryId: string; invoker: ContractInvoker }) {\n if (opts.gatewayUrls.length === 0) {\n throw new Error(\"RelayerGateway requires at least one gateway URL.\");\n }\n this.gatewayUrls = opts.gatewayUrls;\n this.registryId = opts.registryId;\n this.invoker = opts.invoker;\n }\n\n private url(path: string, base = this.gatewayUrls[0]): string {\n return new URL(path, base.endsWith(\"/\") ? base : `${base}/`).toString();\n }\n\n /** A deadline `ledgers` ahead of the current ledger. */\n async deadlineLedger(ledgers = 720): Promise<number> {\n return (await this.invoker.getLatestLedger()) + ledgers;\n }\n\n async publishAdvert(advert: JobAdvert, gateway = this.gatewayUrls[0]): Promise<void> {\n const res = await fetch(this.url(\"v1/jobs\", gateway), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(advert),\n });\n if (!res.ok) throw new Error(`Relayer gateway rejected advert (${res.status}).`);\n }\n\n async fetchBids(jobIdHex: string, gateway = this.gatewayUrls[0]): Promise<VerifiedBid[]> {\n const res = await fetch(this.url(`v1/jobs/${encodeURIComponent(jobIdHex)}/bids`, gateway));\n if (!res.ok) throw new Error(`Could not fetch relayer bids (${res.status}).`);\n const body = (await res.json()) as { bids?: unknown[] };\n const signed = (body.bids ?? [])\n .map((raw) => validateBid(raw))\n .filter((bid) => verifyBid(bid))\n .filter((bid) => bid.jobId.toLowerCase() === jobIdHex.toLowerCase())\n .filter((bid) => bid.chain === RELAY_CHAIN_STELLAR);\n const checked = await Promise.all(signed.map((bid) => this.verifyBidRegistryState(jobIdHex, bid)));\n return checked.filter((bid): bid is VerifiedBid => bid !== null);\n }\n\n async deliverPayload(args: {\n draft: RelayerJobDraft;\n bid: RelayerBid;\n gateway?: string;\n }): Promise<{ acceptedTx?: string; submittedTx?: string } | null> {\n const box = await sealBox(\n encodePoolWithdrawPayload(args.draft.payload),\n hexToBytes(args.bid.x25519Pk),\n );\n const res = await fetch(\n this.url(`v1/jobs/${encodeURIComponent(args.draft.jobIdHex)}/payload`, args.gateway ?? this.gatewayUrls[0]),\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ t: \"payload\", v: 1, jobId: args.draft.jobIdHex, to: args.bid.x25519Pk, box }),\n },\n );\n if (!res.ok) throw new Error(`Relayer gateway rejected payload (${res.status}).`);\n const body = (await res.json()) as {\n result?: { acceptedTx?: string; submittedTx?: string } | null;\n };\n return body.result ?? null;\n }\n\n async jobStatus(jobIdHex: string, source: string): Promise<RelayerJobStatus> {\n const job = await this.registryView<NativeRegistryJob>(source, \"get_job\", [\n bytesToScVal(hexToBytes(jobIdHex)),\n ]);\n if (!job) return \"unknown\";\n return REGISTRY_JOB_STATUS[Number(job.status)] ?? \"unknown\";\n }\n\n private async verifyBidRegistryState(\n jobIdHex: string,\n bid: RelayerBid,\n ): Promise<VerifiedBid | null> {\n try {\n const [job, relayer] = await Promise.all([\n this.registryView<NativeRegistryJob>(bid.operator, \"get_job\", [\n bytesToScVal(hexToBytes(jobIdHex)),\n ]),\n this.registryView<NativeRegistryRelayer>(bid.operator, \"get_relayer\", [\n addressToScVal(bid.operator),\n ]),\n ]);\n if (!job || !relayer) return null;\n const fee = BigInt(job.fee);\n const freeStakeValue = BigInt(relayer.free_stake);\n if (Number(job.status) !== 0 || freeStakeValue < fee) return null;\n const registeredPk = bytesToHex(Uint8Array.from(relayer.x25519_pubkey));\n if (registeredPk.toLowerCase() !== bid.x25519Pk.toLowerCase()) return null;\n return {\n ...bid,\n endpoint: relayer.endpoint?.trim() || bid.endpoint,\n freeStake: freeStakeValue.toString(),\n freeStakeValue,\n };\n } catch {\n return null;\n }\n }\n\n private async registryView<T>(\n source: string,\n method: string,\n args: Parameters<ContractInvoker[\"readNative\"]>[0][\"args\"],\n ): Promise<T | null> {\n try {\n return await this.invoker.readNative<T>({\n source,\n contractId: this.registryId,\n method,\n args,\n });\n } catch {\n return null;\n }\n }\n}\n","/**\n * Schema administration: register schemas, attest to stealth identities, revoke,\n * deprecate, and manage delegates. Schema ids and attestation payloads are\n * computed with the crypto codecs and submitted through the contract bindings.\n */\nimport {\n computeSchemaId,\n encodeAttestationData,\n parseFieldDefinitions,\n} from \"../crypto/index\";\nimport type { OpaqueClientContext } from \"./context\";\n\nexport class SchemasService {\n constructor(private readonly ctx: OpaqueClientContext) {}\n\n /** Register a schema. The signer is the authority; returns the schema id. */\n async register(opts: {\n name: string;\n fieldDefinitions: string;\n revocable: boolean;\n version?: number;\n resolver?: string | null;\n schemaExpiryLedger: number;\n }): Promise<{ schemaId: Uint8Array; txHash: string }> {\n const signer = this.ctx.requireSigner();\n const authority = await signer.publicKey();\n const schemaId = await computeSchemaId(\n authority,\n opts.name,\n opts.fieldDefinitions,\n opts.version ?? 1,\n );\n const txHash = await this.ctx.contracts.schemaRegistry.registerSchema({\n schemaId,\n name: opts.name,\n fieldDefinitions: opts.fieldDefinitions,\n revocable: opts.revocable,\n version: opts.version,\n resolver: opts.resolver ?? null,\n schemaExpiryLedger: opts.schemaExpiryLedger,\n signer,\n });\n return { schemaId, txHash };\n }\n\n /** Attest to a stealth identity under a schema. The signer is the issuer. */\n async attest(opts: {\n schemaId: Uint8Array;\n stealthAddressHash: Uint8Array;\n fieldValues: Record<string, string>;\n fieldDefinitions: string;\n expirationLedger: number;\n refUid?: Uint8Array;\n }): Promise<string> {\n const signer = this.ctx.requireSigner();\n const fields = parseFieldDefinitions(opts.fieldDefinitions);\n const data = encodeAttestationData(opts.fieldValues, fields);\n return this.ctx.contracts.attestationEngine.attest({\n schemaId: opts.schemaId,\n stealthAddressHash: opts.stealthAddressHash,\n data,\n expirationLedger: opts.expirationLedger,\n refUid: opts.refUid ?? new Uint8Array(32),\n signer,\n });\n }\n\n async revoke(opts: { uid: Uint8Array }): Promise<string> {\n return this.ctx.contracts.attestationEngine.revokeAttestation({\n uid: opts.uid,\n signer: this.ctx.requireSigner(),\n });\n }\n\n async deprecate(opts: { schemaId: Uint8Array }): Promise<string> {\n return this.ctx.contracts.schemaRegistry.deprecateSchema({\n schemaId: opts.schemaId,\n signer: this.ctx.requireSigner(),\n });\n }\n\n async addDelegate(opts: { schemaId: Uint8Array; delegate: string }): Promise<string> {\n return this.ctx.contracts.schemaRegistry.addDelegate({\n ...opts,\n signer: this.ctx.requireSigner(),\n });\n }\n\n async removeDelegate(opts: { schemaId: Uint8Array; delegate: string }): Promise<string> {\n return this.ctx.contracts.schemaRegistry.removeDelegate({\n ...opts,\n signer: this.ctx.requireSigner(),\n });\n }\n}\n","/**\n * Stealth private payments. Derive an identity and meta-address, register it,\n * send a stealth XLM payment (one-time account + announcement), and sweep a\n * detected stealth account. Announcement scanning needs the WASM scanner and is\n * surfaced as a not-wired capability in this build (use the crypto primitives\n * `checkViewTagMatch` / `reconstructStealthPrivateKey` with your own event feed).\n */\nimport {\n computeStealthAddressAndViewTag,\n deriveKeysFromSignature,\n deriveStealthStellarKeypairFromStealthPrivKey,\n hexToBytes,\n keysToStealthMetaAddress,\n parseXlmToStroops,\n scanAnnouncements,\n stealthMetaAddressToHex,\n type Hex,\n type ScanMatch,\n type StealthAnnouncement,\n} from \"../crypto/index\";\nimport { keypairSigner } from \"../signer/index\";\nimport type { OpaqueClientContext } from \"./context\";\n\nexport interface StealthIdentity {\n viewingKey: Uint8Array;\n spendingKey: Uint8Array;\n metaAddress: Uint8Array;\n metaHex: Hex;\n}\n\nexport class PaymentsService {\n constructor(private readonly ctx: OpaqueClientContext) {}\n\n /** Derive viewing/spending keys + meta-address from a wallet signature. */\n deriveIdentity(signatureHex: string): StealthIdentity {\n const { viewingKey, spendingKey } = deriveKeysFromSignature(signatureHex);\n const { metaAddress } = keysToStealthMetaAddress(viewingKey, spendingKey);\n return {\n viewingKey,\n spendingKey,\n metaAddress,\n metaHex: stealthMetaAddressToHex(metaAddress),\n };\n }\n\n /** Register a stealth meta-address for the signer's account. */\n async register(opts: { metaAddress: Uint8Array }): Promise<string> {\n return this.ctx.contracts.stealthRegistry.registerKeys({\n stealthMetaAddress: opts.metaAddress,\n signer: this.ctx.requireSigner(),\n });\n }\n\n /** Pure: compute a one-time stealth address + announcement params for a recipient. */\n prepareTransfer(recipientMetaHex: string) {\n return computeStealthAddressAndViewTag(recipientMetaHex);\n }\n\n /**\n * Send a stealth XLM payment: pay the one-time stealth Stellar account, then\n * publish the announcement so the recipient can detect and sweep it.\n */\n async send(opts: {\n to: string;\n amountXlm: string;\n }): Promise<{\n stealthStellarAddress: string;\n ephemeralPubKey: Uint8Array;\n paymentTxHash: string;\n announceTxHash: string;\n }> {\n const signer = this.ctx.requireSigner();\n const stealth = computeStealthAddressAndViewTag(opts.to);\n const amountStroops = parseXlmToStroops(opts.amountXlm);\n\n const paymentTxHash = await this.ctx.sendNativeTransfer({\n destination: stealth.stealthStellarAddress,\n amountStroops,\n signer,\n });\n const announceTxHash = await this.ctx.contracts.stealthAnnouncer.announce({\n stealthAddress: hexToBytes(stealth.stealthAddress),\n ephemeralPubKey: stealth.ephemeralPubKey,\n metadata: stealth.metadata,\n signer,\n });\n return {\n stealthStellarAddress: stealth.stealthStellarAddress,\n ephemeralPubKey: stealth.ephemeralPubKey,\n paymentTxHash,\n announceTxHash,\n };\n }\n\n /**\n * Sweep a detected stealth account to a destination. The stealth account signs\n * itself (derived from the one-time key), so the connected wallet is never the\n * source. `amountStroops` is the exact amount to move (compute the spendable\n * balance from Horizon, reserving fee + minimum balance).\n */\n async sweep(opts: {\n stealthPrivKey: Uint8Array;\n destination: string;\n amountStroops: bigint;\n }): Promise<string> {\n const keypair = deriveStealthStellarKeypairFromStealthPrivKey(opts.stealthPrivKey);\n return this.ctx.sendNativeTransfer({\n destination: opts.destination,\n amountStroops: opts.amountStroops,\n signer: keypairSigner(keypair),\n });\n }\n\n /**\n * Scan announcements for transfers addressed to `identity`, returning each\n * match with its reconstructed one-time key and Stellar account. The caller\n * supplies the announcements (read from the stealth-announcer contract events).\n */\n scan(opts: {\n announcements: StealthAnnouncement[];\n identity: Pick<StealthIdentity, \"viewingKey\" | \"spendingKey\">;\n }): ScanMatch[] {\n return scanAnnouncements({\n announcements: opts.announcements,\n viewingKey: opts.identity.viewingKey,\n spendingKey: opts.identity.spendingKey,\n });\n }\n}\n","/**\n * On-chain ZK reputation. Submit a V2 Groth16 proof to the reputation-verifier\n * (root validity + nullifier-replay enforced on-chain), read the latest published\n * root, and attest (delegated to the schema service). Proof *generation* needs the\n * proving layer (snarkjs + circuit artifacts + scanner) and is surfaced as a\n * not-wired capability in this build: bring a precomputed proof to verifyOnChain.\n */\nimport { NotWiredError } from \"../errors/index\";\nimport type { VerifyReputationInputs } from \"../contracts/verifier\";\nimport {\n proveReputationV2,\n type ReputationProof,\n type ReputationProveInput,\n} from \"../prove/reputation\";\nimport type { OpaqueClientContext } from \"./context\";\nimport type { SchemasService } from \"./schemas\";\n\nexport class ReputationService {\n constructor(\n private readonly ctx: OpaqueClientContext,\n private readonly schemas: SchemasService,\n ) {}\n\n /** Attest a reputation trait to a stealth identity (delegates to schemas). */\n attest(opts: Parameters<SchemasService[\"attest\"]>[0]): Promise<string> {\n return this.schemas.attest(opts);\n }\n\n /** Submit a precomputed V2 reputation proof for on-chain verification. */\n async verifyOnChain(opts: VerifyReputationInputs): Promise<string> {\n const signer = this.ctx.requireSigner();\n return this.ctx.contracts.reputationVerifier.verifyReputation({\n ...opts,\n groth16VerifierId: this.ctx.config.contracts.groth16Verifier,\n signer,\n });\n }\n\n /** Read the latest published reputation Merkle root, or null if none. */\n async getLatestRoot(opts?: { source?: string }): Promise<Uint8Array | null> {\n const source = opts?.source ?? (await this.ctx.requireSigner().publicKey());\n return this.ctx.contracts.reputationVerifier.getLatestRoot(source);\n }\n\n /**\n * Generate a V2 reputation proof. Requires an artifact resolver\n * (`new OpaqueClient({ artifacts })`); otherwise throws {@link NotWiredError}.\n */\n async prove(input: ReputationProveInput): Promise<ReputationProof> {\n if (!this.ctx.artifacts) {\n throw new NotWiredError(\n \"Reputation proof generation\",\n \"Construct OpaqueClient with { artifacts } (a circuit ArtifactResolver) to enable proving.\",\n );\n }\n return proveReputationV2({ input, artifacts: this.ctx.artifacts });\n }\n\n /** Generate a proof and submit it on-chain in one call. Returns the tx hash. */\n async proveAndVerify(input: ReputationProveInput): Promise<string> {\n return this.verifyOnChain(await this.prove(input));\n }\n}\n","/**\n * Privacy pool. Deposit (derive a note's commitment and persist the note),\n * withdraw with a precomputed proof, and read pool state (deposit count, roots).\n * Withdrawal proof *generation* needs the proving layer (snarkjs + circuit\n * artifacts) and is surfaced as a not-wired capability in this build: bring a\n * precomputed proof bundle to withdraw().\n */\nimport {\n bigIntToBytes32,\n deriveDeposit,\n newNoteSecrets,\n parseXlmToStroops,\n toHex32,\n type PoolNote,\n} from \"../crypto/index\";\nimport { NotWiredError } from \"../errors/index\";\nimport { provePoolWithdraw, type PoolWithdrawProof } from \"../prove/pool\";\nimport type { OpaqueClientContext } from \"./context\";\n\n/** A withdrawal proof bundle (everything except the public recipient/fee/relayer). */\nexport type WithdrawProofBundle = PoolWithdrawProof;\n\nexport class PoolService {\n constructor(private readonly ctx: OpaqueClientContext) {}\n\n private async source(explicit?: string): Promise<string> {\n return explicit ?? (await this.ctx.requireSigner().publicKey());\n }\n\n /**\n * Deposit `amountXlm` into the pool. Reads the next leaf index, derives the\n * commitment from fresh (or provided) secrets, submits, and persists the note.\n */\n async deposit(opts: {\n amountXlm: string;\n secrets?: { nullifier: string; secret: string };\n createdAt?: number;\n }): Promise<{ note: PoolNote; txHash: string }> {\n const signer = this.ctx.requireSigner();\n const source = await signer.publicKey();\n const scope = this.ctx.config.pool.scope;\n const value = parseXlmToStroops(opts.amountXlm);\n\n const expectedIndex = await this.ctx.contracts.privacyPool.getDepositCount(source);\n const secrets = opts.secrets ?? newNoteSecrets();\n const { commitment } = await deriveDeposit({\n value,\n scope,\n leafIndex: expectedIndex,\n nullifier: BigInt(secrets.nullifier),\n secret: BigInt(secrets.secret),\n });\n\n const txHash = await this.ctx.contracts.privacyPool.deposit({\n value,\n commitment: bigIntToBytes32(commitment),\n expectedIndex,\n signer,\n });\n\n const note: PoolNote = {\n cluster: this.ctx.config.network,\n poolId: this.ctx.config.contracts.privacyPool,\n value: value.toString(),\n scope,\n leafIndex: expectedIndex,\n nullifier: secrets.nullifier,\n secret: secrets.secret,\n commitment: toHex32(commitment),\n spent: false,\n createdAt: opts.createdAt ?? 0,\n };\n await this.ctx.notes.add(note);\n return { note, txHash };\n }\n\n /** Withdraw using a precomputed proof bundle. Marks the note spent on success. */\n async withdraw(opts: {\n proof: WithdrawProofBundle;\n recipient: string;\n fee?: bigint;\n relayer?: string;\n /** Note commitment to mark spent once the withdrawal lands. */\n noteCommitment?: string;\n }): Promise<string> {\n const signer = this.ctx.requireSigner();\n const txHash = await this.ctx.contracts.privacyPool.withdraw({\n ...opts.proof,\n recipient: opts.recipient,\n fee: opts.fee ?? 0n,\n relayer: opts.relayer ?? opts.recipient,\n signer,\n });\n if (opts.noteCommitment) await this.ctx.notes.markSpent(opts.noteCommitment);\n return txHash;\n }\n\n /** Read the next deposit leaf index. */\n async getDepositCount(opts?: { source?: string }): Promise<number> {\n return this.ctx.contracts.privacyPool.getDepositCount(await this.source(opts?.source));\n }\n\n /** Read the latest published state and ASP roots (or null when unpublished). */\n async getRoots(opts?: {\n source?: string;\n }): Promise<{ state: Uint8Array | null; asp: Uint8Array | null }> {\n const source = await this.source(opts?.source);\n const [state, asp] = await Promise.all([\n this.ctx.contracts.privacyPool.getLatestRoot({ source, kind: \"state\" }),\n this.ctx.contracts.privacyPool.getLatestRoot({ source, kind: \"asp\" }),\n ]);\n return { state, asp };\n }\n\n /**\n * Generate a full-withdrawal proof for a note. Requires an artifact resolver\n * (`new OpaqueClient({ artifacts })`). The pool leaves are reconstructed from\n * on-chain Deposit/Withdraw events automatically; pass `stateLeaves` +\n * `depositIndices` to skip the on-chain read (e.g. in tests).\n */\n async proveWithdraw(opts: {\n note: PoolNote;\n recipient: string;\n relayer?: string;\n fee?: bigint;\n scope?: number;\n stateLeaves?: bigint[];\n depositIndices?: number[];\n }): Promise<PoolWithdrawProof> {\n if (!this.ctx.artifacts) {\n throw new NotWiredError(\n \"Pool withdrawal proof generation\",\n \"Construct OpaqueClient with { artifacts } to enable proving, or pass a precomputed bundle to withdraw().\",\n );\n }\n let { stateLeaves, depositIndices } = opts;\n if (!stateLeaves || !depositIndices) {\n const state = await this.ctx.contracts.privacyPool.reconstructState({\n startLedger: this.ctx.config.startLedger,\n });\n stateLeaves = state.stateLeaves;\n depositIndices = state.depositIndices;\n }\n return provePoolWithdraw({\n note: opts.note,\n recipient: opts.recipient,\n relayer: opts.relayer ?? opts.recipient,\n fee: opts.fee ?? 0n,\n scope: opts.scope ?? this.ctx.config.pool.scope,\n stateLeaves,\n depositIndices,\n artifacts: this.ctx.artifacts,\n });\n }\n}\n","/**\n * Relayer market: the wallet-side withdrawal flow. Build a blind withdrawal\n * payload from a pool proof, create the on-chain escrow job, advertise it,\n * collect and verify bids, pick a relayer, and deliver the encrypted payload.\n */\nimport {\n RelayerGateway,\n buildRelayedWithdrawPayload,\n buildRelayerJobDraft,\n pickStakeWeightedBid,\n type PoolWithdrawPayload,\n type RelayerBid,\n type RelayerJobDraft,\n type RelayerJobStatus,\n type VerifiedBid,\n} from \"../relayer-protocol/index\";\nimport type { PoolWithdrawProof } from \"../prove/pool\";\nimport type { OpaqueClientContext } from \"./context\";\n\nexport class RelayerService {\n constructor(private readonly ctx: OpaqueClientContext) {}\n\n private gateway(): RelayerGateway {\n return new RelayerGateway({\n gatewayUrls: this.ctx.config.relayerGatewayUrls,\n registryId: this.ctx.config.contracts.relayerRegistry,\n invoker: this.ctx.rpc,\n });\n }\n\n // --- on-chain job lifecycle -------------------------------------------------\n\n /** Create a blind withdrawal job (escrows the fee on-chain). */\n async createJob(opts: {\n jobId: Uint8Array;\n payloadHash: Uint8Array;\n deadlineLedger: number;\n fee: bigint;\n }): Promise<string> {\n return this.ctx.contracts.relayerRegistry.createJob({\n ...opts,\n signer: this.ctx.requireSigner(),\n });\n }\n\n /** Create the on-chain job for a built draft. */\n async createJobForDraft(draft: RelayerJobDraft): Promise<string> {\n return this.createJob({\n jobId: draft.jobId,\n payloadHash: draft.payloadHash,\n deadlineLedger: draft.deadlineLedger,\n fee: draft.fee,\n });\n }\n\n /** Cancel a never-accepted job after its deadline (refunds the escrow fee). */\n async cancelJob(opts: { jobId: Uint8Array }): Promise<string> {\n return this.ctx.contracts.relayerRegistry.cancelJob({\n ...opts,\n signer: this.ctx.requireSigner(),\n });\n }\n\n /** Slash an accepted-but-unsubmitted job after its deadline. */\n async slashJob(opts: { jobId: Uint8Array }): Promise<string> {\n return this.ctx.contracts.relayerRegistry.slashJob({\n ...opts,\n signer: this.ctx.requireSigner(),\n });\n }\n\n // --- payload + gateway ------------------------------------------------------\n\n /** Build the blind withdrawal payload from a pool proof. */\n buildWithdrawPayload(opts: {\n proof: PoolWithdrawProof;\n recipient: string;\n }): PoolWithdrawPayload {\n return buildRelayedWithdrawPayload({\n poolId: this.ctx.config.contracts.privacyPool,\n registryId: this.ctx.config.contracts.relayerRegistry,\n proof: opts.proof,\n recipient: opts.recipient,\n });\n }\n\n /** Build a job draft (job id, payload hash, advert) from a payload. */\n buildJobDraft(opts: {\n payload: PoolWithdrawPayload;\n fee: bigint;\n deadlineLedger: number;\n jobId?: Uint8Array;\n }): RelayerJobDraft {\n return buildRelayerJobDraft(opts);\n }\n\n /** A deadline `ledgers` ahead of the current ledger. */\n async deadlineLedger(ledgers?: number): Promise<number> {\n return this.gateway().deadlineLedger(ledgers);\n }\n\n /** Advertise a job to the gateway. */\n async advertise(draft: RelayerJobDraft): Promise<void> {\n return this.gateway().publishAdvert(draft.advert);\n }\n\n /** Fetch and verify bids for a job (signature + on-chain registry state). */\n async fetchBids(jobIdHex: string): Promise<VerifiedBid[]> {\n return this.gateway().fetchBids(jobIdHex);\n }\n\n /** Stake-weighted random choice among verified bids. */\n pickBid(bids: VerifiedBid[]): VerifiedBid | null {\n return pickStakeWeightedBid(bids);\n }\n\n /** Encrypt the payload to the chosen relayer and deliver it to the gateway. */\n async deliverPayload(args: {\n draft: RelayerJobDraft;\n bid: RelayerBid;\n }): Promise<{ acceptedTx?: string; submittedTx?: string } | null> {\n return this.gateway().deliverPayload(args);\n }\n\n /** Read a job's on-chain status. */\n async jobStatus(jobIdHex: string, source?: string): Promise<RelayerJobStatus> {\n const src = source ?? (await this.ctx.requireSigner().publicKey());\n return this.gateway().jobStatus(jobIdHex, src);\n }\n}\n","/**\n * The high-level entry point. One config + one signer wires the resolved network,\n * RPC client, contract bindings, storage, and the domain services\n * (`payments`, `pool`, `reputation`, `schemas`, `relayer`). Low-level escape\n * hatches (`rpc`, `contracts`, `soroban`) are exposed for advanced use.\n */\nimport { resolveConfig, type OpaqueConfig, type ResolvedConfig } from \"../config/index\";\nimport { RpcClient, type ContractInvoker } from \"../rpc/client\";\nimport type { OpaqueSigner } from \"../signer/index\";\nimport type { Logger } from \"../logger/index\";\nimport type { Telemetry } from \"../telemetry/index\";\nimport type { ArtifactResolver } from \"../artifacts/index\";\nimport {\n MemoryNoteStore,\n MemoryScanStore,\n MemoryVaultStore,\n type NoteStore,\n type ScanStore,\n type VaultStore,\n} from \"../storage/index\";\nimport {\n AttestationEngine,\n Groth16Verifier,\n PrivacyPool,\n RelayerRegistry,\n ReputationVerifier,\n SchemaRegistry,\n StealthAnnouncer,\n StealthRegistry,\n} from \"../contracts/index\";\nimport { RpcError, SignerError } from \"../errors/index\";\nimport {\n PaymentsService,\n PoolService,\n RelayerService,\n ReputationService,\n SchemasService,\n type ContractBindings,\n type OpaqueClientContext,\n} from \"../services/index\";\n\nexport interface OpaqueClientOptions extends OpaqueConfig {\n signer?: OpaqueSigner;\n storage?: { notes?: NoteStore; vault?: VaultStore; scan?: ScanStore };\n logger?: Logger;\n telemetry?: Telemetry;\n /** Circuit artifact resolver; enables proof generation when provided. */\n artifacts?: ArtifactResolver;\n /** Advanced / testing: inject a custom invoker instead of the built-in RpcClient. */\n invoker?: ContractInvoker;\n}\n\nexport class OpaqueClient implements OpaqueClientContext {\n readonly config: ResolvedConfig;\n readonly rpc: ContractInvoker;\n readonly contracts: ContractBindings;\n readonly notes: NoteStore;\n readonly vault: VaultStore;\n readonly scanStore: ScanStore;\n readonly signer?: OpaqueSigner;\n readonly artifacts?: ArtifactResolver;\n\n readonly payments: PaymentsService;\n readonly pool: PoolService;\n readonly reputation: ReputationService;\n readonly schemas: SchemasService;\n readonly relayer: RelayerService;\n\n private readonly rpcClient?: RpcClient;\n\n constructor(opts: OpaqueClientOptions) {\n this.config = resolveConfig(opts);\n this.rpcClient = opts.invoker\n ? undefined\n : new RpcClient({\n config: this.config,\n logger: opts.logger,\n telemetry: opts.telemetry,\n });\n this.rpc = opts.invoker ?? (this.rpcClient as RpcClient);\n this.signer = opts.signer;\n this.artifacts = opts.artifacts;\n this.notes = opts.storage?.notes ?? new MemoryNoteStore();\n this.vault = opts.storage?.vault ?? new MemoryVaultStore();\n this.scanStore = opts.storage?.scan ?? new MemoryScanStore();\n\n const c = this.config.contracts;\n this.contracts = {\n stealthRegistry: new StealthRegistry(this.rpc, c.stealthRegistry),\n stealthAnnouncer: new StealthAnnouncer(this.rpc, c.stealthAnnouncer),\n schemaRegistry: new SchemaRegistry(this.rpc, c.schemaRegistry),\n attestationEngine: new AttestationEngine(this.rpc, c.attestationEngineV2),\n groth16Verifier: new Groth16Verifier(this.rpc, c.groth16Verifier),\n reputationVerifier: new ReputationVerifier(this.rpc, c.reputationVerifier),\n privacyPool: new PrivacyPool(this.rpc, c.privacyPool),\n relayerRegistry: new RelayerRegistry(this.rpc, c.relayerRegistry),\n };\n\n this.schemas = new SchemasService(this);\n this.payments = new PaymentsService(this);\n this.pool = new PoolService(this);\n this.relayer = new RelayerService(this);\n this.reputation = new ReputationService(this, this.schemas);\n }\n\n /** The built-in Soroban/Horizon client, or undefined when a custom invoker was injected. */\n get soroban(): RpcClient | undefined {\n return this.rpcClient;\n }\n\n /** Returns the configured signer or throws if none was set. */\n requireSigner(): OpaqueSigner {\n if (!this.signer) {\n throw new SignerError(\n \"This operation requires a signer. Construct OpaqueClient with { signer }.\",\n );\n }\n return this.signer;\n }\n\n /** Send a native XLM transfer through the built-in RpcClient. */\n sendNativeTransfer(opts: {\n destination: string;\n amountStroops: bigint;\n signer: OpaqueSigner;\n }): Promise<string> {\n if (!this.rpcClient) {\n throw new RpcError(\n \"Native transfers require the built-in RpcClient (unavailable with a custom invoker).\",\n );\n }\n return this.rpcClient.sendNativeTransfer(opts);\n }\n}\n","/**\n * `@opaquecash/stellar` — stealth private payments, privacy pools, relayer-market\n * submission, and on-chain ZK reputation for Stellar / Soroban.\n *\n * The high-level `OpaqueClient` and chain services are layered on top of the\n * isomorphic crypto primitives re-exported here. Until the chain layer lands,\n * the crypto surface is the stable, published entry point. Import a narrower\n * surface via subpaths (e.g. `@opaquecash/stellar/crypto`) for the smallest\n * bundle.\n */\n\nexport const VERSION = \"0.1.0\";\n\nexport * from \"./crypto/index\";\nexport * from \"./errors/index\";\nexport * from \"./config/index\";\nexport * from \"./signer/index\";\nexport * from \"./logger/index\";\nexport * from \"./telemetry/index\";\nexport * from \"./rpc/index\";\nexport * from \"./contracts/index\";\nexport * from \"./storage/index\";\nexport * from \"./artifacts/index\";\nexport * from \"./scanner/index\";\nexport * from \"./prove/index\";\nexport * from \"./relayer-protocol/index\";\nexport * from \"./services/index\";\nexport * from \"./client/index\";\n"]}
|