@logixjs/sandbox 0.0.1 → 0.0.2
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/LICENSE +201 -0
- package/package.json +3 -1
- package/public/sandbox/chunks/chunk-2AUQRESB.js +1114 -0
- package/public/sandbox/chunks/chunk-2F72LQKW.js +194 -0
- package/public/sandbox/chunks/chunk-2PYDGDD3.js +4071 -0
- package/public/sandbox/chunks/chunk-2UGKSXDZ.js +16 -0
- package/public/sandbox/chunks/chunk-2XVE7F26.js +153 -0
- package/public/sandbox/chunks/chunk-3A7TFNZN.js +219 -0
- package/public/sandbox/chunks/chunk-3BHC6JAV.js +1070 -0
- package/public/sandbox/chunks/chunk-3U4CAKCX.js +61 -0
- package/public/sandbox/chunks/chunk-3VU3JLZO.js +272 -0
- package/public/sandbox/chunks/chunk-4CPONKWY.js +1170 -0
- package/public/sandbox/chunks/chunk-4GMUQTWH.js +850 -0
- package/public/sandbox/chunks/chunk-4KIYG5E4.js +749 -0
- package/public/sandbox/chunks/chunk-4MY35XR3.js +175 -0
- package/public/sandbox/chunks/chunk-5DNHJMHA.js +69 -0
- package/public/sandbox/chunks/chunk-5EC4S7X6.js +42 -0
- package/public/sandbox/chunks/chunk-5FB7QFSH.js +227 -0
- package/public/sandbox/chunks/chunk-5GEYCJW2.js +206 -0
- package/public/sandbox/chunks/chunk-5PT7Q5SS.js +373 -0
- package/public/sandbox/chunks/chunk-5WN5IGKA.js +166 -0
- package/public/sandbox/chunks/chunk-5XOBKSOT.js +213 -0
- package/public/sandbox/chunks/chunk-67RVISUC.js +313 -0
- package/public/sandbox/chunks/chunk-6ELJEKZS.js +12 -0
- package/public/sandbox/chunks/chunk-6FKWRVP4.js +85 -0
- package/public/sandbox/chunks/chunk-6JRP52YT.js +34 -0
- package/public/sandbox/chunks/chunk-6JYAC3G6.js +42 -0
- package/public/sandbox/chunks/chunk-6TUOP63Q.js +86 -0
- package/public/sandbox/chunks/{chunk-A6JFUNQQ.js → chunk-74C5VW7Z.js} +2 -2
- package/public/sandbox/chunks/chunk-75DQFC5M.js +16 -0
- package/public/sandbox/chunks/{chunk-UCFEP3BH.js → chunk-7GPAF2UK.js} +1 -1
- package/public/sandbox/chunks/chunk-7KQFTS2Y.js +135 -0
- package/public/sandbox/chunks/chunk-7POKWYE3.js +112 -0
- package/public/sandbox/chunks/chunk-7VUEF5F3.js +395 -0
- package/public/sandbox/chunks/chunk-7W5APZS2.js +77 -0
- package/public/sandbox/chunks/chunk-A6OFCXDQ.js +397 -0
- package/public/sandbox/chunks/chunk-A7HLOSO6.js +216 -0
- package/public/sandbox/chunks/chunk-AGF4RRCB.js +408 -0
- package/public/sandbox/chunks/chunk-ASJSJAAL.js +122 -0
- package/public/sandbox/chunks/chunk-ASVMK364.js +283 -0
- package/public/sandbox/chunks/chunk-AUDTI2BQ.js +895 -0
- package/public/sandbox/chunks/chunk-B2SZTA3M.js +16 -0
- package/public/sandbox/chunks/chunk-B6YS2UMV.js +372 -0
- package/public/sandbox/chunks/chunk-BCEO3MGD.js +244 -0
- package/public/sandbox/chunks/chunk-BCOO65D4.js +373 -0
- package/public/sandbox/chunks/chunk-BJOWSSEL.js +38 -0
- package/public/sandbox/chunks/chunk-BS2WBFW4.js +373 -0
- package/public/sandbox/chunks/chunk-BUVHG3NJ.js +439 -0
- package/public/sandbox/chunks/chunk-BVE33AN6.js +42 -0
- package/public/sandbox/chunks/chunk-BWTGJZVP.js +19 -0
- package/public/sandbox/chunks/chunk-BXD7GZC3.js +1025 -0
- package/public/sandbox/chunks/chunk-BZH4EUUD.js +164 -0
- package/public/sandbox/chunks/{chunk-HFV5GJPK.js → chunk-C2MYMMO4.js} +3 -3
- package/public/sandbox/chunks/chunk-CRE4NJJ6.js +271 -0
- package/public/sandbox/chunks/chunk-CVZPRIDB.js +706 -0
- package/public/sandbox/chunks/chunk-CWOXD5NG.js +991 -0
- package/public/sandbox/chunks/chunk-D6DOC3BJ.js +373 -0
- package/public/sandbox/chunks/chunk-DEPSGFSY.js +1698 -0
- package/public/sandbox/chunks/chunk-DM7C5NP5.js +819 -0
- package/public/sandbox/chunks/chunk-DN33LMOF.js +1112 -0
- package/public/sandbox/chunks/{chunk-S46P7MC6.js → chunk-DT7YIIWE.js} +2 -2
- package/public/sandbox/chunks/chunk-DVB5WRCI.js +260 -0
- package/public/sandbox/chunks/{chunk-TOHCFMQS.js → chunk-E3EVW7NR.js} +11 -18
- package/public/sandbox/chunks/chunk-E5BV567Q.js +417 -0
- package/public/sandbox/chunks/chunk-E7BIWMQQ.js +203 -0
- package/public/sandbox/chunks/chunk-EAKGPSOQ.js +83 -0
- package/public/sandbox/chunks/chunk-EGUYL2ER.js +75 -0
- package/public/sandbox/chunks/chunk-EP5GQYZ5.js +85 -0
- package/public/sandbox/chunks/chunk-ET6CJEHC.js +221 -0
- package/public/sandbox/chunks/chunk-EU67YZHZ.js +1070 -0
- package/public/sandbox/chunks/{chunk-PTSJJANP.js → chunk-EYNDQLSB.js} +1 -1
- package/public/sandbox/chunks/{chunk-CEGSWZ5S.js → chunk-EZTMVCJF.js} +1 -1
- package/public/sandbox/chunks/chunk-F5CLVIS6.js +907 -0
- package/public/sandbox/chunks/chunk-F743SKYD.js +85 -0
- package/public/sandbox/chunks/chunk-FEGFZ5OX.js +86 -0
- package/public/sandbox/chunks/chunk-FG5B7ZX3.js +373 -0
- package/public/sandbox/chunks/chunk-FKZPYMDG.js +373 -0
- package/public/sandbox/chunks/chunk-FNLXHWIU.js +220 -0
- package/public/sandbox/chunks/chunk-FQRUTYAD.js +1991 -0
- package/public/sandbox/chunks/{chunk-VLYP4WUS.js → chunk-FY5A73NK.js} +5 -5
- package/public/sandbox/chunks/chunk-G7FAOG3O.js +221 -0
- package/public/sandbox/chunks/chunk-GFXHUC7Y.js +73 -0
- package/public/sandbox/chunks/chunk-GIPXUIZQ.js +534 -0
- package/public/sandbox/chunks/chunk-GP37MEGJ.js +52 -0
- package/public/sandbox/chunks/chunk-GXL5QCMF.js +4511 -0
- package/public/sandbox/chunks/chunk-GZ2NSE6A.js +177 -0
- package/public/sandbox/chunks/chunk-GZATW4YD.js +69 -0
- package/public/sandbox/chunks/chunk-H4EBXROQ.js +166 -0
- package/public/sandbox/chunks/chunk-HETCPK6Z.js +153 -0
- package/public/sandbox/chunks/chunk-HGUFQ2QC.js +4431 -0
- package/public/sandbox/chunks/chunk-HGV3VNH3.js +255 -0
- package/public/sandbox/chunks/chunk-HIJ67QWR.js +5397 -0
- package/public/sandbox/chunks/chunk-IDHERBKW.js +1114 -0
- package/public/sandbox/chunks/chunk-IDTK4FIY.js +102 -0
- package/public/sandbox/chunks/chunk-ILFVY7H5.js +164 -0
- package/public/sandbox/chunks/chunk-ISGSRYGO.js +57 -0
- package/public/sandbox/chunks/chunk-J45VPU24.js +408 -0
- package/public/sandbox/chunks/chunk-JAUIM3O5.js +42 -0
- package/public/sandbox/chunks/chunk-JB7OQEM6.js +373 -0
- package/public/sandbox/chunks/chunk-JCKW6NHD.js +15 -0
- package/public/sandbox/chunks/chunk-JMA7GY7Z.js +221 -0
- package/public/sandbox/chunks/chunk-JY46J6IL.js +836 -0
- package/public/sandbox/chunks/{chunk-X72PZOFA.js → chunk-K2MQ66O7.js} +1 -1
- package/public/sandbox/chunks/chunk-KA7PZA6F.js +464 -0
- package/public/sandbox/chunks/chunk-KDEQTUID.js +102 -0
- package/public/sandbox/chunks/chunk-KDJR27JV.js +1696 -0
- package/public/sandbox/chunks/chunk-KFE3JO6N.js +77 -0
- package/public/sandbox/chunks/chunk-KLDSYWT5.js +536 -0
- package/public/sandbox/chunks/chunk-KQWWFYBF.js +203 -0
- package/public/sandbox/chunks/chunk-KTFZSXOW.js +6473 -0
- package/public/sandbox/chunks/chunk-KXVIC55U.js +108 -0
- package/public/sandbox/chunks/{chunk-HNEDTEGQ.js → chunk-L4PNO2H6.js} +1 -1
- package/public/sandbox/chunks/{chunk-WE4STGO2.js → chunk-L4ZNW5DI.js} +2 -2
- package/public/sandbox/chunks/chunk-LBUINGZ4.js +836 -0
- package/public/sandbox/chunks/chunk-LIYPPU6I.js +112 -0
- package/public/sandbox/chunks/chunk-LJHTOJXW.js +221 -0
- package/public/sandbox/chunks/{chunk-BWSNPKO5.js → chunk-LQL23SWJ.js} +2 -2
- package/public/sandbox/chunks/chunk-LTFCYZQ6.js +46 -0
- package/public/sandbox/chunks/chunk-LTWLVCKQ.js +166 -0
- package/public/sandbox/chunks/chunk-LWI7BXFN.js +395 -0
- package/public/sandbox/chunks/chunk-LYBBX6WM.js +225 -0
- package/public/sandbox/chunks/chunk-MXE7HIBM.js +474 -0
- package/public/sandbox/chunks/chunk-MYBDYNK4.js +6004 -0
- package/public/sandbox/chunks/chunk-NC2MIWZX.js +732 -0
- package/public/sandbox/chunks/chunk-NE447XAF.js +597 -0
- package/public/sandbox/chunks/chunk-NEAYV5C2.js +255 -0
- package/public/sandbox/chunks/chunk-NMGFJZ4I.js +26 -0
- package/public/sandbox/chunks/chunk-NWCJJZNQ.js +71 -0
- package/public/sandbox/chunks/chunk-O57OZBDR.js +214 -0
- package/public/sandbox/chunks/chunk-OJJT664Q.js +731 -0
- package/public/sandbox/chunks/chunk-OKTBUTCH.js +1175 -0
- package/public/sandbox/chunks/chunk-OQ4SYV5D.js +534 -0
- package/public/sandbox/chunks/chunk-OTVVIHJD.js +219 -0
- package/public/sandbox/chunks/chunk-OWTMSCF7.js +1052 -0
- package/public/sandbox/chunks/chunk-P5ZQNFC3.js +122 -0
- package/public/sandbox/chunks/chunk-PBPT2U2N.js +1698 -0
- package/public/sandbox/chunks/chunk-PHBJLCP3.js +836 -0
- package/public/sandbox/chunks/chunk-PHV4HYHB.js +397 -0
- package/public/sandbox/chunks/chunk-PIXQ6SOX.js +4071 -0
- package/public/sandbox/chunks/chunk-PKJL6YLK.js +73 -0
- package/public/sandbox/chunks/chunk-PKPOITIU.js +221 -0
- package/public/sandbox/chunks/{chunk-NQW73ACJ.js → chunk-PMXBOYQI.js} +1 -1
- package/public/sandbox/chunks/chunk-PQLZD7NR.js +836 -0
- package/public/sandbox/chunks/chunk-QEESVOZU.js +16 -0
- package/public/sandbox/chunks/chunk-QGIM3FQK.js +159 -0
- package/public/sandbox/chunks/chunk-QL5JNEDO.js +69 -0
- package/public/sandbox/chunks/chunk-QQOZ3RMH.js +867 -0
- package/public/sandbox/chunks/chunk-QUMEVT2F.js +194 -0
- package/public/sandbox/chunks/chunk-QVZBXYVY.js +102 -0
- package/public/sandbox/chunks/chunk-R5HQS6RB.js +135 -0
- package/public/sandbox/chunks/chunk-R75Q2CTT.js +900 -0
- package/public/sandbox/chunks/chunk-RBB6SHW2.js +253 -0
- package/public/sandbox/chunks/chunk-RDHNRWQP.js +383 -0
- package/public/sandbox/chunks/chunk-RIWOEI3T.js +1101 -0
- package/public/sandbox/chunks/chunk-RS5FFPUV.js +103 -0
- package/public/sandbox/chunks/chunk-RYSSJBGX.js +203 -0
- package/public/sandbox/chunks/chunk-S3KBAE5Z.js +1114 -0
- package/public/sandbox/chunks/chunk-S6ZZHV6G.js +244 -0
- package/public/sandbox/chunks/chunk-SFXJ24HY.js +499 -0
- package/public/sandbox/chunks/chunk-SH7TP5CJ.js +1109 -0
- package/public/sandbox/chunks/chunk-SI5OKFFY.js +317 -0
- package/public/sandbox/chunks/chunk-SIXNQNIR.js +86 -0
- package/public/sandbox/chunks/chunk-ST353BOX.js +42 -0
- package/public/sandbox/chunks/chunk-SYEHKMLP.js +1140 -0
- package/public/sandbox/chunks/chunk-SZ4KQUJU.js +69 -0
- package/public/sandbox/chunks/{chunk-5SOP6EKV.js → chunk-SZI65PSP.js} +5 -10
- package/public/sandbox/chunks/chunk-T7RLTSMX.js +78 -0
- package/public/sandbox/chunks/chunk-TJ2RLUTW.js +57 -0
- package/public/sandbox/chunks/chunk-TJB73XPN.js +4071 -0
- package/public/sandbox/chunks/chunk-TXJCYO56.js +4046 -0
- package/public/sandbox/chunks/chunk-U5J3LCYI.js +731 -0
- package/public/sandbox/chunks/chunk-UABFN3NH.js +208 -0
- package/public/sandbox/chunks/chunk-UBMUY7WO.js +13 -0
- package/public/sandbox/chunks/chunk-UC27CE32.js +69 -0
- package/public/sandbox/chunks/chunk-UJGVDFZN.js +147 -0
- package/public/sandbox/chunks/chunk-UNVLTK4N.js +122 -0
- package/public/sandbox/chunks/chunk-UQKQ6V3V.js +208 -0
- package/public/sandbox/chunks/chunk-UZZBHWIO.js +703 -0
- package/public/sandbox/chunks/chunk-VKZIJERL.js +1114 -0
- package/public/sandbox/chunks/chunk-VQQEAGID.js +372 -0
- package/public/sandbox/chunks/{chunk-3LX3KIQQ.js → chunk-W365QUZ5.js} +3 -5
- package/public/sandbox/chunks/chunk-WJY2LSWG.js +1052 -0
- package/public/sandbox/chunks/chunk-WNOBN3DX.js +391 -0
- package/public/sandbox/chunks/chunk-X2Z5VYG3.js +245 -0
- package/public/sandbox/chunks/chunk-X74KU74D.js +959 -0
- package/public/sandbox/chunks/chunk-XE7ULSGQ.js +46 -0
- package/public/sandbox/chunks/chunk-XRXUJZ3X.js +431 -0
- package/public/sandbox/chunks/chunk-XWHIN7CC.js +85 -0
- package/public/sandbox/chunks/chunk-Y2TVGGVL.js +527 -0
- package/public/sandbox/chunks/chunk-YMVMZA3U.js +1395 -0
- package/public/sandbox/chunks/chunk-YOBLFWDV.js +431 -0
- package/public/sandbox/chunks/chunk-YR2RFEZA.js +11 -0
- package/public/sandbox/chunks/chunk-YTD6A35P.js +836 -0
- package/public/sandbox/chunks/chunk-Z5L7EZXS.js +81 -0
- package/public/sandbox/chunks/chunk-Z65I5ET2.js +108 -0
- package/public/sandbox/chunks/chunk-Z6LV34RO.js +390 -0
- package/public/sandbox/chunks/chunk-ZAKUP6QG.js +1634 -0
- package/public/sandbox/chunks/chunk-ZHNYE2YH.js +731 -0
- package/public/sandbox/chunks/chunk-ZHQX3B3Y.js +867 -0
- package/public/sandbox/chunks/chunk-ZIXDFRHJ.js +731 -0
- package/public/sandbox/chunks/chunk-ZPZ2MZ4D.js +528 -0
- package/public/sandbox/chunks/chunk-ZQD6NZXB.js +373 -0
- package/public/sandbox/chunks/chunk-ZVVBP7ON.js +16 -0
- package/public/sandbox/chunks/chunk-ZWE3P6X2.js +11 -0
- package/public/sandbox/logix-core/Bound.js +14 -14
- package/public/sandbox/logix-core/Debug.js +12 -10
- package/public/sandbox/logix-core/EffectOp.js +3 -4
- package/public/sandbox/logix-core/Env.js +5 -2
- package/public/sandbox/logix-core/ExternalStore.js +239 -0
- package/public/sandbox/logix-core/Flow.js +7 -8
- package/public/sandbox/logix-core/Kernel.js +7 -4
- package/public/sandbox/logix-core/Link.js +33 -25
- package/public/sandbox/logix-core/Middleware.js +13 -11
- package/public/sandbox/logix-core/Module.js +93 -30
- package/public/sandbox/logix-core/ModuleTag.js +28 -25
- package/public/sandbox/logix-core/Observability.js +21 -19
- package/public/sandbox/logix-core/Process.js +27 -22
- package/public/sandbox/logix-core/ReadQuery.js +7 -11
- package/public/sandbox/logix-core/Reflection.js +173 -53
- package/public/sandbox/logix-core/Resource.js +6 -3
- package/public/sandbox/logix-core/Root.js +7 -3
- package/public/sandbox/logix-core/Runtime.js +54 -40
- package/public/sandbox/logix-core/ScopeRegistry.js +6 -3
- package/public/sandbox/logix-core/StateTrait.js +17 -14
- package/public/sandbox/logix-core/TraitLifecycle.js +8 -8
- package/public/sandbox/logix-core/Workflow.js +332 -0
- package/public/sandbox/logix-core.js +11133 -6622
- package/public/sandbox/logix-core.manifest.json +4 -2
- package/public/sandbox/worker.js +3 -3
- package/public/sandbox/chunks/chunk-4LRLOTMA.js +0 -1698
- package/public/sandbox/chunks/chunk-CDLXJHXY.js +0 -120
- package/public/sandbox/chunks/chunk-CZRI7MHA.js +0 -46
- package/public/sandbox/chunks/chunk-EJDFUZ4B.js +0 -408
- package/public/sandbox/chunks/chunk-IP63FME6.js +0 -282
- package/public/sandbox/chunks/chunk-JIXTOQXJ.js +0 -1103
- package/public/sandbox/chunks/chunk-MPUSOFJ3.js +0 -1928
- package/public/sandbox/chunks/chunk-ON2LY6HJ.js +0 -135
- package/public/sandbox/chunks/chunk-POIBXAH5.js +0 -995
- package/public/sandbox/chunks/chunk-PQ652ULI.js +0 -6359
- package/public/sandbox/chunks/chunk-RJQ4PG2F.js +0 -77
- package/public/sandbox/chunks/chunk-S4EXG3OS.js +0 -533
- package/public/sandbox/chunks/chunk-SUXDGXVE.js +0 -390
- package/public/sandbox/chunks/chunk-TOQ6SJ6O.js +0 -244
- package/public/sandbox/chunks/chunk-UKYAF3NL.js +0 -1036
- package/public/sandbox/chunks/chunk-UMVN3AWO.js +0 -395
- package/public/sandbox/chunks/chunk-WFV5PPWJ.js +0 -194
- package/public/sandbox/chunks/chunk-YF6IO732.js +0 -206
- package/public/sandbox/chunks/chunk-ZUBABAAO.js +0 -86
|
@@ -13,7 +13,7 @@ var stableStringify = (value) => {
|
|
|
13
13
|
}
|
|
14
14
|
if (t === "object") {
|
|
15
15
|
const record = value;
|
|
16
|
-
const keys = Object.keys(record).sort(
|
|
16
|
+
const keys = Object.keys(record).sort();
|
|
17
17
|
return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(record[k])}`).join(",")}}`;
|
|
18
18
|
}
|
|
19
19
|
return "null";
|
|
@@ -31,4 +31,4 @@ export {
|
|
|
31
31
|
stableStringify,
|
|
32
32
|
fnv1a32
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvZGlnZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIGludGVybmFsL2RpZ2VzdFx1RkYxQVxuICogLSBNaW5pbWFsIFwic3RhYmxlIGRpZ2VzdFwiIHV0aWxpdGllcyBmb3IgUnVudGltZSAvIFN0YXRpYyBJUiAvIFRyYWl0cywgZXRjLlxuICogLSBHb2FsOiBzdGFibGUgb3V0cHV0IGFjcm9zcyBydW5zL3Byb2Nlc3NlcyB3aGlsZSBzdGF5aW5nIGxpZ2h0d2VpZ2h0IChubyBleHRyYSBkZXBlbmRlbmNpZXMpLlxuICpcbiAqIE5vdGU6IHN0YWJsZVN0cmluZ2lmeSBkb2VzIG5vdCBhaW0gZm9yIGZ1bGwgSlNPTiBlcXVpdmFsZW5jZTsgaXQgb25seSBjb3ZlcnMgdGhlIHN1YnNldCBuZWVkZWQgYnkgdGhpcyByZXBvOlxuICogLSBTdGFibGUga2V5IG9yZGVyaW5nIChvYmplY3QgZmllbGRzIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSkuXG4gKiAtIE5vbi1maW5pdGUgbnVtYmVycyAoTmFOL1x1MDBCMUluZmluaXR5KSBkZWdyYWRlIHRvIG51bGwuXG4gKiAtIE90aGVyIG5vbi1yZXByZXNlbnRhYmxlIHZhbHVlcyAodW5kZWZpbmVkL2Z1bmN0aW9uL3N5bWJvbCwgZXRjLikgZGVncmFkZSB0byBudWxsLlxuICogLSB1bmRlZmluZWQgaW5zaWRlIG9iamVjdHMgaXMgbm90IG9taXR0ZWQ7IGl0IGlzIGVuY29kZWQgYXMgbnVsbCAoZGlmZmVycyBmcm9tIEpTT04uc3RyaW5naWZ5KS5cbiAqL1xuXG5leHBvcnQgY29uc3Qgc3RhYmxlU3RyaW5naWZ5ID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnXG4gIGNvbnN0IHQgPSB0eXBlb2YgdmFsdWVcbiAgaWYgKHQgPT09ICdzdHJpbmcnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gIGlmICh0ID09PSAnbnVtYmVyJykgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnXG4gIGlmICh0ID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZSA/
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvaW50ZXJuYWwvZGlnZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIGludGVybmFsL2RpZ2VzdFx1RkYxQVxuICogLSBNaW5pbWFsIFwic3RhYmxlIGRpZ2VzdFwiIHV0aWxpdGllcyBmb3IgUnVudGltZSAvIFN0YXRpYyBJUiAvIFRyYWl0cywgZXRjLlxuICogLSBHb2FsOiBzdGFibGUgb3V0cHV0IGFjcm9zcyBydW5zL3Byb2Nlc3NlcyB3aGlsZSBzdGF5aW5nIGxpZ2h0d2VpZ2h0IChubyBleHRyYSBkZXBlbmRlbmNpZXMpLlxuICpcbiAqIE5vdGU6IHN0YWJsZVN0cmluZ2lmeSBkb2VzIG5vdCBhaW0gZm9yIGZ1bGwgSlNPTiBlcXVpdmFsZW5jZTsgaXQgb25seSBjb3ZlcnMgdGhlIHN1YnNldCBuZWVkZWQgYnkgdGhpcyByZXBvOlxuICogLSBTdGFibGUga2V5IG9yZGVyaW5nIChvYmplY3QgZmllbGRzIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSkuXG4gKiAtIE5vbi1maW5pdGUgbnVtYmVycyAoTmFOL1x1MDBCMUluZmluaXR5KSBkZWdyYWRlIHRvIG51bGwuXG4gKiAtIE90aGVyIG5vbi1yZXByZXNlbnRhYmxlIHZhbHVlcyAodW5kZWZpbmVkL2Z1bmN0aW9uL3N5bWJvbCwgZXRjLikgZGVncmFkZSB0byBudWxsLlxuICogLSB1bmRlZmluZWQgaW5zaWRlIG9iamVjdHMgaXMgbm90IG9taXR0ZWQ7IGl0IGlzIGVuY29kZWQgYXMgbnVsbCAoZGlmZmVycyBmcm9tIEpTT04uc3RyaW5naWZ5KS5cbiAqL1xuXG5leHBvcnQgY29uc3Qgc3RhYmxlU3RyaW5naWZ5ID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnXG4gIGNvbnN0IHQgPSB0eXBlb2YgdmFsdWVcbiAgaWYgKHQgPT09ICdzdHJpbmcnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gIGlmICh0ID09PSAnbnVtYmVyJykgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnXG4gIGlmICh0ID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSdcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFske3ZhbHVlLm1hcChzdGFibGVTdHJpbmdpZnkpLmpvaW4oJywnKX1dYFxuICB9XG5cbiAgaWYgKHQgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgcmVjb3JkID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKS5zb3J0KClcbiAgICByZXR1cm4gYHske2tleXMubWFwKChrKSA9PiBgJHtKU09OLnN0cmluZ2lmeShrKX06JHtzdGFibGVTdHJpbmdpZnkocmVjb3JkW2tdKX1gKS5qb2luKCcsJyl9fWBcbiAgfVxuXG4gIHJldHVybiAnbnVsbCdcbn1cblxuLyoqXG4gKiBmbnYxYTMyXHVGRjFBXG4gKiAtIDMyLWJpdCBGTlYtMWEgaGFzaCAoZm9yIHNob3J0IGRpZ2VzdHMpOyBvdXRwdXRzIGZpeGVkIDgtY2hhciBoZXguXG4gKi9cbmV4cG9ydCBjb25zdCBmbnYxYTMyID0gKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBsZXQgaGFzaCA9IDB4ODExYzlkYzVcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGhhc2ggXj0gaW5wdXQuY2hhckNvZGVBdChpKVxuICAgIGhhc2ggPSAoaGFzaCAqIDB4MDEwMDAxOTMpID4+PiAwXG4gIH1cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJylcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFZTyxJQUFNLGtCQUFrQixDQUFDLFVBQTJCO0FBQ3pELE1BQUksVUFBVSxLQUFNLFFBQU87QUFDM0IsUUFBTSxJQUFJLE9BQU87QUFDakIsTUFBSSxNQUFNLFNBQVUsUUFBTyxLQUFLLFVBQVUsS0FBSztBQUMvQyxNQUFJLE1BQU0sU0FBVSxRQUFPLE9BQU8sU0FBUyxLQUFLLElBQUksT0FBTyxLQUFLLElBQUk7QUFDcEUsTUFBSSxNQUFNLFVBQVcsUUFBTyxRQUFRLFNBQVM7QUFFN0MsTUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQ3hCLFdBQU8sSUFBSSxNQUFNLElBQUksZUFBZSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsRUFDakQ7QUFFQSxNQUFJLE1BQU0sVUFBVTtBQUNsQixVQUFNLFNBQVM7QUFDZixVQUFNLE9BQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQ3RDLFdBQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQzVGO0FBRUEsU0FBTztBQUNUO0FBTU8sSUFBTSxVQUFVLENBQUMsVUFBMEI7QUFDaEQsTUFBSSxPQUFPO0FBQ1gsV0FBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxZQUFRLE1BQU0sV0FBVyxDQUFDO0FBQzFCLFdBQVEsT0FBTyxhQUFnQjtBQUFBLEVBQ2pDO0FBQ0EsU0FBTyxLQUFLLFNBQVMsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQzFDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// @logixjs/core subpath bundles for @logixjs/sandbox
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
Link
|
|
5
|
+
} from "./chunk-5GEYCJW2.js";
|
|
6
|
+
import {
|
|
7
|
+
attachMeta,
|
|
8
|
+
getDefinition,
|
|
9
|
+
getMeta
|
|
10
|
+
} from "./chunk-KDJR27JV.js";
|
|
11
|
+
import {
|
|
12
|
+
currentConvergeStaticIrCollectors
|
|
13
|
+
} from "./chunk-2LZ43SWS.js";
|
|
14
|
+
import {
|
|
15
|
+
DeclarativeLinkRuntimeTag
|
|
16
|
+
} from "./chunk-YMVMZA3U.js";
|
|
17
|
+
import {
|
|
18
|
+
compile
|
|
19
|
+
} from "./chunk-BWTGJZVP.js";
|
|
20
|
+
import {
|
|
21
|
+
currentDiagnosticsLevel,
|
|
22
|
+
record
|
|
23
|
+
} from "./chunk-SH7TP5CJ.js";
|
|
24
|
+
import {
|
|
25
|
+
fnv1a32,
|
|
26
|
+
stableStringify
|
|
27
|
+
} from "./chunk-DT7YIIWE.js";
|
|
28
|
+
|
|
29
|
+
// ../logix-core/src/Process.ts
|
|
30
|
+
import { Effect, FiberRef } from "../effect.js";
|
|
31
|
+
|
|
32
|
+
// ../logix-core/src/internal/runtime/core/DeclarativeLinkIR.ts
|
|
33
|
+
var getDeclarativeLinkIrDigest = (ir) => `dlink_ir_v1:${fnv1a32(stableStringify(ir))}`;
|
|
34
|
+
var exportDeclarativeLinkIr = (args) => ({
|
|
35
|
+
staticIrDigest: getDeclarativeLinkIrDigest(args.ir),
|
|
36
|
+
moduleId: `link:${args.linkId}`,
|
|
37
|
+
instanceId: "runtime",
|
|
38
|
+
kind: "declarativeLinkIr",
|
|
39
|
+
ir: args.ir
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// ../logix-core/src/Process.ts
|
|
43
|
+
var DEFAULT_TRIGGERS = [{ kind: "platformEvent", platformEvent: "runtime:boot" }];
|
|
44
|
+
var normalizeDefinition = (input) => {
|
|
45
|
+
const base = typeof input === "string" ? { processId: input } : input;
|
|
46
|
+
const processId = base.processId;
|
|
47
|
+
if (typeof processId !== "string" || processId.length === 0) {
|
|
48
|
+
throw new Error("[Process.make] processId must be a non-empty string");
|
|
49
|
+
}
|
|
50
|
+
const triggers = Array.isArray(base.triggers) && base.triggers.length > 0 ? base.triggers : DEFAULT_TRIGGERS;
|
|
51
|
+
const concurrency = base.concurrency ?? { mode: "latest" };
|
|
52
|
+
const errorPolicy = base.errorPolicy ?? { mode: "failStop" };
|
|
53
|
+
const diagnosticsLevel = base.diagnosticsLevel ?? "off";
|
|
54
|
+
return {
|
|
55
|
+
processId,
|
|
56
|
+
name: base.name,
|
|
57
|
+
description: base.description,
|
|
58
|
+
requires: base.requires,
|
|
59
|
+
triggers,
|
|
60
|
+
concurrency,
|
|
61
|
+
errorPolicy,
|
|
62
|
+
diagnosticsLevel
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
var make = (definition, effect) => attachMeta(effect, {
|
|
66
|
+
definition: normalizeDefinition(definition),
|
|
67
|
+
kind: "process"
|
|
68
|
+
});
|
|
69
|
+
var getDefinition2 = (effect) => getDefinition(effect);
|
|
70
|
+
var getMeta2 = (effect) => getMeta(effect);
|
|
71
|
+
var attachMeta2 = (effect, meta) => attachMeta(effect, meta);
|
|
72
|
+
var isModuleLike = (value) => Boolean(value) && typeof value === "object" && (value._kind === "ModuleDef" || value._kind === "Module") && "tag" in value;
|
|
73
|
+
var unwrapModuleTag = (module) => {
|
|
74
|
+
if (isModuleLike(module)) {
|
|
75
|
+
return module.tag;
|
|
76
|
+
}
|
|
77
|
+
return module;
|
|
78
|
+
};
|
|
79
|
+
function link(config, logic) {
|
|
80
|
+
const linkId = config.id ?? [...config.modules].map((m) => m.id).sort().join("~");
|
|
81
|
+
const modulesRecord = /* @__PURE__ */ Object.create(null);
|
|
82
|
+
const requires = /* @__PURE__ */ new Set();
|
|
83
|
+
for (const module of config.modules) {
|
|
84
|
+
const tag = unwrapModuleTag(module);
|
|
85
|
+
requires.add(String(tag.id));
|
|
86
|
+
modulesRecord[tag.id] = tag;
|
|
87
|
+
}
|
|
88
|
+
const effect = Link(
|
|
89
|
+
modulesRecord,
|
|
90
|
+
logic
|
|
91
|
+
);
|
|
92
|
+
const wrapped = Effect.gen(function* () {
|
|
93
|
+
const level = yield* FiberRef.get(currentDiagnosticsLevel);
|
|
94
|
+
if (level !== "off") {
|
|
95
|
+
yield* record({
|
|
96
|
+
type: "diagnostic",
|
|
97
|
+
moduleId: `link:${linkId}`,
|
|
98
|
+
code: "process_link::blackbox_best_effort",
|
|
99
|
+
severity: "info",
|
|
100
|
+
message: "[Process.link] Blackbox link is best-effort and is NOT stabilized within the same tick. Strong consistency applies only to declarative IR.",
|
|
101
|
+
hint: "If you need same-tick strong consistency, migrate to Process.linkDeclarative(...) (073).",
|
|
102
|
+
kind: "blackbox_link_boundary"
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return yield* effect;
|
|
106
|
+
});
|
|
107
|
+
const definition = {
|
|
108
|
+
processId: linkId,
|
|
109
|
+
requires: Array.from(requires),
|
|
110
|
+
triggers: [...DEFAULT_TRIGGERS, { kind: "platformEvent", platformEvent: `link:${linkId}` }],
|
|
111
|
+
concurrency: { mode: "latest" },
|
|
112
|
+
errorPolicy: { mode: "failStop" },
|
|
113
|
+
diagnosticsLevel: "off"
|
|
114
|
+
};
|
|
115
|
+
return attachMeta(wrapped, {
|
|
116
|
+
definition,
|
|
117
|
+
kind: "link"
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function linkDeclarative(config, build) {
|
|
121
|
+
const linkId = config.id ?? [...config.modules].map((m) => m.id).sort().join("~");
|
|
122
|
+
const modulesRecord = /* @__PURE__ */ Object.create(null);
|
|
123
|
+
const requires = /* @__PURE__ */ new Set();
|
|
124
|
+
for (const module of config.modules) {
|
|
125
|
+
const tag = unwrapModuleTag(module);
|
|
126
|
+
requires.add(String(tag.id));
|
|
127
|
+
modulesRecord[tag.id] = tag;
|
|
128
|
+
}
|
|
129
|
+
const handles = /* @__PURE__ */ Object.create(null);
|
|
130
|
+
for (const id of Object.keys(modulesRecord)) {
|
|
131
|
+
const tag = modulesRecord[id];
|
|
132
|
+
handles[id] = {
|
|
133
|
+
read: (selector) => {
|
|
134
|
+
const compiled = compile(selector);
|
|
135
|
+
const staticIr = compiled.staticIr;
|
|
136
|
+
const ok = staticIr.lane === "static" && staticIr.readsDigest != null && staticIr.fallbackReason == null;
|
|
137
|
+
if (!ok) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
`[Process.linkDeclarative] ReadQuery must be static with readsDigest (moduleId=${id}, selectorId=${staticIr.selectorId}, lane=${staticIr.lane}, fallbackReason=${staticIr.fallbackReason}). Fix: use ReadQuery.make(...) or annotate selector.fieldPaths.`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return { _tag: "readNode", moduleId: id, tag, readQuery: compiled };
|
|
143
|
+
},
|
|
144
|
+
dispatch: (actionTag) => {
|
|
145
|
+
if (typeof actionTag !== "string" || actionTag.length === 0) {
|
|
146
|
+
throw new Error("[Process.linkDeclarative] actionTag must be a non-empty string");
|
|
147
|
+
}
|
|
148
|
+
return { _tag: "dispatchNode", moduleId: id, tag, actionTag };
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const edges = build(handles);
|
|
153
|
+
if (!Array.isArray(edges)) {
|
|
154
|
+
throw new Error("[Process.linkDeclarative] build(...) must return an array of edges");
|
|
155
|
+
}
|
|
156
|
+
const normalized = edges.filter((e) => Boolean(e && e.from && e.to)).map((e) => {
|
|
157
|
+
if (e.from._tag !== "readNode" || e.to._tag !== "dispatchNode") {
|
|
158
|
+
throw new Error("[Process.linkDeclarative] Invalid edge spec returned from build(...)");
|
|
159
|
+
}
|
|
160
|
+
return e;
|
|
161
|
+
}).slice().sort((a, b) => {
|
|
162
|
+
const ak = `${a.from.moduleId}:${a.from.readQuery.staticIr.selectorId}->${a.to.moduleId}:${a.to.actionTag}`;
|
|
163
|
+
const bk = `${b.from.moduleId}:${b.from.readQuery.staticIr.selectorId}->${b.to.moduleId}:${b.to.actionTag}`;
|
|
164
|
+
return ak < bk ? -1 : ak > bk ? 1 : 0;
|
|
165
|
+
});
|
|
166
|
+
const program = Effect.gen(function* () {
|
|
167
|
+
const runtime = yield* DeclarativeLinkRuntimeTag;
|
|
168
|
+
const collectors = yield* FiberRef.get(currentConvergeStaticIrCollectors);
|
|
169
|
+
const runtimeByTag = /* @__PURE__ */ new Map();
|
|
170
|
+
const resolveRuntime = (tag) => Effect.suspend(() => {
|
|
171
|
+
const cached = runtimeByTag.get(tag);
|
|
172
|
+
if (cached) return Effect.succeed(cached);
|
|
173
|
+
return tag.pipe(
|
|
174
|
+
Effect.tap(
|
|
175
|
+
(rt) => Effect.sync(() => {
|
|
176
|
+
runtimeByTag.set(tag, rt);
|
|
177
|
+
})
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
});
|
|
181
|
+
const nodes = [];
|
|
182
|
+
const irEdges = [];
|
|
183
|
+
const readNodes = [];
|
|
184
|
+
const dispatchNodes = [];
|
|
185
|
+
for (let i = 0; i < normalized.length; i += 1) {
|
|
186
|
+
const edge = normalized[i];
|
|
187
|
+
const fromRuntime = yield* resolveRuntime(edge.from.tag);
|
|
188
|
+
const toRuntime = yield* resolveRuntime(edge.to.tag);
|
|
189
|
+
const fromKey = `${fromRuntime.moduleId}::${fromRuntime.instanceId}`;
|
|
190
|
+
const readNodeId = `r${i}`;
|
|
191
|
+
const dispatchNodeId = `d${i}`;
|
|
192
|
+
nodes.push({
|
|
193
|
+
id: readNodeId,
|
|
194
|
+
kind: "readQuery",
|
|
195
|
+
moduleId: fromRuntime.moduleId,
|
|
196
|
+
instanceKey: fromRuntime.instanceId,
|
|
197
|
+
readQuery: edge.from.readQuery.staticIr
|
|
198
|
+
});
|
|
199
|
+
nodes.push({
|
|
200
|
+
id: dispatchNodeId,
|
|
201
|
+
kind: "dispatch",
|
|
202
|
+
moduleId: toRuntime.moduleId,
|
|
203
|
+
instanceKey: toRuntime.instanceId,
|
|
204
|
+
actionTag: edge.to.actionTag
|
|
205
|
+
});
|
|
206
|
+
irEdges.push({ from: readNodeId, to: dispatchNodeId });
|
|
207
|
+
readNodes.push({ nodeId: readNodeId, moduleInstanceKey: fromKey, readQuery: edge.from.readQuery });
|
|
208
|
+
dispatchNodes.push({
|
|
209
|
+
nodeId: dispatchNodeId,
|
|
210
|
+
dispatch: (payload) => toRuntime.dispatch({ _tag: edge.to.actionTag, payload }).pipe(Effect.asVoid)
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const ir = {
|
|
214
|
+
version: 1,
|
|
215
|
+
nodes,
|
|
216
|
+
edges: irEdges
|
|
217
|
+
};
|
|
218
|
+
const registration = {
|
|
219
|
+
linkId,
|
|
220
|
+
ir,
|
|
221
|
+
readNodes,
|
|
222
|
+
dispatchNodes
|
|
223
|
+
};
|
|
224
|
+
const unregister = runtime.registerDeclarativeLink(registration);
|
|
225
|
+
if (collectors.length > 0) {
|
|
226
|
+
const exported = exportDeclarativeLinkIr({ linkId, ir });
|
|
227
|
+
for (const collector of collectors) {
|
|
228
|
+
collector.register(exported);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
yield* Effect.addFinalizer(
|
|
232
|
+
() => Effect.sync(() => {
|
|
233
|
+
unregister();
|
|
234
|
+
})
|
|
235
|
+
);
|
|
236
|
+
yield* Effect.never;
|
|
237
|
+
});
|
|
238
|
+
const definition = {
|
|
239
|
+
processId: `dlink:${linkId}`,
|
|
240
|
+
requires: Array.from(requires),
|
|
241
|
+
triggers: DEFAULT_TRIGGERS,
|
|
242
|
+
concurrency: { mode: "latest" },
|
|
243
|
+
errorPolicy: { mode: "failStop" },
|
|
244
|
+
diagnosticsLevel: "off"
|
|
245
|
+
};
|
|
246
|
+
return attachMeta(program, {
|
|
247
|
+
definition,
|
|
248
|
+
kind: "declarativeLink"
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export {
|
|
253
|
+
make,
|
|
254
|
+
getDefinition2 as getDefinition,
|
|
255
|
+
getMeta2 as getMeta,
|
|
256
|
+
attachMeta2 as attachMeta,
|
|
257
|
+
link,
|
|
258
|
+
linkDeclarative
|
|
259
|
+
};
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vbG9naXgtY29yZS9zcmMvUHJvY2Vzcy50cyIsICIuLi8uLi8uLi8uLi9sb2dpeC1jb3JlL3NyYy9pbnRlcm5hbC9ydW50aW1lL2NvcmUvRGVjbGFyYXRpdmVMaW5rSVIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IEVmZmVjdCwgRmliZXJSZWYgfSBmcm9tICdlZmZlY3QnXG5pbXBvcnQgKiBhcyBNb2R1bGVGYWN0b3J5IGZyb20gJy4vaW50ZXJuYWwvcnVudGltZS9Nb2R1bGVGYWN0b3J5LmpzJ1xuaW1wb3J0ICogYXMgRGVidWcgZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvRGVidWdTaW5rLmpzJ1xuaW1wb3J0IHsgY3VycmVudENvbnZlcmdlU3RhdGljSXJDb2xsZWN0b3JzIH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvQ29udmVyZ2VTdGF0aWNJckNvbGxlY3Rvci5qcydcbmltcG9ydCB7IGV4cG9ydERlY2xhcmF0aXZlTGlua0lyLCB0eXBlIERlY2xhcmF0aXZlTGlua0lSIH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvRGVjbGFyYXRpdmVMaW5rSVIuanMnXG5pbXBvcnQgeyBEZWNsYXJhdGl2ZUxpbmtSdW50aW1lVGFnIH0gZnJvbSAnLi9pbnRlcm5hbC9ydW50aW1lL2NvcmUvZW52LmpzJ1xuaW1wb3J0IHR5cGUgKiBhcyBQcm90b2NvbCBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9wcm9jZXNzL3Byb3RvY29sLmpzJ1xuaW1wb3J0ICogYXMgTWV0YSBmcm9tICcuL2ludGVybmFsL3J1bnRpbWUvY29yZS9wcm9jZXNzL21ldGEuanMnXG5pbXBvcnQgdHlwZSB7IEFueU1vZHVsZVNoYXBlLCBNb2R1bGVIYW5kbGUsIE1vZHVsZUxpa2UsIE1vZHVsZVRhZyB9IGZyb20gJy4vaW50ZXJuYWwvbW9kdWxlLmpzJ1xuaW1wb3J0ICogYXMgUmVhZFF1ZXJ5IGZyb20gJy4vUmVhZFF1ZXJ5LmpzJ1xuXG5leHBvcnQgdHlwZSBEaWFnbm9zdGljc0xldmVsID0gUHJvdG9jb2wuRGlhZ25vc3RpY3NMZXZlbFxuZXhwb3J0IHR5cGUgUHJvY2Vzc1Njb3BlID0gUHJvdG9jb2wuUHJvY2Vzc1Njb3BlXG5leHBvcnQgdHlwZSBQcm9jZXNzSWRlbnRpdHkgPSBQcm90b2NvbC5Qcm9jZXNzSWRlbnRpdHlcbmV4cG9ydCB0eXBlIFByb2Nlc3NJbnN0YW5jZUlkZW50aXR5ID0gUHJvdG9jb2wuUHJvY2Vzc0luc3RhbmNlSWRlbnRpdHlcbmV4cG9ydCB0eXBlIFByb2Nlc3NUcmlnZ2VyU3BlYyA9IFByb3RvY29sLlByb2Nlc3NUcmlnZ2VyU3BlY1xuZXhwb3J0IHR5cGUgUHJvY2Vzc1RyaWdnZXIgPSBQcm90b2NvbC5Qcm9jZXNzVHJpZ2dlclxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NvbmN1cnJlbmN5UG9saWN5ID0gUHJvdG9jb2wuUHJvY2Vzc0NvbmN1cnJlbmN5UG9saWN5XG5leHBvcnQgdHlwZSBQcm9jZXNzRXJyb3JQb2xpY3kgPSBQcm90b2NvbC5Qcm9jZXNzRXJyb3JQb2xpY3lcbmV4cG9ydCB0eXBlIFByb2Nlc3NEZWZpbml0aW9uID0gUHJvdG9jb2wuUHJvY2Vzc0RlZmluaXRpb25cbmV4cG9ydCB0eXBlIFByb2Nlc3NJbnN0YWxsYXRpb24gPSBQcm90b2NvbC5Qcm9jZXNzSW5zdGFsbGF0aW9uXG5leHBvcnQgdHlwZSBTZXJpYWxpemFibGVFcnJvclN1bW1hcnkgPSBQcm90b2NvbC5TZXJpYWxpemFibGVFcnJvclN1bW1hcnlcbmV4cG9ydCB0eXBlIFByb2Nlc3NJbnN0YW5jZVN0YXR1cyA9IFByb3RvY29sLlByb2Nlc3NJbnN0YW5jZVN0YXR1c1xuZXhwb3J0IHR5cGUgUHJvY2Vzc0V2ZW50ID0gUHJvdG9jb2wuUHJvY2Vzc0V2ZW50XG5leHBvcnQgdHlwZSBQcm9jZXNzQ29udHJvbFJlcXVlc3QgPSBQcm90b2NvbC5Qcm9jZXNzQ29udHJvbFJlcXVlc3RcbmV4cG9ydCB0eXBlIFByb2Nlc3NQbGF0Zm9ybUV2ZW50ID0gUHJvdG9jb2wuUHJvY2Vzc1BsYXRmb3JtRXZlbnRcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0VmZmVjdDxFID0gbmV2ZXIsIFIgPSBuZXZlcj4gPSBNZXRhLlByb2Nlc3NFZmZlY3Q8RSwgUj5cblxuZXhwb3J0IHR5cGUgUHJvY2Vzc01ha2VEZWZpbml0aW9uID1cbiAgfCBzdHJpbmdcbiAgfCB7XG4gICAgICByZWFkb25seSBwcm9jZXNzSWQ6IHN0cmluZ1xuICAgICAgcmVhZG9ubHkgbmFtZT86IHN0cmluZ1xuICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgICAgIHJlYWRvbmx5IHJlcXVpcmVzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+XG4gICAgICByZWFkb25seSB0cmlnZ2Vycz86IFJlYWRvbmx5QXJyYXk8UHJvY2Vzc1RyaWdnZXJTcGVjPlxuICAgICAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBQcm9jZXNzQ29uY3VycmVuY3lQb2xpY3lcbiAgICAgIHJlYWRvbmx5IGVycm9yUG9saWN5PzogUHJvY2Vzc0Vycm9yUG9saWN5XG4gICAgICByZWFkb25seSBkaWFnbm9zdGljc0xldmVsPzogRGlhZ25vc3RpY3NMZXZlbFxuICAgIH1cblxuY29uc3QgREVGQVVMVF9UUklHR0VSUzogUmVhZG9ubHlBcnJheTxQcm9jZXNzVHJpZ2dlclNwZWM+ID0gW3sga2luZDogJ3BsYXRmb3JtRXZlbnQnLCBwbGF0Zm9ybUV2ZW50OiAncnVudGltZTpib290JyB9XVxuXG5jb25zdCBub3JtYWxpemVEZWZpbml0aW9uID0gKGlucHV0OiBQcm9jZXNzTWFrZURlZmluaXRpb24pOiBQcm9jZXNzRGVmaW5pdGlvbiA9PiB7XG4gIGNvbnN0IGJhc2UgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gKHsgcHJvY2Vzc0lkOiBpbnB1dCB9IHNhdGlzZmllcyB7IHJlYWRvbmx5IHByb2Nlc3NJZDogc3RyaW5nIH0pIDogaW5wdXRcblxuICBjb25zdCBwcm9jZXNzSWQgPSBiYXNlLnByb2Nlc3NJZFxuICBpZiAodHlwZW9mIHByb2Nlc3NJZCAhPT0gJ3N0cmluZycgfHwgcHJvY2Vzc0lkLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignW1Byb2Nlc3MubWFrZV0gcHJvY2Vzc0lkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJylcbiAgfVxuXG4gIGNvbnN0IHRyaWdnZXJzID0gQXJyYXkuaXNBcnJheShiYXNlLnRyaWdnZXJzKSAmJiBiYXNlLnRyaWdnZXJzLmxlbmd0aCA+IDAgPyBiYXNlLnRyaWdnZXJzIDogREVGQVVMVF9UUklHR0VSU1xuXG4gIGNvbnN0IGNvbmN1cnJlbmN5ID0gYmFzZS5jb25jdXJyZW5jeSA/PyAoeyBtb2RlOiAnbGF0ZXN0JyB9IHNhdGlzZmllcyBQcm9jZXNzQ29uY3VycmVuY3lQb2xpY3kpXG4gIGNvbnN0IGVycm9yUG9saWN5ID0gYmFzZS5lcnJvclBvbGljeSA/PyAoeyBtb2RlOiAnZmFpbFN0b3AnIH0gc2F0aXNmaWVzIFByb2Nlc3NFcnJvclBvbGljeSlcbiAgY29uc3QgZGlhZ25vc3RpY3NMZXZlbCA9IGJhc2UuZGlhZ25vc3RpY3NMZXZlbCA/PyAnb2ZmJ1xuXG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc0lkLFxuICAgIG5hbWU6IGJhc2UubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYmFzZS5kZXNjcmlwdGlvbixcbiAgICByZXF1aXJlczogYmFzZS5yZXF1aXJlcyxcbiAgICB0cmlnZ2VycyxcbiAgICBjb25jdXJyZW5jeSxcbiAgICBlcnJvclBvbGljeSxcbiAgICBkaWFnbm9zdGljc0xldmVsLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBtYWtlID0gPEUsIFI+KGRlZmluaXRpb246IFByb2Nlc3NNYWtlRGVmaW5pdGlvbiwgZWZmZWN0OiBFZmZlY3QuRWZmZWN0PHZvaWQsIEUsIFI+KTogUHJvY2Vzc0VmZmVjdDxFLCBSPiA9PlxuICBNZXRhLmF0dGFjaE1ldGEoZWZmZWN0LCB7XG4gICAgZGVmaW5pdGlvbjogbm9ybWFsaXplRGVmaW5pdGlvbihkZWZpbml0aW9uKSxcbiAgICBraW5kOiAncHJvY2VzcycsXG4gIH0pXG5cbmV4cG9ydCBjb25zdCBnZXREZWZpbml0aW9uID0gKGVmZmVjdDogRWZmZWN0LkVmZmVjdDx2b2lkLCBhbnksIGFueT4pOiBQcm9jZXNzRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9PlxuICBNZXRhLmdldERlZmluaXRpb24oZWZmZWN0KVxuXG5leHBvcnQgY29uc3QgZ2V0TWV0YSA9IChlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgYW55LCBhbnk+KTogTWV0YS5Qcm9jZXNzTWV0YSB8IHVuZGVmaW5lZCA9PiBNZXRhLmdldE1ldGEoZWZmZWN0KVxuXG5leHBvcnQgY29uc3QgYXR0YWNoTWV0YSA9IDxFLCBSPihlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRSwgUj4sIG1ldGE6IE1ldGEuUHJvY2Vzc01ldGEpOiBQcm9jZXNzRWZmZWN0PEUsIFI+ID0+XG4gIE1ldGEuYXR0YWNoTWV0YShlZmZlY3QsIG1ldGEpXG5cbnR5cGUgTGlua01vZHVsZVRva2VuPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPiA9IE1vZHVsZVRhZzxJZCwgU2g+IHwgTW9kdWxlTGlrZTxJZCwgU2gsIG9iamVjdD5cblxudHlwZSBMaW5rTW9kdWxlSWRPZjxNPiA9IE0gZXh0ZW5kcyB7IHJlYWRvbmx5IGlkOiBpbmZlciBJZCB9ID8gSWQgOiBuZXZlclxudHlwZSBMaW5rTW9kdWxlU2hhcGVPZjxNPiA9XG4gIE0gZXh0ZW5kcyBNb2R1bGVMaWtlPHN0cmluZywgaW5mZXIgU2gsIG9iamVjdD4gPyBTaCA6IE0gZXh0ZW5kcyBNb2R1bGVUYWc8c3RyaW5nLCBpbmZlciBTaD4gPyBTaCA6IG5ldmVyXG50eXBlIExpbmtNb2R1bGVUYWdPZjxNPiA9XG4gIE0gZXh0ZW5kcyBNb2R1bGVMaWtlPHN0cmluZywgaW5mZXIgU2gsIG9iamVjdD5cbiAgICA/IE1vZHVsZVRhZzxzdHJpbmcsIFNoPlxuICAgIDogTSBleHRlbmRzIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPlxuICAgICAgPyBNXG4gICAgICA6IG5ldmVyXG5cbmNvbnN0IGlzTW9kdWxlTGlrZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1vZHVsZUxpa2U8c3RyaW5nLCBBbnlNb2R1bGVTaGFwZSwgb2JqZWN0PiA9PlxuICBCb29sZWFuKHZhbHVlKSAmJlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICgodmFsdWUgYXMgeyByZWFkb25seSBfa2luZD86IHVua25vd24gfSkuX2tpbmQgPT09ICdNb2R1bGVEZWYnIHx8XG4gICAgKHZhbHVlIGFzIHsgcmVhZG9ubHkgX2tpbmQ/OiB1bmtub3duIH0pLl9raW5kID09PSAnTW9kdWxlJykgJiZcbiAgJ3RhZycgaW4gKHZhbHVlIGFzIG9iamVjdClcblxuY29uc3QgdW53cmFwTW9kdWxlVGFnID0gPElkIGV4dGVuZHMgc3RyaW5nLCBTaCBleHRlbmRzIEFueU1vZHVsZVNoYXBlPihcbiAgbW9kdWxlOiBMaW5rTW9kdWxlVG9rZW48SWQsIFNoPixcbik6IE1vZHVsZVRhZzxJZCwgU2g+ID0+IHtcbiAgaWYgKGlzTW9kdWxlTGlrZShtb2R1bGUpKSB7XG4gICAgcmV0dXJuIG1vZHVsZS50YWdcbiAgfVxuICByZXR1cm4gbW9kdWxlIGFzIE1vZHVsZVRhZzxJZCwgU2g+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlua0NvbmZpZzxNcyBleHRlbmRzIHJlYWRvbmx5IExpbmtNb2R1bGVUb2tlbjxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPltdPiB7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gIHJlYWRvbmx5IG1vZHVsZXM6IE1zXG59XG5cbmV4cG9ydCB0eXBlIExpbmtIYW5kbGVzPE1zIGV4dGVuZHMgcmVhZG9ubHkgTGlua01vZHVsZVRva2VuPHN0cmluZywgQW55TW9kdWxlU2hhcGU+W10+ID0ge1xuICBbTSBpbiBNc1tudW1iZXJdIGFzIExpbmtNb2R1bGVJZE9mPE0+XTogTW9kdWxlSGFuZGxlPExpbmtNb2R1bGVTaGFwZU9mPE0+PlxufVxuXG50eXBlIE1vZHVsZXNSZWNvcmQ8TXMgZXh0ZW5kcyByZWFkb25seSBMaW5rTW9kdWxlVG9rZW48c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5bXT4gPSB7XG4gIFtNIGluIE1zW251bWJlcl0gYXMgTGlua01vZHVsZUlkT2Y8TT5dOiBMaW5rTW9kdWxlVGFnT2Y8TT5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbms8TXMgZXh0ZW5kcyByZWFkb25seSBMaW5rTW9kdWxlVG9rZW48c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5bXSwgRSA9IG5ldmVyLCBSID0gbmV2ZXI+KFxuICBjb25maWc6IExpbmtDb25maWc8TXM+LFxuICBsb2dpYzogKCQ6IExpbmtIYW5kbGVzPE1zPikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBFLCBSPixcbik6IFByb2Nlc3NFZmZlY3Q8RSwgUj4ge1xuICBjb25zdCBsaW5rSWQgPVxuICAgIGNvbmZpZy5pZCA/P1xuICAgIFsuLi5jb25maWcubW9kdWxlc11cbiAgICAgIC5tYXAoKG0pID0+IG0uaWQpXG4gICAgICAuc29ydCgpXG4gICAgICAuam9pbignficpXG5cbiAgY29uc3QgbW9kdWxlc1JlY29yZCA9IE9iamVjdC5jcmVhdGUobnVsbCkgYXMgTW9kdWxlc1JlY29yZDxNcz5cbiAgY29uc3QgcmVxdWlyZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIGZvciAoY29uc3QgbW9kdWxlIG9mIGNvbmZpZy5tb2R1bGVzKSB7XG4gICAgY29uc3QgdGFnID0gdW53cmFwTW9kdWxlVGFnKG1vZHVsZSlcbiAgICByZXF1aXJlcy5hZGQoU3RyaW5nKHRhZy5pZCkpXG4gICAgOyhtb2R1bGVzUmVjb3JkIGFzIFJlY29yZDxzdHJpbmcsIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPj4pW3RhZy5pZF0gPSB0YWcgYXMgdW5rbm93biBhcyBNb2R1bGVUYWc8XG4gICAgICBzdHJpbmcsXG4gICAgICBBbnlNb2R1bGVTaGFwZVxuICAgID5cbiAgfVxuXG4gIGNvbnN0IGVmZmVjdCA9IE1vZHVsZUZhY3RvcnkuTGluayhcbiAgICBtb2R1bGVzUmVjb3JkIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgTW9kdWxlVGFnPHN0cmluZywgQW55TW9kdWxlU2hhcGU+PixcbiAgICBsb2dpYyBhcyB1bmtub3duIGFzICgkOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVIYW5kbGU8QW55TW9kdWxlU2hhcGU+PikgPT4gRWZmZWN0LkVmZmVjdDx2b2lkLCBFLCBSPixcbiAgKVxuXG4gIGNvbnN0IHdyYXBwZWQgPSBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgbGV2ZWwgPSB5aWVsZCogRmliZXJSZWYuZ2V0KERlYnVnLmN1cnJlbnREaWFnbm9zdGljc0xldmVsKVxuICAgIGlmIChsZXZlbCAhPT0gJ29mZicpIHtcbiAgICAgIHlpZWxkKiBEZWJ1Zy5yZWNvcmQoe1xuICAgICAgICB0eXBlOiAnZGlhZ25vc3RpYycsXG4gICAgICAgIG1vZHVsZUlkOiBgbGluazoke2xpbmtJZH1gLFxuICAgICAgICBjb2RlOiAncHJvY2Vzc19saW5rOjpibGFja2JveF9iZXN0X2VmZm9ydCcsXG4gICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ1tQcm9jZXNzLmxpbmtdIEJsYWNrYm94IGxpbmsgaXMgYmVzdC1lZmZvcnQgYW5kIGlzIE5PVCBzdGFiaWxpemVkIHdpdGhpbiB0aGUgc2FtZSB0aWNrLiBTdHJvbmcgY29uc2lzdGVuY3kgYXBwbGllcyBvbmx5IHRvIGRlY2xhcmF0aXZlIElSLicsXG4gICAgICAgIGhpbnQ6ICdJZiB5b3UgbmVlZCBzYW1lLXRpY2sgc3Ryb25nIGNvbnNpc3RlbmN5LCBtaWdyYXRlIHRvIFByb2Nlc3MubGlua0RlY2xhcmF0aXZlKC4uLikgKDA3MykuJyxcbiAgICAgICAga2luZDogJ2JsYWNrYm94X2xpbmtfYm91bmRhcnknLFxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHlpZWxkKiBlZmZlY3RcbiAgfSkgYXMgdW5rbm93biBhcyBFZmZlY3QuRWZmZWN0PHZvaWQsIEUsIFI+XG5cbiAgY29uc3QgZGVmaW5pdGlvbjogUHJvY2Vzc0RlZmluaXRpb24gPSB7XG4gICAgcHJvY2Vzc0lkOiBsaW5rSWQsXG4gICAgcmVxdWlyZXM6IEFycmF5LmZyb20ocmVxdWlyZXMpLFxuICAgIHRyaWdnZXJzOiBbLi4uREVGQVVMVF9UUklHR0VSUywgeyBraW5kOiAncGxhdGZvcm1FdmVudCcsIHBsYXRmb3JtRXZlbnQ6IGBsaW5rOiR7bGlua0lkfWAgfV0sXG4gICAgY29uY3VycmVuY3k6IHsgbW9kZTogJ2xhdGVzdCcgfSxcbiAgICBlcnJvclBvbGljeTogeyBtb2RlOiAnZmFpbFN0b3AnIH0sXG4gICAgZGlhZ25vc3RpY3NMZXZlbDogJ29mZicsXG4gIH1cblxuICByZXR1cm4gTWV0YS5hdHRhY2hNZXRhKHdyYXBwZWQsIHtcbiAgICBkZWZpbml0aW9uLFxuICAgIGtpbmQ6ICdsaW5rJyxcbiAgfSkgYXMgUHJvY2Vzc0VmZmVjdDxFLCBSPlxufVxuXG50eXBlIERlY2xhcmF0aXZlUmVhZE5vZGUgPSB7XG4gIHJlYWRvbmx5IF90YWc6ICdyZWFkTm9kZSdcbiAgcmVhZG9ubHkgbW9kdWxlSWQ6IHN0cmluZ1xuICByZWFkb25seSB0YWc6IE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPlxuICByZWFkb25seSByZWFkUXVlcnk6IFJlYWRRdWVyeS5SZWFkUXVlcnlDb21waWxlZDxhbnksIGFueT5cbn1cblxudHlwZSBEZWNsYXJhdGl2ZURpc3BhdGNoTm9kZSA9IHtcbiAgcmVhZG9ubHkgX3RhZzogJ2Rpc3BhdGNoTm9kZSdcbiAgcmVhZG9ubHkgbW9kdWxlSWQ6IHN0cmluZ1xuICByZWFkb25seSB0YWc6IE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPlxuICByZWFkb25seSBhY3Rpb25UYWc6IHN0cmluZ1xufVxuXG50eXBlIERlY2xhcmF0aXZlTGlua0VkZ2VTcGVjID0ge1xuICByZWFkb25seSBmcm9tOiBEZWNsYXJhdGl2ZVJlYWROb2RlXG4gIHJlYWRvbmx5IHRvOiBEZWNsYXJhdGl2ZURpc3BhdGNoTm9kZVxufVxuXG50eXBlIERlY2xhcmF0aXZlTGlua0hhbmRsZXM8TXMgZXh0ZW5kcyByZWFkb25seSBMaW5rTW9kdWxlVG9rZW48c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5bXT4gPSB7XG4gIFtNIGluIE1zW251bWJlcl0gYXMgTGlua01vZHVsZUlkT2Y8TT5dOiB7XG4gICAgcmVhZG9ubHkgcmVhZDogPFMsIFY+KHNlbGVjdG9yOiBSZWFkUXVlcnkuUmVhZFF1ZXJ5SW5wdXQ8UywgVj4pID0+IERlY2xhcmF0aXZlUmVhZE5vZGVcbiAgICByZWFkb25seSBkaXNwYXRjaDogKGFjdGlvblRhZzogc3RyaW5nKSA9PiBEZWNsYXJhdGl2ZURpc3BhdGNoTm9kZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRGVjbGFyYXRpdmU8TXMgZXh0ZW5kcyByZWFkb25seSBMaW5rTW9kdWxlVG9rZW48c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT5bXT4oXG4gIGNvbmZpZzogTGlua0NvbmZpZzxNcz4sXG4gIGJ1aWxkOiAoJDogRGVjbGFyYXRpdmVMaW5rSGFuZGxlczxNcz4pID0+IFJlYWRvbmx5QXJyYXk8RGVjbGFyYXRpdmVMaW5rRWRnZVNwZWM+LFxuKTogUHJvY2Vzc0VmZmVjdDxuZXZlciwgbmV2ZXI+IHtcbiAgY29uc3QgbGlua0lkID1cbiAgICBjb25maWcuaWQgPz9cbiAgICBbLi4uY29uZmlnLm1vZHVsZXNdXG4gICAgICAubWFwKChtKSA9PiBtLmlkKVxuICAgICAgLnNvcnQoKVxuICAgICAgLmpvaW4oJ34nKVxuXG4gIGNvbnN0IG1vZHVsZXNSZWNvcmQgPSBPYmplY3QuY3JlYXRlKG51bGwpIGFzIE1vZHVsZXNSZWNvcmQ8TXM+XG4gIGNvbnN0IHJlcXVpcmVzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBjb25maWcubW9kdWxlcykge1xuICAgIGNvbnN0IHRhZyA9IHVud3JhcE1vZHVsZVRhZyhtb2R1bGUpXG4gICAgcmVxdWlyZXMuYWRkKFN0cmluZyh0YWcuaWQpKVxuICAgIDsobW9kdWxlc1JlY29yZCBhcyBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVUYWc8c3RyaW5nLCBBbnlNb2R1bGVTaGFwZT4+KVt0YWcuaWRdID0gdGFnIGFzIHVua25vd24gYXMgTW9kdWxlVGFnPFxuICAgICAgc3RyaW5nLFxuICAgICAgQW55TW9kdWxlU2hhcGVcbiAgICA+XG4gIH1cblxuICBjb25zdCBoYW5kbGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKSBhcyBEZWNsYXJhdGl2ZUxpbmtIYW5kbGVzPE1zPlxuICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKG1vZHVsZXNSZWNvcmQpIGFzIEFycmF5PGtleW9mIE1vZHVsZXNSZWNvcmQ8TXM+ICYgc3RyaW5nPikge1xuICAgIGNvbnN0IHRhZyA9IChtb2R1bGVzUmVjb3JkIGFzIGFueSlbaWRdIGFzIE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPlxuICAgIDsoaGFuZGxlcyBhcyBhbnkpW2lkXSA9IHtcbiAgICAgIHJlYWQ6IChzZWxlY3RvcjogUmVhZFF1ZXJ5LlJlYWRRdWVyeUlucHV0PGFueSwgYW55PikgPT4ge1xuICAgICAgICBjb25zdCBjb21waWxlZCA9IFJlYWRRdWVyeS5jb21waWxlKHNlbGVjdG9yKVxuICAgICAgICBjb25zdCBzdGF0aWNJciA9IGNvbXBpbGVkLnN0YXRpY0lyXG4gICAgICAgIGNvbnN0IG9rID0gc3RhdGljSXIubGFuZSA9PT0gJ3N0YXRpYycgJiYgc3RhdGljSXIucmVhZHNEaWdlc3QgIT0gbnVsbCAmJiBzdGF0aWNJci5mYWxsYmFja1JlYXNvbiA9PSBudWxsXG4gICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgW1Byb2Nlc3MubGlua0RlY2xhcmF0aXZlXSBSZWFkUXVlcnkgbXVzdCBiZSBzdGF0aWMgd2l0aCByZWFkc0RpZ2VzdCAobW9kdWxlSWQ9JHtpZH0sIHNlbGVjdG9ySWQ9JHtzdGF0aWNJci5zZWxlY3RvcklkfSwgbGFuZT0ke3N0YXRpY0lyLmxhbmV9LCBmYWxsYmFja1JlYXNvbj0ke3N0YXRpY0lyLmZhbGxiYWNrUmVhc29ufSkuIGAgK1xuICAgICAgICAgICAgICAnRml4OiB1c2UgUmVhZFF1ZXJ5Lm1ha2UoLi4uKSBvciBhbm5vdGF0ZSBzZWxlY3Rvci5maWVsZFBhdGhzLicsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IF90YWc6ICdyZWFkTm9kZScsIG1vZHVsZUlkOiBpZCwgdGFnLCByZWFkUXVlcnk6IGNvbXBpbGVkIH0gYXMgRGVjbGFyYXRpdmVSZWFkTm9kZVxuICAgICAgfSxcbiAgICAgIGRpc3BhdGNoOiAoYWN0aW9uVGFnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25UYWcgIT09ICdzdHJpbmcnIHx8IGFjdGlvblRhZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tQcm9jZXNzLmxpbmtEZWNsYXJhdGl2ZV0gYWN0aW9uVGFnIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBfdGFnOiAnZGlzcGF0Y2hOb2RlJywgbW9kdWxlSWQ6IGlkLCB0YWcsIGFjdGlvblRhZyB9IGFzIERlY2xhcmF0aXZlRGlzcGF0Y2hOb2RlXG4gICAgICB9LFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGVkZ2VzID0gYnVpbGQoaGFuZGxlcylcbiAgaWYgKCFBcnJheS5pc0FycmF5KGVkZ2VzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignW1Byb2Nlc3MubGlua0RlY2xhcmF0aXZlXSBidWlsZCguLi4pIG11c3QgcmV0dXJuIGFuIGFycmF5IG9mIGVkZ2VzJylcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBlZGdlc1xuICAgIC5maWx0ZXIoKGUpOiBlIGlzIERlY2xhcmF0aXZlTGlua0VkZ2VTcGVjID0+IEJvb2xlYW4oZSAmJiBlLmZyb20gJiYgZS50bykpXG4gICAgLm1hcCgoZSkgPT4ge1xuICAgICAgaWYgKGUuZnJvbS5fdGFnICE9PSAncmVhZE5vZGUnIHx8IGUudG8uX3RhZyAhPT0gJ2Rpc3BhdGNoTm9kZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbUHJvY2Vzcy5saW5rRGVjbGFyYXRpdmVdIEludmFsaWQgZWRnZSBzcGVjIHJldHVybmVkIGZyb20gYnVpbGQoLi4uKScpXG4gICAgICB9XG4gICAgICByZXR1cm4gZVxuICAgIH0pXG4gICAgLnNsaWNlKClcbiAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYWsgPSBgJHthLmZyb20ubW9kdWxlSWR9OiR7YS5mcm9tLnJlYWRRdWVyeS5zdGF0aWNJci5zZWxlY3RvcklkfS0+JHthLnRvLm1vZHVsZUlkfToke2EudG8uYWN0aW9uVGFnfWBcbiAgICAgIGNvbnN0IGJrID0gYCR7Yi5mcm9tLm1vZHVsZUlkfToke2IuZnJvbS5yZWFkUXVlcnkuc3RhdGljSXIuc2VsZWN0b3JJZH0tPiR7Yi50by5tb2R1bGVJZH06JHtiLnRvLmFjdGlvblRhZ31gXG4gICAgICByZXR1cm4gYWsgPCBiayA/IC0xIDogYWsgPiBiayA/IDEgOiAwXG4gICAgfSlcblxuICBjb25zdCBwcm9ncmFtOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyLCBhbnk+ID0gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHJ1bnRpbWUgPSB5aWVsZCogRGVjbGFyYXRpdmVMaW5rUnVudGltZVRhZ1xuICAgIGNvbnN0IGNvbGxlY3RvcnMgPSB5aWVsZCogRmliZXJSZWYuZ2V0KGN1cnJlbnRDb252ZXJnZVN0YXRpY0lyQ29sbGVjdG9ycylcblxuICAgIGNvbnN0IHJ1bnRpbWVCeVRhZyA9IG5ldyBNYXA8TW9kdWxlVGFnPHN0cmluZywgQW55TW9kdWxlU2hhcGU+LCBhbnk+KClcbiAgICBjb25zdCByZXNvbHZlUnVudGltZSA9ICh0YWc6IE1vZHVsZVRhZzxzdHJpbmcsIEFueU1vZHVsZVNoYXBlPik6IEVmZmVjdC5FZmZlY3Q8YW55PiA9PlxuICAgICAgRWZmZWN0LnN1c3BlbmQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBydW50aW1lQnlUYWcuZ2V0KHRhZylcbiAgICAgICAgaWYgKGNhY2hlZCkgcmV0dXJuIEVmZmVjdC5zdWNjZWVkKGNhY2hlZClcbiAgICAgICAgcmV0dXJuICh0YWcgYXMgYW55KS5waXBlKFxuICAgICAgICAgIEVmZmVjdC50YXAoKHJ0OiBhbnkpID0+XG4gICAgICAgICAgICBFZmZlY3Quc3luYygoKSA9PiB7XG4gICAgICAgICAgICAgIHJ1bnRpbWVCeVRhZy5zZXQodGFnLCBydClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgIH0pXG5cbiAgICBjb25zdCBub2RlczogQXJyYXk8YW55PiA9IFtdXG4gICAgY29uc3QgaXJFZGdlczogQXJyYXk8YW55PiA9IFtdXG4gICAgY29uc3QgcmVhZE5vZGVzOiBBcnJheTxhbnk+ID0gW11cbiAgICBjb25zdCBkaXNwYXRjaE5vZGVzOiBBcnJheTxhbnk+ID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9ybWFsaXplZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgZWRnZSA9IG5vcm1hbGl6ZWRbaV1cbiAgICAgIGNvbnN0IGZyb21SdW50aW1lID0geWllbGQqIHJlc29sdmVSdW50aW1lKGVkZ2UuZnJvbS50YWcpXG4gICAgICBjb25zdCB0b1J1bnRpbWUgPSB5aWVsZCogcmVzb2x2ZVJ1bnRpbWUoZWRnZS50by50YWcpXG5cbiAgICAgIGNvbnN0IGZyb21LZXkgPSBgJHtmcm9tUnVudGltZS5tb2R1bGVJZH06OiR7ZnJvbVJ1bnRpbWUuaW5zdGFuY2VJZH1gXG4gICAgICBjb25zdCByZWFkTm9kZUlkID0gYHIke2l9YFxuICAgICAgY29uc3QgZGlzcGF0Y2hOb2RlSWQgPSBgZCR7aX1gXG5cbiAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICBpZDogcmVhZE5vZGVJZCxcbiAgICAgICAga2luZDogJ3JlYWRRdWVyeScsXG4gICAgICAgIG1vZHVsZUlkOiBmcm9tUnVudGltZS5tb2R1bGVJZCxcbiAgICAgICAgaW5zdGFuY2VLZXk6IGZyb21SdW50aW1lLmluc3RhbmNlSWQsXG4gICAgICAgIHJlYWRRdWVyeTogZWRnZS5mcm9tLnJlYWRRdWVyeS5zdGF0aWNJcixcbiAgICAgIH0pXG4gICAgICBub2Rlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGRpc3BhdGNoTm9kZUlkLFxuICAgICAgICBraW5kOiAnZGlzcGF0Y2gnLFxuICAgICAgICBtb2R1bGVJZDogdG9SdW50aW1lLm1vZHVsZUlkLFxuICAgICAgICBpbnN0YW5jZUtleTogdG9SdW50aW1lLmluc3RhbmNlSWQsXG4gICAgICAgIGFjdGlvblRhZzogZWRnZS50by5hY3Rpb25UYWcsXG4gICAgICB9KVxuXG4gICAgICBpckVkZ2VzLnB1c2goeyBmcm9tOiByZWFkTm9kZUlkLCB0bzogZGlzcGF0Y2hOb2RlSWQgfSlcblxuICAgICAgcmVhZE5vZGVzLnB1c2goeyBub2RlSWQ6IHJlYWROb2RlSWQsIG1vZHVsZUluc3RhbmNlS2V5OiBmcm9tS2V5LCByZWFkUXVlcnk6IGVkZ2UuZnJvbS5yZWFkUXVlcnkgfSlcbiAgICAgIGRpc3BhdGNoTm9kZXMucHVzaCh7XG4gICAgICAgIG5vZGVJZDogZGlzcGF0Y2hOb2RlSWQsXG4gICAgICAgIGRpc3BhdGNoOiAocGF5bG9hZDogdW5rbm93bikgPT5cbiAgICAgICAgICAodG9SdW50aW1lLmRpc3BhdGNoKHsgX3RhZzogZWRnZS50by5hY3Rpb25UYWcsIHBheWxvYWQgfSBhcyBhbnkpIGFzIGFueSkucGlwZShFZmZlY3QuYXNWb2lkKSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgaXI6IERlY2xhcmF0aXZlTGlua0lSID0ge1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIG5vZGVzLFxuICAgICAgZWRnZXM6IGlyRWRnZXMsXG4gICAgfVxuXG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0ge1xuICAgICAgbGlua0lkLFxuICAgICAgaXIsXG4gICAgICByZWFkTm9kZXMsXG4gICAgICBkaXNwYXRjaE5vZGVzLFxuICAgIH0gYXMgY29uc3RcblxuICAgIGNvbnN0IHVucmVnaXN0ZXIgPSBydW50aW1lLnJlZ2lzdGVyRGVjbGFyYXRpdmVMaW5rKHJlZ2lzdHJhdGlvbiBhcyBhbnkpXG5cbiAgICBpZiAoY29sbGVjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHBvcnRlZCA9IGV4cG9ydERlY2xhcmF0aXZlTGlua0lyKHsgbGlua0lkLCBpciB9KVxuICAgICAgZm9yIChjb25zdCBjb2xsZWN0b3Igb2YgY29sbGVjdG9ycykge1xuICAgICAgICBjb2xsZWN0b3IucmVnaXN0ZXIoZXhwb3J0ZWQgYXMgYW55KVxuICAgICAgfVxuICAgIH1cblxuICAgIHlpZWxkKiBFZmZlY3QuYWRkRmluYWxpemVyKCgpID0+XG4gICAgICBFZmZlY3Quc3luYygoKSA9PiB7XG4gICAgICAgIHVucmVnaXN0ZXIoKVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgeWllbGQqIEVmZmVjdC5uZXZlclxuICB9KVxuXG4gIGNvbnN0IGRlZmluaXRpb246IFByb2Nlc3NEZWZpbml0aW9uID0ge1xuICAgIHByb2Nlc3NJZDogYGRsaW5rOiR7bGlua0lkfWAsXG4gICAgcmVxdWlyZXM6IEFycmF5LmZyb20ocmVxdWlyZXMpLFxuICAgIHRyaWdnZXJzOiBERUZBVUxUX1RSSUdHRVJTLFxuICAgIGNvbmN1cnJlbmN5OiB7IG1vZGU6ICdsYXRlc3QnIH0sXG4gICAgZXJyb3JQb2xpY3k6IHsgbW9kZTogJ2ZhaWxTdG9wJyB9LFxuICAgIGRpYWdub3N0aWNzTGV2ZWw6ICdvZmYnLFxuICB9XG5cbiAgcmV0dXJuIE1ldGEuYXR0YWNoTWV0YShwcm9ncmFtLCB7XG4gICAgZGVmaW5pdGlvbixcbiAgICBraW5kOiAnZGVjbGFyYXRpdmVMaW5rJyxcbiAgfSkgYXMgUHJvY2Vzc0VmZmVjdDxuZXZlciwgbmV2ZXI+XG59XG4iLCAiaW1wb3J0IHsgZm52MWEzMiwgc3RhYmxlU3RyaW5naWZ5IH0gZnJvbSAnLi4vLi4vZGlnZXN0LmpzJ1xuaW1wb3J0IHR5cGUgeyBSZWFkUXVlcnlTdGF0aWNJciB9IGZyb20gJy4vUmVhZFF1ZXJ5LmpzJ1xuXG5leHBvcnQgdHlwZSBEZWNsYXJhdGl2ZUxpbmtOb2RlSWQgPSBzdHJpbmdcblxuZXhwb3J0IHR5cGUgRGVjbGFyYXRpdmVMaW5rTm9kZSA9XG4gIHwge1xuICAgICAgcmVhZG9ubHkgaWQ6IERlY2xhcmF0aXZlTGlua05vZGVJZFxuICAgICAgcmVhZG9ubHkga2luZDogJ3JlYWRRdWVyeSdcbiAgICAgIHJlYWRvbmx5IG1vZHVsZUlkOiBzdHJpbmdcbiAgICAgIHJlYWRvbmx5IGluc3RhbmNlS2V5Pzogc3RyaW5nXG4gICAgICAvKiogTVVTVCByZXVzZSBgUmVhZFF1ZXJ5U3RhdGljSXJgIChubyBwYXJhbGxlbCBzZWxlY3Rvci1saWtlIElSKS4gKi9cbiAgICAgIHJlYWRvbmx5IHJlYWRRdWVyeTogUmVhZFF1ZXJ5U3RhdGljSXJcbiAgICB9XG4gIHwge1xuICAgICAgcmVhZG9ubHkgaWQ6IERlY2xhcmF0aXZlTGlua05vZGVJZFxuICAgICAgcmVhZG9ubHkga2luZDogJ2Rpc3BhdGNoJ1xuICAgICAgcmVhZG9ubHkgbW9kdWxlSWQ6IHN0cmluZ1xuICAgICAgcmVhZG9ubHkgaW5zdGFuY2VLZXk/OiBzdHJpbmdcbiAgICAgIHJlYWRvbmx5IGFjdGlvblRhZzogc3RyaW5nXG4gICAgfVxuXG5leHBvcnQgdHlwZSBEZWNsYXJhdGl2ZUxpbmtFZGdlID0ge1xuICByZWFkb25seSBmcm9tOiBEZWNsYXJhdGl2ZUxpbmtOb2RlSWRcbiAgcmVhZG9ubHkgdG86IERlY2xhcmF0aXZlTGlua05vZGVJZFxufVxuXG4vKipcbiAqIERlY2xhcmF0aXZlTGlua0lSICh2MSk6XG4gKiAtIEpTT04gc2VyaWFsaXphYmxlLCBJUi1yZWNvZ25pemFibGUgY3Jvc3MtbW9kdWxlIGRlcGVuZGVuY3kgZ3JhcGguXG4gKiAtIFJlYWQgc2lkZTogc3RhdGljIFJlYWRRdWVyeSBvbmx5IChtdXN0IGluY2x1ZGUgcmVhZHNEaWdlc3QsIG5vIGZhbGxiYWNrUmVhc29uKS5cbiAqIC0gV3JpdGUgc2lkZTogZGlzcGF0Y2ggb25seSAobm8gZGlyZWN0IHN0YXRlIHdyaXRlcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVjbGFyYXRpdmVMaW5rSVIge1xuICByZWFkb25seSB2ZXJzaW9uOiAxXG4gIHJlYWRvbmx5IG5vZGVzOiBSZWFkb25seUFycmF5PERlY2xhcmF0aXZlTGlua05vZGU+XG4gIHJlYWRvbmx5IGVkZ2VzOiBSZWFkb25seUFycmF5PERlY2xhcmF0aXZlTGlua0VkZ2U+XG59XG5cbmV4cG9ydCBjb25zdCBnZXREZWNsYXJhdGl2ZUxpbmtJckRpZ2VzdCA9IChpcjogRGVjbGFyYXRpdmVMaW5rSVIpOiBzdHJpbmcgPT5cbiAgYGRsaW5rX2lyX3YxOiR7Zm52MWEzMihzdGFibGVTdHJpbmdpZnkoaXIpKX1gXG5cbi8qKlxuICogRXhwb3J0IGVudmVsb3BlIGNvbXBhdGlibGUgd2l0aCB0aGUgQ29udmVyZ2VTdGF0aWNJckNvbGxlY3RvciBidXM6XG4gKiAtIEV2aWRlbmNlQ29sbGVjdG9yIGluZGV4ZXMgYnkgYHN0YXRpY0lyRGlnZXN0YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWNsYXJhdGl2ZUxpbmtJckV4cG9ydCB7XG4gIHJlYWRvbmx5IHN0YXRpY0lyRGlnZXN0OiBzdHJpbmdcbiAgcmVhZG9ubHkgbW9kdWxlSWQ6IHN0cmluZ1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmdcbiAgcmVhZG9ubHkga2luZDogJ2RlY2xhcmF0aXZlTGlua0lyJ1xuICByZWFkb25seSBpcjogRGVjbGFyYXRpdmVMaW5rSVJcbn1cblxuZXhwb3J0IGNvbnN0IGV4cG9ydERlY2xhcmF0aXZlTGlua0lyID0gKGFyZ3M6IHsgcmVhZG9ubHkgbGlua0lkOiBzdHJpbmc7IHJlYWRvbmx5IGlyOiBEZWNsYXJhdGl2ZUxpbmtJUiB9KTogRGVjbGFyYXRpdmVMaW5rSXJFeHBvcnQgPT4gKHtcbiAgc3RhdGljSXJEaWdlc3Q6IGdldERlY2xhcmF0aXZlTGlua0lyRGlnZXN0KGFyZ3MuaXIpLFxuICBtb2R1bGVJZDogYGxpbms6JHthcmdzLmxpbmtJZH1gLFxuICBpbnN0YW5jZUlkOiAncnVudGltZScsXG4gIGtpbmQ6ICdkZWNsYXJhdGl2ZUxpbmtJcicsXG4gIGlyOiBhcmdzLmlyLFxufSlcblxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFFBQVEsZ0JBQWdCOzs7QUN1QzFCLElBQU0sNkJBQTZCLENBQUMsT0FDekMsZUFBZSxRQUFRLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQWN0QyxJQUFNLDBCQUEwQixDQUFDLFVBQWdHO0FBQUEsRUFDdEksZ0JBQWdCLDJCQUEyQixLQUFLLEVBQUU7QUFBQSxFQUNsRCxVQUFVLFFBQVEsS0FBSyxNQUFNO0FBQUEsRUFDN0IsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sSUFBSSxLQUFLO0FBQ1g7OztBRGxCQSxJQUFNLG1CQUFzRCxDQUFDLEVBQUUsTUFBTSxpQkFBaUIsZUFBZSxlQUFlLENBQUM7QUFFckgsSUFBTSxzQkFBc0IsQ0FBQyxVQUFvRDtBQUMvRSxRQUFNLE9BQU8sT0FBTyxVQUFVLFdBQVksRUFBRSxXQUFXLE1BQU0sSUFBOEM7QUFFM0csUUFBTSxZQUFZLEtBQUs7QUFDdkIsTUFBSSxPQUFPLGNBQWMsWUFBWSxVQUFVLFdBQVcsR0FBRztBQUMzRCxVQUFNLElBQUksTUFBTSxxREFB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
|